{ "info": { "author": "Ameya Daigavane", "author_email": "ameya.d.98@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "## fmga\n**fmga** (**f**unction **m**aximization through **g**enetic **a**lgorithms) is a package that takes a genetic algorithm approach to maximization problem of non-convex objective functions in multiple dimensions.\n\nThe objective function doesn't have to be differentiable, or even continuous in the specified domain! \nThe idea is to sample an evolving population of points converging to the function maximum over many iterations.\n\nThe population of n-dimensional points undergoes random mutations - and is selected through elitism and ranking selection with selection weights inversely proportional to fitness and diversity ranks.\n\n**fmga** now supports multiprocessing through **[pathos](https://github.com/uqfoundation/pathos)** too! \n\n### Installation\nInstall with pip:\n```bash\npip install fmga\n```\nImport within the python script with:\n```python\nimport fmga\n```\n\n### Execution\nGiven a function on multiple variables, say:\n```python\ndef f(x, y, z):\n return x - math.sin(y) * z\n```\nPass this function as the *objective_function* argument to the .maximize() method (lambdas work too!). \n\n```python\nbest_point = fmga.maximize(f, population_size=60, dimensions=3)\n```\n\nThe **maximize()** method creates a **Population** of **Point** objects, calls the **.converge()** method on the Population object, and finally,\nreturns a **Point** object representing the n-dimensional point with best fitness through the **.best_estimate()** method. \n\n```python\nprint(best_point, best_point.fitness)\n```\nBy default, the *multiprocessing* argument defaults to False, so to enable multiprocessing, set this argument to True, and pass the number of processes to be spawned as the *processes* argument.\n```python\nbest_point = fmga.maximize(f, multiprocessing=True, processes=4)\n```\nNote that, when multiprocessing is enabled on Windows systems, you must put a guard over the entry point of your script.\nSee [here](https://docs.python.org/2/library/multiprocessing.html#windows) for a how-to.\n\nfmga also supports a variable number of dimensions to optimise over, passed as the *dimensions* argument, which defaults to the number of arguments of the objective function passed.\n\nIf you wish to interact with the **Population** object directly, you can.\nBoth of the following work:\n```python\npopulation = fmga.Population(f, population_size=60, dimensions=3)\npopulation = fmga.Population(population_size=60, objective_function=f, dimensions=3)\n```\nIf you wish to define custom boundaries, create a list of tuples, for each dimension. Default boundaries are (0, 100). \n(This is different than in versions 1.x)\n```python\nboundaries = [(0, 2.5), (0, 10)]\n```\nand pass this as the *boundaries* argument to the **Population** constructor or the **maximise()** method:\n```python\npopulation = fmga.Population(f, population_size=60, boundaries=boundaries)\nbest_point = fmga.maximize(f, population_size=60, boundaries=boundaries)\n```\nNote that the default range for missing dimensions is (0, 100). \nThe population can be set to breed and iterate by using the **.converge()** method.\n```python\npopulation.converge(iterations=20)\n```\nTo perform only one iteration of breeding and mutating, do:\n```python\npopulation.iterate()\n```\nAccess population mean fitness and mean L1 diversity stats through the _.mean_fitness_ and _.mean_diversity_ attributes:\n```python\nprint(population.mean_fitness, population.mean_diversity)\n```\n\nThe **.best_estimate()** method returns the point closest to the function point of maxima in the population, as a **Point** object.\n```python\nbest_point = population.best_estimate()\n```\nEvery **Point** object has the __coordinates__ attribute, a numpy array signifying the coordinates of point.\nTo find the value of the function at this point, use the __fitness__ attribute.\n```python\nprint(best_point.coordinates)\nprint(best_point.fitness)\n```\n\n## Population Class Methods\nThe Population constructor takes the following arguments, in order: \n**objective_function** The function to maximize! \n**dimensions** (default = number of arguments of objective_function) The dimensionality of the points and the number of variables to maximize over. \n\nFrom versions 2.8.0 and onward, the PopulationParameters class handles the parameters below. \nThe interface is the same as previous versions, however, so you can pass these arguments to the Population constructor as before.\n\n**population_size** (default = 60) Number of points in the population. \n**boundaries** (default = (0, 100) for every dimension) Must be an iterable of tuples. The tuple indicates the domain where the points are spread along that dimension. \n**elite_fraction** (default = 0.1) Fraction of the population's points to be kept as elite during breeding. Must be between 0 and 1, inclusive. \n**mutation_probability** (default = 0.05) How likely is is for a single point to mutate - this probability is the same for all points in the population.\nMust be between 0 and 1, inclusive. \n**mutation_range** (default = 5) The range of the mutation when it does occur. Note that the point will never mutate out of the domain defined! \n**multiprocessing** (default = False) Whether multiprocessing is enabled \n**processes** (default = multiprocessing.cpu_count()) Number of processes to spawn if multiprocessing is enabled. \n\nThe **maximize()** method takes all of the above, an **iterations** argument,\ndefaulting to 15, signifying the number of iterations that the underlying population undergoes, as well as a **verbose** argument (default = 0, was 2 for versions <= 2.4.0) denoting how much console output to be displayed after each iteration (Must take values 0, 1 or 2 with 2 representing the most output, and 0 representing none.)\n\nThe **converge()** and **iterate()** methods also take the **iterations** and **verbose** arguments.\n\nThe **minimize()** method is a wrapper over the **maximize()** method - replacing the objective function by its negative, and maximizing this new objective function.\n\nThe **unpack()** method accepts two arguments, a tuple of values and a list of shapes. If the length of the list of shapes is greater than one, it returns a list of numpy arrays of shape according to the list, by reshaping the tuple in-order.\nOtherwise it returns just a numpy array of the passed shape, formed by reshaping the tuple. \nThis is useful when working with a large number of arguments! Example:\n```python\ndef f(*args):\n x, y, z = fmga.unpack(args, (1, (2, 2), 4))\n\n # x.shape == (1,)\n # y.shape == (2, 2)\n # z.shape == (4,)\n\n return x - y[0][0] + z[2]\n```\n\n## Dependencies\n* numpy\n* pathos (>= 0.2.2.1)\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ameya98/GeneticAlgorithmsRepo/tree/master/fmga", "keywords": "genetic,genetic_algorithms", "license": "", "maintainer": "", "maintainer_email": "", "name": "fmga", "package_url": "https://pypi.org/project/fmga/", "platform": "", "project_url": "https://pypi.org/project/fmga/", "project_urls": { "Homepage": "https://github.com/ameya98/GeneticAlgorithmsRepo/tree/master/fmga" }, "release_url": "https://pypi.org/project/fmga/2.8.0/", "requires_dist": [ "numpy", "pathos (>=0.2.2.1)" ], "requires_python": "", "summary": "Genetic algorithms for n-dimensional function maximization.", "version": "2.8.0" }, "last_serial": 4575970, "releases": { "0.1.4": [ { "comment_text": "", "digests": { "md5": "928fba8baed041f709d228dfe6ab1996", "sha256": "489589d12c5c8ac1350ff37d1ba7040c2f6f7b30f39ab9cd0fec745bed65dd07" }, "downloads": -1, "filename": "fmga-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "928fba8baed041f709d228dfe6ab1996", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6607, "upload_time": "2018-05-21T07:52:37", "url": "https://files.pythonhosted.org/packages/8d/03/706ef937d00cb161518be550ac338eb50f4ad4a5202b3f6b31c5c92c86bf/fmga-0.1.4-py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "237bcd3c3a972e85c43a07a946ae727f", "sha256": "0b95a0a7b40b5cc68fafe3bcea23e373f60d7bce3d4afc21e5e8e7bb6fd2ba42" }, "downloads": -1, "filename": "fmga-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "237bcd3c3a972e85c43a07a946ae727f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6613, "upload_time": "2018-05-21T07:52:38", "url": "https://files.pythonhosted.org/packages/3d/c9/213a5ca18c2255ca12c0b7cb2b456fdd734527abe8ea91d3100feb14159f/fmga-0.1.5-py3-none-any.whl" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "2eb97b6f791eb0ec2550c272d5d6d97e", "sha256": "386a316240b11cca8e090cacbad4388defcb9626f5a9903c4f7133a40984bcbd" }, "downloads": -1, "filename": "fmga-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "2eb97b6f791eb0ec2550c272d5d6d97e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7211, "upload_time": "2018-05-21T07:52:39", "url": "https://files.pythonhosted.org/packages/55/60/c6bc895bff7dc0d82dcd82680fa13320ecb0848b040adda6f064ed46c806/fmga-0.1.6-py3-none-any.whl" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "261e43773bc55c043bc9e286f684c799", "sha256": "41bbaa6f55a9c3c878e83c80b0b1e2e57f8007d39763eb0b97fa656ff8b2c013" }, "downloads": -1, "filename": "fmga-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "261e43773bc55c043bc9e286f684c799", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7212, "upload_time": "2018-05-20T13:59:39", "url": "https://files.pythonhosted.org/packages/21/06/ac82165f367601c16cbc6d0dda7fbbf73948f2f448b94a657f1e736f859f/fmga-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ee4322d96a193a04ad1c5563b721587", "sha256": "767398a6c65a5d8166b5a9424c33b19f1e840ad574b0b58552a33151188ad868" }, "downloads": -1, "filename": "fmga-0.1.7.tar.gz", "has_sig": false, "md5_digest": "7ee4322d96a193a04ad1c5563b721587", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4835, "upload_time": "2018-05-20T13:59:49", "url": "https://files.pythonhosted.org/packages/a8/14/1c014e41bff97b31c4ec5f86d1df0c12e4a1cfbe7cc49b37e9a9cf0d1548/fmga-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "e4c90ee7641076c29959096935e064a7", "sha256": "6376f91fb71c42c5c567df92280c33e8668713f6ec2e006b711e290de823a644" }, "downloads": -1, "filename": "fmga-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "e4c90ee7641076c29959096935e064a7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7213, "upload_time": "2018-05-20T13:59:43", "url": "https://files.pythonhosted.org/packages/82/c7/5d25b7040373eaf8a263de8c48eb16638335de538d9c259f2060ec146a87/fmga-0.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36c80c22d07f565887f220a87384bf0a", "sha256": "b1e59952dfebdbe225baff16a3b82ba5f22426a8fb779345a1b651582ed35756" }, "downloads": -1, "filename": "fmga-0.1.8.tar.gz", "has_sig": false, "md5_digest": "36c80c22d07f565887f220a87384bf0a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4835, "upload_time": "2018-05-20T13:59:51", "url": "https://files.pythonhosted.org/packages/af/c1/bb6d0e5aac5eb2c58af25167e7366039503b4705f9401ffbe347ac66e027/fmga-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "37af466a9e9902e3f70ea8a4d486eba3", "sha256": "42bc923c4eb3fda182198539bb3e316e31b7f9af50c50f41efad5763e5bc9fd7" }, "downloads": -1, "filename": "fmga-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "37af466a9e9902e3f70ea8a4d486eba3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3924, "upload_time": "2018-05-20T13:59:45", "url": "https://files.pythonhosted.org/packages/1c/13/ce6c0b8b11ba86a79fc01df572dd3b42399fe679d277a047046df7d5b60e/fmga-0.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4f02ec3f87068d97825a7de7c59ba6b6", "sha256": "b3189a557907106fa29ab8169877304bf96c587cb3b2a44f62c8a79ebcffecb0" }, "downloads": -1, "filename": "fmga-0.1.9.tar.gz", "has_sig": false, "md5_digest": "4f02ec3f87068d97825a7de7c59ba6b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5028, "upload_time": "2018-05-20T13:59:53", "url": "https://files.pythonhosted.org/packages/16/7f/6332df42c1cd94bc9fb7aee3d3f09e87050115260a04184449a263247bc6/fmga-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ecbdd787d474840d7aa178477d169106", "sha256": "9b9975114f102662e15ad7e9694c01856c35e8140f61880f0d0b8266f7bfe54b" }, "downloads": -1, "filename": "fmga-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ecbdd787d474840d7aa178477d169106", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5197, "upload_time": "2018-05-20T13:59:47", "url": "https://files.pythonhosted.org/packages/3e/d9/8790d6befac28fbb8c798f77e0ea3e0c68ac73b51171cc2ede78d551a0db/fmga-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "abb36862e0f73beed484b5468f23827d", "sha256": "6563a96877d76390f320125674a1b220917bca871d157c9fc838f13956dfd63a" }, "downloads": -1, "filename": "fmga-0.2.0.tar.gz", "has_sig": false, "md5_digest": "abb36862e0f73beed484b5468f23827d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4833, "upload_time": "2018-05-20T13:59:56", "url": "https://files.pythonhosted.org/packages/3b/1a/f762585ee160f0e962f5f0487bb84204395a22eb5dbbc0d6b4afd4e3e7ee/fmga-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "16cb57a1b375bdeefae8d5f371b26a80", "sha256": "6ce1a662a58770a6be14107e297723c8316f988c4801ff5096c1417d65cecb8a" }, "downloads": -1, "filename": "fmga-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "16cb57a1b375bdeefae8d5f371b26a80", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5259, "upload_time": "2018-05-21T07:53:15", "url": "https://files.pythonhosted.org/packages/aa/af/e9c0a20a26eb87ea94f4fcfd78c0b9444a02cb47deb379de597bf1e7a33e/fmga-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f1145ece4a2ed4b94de13f620005a456", "sha256": "5938de70fb3c766c2ec1eb1a23df03366235856221fb7b8fa6b7f3c67d236ed1" }, "downloads": -1, "filename": "fmga-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f1145ece4a2ed4b94de13f620005a456", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4935, "upload_time": "2018-05-21T07:53:16", "url": "https://files.pythonhosted.org/packages/e4/45/44c62ffca9aa74c5c071bac20605b42b4f5a33a5b88b88514fece1c3e61b/fmga-0.2.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "37c6dcbeef0ead9d03aaeeb584ddd954", "sha256": "6afe2921485c4e136036d7c4c3d9b7ecdb2156ee746ad1d11f78820cd1fb96a3" }, "downloads": -1, "filename": "fmga-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "37c6dcbeef0ead9d03aaeeb584ddd954", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5351, "upload_time": "2018-05-22T07:53:22", "url": "https://files.pythonhosted.org/packages/9c/7d/fdfeb96109a1a049675d027cede98ff2a2d058337483e4e9a092ad3066e8/fmga-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6fc6a30c4e3fe5be81ec9d940e84dfdb", "sha256": "a4a290917a94634f85360810d8eef4a3d1fdb683ad43f8a40e7431a1f1e63d13" }, "downloads": -1, "filename": "fmga-1.0.0.tar.gz", "has_sig": false, "md5_digest": "6fc6a30c4e3fe5be81ec9d940e84dfdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5054, "upload_time": "2018-05-22T07:53:24", "url": "https://files.pythonhosted.org/packages/2e/99/c8ae04c38b8eb216a7b4d5567e915da67a997c45fe6311e354ceef48215a/fmga-1.0.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "cc53c849f8df1fae97496e57e51ec112", "sha256": "6758833fb53bce754185ab1e9e58cbe8fa0a28aeb0d6f44c564a17c033da3bca" }, "downloads": -1, "filename": "fmga-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cc53c849f8df1fae97496e57e51ec112", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5561, "upload_time": "2018-07-30T19:19:47", "url": "https://files.pythonhosted.org/packages/fb/c3/6fa9390e1d7b3aeaa8730c4962d6c232becd1680d436d6c648b3107b2e38/fmga-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e397b06c8a4fa3ca1f4f8840b0fbbe79", "sha256": "d02bd3ddc62dfb571cdb1f8e3c9b48e83ea4948563a834c3345384698b8a3164" }, "downloads": -1, "filename": "fmga-2.0.0.tar.gz", "has_sig": false, "md5_digest": "e397b06c8a4fa3ca1f4f8840b0fbbe79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5233, "upload_time": "2018-07-30T19:19:51", "url": "https://files.pythonhosted.org/packages/66/45/dcb47ba6738bee36a59fbf393d5906a34324b01efaec6c66691ca9d6ad7f/fmga-2.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "949827af82b69dace55b5ec27a9ba69f", "sha256": "ad6a0a6b33093d06da6bbef9eea85e11319d4618e2716dcb553395a524bd5ed8" }, "downloads": -1, "filename": "fmga-2.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "949827af82b69dace55b5ec27a9ba69f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5847, "upload_time": "2018-08-07T20:42:21", "url": "https://files.pythonhosted.org/packages/7c/39/935197bc4c7cb09792688dd6f1e98bbb7ee8035614571519e496d86f32da/fmga-2.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "695de4be947c0dd7fa14629cb57158d1", "sha256": "787e7eea251b0ac993d084ff27d8a1c107252c494717a7433431435199daa1e4" }, "downloads": -1, "filename": "fmga-2.1.0.tar.gz", "has_sig": false, "md5_digest": "695de4be947c0dd7fa14629cb57158d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5557, "upload_time": "2018-08-07T20:42:25", "url": "https://files.pythonhosted.org/packages/84/73/af2806489394850dc5f308b71761a55f45f4e3a2eaa8b0f668261516d243/fmga-2.1.0.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "3d1cb636ae915a08a74d04126d6ddebd", "sha256": "c2ea909f5d242d69b2db5465bc981d6d1bc8e4b8d8bb6968c6bc74534f7396fe" }, "downloads": -1, "filename": "fmga-2.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3d1cb636ae915a08a74d04126d6ddebd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5859, "upload_time": "2018-08-07T20:48:06", "url": "https://files.pythonhosted.org/packages/03/22/3d8c29245dc4be10983b1e7c07c465abba74c9a4fe67550ffdb1a297822f/fmga-2.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3f21f291690a7b2085dbd7e66bb409ea", "sha256": "acd32f7accff3da97ecf1692ab6f92cb4b2426694c28a95835094e8809f00c9f" }, "downloads": -1, "filename": "fmga-2.2.0.tar.gz", "has_sig": false, "md5_digest": "3f21f291690a7b2085dbd7e66bb409ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5566, "upload_time": "2018-08-07T20:48:12", "url": "https://files.pythonhosted.org/packages/b5/69/f13bfeea663c683f0b8f8599ffc525cf553da6509e1034f51fec3f440395/fmga-2.2.0.tar.gz" } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "76fb76faec6a28f182909680f8133960", "sha256": "c61d06e45cb5d55db9fe303b373b166332b18f1bad88df0316037de601aac028" }, "downloads": -1, "filename": "fmga-2.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "76fb76faec6a28f182909680f8133960", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6826, "upload_time": "2018-08-22T16:40:03", "url": "https://files.pythonhosted.org/packages/c7/fb/4c68cf95c3b93e839cfc3b2032f132de15fb1abed5fa20a9554957e9868e/fmga-2.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7077aa8a98c4e3bc469fd1e29e1047b7", "sha256": "ed55fa4f36dd803eaf809b7e1445b073a14d2611910cbfa115b47de9a7d2cebf" }, "downloads": -1, "filename": "fmga-2.3.0.tar.gz", "has_sig": false, "md5_digest": "7077aa8a98c4e3bc469fd1e29e1047b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6388, "upload_time": "2018-08-22T16:40:34", "url": "https://files.pythonhosted.org/packages/60/79/aad00333bd57fedce353bef17e2358ab7b114242dfd3ab22201112b18f61/fmga-2.3.0.tar.gz" } ], "2.4.0": [ { "comment_text": "", "digests": { "md5": "67cb7a9e68dc0a7eb293e49648bb63e5", "sha256": "9ba3502c7154b7a5a057e211f3055552ca0caf7a00cb822210399b4d50b8feea" }, "downloads": -1, "filename": "fmga-2.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "67cb7a9e68dc0a7eb293e49648bb63e5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6825, "upload_time": "2018-08-22T17:11:25", "url": "https://files.pythonhosted.org/packages/0a/df/1fab324bd50848c7081dc82a3d80ea17e251dd95e63f2e13d97295b713d3/fmga-2.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e838c3451a41e525c3d3367a4ae4e406", "sha256": "9749ef6e5b35ebb5e3d0c7cc6a92cf391b2286f035b7eac4caf145259dcb7013" }, "downloads": -1, "filename": "fmga-2.4.0.tar.gz", "has_sig": false, "md5_digest": "e838c3451a41e525c3d3367a4ae4e406", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6386, "upload_time": "2018-08-22T17:11:39", "url": "https://files.pythonhosted.org/packages/33/bd/a90e22d6b66686171792b9d9420dca2374a5415cac8c9056d378a0e0b898/fmga-2.4.0.tar.gz" } ], "2.5.0": [ { "comment_text": "", "digests": { "md5": "43f794c4c86a42d343ba5a399d479482", "sha256": "32941c48365dec38f78622a94002f9287a33e66989cee9f5224e40240b8ba572" }, "downloads": -1, "filename": "fmga-2.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "43f794c4c86a42d343ba5a399d479482", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7289, "upload_time": "2018-09-26T18:39:58", "url": "https://files.pythonhosted.org/packages/52/ba/1b4bf5175725a8f7e8bc65add0eb6091a00973ab75c7606a9bc7a1f4a29c/fmga-2.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ed8abdb84ca539da3c3dd3cfccbf9768", "sha256": "c27187215fee60719c6e33099d55688b8c6b53987c76d76cfb97519b33975f06" }, "downloads": -1, "filename": "fmga-2.5.0.tar.gz", "has_sig": false, "md5_digest": "ed8abdb84ca539da3c3dd3cfccbf9768", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6878, "upload_time": "2018-09-26T18:40:04", "url": "https://files.pythonhosted.org/packages/bf/aa/c5c2971a2b3c8fc2ddb40ed88a7b6bb68aecbd3aed1ce3240099421b8c6c/fmga-2.5.0.tar.gz" } ], "2.6.0": [ { "comment_text": "", "digests": { "md5": "18b56fc8253672b2a2fb529333f875bd", "sha256": "066e62a43a1d1702a0c2a9368dea5135279fd0c14a53ff72ae3030350b1b6fa3" }, "downloads": -1, "filename": "fmga-2.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "18b56fc8253672b2a2fb529333f875bd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7315, "upload_time": "2018-09-26T18:49:01", "url": "https://files.pythonhosted.org/packages/41/96/49f515d5b90f387a366e5d3a32c2b9f6e0842aad99a3880bc3f1d2630c5f/fmga-2.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "caf2a99da1a40df49ca6ca01d425bd32", "sha256": "c473b4f112057f9a0bad6a7d0ca543dfea31e864a57619170b170306781cf884" }, "downloads": -1, "filename": "fmga-2.6.0.tar.gz", "has_sig": false, "md5_digest": "caf2a99da1a40df49ca6ca01d425bd32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6875, "upload_time": "2018-09-26T18:49:07", "url": "https://files.pythonhosted.org/packages/b3/da/f0e0dd1f35572488f3eb14df18d9a0a5577c806735b2dee04c3b5a20e24d/fmga-2.6.0.tar.gz" } ], "2.7.0": [ { "comment_text": "", "digests": { "md5": "532b622d68108567290a33d1ad33396b", "sha256": "098231ea5cf590a84b0a0dab90e2bf31c4db69cab21112cfcf1af2ed7e5e1db8" }, "downloads": -1, "filename": "fmga-2.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "532b622d68108567290a33d1ad33396b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7717, "upload_time": "2018-12-07T18:24:04", "url": "https://files.pythonhosted.org/packages/ca/b8/8f6d19db17f49d45ea688c12e4bf08331d7e0b34bfe1b2edbef7183120e6/fmga-2.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7494277c790c91ea88d671149d072335", "sha256": "3fd4ef66707ede0bb4c7d66d51afc58e54bb6820a3d9176c4037412bb21b6b5f" }, "downloads": -1, "filename": "fmga-2.7.0.tar.gz", "has_sig": false, "md5_digest": "7494277c790c91ea88d671149d072335", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7224, "upload_time": "2018-12-07T18:24:11", "url": "https://files.pythonhosted.org/packages/af/fe/33a3288fdcc5c3fe44c0e04b95703a26b94d0be1a46201a8e5a53f4c15cd/fmga-2.7.0.tar.gz" } ], "2.8.0": [ { "comment_text": "", "digests": { "md5": "dbacc20d7c989e85fc88cd0694eaaa12", "sha256": "eb67fcd3f4ef6420d1a1df90e6d6828eb070fd5b6415f0f95fa6d1c259d7b87c" }, "downloads": -1, "filename": "fmga-2.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "dbacc20d7c989e85fc88cd0694eaaa12", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7896, "upload_time": "2018-12-08T19:56:00", "url": "https://files.pythonhosted.org/packages/49/19/3bb4da5c30358a9436942bbcef5b38df549e9866fd30fb9e87916d3741d5/fmga-2.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1d476132c7b7f329da7bcb0cecb66612", "sha256": "6075704858d14a80a35086371e154925f280b0e4a06be03c9d9c961b666a43e5" }, "downloads": -1, "filename": "fmga-2.8.0.tar.gz", "has_sig": false, "md5_digest": "1d476132c7b7f329da7bcb0cecb66612", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7473, "upload_time": "2018-12-08T19:56:07", "url": "https://files.pythonhosted.org/packages/ef/3e/18d76e739d77263854934f99ebca7004e94ec8e919811d136710228cd83c/fmga-2.8.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dbacc20d7c989e85fc88cd0694eaaa12", "sha256": "eb67fcd3f4ef6420d1a1df90e6d6828eb070fd5b6415f0f95fa6d1c259d7b87c" }, "downloads": -1, "filename": "fmga-2.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "dbacc20d7c989e85fc88cd0694eaaa12", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7896, "upload_time": "2018-12-08T19:56:00", "url": "https://files.pythonhosted.org/packages/49/19/3bb4da5c30358a9436942bbcef5b38df549e9866fd30fb9e87916d3741d5/fmga-2.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1d476132c7b7f329da7bcb0cecb66612", "sha256": "6075704858d14a80a35086371e154925f280b0e4a06be03c9d9c961b666a43e5" }, "downloads": -1, "filename": "fmga-2.8.0.tar.gz", "has_sig": false, "md5_digest": "1d476132c7b7f329da7bcb0cecb66612", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7473, "upload_time": "2018-12-08T19:56:07", "url": "https://files.pythonhosted.org/packages/ef/3e/18d76e739d77263854934f99ebca7004e94ec8e919811d136710228cd83c/fmga-2.8.0.tar.gz" } ] }