{ "info": { "author": "Chi Chen", "author_email": "chc273@eng.ucsd.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering :: Chemistry", "Topic :: Scientific/Engineering :: Information Analysis", "Topic :: Scientific/Engineering :: Physics", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![CircleCI](https://circleci.com/gh/materialsvirtuallab/megnet.svg?style=svg)](https://circleci.com/gh/materialsvirtuallab/megnet)\n[![Coverage Status](https://coveralls.io/repos/github/materialsvirtuallab/megnet/badge.svg?branch=master)](https://coveralls.io/github/materialsvirtuallab/megnet?branch=master)\n\n# Table of Contents\n* [Introduction](#introduction)\n* [MEGNet Framework](#megnet-framework)\n* [Installation](#installation)\n* [Usage](#usage)\n* [Datasets](#datasets)\n* [Implementation details](#implementation-details)\n* [Computing requirements](#computing-requirements)\n* [Known limitations](#limitations)\n* [Contributors](#contributors)\n* [References](#references)\n\n\n# Introduction\n\nThis repository represents the efforts of the [Materials Virtual Lab](http://www.materialsvirtuallab.org) \nin developing graph networks for machine learning in materials science. It is a \nwork in progress and the models we have developed thus far are only based on \nour best efforts. We welcome efforts by anyone to build and test models using \nour code and data, all of which are publicly available. Any comments or \nsuggestions are also welcome (please post on the Github Issues page.)\n\nA web app using our pre-trained MEGNet models for property prediction in \ncrystals is available at http://megnet.crystals.ai.\n\n\n# MEGNet framework\n\nThe MatErials Graph Network (MEGNet) is an implementation of DeepMind's graph \nnetworks[1] for universal machine learning in materials science. We have \ndemonstrated its success in achieving very low prediction errors in a broad \narray of properties in both molecules and crystals (see \n[\"Graph Networks as a Universal Machine Learning Framework for Molecules and Crystals\"](https://doi.org/10.1021/acs.chemmater.9b01294)[2]).\n\nBriefly, Figure 1 shows the sequential update steps of the graph network, \nwhereby bonds, atoms, and global state attributes are updated using information\nfrom each other, generating an output graph.\n\n![GraphModel diagram](resources/model_diagram_small.jpg)\n
Figure 1. The graph network update function.
\n\nFigure 2 shows the overall schematic of the MEGNet. Each graph network module \nis preceded by two multi-layer perceptrons (known as Dense layers in Keras \nterminology), constituting a MEGNet block. Multiple MEGNet blocks can be \nstacked, allowing for information flow across greater spatial distances. The \nnumber of blocks required depend on the range of interactions necessary to \npredict a target property. In the final step, a `set2set` is used to map the \noutput to a scalar/vector property.\n\n![GraphModel architecture](resources/model_arch_small.jpg)\n
Figure 2. Schematic of MatErials Graph Network.
\n\n\n# Installation\n\nMegnet can be installed via pip for the latest stable version:\n\n```bash\npip install megnet\n```\n\nFor the latest dev version, please clone this repo and install using:\n\n```bash\npython setup.py develop\n```\n\n\n# Usage\n\nOur current implementation supports a variety of use cases for users with \ndifferent requirements and experience with deep learning. Please also visit \nthe [notebooks directory](notebooks) for Jupyter notebooks with more detailed code examples.\n\n## Using pre-built models\n\nIn our work, we have already built MEGNet models for the QM9 data set and \nMaterials Project dataset. These models are provided as serialized HDF5+JSON \nfiles. Users who are purely interested in using these models for prediction \ncan quickly load and use them via the convenient `MEGNetModel.from_file`\nmethod. These models are available in the `mvl_models` folder of this repo. \nThe following models are available:\n\n* QM9 molecule data:\n - HOMO: Highest occupied molecular orbital energy\n - LUMO: Lowest unoccupied molecular orbital energy\n - Gap: energy gap\n - ZPVE: zero point vibrational energy\n - \u00b5: dipole moment\n - \u03b1: isotropic polarizability\n - \\: electronic spatial extent\n - U0: internal energy at 0 K\n - U: internal energy at 298 K\n - H: enthalpy at 298 K\n - G: Gibbs free energy at 298 K\n - Cv: heat capacity at 298 K\n - \u03c91: highest vibrational frequency.\n* Materials Project data:\n - Formation energy from the elements\n - Band gap\n - Log 10 of Bulk Modulus (K)\n - Log 10 of Shear Modulus (G)\n\nThe MAEs on the various models are given below:\n\n### Performance of QM9 MEGNet-Simple models\n\n| Property | Units | MAE |\n|----------|------------|-------|\n| HOMO | eV | 0.043 |\n| LUMO | eV | 0.044 |\n| Gap | eV | 0.066 |\n| ZPVE | meV | 1.43 |\n| \u00b5 | Debye | 0.05 |\n| \u03b1 | Bohr^3 | 0.081 |\n| \\ | Bohr^2 | 0.302 |\n| U0 | eV | 0.012 |\n| U | eV | 0.013 |\n| H | eV | 0.012 |\n| G | eV | 0.012 |\n| Cv | cal/(molK) | 0.029 |\n| \u03c91 | cm^-1 | 1.18 |\n\n### Performance of MP-2018.6.1\n\n| Property | Units | MAE |\n|----------|------------|-------|\n| Ef | eV/atom | 0.028 |\n| Eg | eV | 0.33 |\n| K_VRH | log10(GPa) | 0.050 |\n| G_VRH | log10(GPa) | 0.079 |\n\n### Performance of MP-2019.4.1\n\n| Property | Units | MAE |\n|----------|------------|-------|\n| Ef | eV/atom | 0.026 |\n| Efermi | eV | 0.288 |\n\nNew models will be added as they are developed in the [mvl_models](mvl_models)\nfolder. Each folder contains a summary of model details and benchmarks. For\nthe initial models and bencharmks comparison to previous models, \nplease refer to [\"Graph Networks as a Universal Machine Learning Framework for Molecules and Crystals\"](https://doi.org/10.1021/acs.chemmater.9b01294)[2]. \n\nBelow is an example of crystal model usage:\n\n```python\nfrom megnet.utils.models import load_model\nfrom pymatgen import Structure, Lattice\n\n# load a model in megnet.utils.models.AVAILABLE_MODELS\nmodel = load_model(\"logK_MP_2018\") \n\n# We can construct a structure using pymatgen\nstructure = Structure(Lattice.cubic(3.167), \n ['Mo', 'Mo'], [[0, 0, 0], [0.5, 0.5, 0.5]])\n\n\n# Use the model to predict bulk modulus K. Note that the model is trained on\n# log10 K. So a conversion is necessary.\npredicted_K = 10 ** model.predict_structure(structure).ravel()\nprint('The predicted K for {} is {} GPa'.format(structure.formula, predicted_K[0]))\n\n```\nA full example is in [notebooks/crystal_example.ipynb](notebooks/crystal_example.ipynb). \n\nFor molecular models, we have an example in \n[notebooks/qm9_pretrained.ipynb](notebooks/qm9_pretrained.ipynb). \nWe support prediction directly from a pymatgen molecule object. With a few more\nlines of code, the model can predict from `SMILES` representation of molecules,\nas shown in the example. It is also straightforward to load a `xyz` molecule \nfile with pymatgen and predict the properties using the models. However, the \nusers are generally not advised to use the `qm9` molecule models for other \nmolecules outside the `qm9` datasets, since the training data coverage is \nlimited.\n\nBelow is an example of predicting the \"HOMO\" of a smiles representation\n\n```python\nfrom megnet.utils.molecule import get_pmg_mol_from_smiles\nfrom megnet.models import MEGNetModel\n\n# same model API for molecule and crystals\nmodel = MEGNetModel.from_file('mvl_models/qm9-2018.6.1/HOMO.hdf5')\n# Need to convert SMILES into pymatgen Molecule\nmol = get_pmg_mol_from_smiles(\"C\")\nmodel.predict_structure(mol)\n```\n\n## Training a new MEGNetModel from structures\n\nFor users who wish to build a new model from a set of crystal structures with \ncorresponding properties, there is a convenient `MEGNetModel` class for setting\nup and training the model. By default, the number of MEGNet blocks is 3 and the\natomic number Z is used as the only node feature (with embedding).\n\n```python\nfrom megnet.models import MEGNetModel\nfrom megnet.data.graph import GaussianDistance\nfrom megnet.data.crystal import CrystalGraph\nimport numpy as np\n\nnfeat_bond = 10\nnfeat_global = 2\nr_cutoff = 5\ngaussian_centers = np.linspace(0, r_cutoff + 1, nfeat_bond)\ngaussian_width = 0.5\ndistance_converter = GaussianDistance(gaussian_centers, gaussian_width)\ngraph_converter = CrystalGraph(bond_converter=distance_converter, cutoff=r_cutoff)\nmodel = MEGNetModel(nfeat_bond, nfeat_global, \n graph_converter=graph_converter)\n\n# Model training\n# Here, `structures` is a list of pymatgen Structure objects.\n# `targets` is a corresponding list of properties.\nmodel.train(structures, targets, epochs=10)\n\n# Predict the property of a new structure\npred_target = model.predict_structure(new_structure)\n```\nNote that for realistic models, the `nfeat_bond` can be set to 100 and `epochs` can be 1000. \nIn some cases, some structures within the training pool may not be valid (containing isolated atoms),\nthen one needs to use `train_from_graphs` method by training only on the valid graphs. \n\nFollowing the previous example, \n```python\nmodel = MEGNetModel(nfeat_bond, nfeat_global, graph_converter=graph_converter)\ngraphs_valid = []\ntargets_valid = []\nstructures_invalid = []\nfor s, p in zip(structures, targets):\n try:\n graph = model.graph_converter.convert(s)\n graphs_valid.append(graph)\n targets_valid.append(p)\n except:\n structures_invalid.append(s)\n\n# train the model using valid graphs and targets\nmodel.train_from_graphs(graphs_valid, targets_valid)\n```\nFor model details and benchmarks, please refer to [\"Graph Networks as a Universal Machine Learning Framework for Molecules and Crystals\"](https://doi.org/10.1021/acs.chemmater.9b01294)[2]\n\n### Pre-trained elemental embeddings\n\nA key finding of our work is that element embeddings from trained formation \nenergy models encode useful chemical information that can be transferred \nlearned to develop models with smaller datasets (e.g. elastic constants, \nband gaps), with better converegence and lower errors. These embeddings are \nalso potentially useful in developing other ML models and applications. These \nembeddings have been made available via the following code:\n\n```python\nfrom megnet.data.crystal import get_elemental_embeddings\n\nel_embeddings = get_elemental_embeddings()\n```\n\nAn example of transfer learning using the elemental embedding from formation \nenergy to other models, please check [notebooks/transfer_learning.ipynb](notebooks/transfer_learning.ipynb).\n\n## Customized Graph Network Models\n\nFor users who are familiar with deep learning and Keras and wish to build \ncustomized graph network based models, the following example outlines how a \ncustom model can be constructed from `MEGNetLayer`, which is essentially our \nimplementation of the graph network using neural networks:\n\n```python\nfrom keras.layers import Input, Dense\nfrom keras.models import Model\nfrom megnet.layers import MEGNetLayer, Set2Set\n\nn_atom_feature= 20\nn_bond_feature = 10\nn_global_feature = 2\n\n# Define model inputs\nint32 = 'int32'\nx1 = Input(shape=(None, n_atom_feature)) # atom feature placeholder\nx2 = Input(shape=(None, n_bond_feature)) # bond feature placeholder\nx3 = Input(shape=(None, n_global_feature)) # global feature placeholder\nx4 = Input(shape=(None,), dtype=int32) # bond index1 placeholder\nx5 = Input(shape=(None,), dtype=int32) # bond index2 placeholder\nx6 = Input(shape=(None,), dtype=int32) # atom_ind placeholder\nx7 = Input(shape=(None,), dtype=int32) # bond_ind placeholder\nxs = [x1, x2, x3, x4, x5, x6, x7]\n\n# Pass the inputs to the MEGNetLayer layer\n# Here the list are the hidden units + the output unit, \n# you can have others like [n1] or [n1, n2, n3 ...] if you want. \nout = MEGNetLayer([32, 16], [32, 16], [32, 16], pool_method='mean', activation='relu')(xs)\n\n# the output is a tuple of new graphs V, E and u\n# Since u is a per-structure quantity, \n# we can directly use it to predict per-structure property\nout = Dense(1)(out[2])\n\n# Set up the model and compile it!\nmodel = Model(inputs=xs, outputs=out)\nmodel.compile(loss='mse', optimizer='adam')\n```\n\nWith less than 20 lines of code, you have built a graph network model that is \nready for materials property prediction!\n\n\n# Implementation details\n\nGraph networks[1] are a superclass of graph-based neural networks. There are a\nfew innovations compared to conventional graph-based neural neworks. \n\n* Global state attributes are added to the node/edge graph representation. \n These features work as a portal for structure-independent features such as \n temperature, pressure etc and also are an information exchange placeholder \n that facilitates information passing across longer spatial domains. \n* The update function involves the message interchange among all three levels \n of information, i.e., the node, bond and state information. It is therefore a\n highly general model.\n\nThe `MEGNet` model implements two major components: (a) the `graph network`\nlayer and (b) the `set2set` layer.[3] The layers are based on \n[keras](https://keras.io/) API and is thus compatible with other keras modules. \n\nDifferent crystals/molecules have different number of atoms. Therefore it is \nimpossible to use data batches without padding the structures to make them \nuniform in atom number. `MEGNet` takes a different approach. Instead of making \nstructure batches, we assemble many structures into one giant structure, and \nthis structure has a vector output with each entry being the target value for \nthe corresponding structure. Therefore, the batch number is always 1. \n\nAssuming a structure has N atoms and M bonds, a structure graph is represented \nas **V** (nodes/vertices, representing atoms), **E** (edges, representing bonds)\nand **u** (global state vector). **V** is a N\\*Nv matrix. **E** comprises of a \nM\\*Nm matrix for the bond attributes and index pairs (rk, sk) for atoms \nconnected by each bond. **u** is a vector with length Nu. We vectorize rk and \nsk to form `index1` and `index2`, both are vectors with length M. In summary, \nthe graph is a data structure with **V** (N\\*Nv), **E** (M\\*Nm), **u** \n(Nu, ), `index1` (M, ) and `index2` (M, ). \n\nWe then assemble several structures together. For **V**, we directly append the\natomic attributes from all structures, forming a matrix (1\\*N'\\*Nv), where \nN' > N. To indicate the belongingness of each atom attribute vector, we use a \n`atom_ind` vector. For example if `N'=5` and the first 3 atoms belongs to the \nfirst structure and the remainings the second structure, our `atom_ind` vector \nwould be `[0, 0, 0, 1, 1]`. For the bond attribute, we perform the same \nappending method, and use `bond_ind` vector to indicate the bond belongingness. \nFor `index1` and `index2`, we need to shift the integer values. For example, \nif `index1` and `index2` are `[0, 0, 1, 1]` and `[1, 1, 0, 0]` for structure 1\nand are `[0, 0, 1, 1]` and `[1, 1, 0, 0]` for structure two. The assembled\nindices are `[0, 0, 1, 1, 2, 2, 3, 3]` and `[1, 1, 0, 0, 3, 3, 2, 2]`. Finally,\n**u** expands a new dimension to take into account of the number of structures,\nand becomes a 1\\*Ng\\*Nu tensor, where Ng is the number of structures. `1` is \nadded as the first dimension of all inputs because we fixed the batch size to\nbe 1 (1 giant graph) to comply the keras inputs requirements. \n\nIn summary the inputs for the model is **V** (1\\*N'\\*Nv), **E** (1\\*M'\\*Nm), \n**u** (1\\*Ng\\*Nu), `index1` (1\\*M'), `index2` (1\\*M'), `atom_ind` (1\\*N'), and\n`bond_ind` (1\\*M'). For Z-only atomic features, **V** is a (1\\*N') vector.\n\n\n# Data sets\n\nTo aid others in reproducing (and improving on) our results, we have provided \nour MP-crystals-2018.6.1 crystal data set via [figshare](https://figshare.com/articles/Graphs_of_materials_project/7451351)[4]. \nThe MP-crystals-2018.6.1 data set comprises the DFT-computed energies and\nband gaps of 69,640 crystals from the [Materials Project](http://www.materialsproject.org)\nobtained via the [Python Materials Genomics (pymatgen)](http://pymatgen.org)\ninterface to the Materials Application Programming Interface (API)[5] on \nJune 1, 2018. The crystal graphs were constructed using a radius cut-o\ufb00 of 4 \nangstroms. Using this cut-o\ufb00, 69,239 crystals do not form isolated atoms and \nare used in the models. A subset of 5,830 structures have elasticity data that \ndo not have calculation warnings and will be used for elasticity models.\n\nThe molecule data set used in this work is the QM9 data set 30 processed by\nFaber et al.[6] It contains the B3LYP/6-31G(2df,p)-level DFT calculation\nresults on 130,462 small organic molecules containing up to 9 heavy atoms.\n\n\n# Computing requirements\n\nTraining: It should be noted that training MEGNet models, like other deep \nlearning models, is fairly computationally intensive with large datasets. In \nour work, we use dedicated GPU resources to train MEGNet models with 100,000\ncrystals/molecules. It is recommended that you do the same.\n\nPrediction: Once trained, prediction using MEGNet models are fairly cheap. \nFor example, the http://megnet.crystals.ai web app runs on a single hobby dyno\non Heroku and provides the prediction for any crystal within seconds.\n\n\n# Known limitations\n\n- `isolated atoms` error. This error occurs when using the given cutoff in the model (4A for\n2018 models and 5A for 2019 models), the crystal structure contains isolated atoms, i.e., \nno neighboring atoms are within the distance of `cutoff`. Most of the time, we can just \ndiscard the structure, since we found that those structures tend to have a high energy above \nhull (less stable). If you think this error is an essential issue for a particular problem, \nplease feel free to email us and we will consider releasing a new model with increased cutoff. \n\n\n# Contributors\n1. Chi Chen from the Materials Virtual Lab is the lead developer of MEGNet.\n2. Shyue Ping Ong and other members of the Materials Virtual Lab contributes to general improvements\n of MEGNet and its applications.\n3. Logan Ward has made extensive contributions, especially to the development of molecular graph \n portions of MEGNet.\n\n\n# References\n\n1. Battaglia, P. W.; Hamrick, J. B.; Bapst, V.; Sanchez-Gonzalez, A.; \n Zambaldi, V.; Malinowski, M.; Tacchetti, A.; Raposo, D.; Santoro, A.; \n Faulkner, R.; et al. Relational inductive biases, deep learning, and graph \n networks. 2018, 1\u201338. [arXiv:1806.01261](https://arxiv.org/abs/1806.01261)\n2. Chen, C.; Ye, W.; Zuo, Y.; Zheng, C.; Ong, S. P. Graph Networks as a \n Universal Machine Learning Framework for Molecules and Crystals. Chemistry \n of Materials 2019, 31(9), 3564-3572. \n [doi:10.1021/acs.chemmater.9b01294](https://doi.org/10.1021/acs.chemmater.9b01294)\n3. Vinyals, O.; Bengio, S.; Kudlur, M. Order Matters: Sequence to sequence for \n sets. 2015, arXiv preprint. [arXiv:1511.06391](https://arxiv.org/abs/1511.06391)\n4. https://figshare.com/articles/Graphs_of_materials_project/7451351\n5. Ong, S. P.; Cholia, S.; Jain, A.; Brafman, M.; Gunter, D.; Ceder, G.; \n Persson, K. A. The Materials Application Programming Interface (API): A \n simple, flexible and efficient API for materials data based on\n REpresentational State Transfer (REST) principles. Comput. Mater. Sci. 2015, \n 97, 209\u2013215 DOI: [10.1016/j.commatsci.2014.10.037](http://dx.doi.org/10.1016/j.commatsci.2014.10.037).\n6. Faber, F. A.; Hutchison, L.; Huang, B.; Gilmer, J.; Schoenholz, S. S.; \n Dahl, G. E.; Vinyals, O.; Kearnes, S.; Riley, P. F.; von Lilienfeld, O. A. \n Prediction errors of molecular machine learning models lower than hybrid DFT \n error. Journal of Chemical Theory and Computation 2017, 13, 5255\u20135264. \n DOI: [10.1021/acs.jctc.7b00577](http://dx.doi.org/10.1021/acs.jctc.7b00577)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/materialsvirtuallab/megnet", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "materials,science,machine,learning,deep,graph,networks,neural", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "megnet", "package_url": "https://pypi.org/project/megnet/", "platform": "", "project_url": "https://pypi.org/project/megnet/", "project_urls": { "Download": "https://github.com/materialsvirtuallab/megnet" }, "release_url": "https://pypi.org/project/megnet/1.0.2/", "requires_dist": [ "keras (>=2.3.0)", "numpy", "tensorflow (>=2.0.0)", "scikit-learn", "pymatgen (>=2019.10.4)", "monty", "h5py ; extra == 'model_saving'", "openbabel ; extra == 'molecules'", "rdkit ; extra == 'molecules'" ], "requires_python": "", "summary": "MatErials Graph Networks for machine learning of molecules and crystals.", "version": "1.0.2" }, "last_serial": 5973491, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "79213cb798f016204c6a41c0468bce32", "sha256": "9ad6cde7a6d6016b963be7cac4cb1c165213d9bc9e1f74335c95cc110206e064" }, "downloads": -1, "filename": "megnet-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "79213cb798f016204c6a41c0468bce32", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2165, "upload_time": "2018-12-13T06:11:20", "url": "https://files.pythonhosted.org/packages/b2/54/dcc9c161b8317da8c342479f7bd95223aeb502c383fdbc186fe0ed280dda/megnet-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9533637802611a8be143b1a29e7a948d", "sha256": "77545f0e23c24a3e86470c0040556ae794c8c576348c0d89c079de9a54dd8e5a" }, "downloads": -1, "filename": "megnet-0.0.1.tar.gz", "has_sig": false, "md5_digest": "9533637802611a8be143b1a29e7a948d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4806, "upload_time": "2018-12-13T06:11:22", "url": "https://files.pythonhosted.org/packages/49/ef/321467027e1465989f20436bfc151c491480364e930eb6a06f5f38830ff4/megnet-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "0834b0e3b7623b5e13dc8e1f5bbc51f3", "sha256": "766bfd2661e345e72f384248bb3856af0bcd40c03a3a509e1aa90a3784a9def2" }, "downloads": -1, "filename": "megnet-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0834b0e3b7623b5e13dc8e1f5bbc51f3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6197, "upload_time": "2019-02-08T21:19:06", "url": "https://files.pythonhosted.org/packages/fc/4b/7f8eeac746b4d9616e0e8c6b558440eb139658388e2b733885a307eab471/megnet-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b31fbda445962112f2b859d5cd4f8d8f", "sha256": "fc5662750620a3b8bb1f2c25553f5cc641ae12b80c0726fa9220e215a52f1a7b" }, "downloads": -1, "filename": "megnet-0.0.2.tar.gz", "has_sig": false, "md5_digest": "b31fbda445962112f2b859d5cd4f8d8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40772, "upload_time": "2019-02-08T21:19:09", "url": "https://files.pythonhosted.org/packages/ce/a4/d71ff9d10169b906049a749ec7344429fb061ed8891ed76920ec1921af66/megnet-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "96b5c2a156bf1258e207de3808fd55c8", "sha256": "6555c9ef4cd3abebeea6d3aa2215a84b9bba4fb2ca6e88aa58e1283090e40577" }, "downloads": -1, "filename": "megnet-0.0.3.tar.gz", "has_sig": false, "md5_digest": "96b5c2a156bf1258e207de3808fd55c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40942, "upload_time": "2019-02-08T22:39:29", "url": "https://files.pythonhosted.org/packages/c4/92/b1713c5befa77c7d5dda9c654ed41f8734d090f43d68c797c8697059e891/megnet-0.0.3.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "ddfda4e7c753414f57f8924342fa6a85", "sha256": "80370fd9c97e95203438536620e889d7c8c6d25108beaffcbb09d95aebf9afda" }, "downloads": -1, "filename": "megnet-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ddfda4e7c753414f57f8924342fa6a85", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6677, "upload_time": "2019-04-08T16:29:01", "url": "https://files.pythonhosted.org/packages/45/b3/8205080097db4bd1ba7e1e5f4e5057647c2352ea2d2c54d89b5cd753f815/megnet-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1e62dd84d3bb5b56552896af0390e186", "sha256": "5e3d0113547bc056fc07dd770c8dc343b7029138ed868c0df7ebfa72b5d91d23" }, "downloads": -1, "filename": "megnet-0.1.0.tar.gz", "has_sig": false, "md5_digest": "1e62dd84d3bb5b56552896af0390e186", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47016, "upload_time": "2019-04-08T16:29:03", "url": "https://files.pythonhosted.org/packages/4d/8c/0044c5498e9b1537bf1cf611199b296b5f864b352137a412d8010f9c1656/megnet-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7f47d9e969985e3c6a273dafd890dba6", "sha256": "b35c71ebb15c9ad3559fefe9e77fbee28685e19c640b4f53519675bd77768d1b" }, "downloads": -1, "filename": "megnet-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7f47d9e969985e3c6a273dafd890dba6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7614, "upload_time": "2019-04-08T22:00:18", "url": "https://files.pythonhosted.org/packages/97/90/252a5df53d41edbd5a5215e742352fd3b9027b4707d7d271fd52d789af4c/megnet-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92a6b5475a6a25015e56b985366eec95", "sha256": "ac1158d853222f9e01a33f369a1c241ae19fd9692b460dc68e04e78099f7ec40" }, "downloads": -1, "filename": "megnet-0.2.0.tar.gz", "has_sig": false, "md5_digest": "92a6b5475a6a25015e56b985366eec95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50086, "upload_time": "2019-04-08T22:00:19", "url": "https://files.pythonhosted.org/packages/57/06/d0e3e5d5f6053112cab4bebffa4bd018f037f9e67ac930b63f421b8089ea/megnet-0.2.0.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "6f87f4ad130bb0de3fa9e5e06b262fcb", "sha256": "d47b690e7c580295fe62468a1006307b51198c2024fa888a7bd5ae78195bb0d9" }, "downloads": -1, "filename": "megnet-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6f87f4ad130bb0de3fa9e5e06b262fcb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8320, "upload_time": "2019-05-01T23:41:28", "url": "https://files.pythonhosted.org/packages/ee/26/0090417bbfd4410fc3b717654f9ca506375e3adcc95768654dc80eaca6b0/megnet-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41f48ff85bc00cfed2ed70f79a3160e7", "sha256": "1c0633809f22849622a14767c7e914f9f7aa75bd9ec0d452260946c357d5654b" }, "downloads": -1, "filename": "megnet-0.2.2.tar.gz", "has_sig": false, "md5_digest": "41f48ff85bc00cfed2ed70f79a3160e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71424, "upload_time": "2019-05-01T23:41:30", "url": "https://files.pythonhosted.org/packages/c2/da/c6e791577dad6c94da07090e06009f2be4e823db78f7d8f5ffdb8f908f5c/megnet-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "70ab4f1e21a820723dad910dbd246887", "sha256": "5572b5d4bfb15b84ce25652b3ff595f60a3640c647353c0687b77867291fea89" }, "downloads": -1, "filename": "megnet-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "70ab4f1e21a820723dad910dbd246887", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40081, "upload_time": "2019-05-06T22:24:10", "url": "https://files.pythonhosted.org/packages/03/46/0e0b277f35fe171f1e0348375742f038013b694fcac1ad7f69dd0d006e89/megnet-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "35a4940544fca8c573ca8d755db34d63", "sha256": "4cffd30bc97fb8352c7206f21bacb853c5a055dafad5da5c2df8c697ec0a60d9" }, "downloads": -1, "filename": "megnet-0.3.0.tar.gz", "has_sig": false, "md5_digest": "35a4940544fca8c573ca8d755db34d63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72216, "upload_time": "2019-05-06T22:24:12", "url": "https://files.pythonhosted.org/packages/f1/24/d8a85ec56ff1802b2dc7ffc63d36e52640052f0ce51436f5a0af443e4514/megnet-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "d94c7f323f14fe707f1f188adcc6e144", "sha256": "ecdb137bf418e29cc9a9f21dc91ece2e583f80e45a67c370a7a4882f344017c1" }, "downloads": -1, "filename": "megnet-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d94c7f323f14fe707f1f188adcc6e144", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40412, "upload_time": "2019-05-07T13:41:35", "url": "https://files.pythonhosted.org/packages/59/43/8df32000c99e6d184ba3bbefc26bca14783d71bf65f20621a4745a9734f1/megnet-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "68e69581baadf54a174e7667fea21aeb", "sha256": "25ae7550a0deeff1223fec91cf3ab61760bc2b3d71dd81f999ea722651f97612" }, "downloads": -1, "filename": "megnet-0.3.1.tar.gz", "has_sig": false, "md5_digest": "68e69581baadf54a174e7667fea21aeb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72915, "upload_time": "2019-05-07T13:41:37", "url": "https://files.pythonhosted.org/packages/5b/b1/95d47b7a9b68a908470d12d4670298384c3d134be03f5cdda97bae16950c/megnet-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "39bc9090278ce94d0b34c90b38bc178e", "sha256": "1f60a8e7daf7054b666600a4f22363af3581ad17f822e44332758fc31ceacb1d" }, "downloads": -1, "filename": "megnet-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "39bc9090278ce94d0b34c90b38bc178e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43162, "upload_time": "2019-05-15T22:09:08", "url": "https://files.pythonhosted.org/packages/29/9a/ab17e91adb3795dc58a40ecc71b900647358c372a426a6af37ebec674f56/megnet-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f241f92e5d75b60dc2bfe3de7d4b626a", "sha256": "c1448b41b19590d14b58c23bde02335c5dc094bb65c712ba1f735b8c1dedfcdc" }, "downloads": -1, "filename": "megnet-0.3.2.tar.gz", "has_sig": false, "md5_digest": "f241f92e5d75b60dc2bfe3de7d4b626a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75491, "upload_time": "2019-05-15T22:09:10", "url": "https://files.pythonhosted.org/packages/c0/89/80854e2c1ddc6dd4db3c0c830eacc7e24ca84182589b15f3b73496397cc2/megnet-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "b78c3a78095fe18b4063045a0ac2f6c9", "sha256": "bd023de86897bedd3eefbe3ecec4a983cb0330dde46745493d097fdf258e53df" }, "downloads": -1, "filename": "megnet-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "b78c3a78095fe18b4063045a0ac2f6c9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 44703, "upload_time": "2019-05-21T00:10:01", "url": "https://files.pythonhosted.org/packages/5e/b2/ad6108bbb56a30af2a030cfdca43309c0fd23c8a95cc417fcc66b73b80ba/megnet-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7d723d66b38a4120baee913645986fb", "sha256": "673d13a716cdf260e32b20b3a74b7b9580154ac5897e788ab0fe4ed929874d54" }, "downloads": -1, "filename": "megnet-0.3.3.tar.gz", "has_sig": false, "md5_digest": "f7d723d66b38a4120baee913645986fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77979, "upload_time": "2019-05-21T00:10:04", "url": "https://files.pythonhosted.org/packages/5b/74/d4d482d23eb797e5583944999837b885a03ef67b5cba810578edbc959455/megnet-0.3.3.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "45e848957ce2fab1be4754a29417c3d2", "sha256": "dc97fba7a64cbe8ba39e631b9a7dbc51419db15e9bd6c926799baca754613cdb" }, "downloads": -1, "filename": "megnet-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "45e848957ce2fab1be4754a29417c3d2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55062, "upload_time": "2019-07-30T12:34:05", "url": "https://files.pythonhosted.org/packages/e9/c3/94d8e9ca8aaba79dab34b12e1201e6ef4818cb901721123db3e128caba0a/megnet-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd4c197991c3d24acf0f70dc66fc6d0a", "sha256": "540d356914d6169a4545d09a4e4bb2abc6dfc7bdb3a9ebe99d0c73e5c8592507" }, "downloads": -1, "filename": "megnet-0.3.5.tar.gz", "has_sig": false, "md5_digest": "dd4c197991c3d24acf0f70dc66fc6d0a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88352, "upload_time": "2019-07-30T12:34:07", "url": "https://files.pythonhosted.org/packages/40/85/ffb30e541bf988fc41edfe96fbd0c26edd746b19038fb80fb2003b33958b/megnet-0.3.5.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "905b46c82263700b15bdff66a196d27c", "sha256": "8ebcb182eed75a7fcef41d52c0cdf16c769b5f16a7c60a7c1f9a48eb0e5c9773" }, "downloads": -1, "filename": "megnet-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "905b46c82263700b15bdff66a196d27c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 57455, "upload_time": "2019-10-04T17:22:09", "url": "https://files.pythonhosted.org/packages/ee/0f/ce12e6050cebeeeea3ae1ccdace035f1a9518d93073e60b75694fcec9bb2/megnet-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "727843e86e108338c6a1db050a4674a0", "sha256": "9d86f5367f96290d6668b36623f8db6d6eceeed24a6ed2a3fee2cfba6a9c0f55" }, "downloads": -1, "filename": "megnet-1.0.0.tar.gz", "has_sig": false, "md5_digest": "727843e86e108338c6a1db050a4674a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90552, "upload_time": "2019-10-04T17:22:11", "url": "https://files.pythonhosted.org/packages/d9/61/5475d8c2df115e81317ea0d2a392c174e0d8389f8a7dbd6fe08a7c6cfd83/megnet-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "8b60acbf28926dd1c393ce98bbea4b3a", "sha256": "6c2923bfa8f4b677a7b46b34476760b061e649786bfdf242b4d4cbfb63fc7943" }, "downloads": -1, "filename": "megnet-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8b60acbf28926dd1c393ce98bbea4b3a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58289, "upload_time": "2019-10-06T22:27:37", "url": "https://files.pythonhosted.org/packages/97/50/a1acdf3dd0e6eae72cfa88796188761cf1c66b36685e7cec792855d71a4f/megnet-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "60b838ea1417c8b50006bb7dd1251b6b", "sha256": "08c1b4fc3bedeb39bb6ef310216a645b156274d444635dac25164c3096dbd0f1" }, "downloads": -1, "filename": "megnet-1.0.1.tar.gz", "has_sig": false, "md5_digest": "60b838ea1417c8b50006bb7dd1251b6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 91381, "upload_time": "2019-10-06T22:27:39", "url": "https://files.pythonhosted.org/packages/33/95/5de547ceeb0387f8a3b887188b3125fb4113b7e4636c6fd6225b99a6232d/megnet-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "4305d3846ddab73d9a8f0ed735cc93a2", "sha256": "c40ed3306175c8776b39c871c2589f55b0e29fec27cd569b6d0e5f67ab9a0053" }, "downloads": -1, "filename": "megnet-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "4305d3846ddab73d9a8f0ed735cc93a2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 59637, "upload_time": "2019-10-14T21:20:32", "url": "https://files.pythonhosted.org/packages/fe/52/c2ae7e11cff8d4b36304ea1dd0690b655214906d0c693d1d2761ca2fab7a/megnet-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "72658342d98dc5d23bbf50f9ab95caba", "sha256": "4817637a6a18ea6b9070c647300ec01fc8badaacbc95f60bb2886f593fb44636" }, "downloads": -1, "filename": "megnet-1.0.2.tar.gz", "has_sig": false, "md5_digest": "72658342d98dc5d23bbf50f9ab95caba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92296, "upload_time": "2019-10-14T21:20:37", "url": "https://files.pythonhosted.org/packages/0e/65/3ff7799292c7b4bc64d0b15b3e3dad1824b4bf4e0b0b2db49f47b7c91af6/megnet-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4305d3846ddab73d9a8f0ed735cc93a2", "sha256": "c40ed3306175c8776b39c871c2589f55b0e29fec27cd569b6d0e5f67ab9a0053" }, "downloads": -1, "filename": "megnet-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "4305d3846ddab73d9a8f0ed735cc93a2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 59637, "upload_time": "2019-10-14T21:20:32", "url": "https://files.pythonhosted.org/packages/fe/52/c2ae7e11cff8d4b36304ea1dd0690b655214906d0c693d1d2761ca2fab7a/megnet-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "72658342d98dc5d23bbf50f9ab95caba", "sha256": "4817637a6a18ea6b9070c647300ec01fc8badaacbc95f60bb2886f593fb44636" }, "downloads": -1, "filename": "megnet-1.0.2.tar.gz", "has_sig": false, "md5_digest": "72658342d98dc5d23bbf50f9ab95caba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92296, "upload_time": "2019-10-14T21:20:37", "url": "https://files.pythonhosted.org/packages/0e/65/3ff7799292c7b4bc64d0b15b3e3dad1824b4bf4e0b0b2db49f47b7c91af6/megnet-1.0.2.tar.gz" } ] }