{ "info": { "author": "Michael Goerz", "author_email": "mail@michaelgoerz.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Jupyter", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Physics" ], "description": "=====================\nKrotov Python Package\n=====================\n.. image:: https://img.shields.io/badge/github-qucontrol/krotov-blue.svg\n :alt: Source code on Github\n :target: https://github.com/qucontrol/krotov\n.. image:: https://img.shields.io/pypi/v/krotov.svg\n :alt: Krotov on the Python Package Index\n :target: https://pypi.python.org/pypi/krotov\n.. image:: https://badges.gitter.im/qucontrol_krotov/Lobby.svg\n :alt: Join the chat at https://gitter.im/qucontrol_krotov/Lobby\n :target: https://gitter.im/qucontrol_krotov/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n.. image:: https://img.shields.io/travis/qucontrol/krotov.svg\n :alt: Travis Continuous Integration\n :target: https://travis-ci.org/qucontrol/krotov\n.. image:: https://ci.appveyor.com/api/projects/status/1cbm24w04jmxjpjh?svg=true\n :alt: AppVeyor Continuous Integration\n :target: https://ci.appveyor.com/project/goerz/krotov\n.. image:: https://codecov.io/gh/qucontrol/krotov/branch/master/graph/badge.svg\n :alt: Codecov\n :target: https://codecov.io/gh/qucontrol/krotov\n.. image:: https://img.shields.io/badge/License-BSD-green.svg\n :alt: BSD License\n :target: https://opensource.org/licenses/BSD-3-Clause\n.. image:: https://readthedocs.org/projects/krotov/badge/?version=latest\n :alt: Documentation Status\n :target: https://krotov.readthedocs.io/en/latest/?badge=latest\n.. image:: https://mybinder.org/badge_logo.svg\n :alt: Launch Binder\n :target: https://mybinder.org/v2/gh/qucontrol/krotov/v0.4.1?filepath=docs%2Fnotebooks\n.. image:: https://img.shields.io/badge/arXiv-1902.11284-red.svg\n :alt: arXiv\n :target: https://arxiv.org/abs/1902.11284\n\nPython implementation of Krotov's method for quantum optimal control.\n\nThis implementation follows the original implementation in the `QDYN Fortran library`_.\n\nThe ``krotov`` package is built on top of `QuTiP`_.\n\nDevelopment happens on `Github`_. You can read the full documentation at `ReadTheDocs`_ or `download a PDF version`_.\n\nIf you use the ``krotov`` package in your research, please `cite it `_.\n\n.. _QDYN Fortran library: https://www.qdyn-library.net\n.. _QuTiP: http://qutip.org\n.. _ReadTheDocs: https://krotov.readthedocs.io/en/stable/\n.. _download a PDF version: https://github.com/qucontrol/krotov/tree/master/docs/pdf\n\n\nPurpose\n-------\n\nOptimal control is a cornerstone of quantum technology: relying not\njust on a passive understanding of quantum mechanics, but on the *active*\nutilization of the quantum properties of matter. Quantum optimal control asks\nhow to manipulate the dynamics of a quantum system in some desired\nway. This is essential for the realization of quantum computers and\nrelated technologies such as quantum sensing.\n\nKrotov's method and GRAPE are the two leading gradient-based optimization\nalgorithms used in numerical quantum optimal control. Krotov's method\ndistinguishes itself by guaranteeing monotonic convergence for near-continuous\ncontrol fields. This makes is particularly useful for exploring the limits of\ncontrollability in a physical system.\nWhile GRAPE is found in various software packages, there has not been an open\nsource implementation of Krotov's method to date. Our package provides that\nmissing implementation.\n\nThe Krotov package targets both students wishing to enter the field\nof quantum control and researchers in the field. It was designed towards\nthe following goals:\n\n* Leverage the `QuTiP`_ library as a platform for numerically describing\n quantum systems.\n* Provide a collection of examples inspired by recent publications in\n the `Jupyter notebook`_ format, allowing for interactive exploration of the\n method.\n* Define a general interface for formulating *any* quantum control problem,\n which may extend to other optimization methods in the future.\n* Serve as a reference implementation of Krotov's method, and as a foundation\n against which to test other implementations.\n* Enable the more widespread use of Krotov's method, for example in the design\n of experiments.\n\n\nPrerequisites\n-------------\n\nThe Krotov package is available for Python versions >= 3.5. Its main dependency is `QuTiP`_\n(apart from the `core packages of the Python scientific ecosystem`_).\nThus, you should consider `QuTiP's installation instructions`_.\n\nIn any case, using some sort of `virtual environment`_ is strongly encouraged.\nMost packages in the Python scientific ecosystem are now available as\n`wheels`_, making installation via `pip`_ easy. However, `QuTiP currently does\nnot provide wheels`_. Thus, on systems that do not have the necessary compilers\ninstalled (Windows, macOS), the `conda`_ package manager provides a good solution.\n\nAssuming ``conda`` is installed (e.g. through `Miniconda`_), the following\ncommands set up a virtual (conda) environment into which the Krotov package can\nthen be installed:\n\n.. code-block:: console\n\n $ conda create -n qucontrolenv python=3.7\n $ conda activate qucontrolenv\n $ conda config --append channels conda-forge\n $ conda install qutip\n\n.. _core packages of the Python scientific ecosystem: https://www.scipy.org\n.. _QuTiP's installation instructions: http://qutip.org/docs/latest/installation.html\n.. _virtual environment: https://docs.python.org/3/glossary.html#term-virtual-environment\n.. _wheels: https://packaging.python.org/tutorials/installing-packages/#source-distributions-vs-wheels\n.. _QuTiP currently does not provide wheels: https://github.com/qutip/qutip/issues/933\n.. _conda: https://conda.io/docs/index.html\n.. _Miniconda: https://conda.io/miniconda.html\n\n\nInstallation\n------------\nTo install the latest released version of ``krotov`` into your current (conda)\nenvironment, run this command in your terminal:\n\n.. code-block:: console\n\n $ python -m pip install krotov\n\nThis is the preferred method to install the ``krotov`` package, as it will always install the most recent stable release.\n\nYou may also do\n\n.. code-block:: console\n\n $ python -m pip install krotov[dev,extras]\n\nto install additional development dependencies, including packages required to run the example notebooks.\n\nIf you don't have `pip`_ installed, the `Python installation guide`_, respectively the `Python Packaging User Guide`_ can guide\nyou through the process.\n\n.. _pip: https://pip.pypa.io\n.. _Python installation guide: http://docs.python-guide.org/en/latest/starting/installation/\n.. _Python Packaging User Guide: https://packaging.python.org/tutorials/installing-packages/\n\n\nTo install the latest development version of ``krotov`` from `Github`_:\n\n.. code-block:: console\n\n $ python -m pip install git+https://github.com/qucontrol/krotov.git@master#egg=krotov\n\n.. _Github: https://github.com/qucontrol/krotov\n\nUsage\n-----\n\nTo use Krotov's method for quantum optimal control in a Python script or\n`Jupyter notebook`_, start with::\n\n import krotov\n import qutip\n\nThen,\n\n1. define the necessary quantum operators and states using `QuTiP`_.\n2. create a list of objectives, as instances of\n |krotov.Objective|_.\n3. call |krotov.optimize_pulses|_ to perform an optimization of an arbitrary\n number of control fields over all the objectives.\n\n.. |krotov.Objective| replace:: ``krotov.Objective``\n.. _krotov.Objective: https://krotov.readthedocs.io/en/stable/API/krotov.objectives.html#krotov.objectives.Objective\n\n.. |krotov.optimize_pulses| replace:: ``krotov.optimize_pulses``\n.. _krotov.optimize_pulses: https://krotov.readthedocs.io/en/stable/API/krotov.optimize.html#krotov.optimize.optimize_pulses\n\nSee `Using Krotov with QuTiP `_ and `Examples `_ for details.\n\n.. _Jupyter notebook: http://jupyter.org\n\n\n=======\nHistory\n=======\n\n\n0.4.1 (2019-10-11)\n------------------\n\n* Update: Documentation now contains all information from https://arxiv.org/abs/1902.11284v4 (`#54`_)\n* Added: a PDF of the documentation is now available at https://github.com/qucontrol/krotov/tree/master/docs/pdf (`#52`_, thanks to `@TejasAvinashShetty`_)\n\n\n0.4.0 (2019-10-08)\n------------------\n\n* Added: Support for Python 3.7\n* Changed: The ``'shape'`` key in ``pulse_options`` was renamed to ``'update_shape'``, to further avoid confusion between pulse shapes and update shapes.\n* Changed: The ``.adjoint`` property of ``Objective`` is now a method\n* Added: Ability to not use QuTiP ``Qobj`` objects, but arbitrary low-level objects instead.\n* Improved: Printing an ``Objective`` now uses internal counters and a symbolic notation to identify objects shared between different objectives. (`#43`_)\n* Improved: ``gate_objectives`` now takes into account if target states are (reshuffled) basis states and does not create unnecessary new copies.\n* Bugfix: Two ``Objective`` instances that contain numpy arrays as controls can now be compared with ``==`` (`#44`_)\n* Bugfix: Custom attributes (such as ``weight``) are now preserved when copying an ``Objective`` (`#44`_)\n* Bugfix: Calling ``copy.deepcopy`` on an ``Objective`` now preserves control functions (`#44`_)\n* Improved: The ``Objective.mesolve`` and ``Objective.propagate`` methods can now receive arguments ``H`` and ``c_ops`` to override the respective attributes of the objectives. This make is easier to analyze perform a robustness analysis, where the result of an optimization should be propagated under a perturbed Hamiltonian.\n* Improved: The ``print_table`` and ``print_debug_information`` info-hooks now flush their output buffers after each iteration. As a result, when writing to a file, that file can be watched with ``tail -f``.\n* Changed: Redefine ``tau_vals`` as their complex conjugate, fixing a bug in ``chis_ss`` and ``chis_sm`` (`#46`_)\n* Bugfix: Correctly calculate \u2202H/\u2202\u03f5 if \u03f5 occurs in H multiple times (`#47`_, thanks to `@uiofgh`_)\n* Bugfix: Correctly calculate \u2202H/\u2202\u03f5=0 if the specific \u03f5 currently being updated does not occur in H (`#48`_)\n* Added: Method ``objectives_with_controls`` for ``Result`` object.\n\n\n0.3.0 (2019-03-01)\n------------------\n\n* Added: Preprint citation information (``krotov.__arxiv__``, ``krotov.__citation__``, ``krotov.__bibtex__``)\n* Added: Ability to continue from a previous optimization (`#26`_)\n* Added: Parameter ``out`` to ``print_table`` info-hook\n* Added: Parameter ``finalize`` to ``Result.load``\n* Added: Ability to dump optimization result every so many iterations (``dump_result`` check-convergence routine)\n* Added: `re-entrant` option for ``DensityMatrixODEPropagator``\n* Bugfix: Discretize controls to float values (`#41`_)\n* Bugfix: Fix overlap for non-Hermitian operators (`#39`_)\n* Bugfix: Interface for passing ``tau_vals`` to ``chi_constructor`` (`#36`_)\n* Added: function ``above_value`` for convergence check (`#35`_)\n\n\n0.2.0 (2019-02-14)\n------------------\n\n* Added: Implementation of all the standard functionals\n* Added: The ``info_hook`` receives additional information, including \u222bg\u2090(t)dt (`#32`_)\n* Added: Initialization of objectives for gate optimization in Liouville space\n* Added: A new propagator ``DensityMatrixODEPropagator`` for faster density matrix propagation\n* Added: Support for \"stateful\" propagators by subclassing from ``krotov.propagators.Propagator``\n* Changed: more flexibility for parallelization (`#29`_)\n* Added: Support for the second-order pulse update\n* Changed: The options for the controls (\u03bb\u2090, update-shape) are now passed through a simplified ``dict`` interface, instead of a custom ``PulseOptions`` class.\n\n\n0.1.0 (2018-12-24)\n------------------\n\n* Initial release with complete implementation of first-order Krotov's method\n* Support for state-to-state and gate optimization, for both closed and open systems\n\n\n.. _@uiofgh: https://github.com/uiofgh\n.. _@TejasAvinashShetty: https://github.com/TejasAvinashShetty\n.. _#26: https://github.com/qucontrol/krotov/issues/26\n.. _#29: https://github.com/qucontrol/krotov/issues/29\n.. _#32: https://github.com/qucontrol/krotov/issues/32\n.. _#35: https://github.com/qucontrol/krotov/issues/35\n.. _#36: https://github.com/qucontrol/krotov/issues/36\n.. _#39: https://github.com/qucontrol/krotov/issues/39\n.. _#41: https://github.com/qucontrol/krotov/issues/41\n.. _#43: https://github.com/qucontrol/krotov/issues/43\n.. _#44: https://github.com/qucontrol/krotov/issues/44\n.. _#46: https://github.com/qucontrol/krotov/issues/46\n.. _#47: https://github.com/qucontrol/krotov/issues/47\n.. _#48: https://github.com/qucontrol/krotov/issues/48\n.. _#52: https://github.com/qucontrol/krotov/issues/42\n.. _#54: https://github.com/qucontrol/krotov/issues/54\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/qucontrol/krotov", "keywords": "krotov", "license": "BSD license", "maintainer": "", "maintainer_email": "", "name": "krotov", "package_url": "https://pypi.org/project/krotov/", "platform": "", "project_url": "https://pypi.org/project/krotov/", "project_urls": { "Homepage": "https://github.com/qucontrol/krotov" }, "release_url": "https://pypi.org/project/krotov/0.4.1/", "requires_dist": [ "glom", "numpy", "scipy", "qutip (>=4.3.1)", "uniseg", "better-apidoc (==0.3.1) ; extra == 'dev'", "click ; extra == 'dev'", "coverage ; extra == 'dev'", "flake8 ; extra == 'dev'", "gitpython ; extra == 'dev'", "isort ; extra == 'dev'", "jupyter ; extra == 'dev'", "matplotlib ; extra == 'dev'", "nbsphinx ; extra == 'dev'", "nbval ; extra == 'dev'", "pre-commit ; extra == 'dev'", "pybtex ; extra == 'dev'", "pylint ; extra == 'dev'", "pytest ; extra == 'dev'", "pytest-cov (<=2.6.1) ; extra == 'dev'", "pytest-xdist ; extra == 'dev'", "sphinx ; extra == 'dev'", "sphinx-autobuild ; extra == 'dev'", "sphinx-rtd-theme ; extra == 'dev'", "sphinxcontrib-bibtex ; extra == 'dev'", "twine ; extra == 'dev'", "watermark ; extra == 'dev'", "weylchamber (>=0.3.2) ; extra == 'dev'", "wheel ; extra == 'dev'", "black ; extra == 'dev'", "jupyterlab ; extra == 'extras'", "pdbpp ; extra == 'extras'" ], "requires_python": "~=3.5", "summary": "Python implementation of Krotov's method for quantum optimal control", "version": "0.4.1" }, "last_serial": 5961686, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "50fb58b38f9c11035e3bb9f2c1cb048c", "sha256": "c5a7d5be3506f823f28ecbacb3efd41fec9be7dbabd1c1535bc1e363f4e8ae1f" }, "downloads": -1, "filename": "krotov-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "50fb58b38f9c11035e3bb9f2c1cb048c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6202, "upload_time": "2018-11-06T19:28:40", "url": "https://files.pythonhosted.org/packages/04/69/af3cd085999a458031683df3ef0e587cfcc55f9e59842676322c6a9e19c4/krotov-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51f0d83cb29f80283b9e808db0ed96b8", "sha256": "1de07588343393a8375ce41b789e78feb3029ed3db4b972acbc21daa3d3033a4" }, "downloads": -1, "filename": "krotov-0.0.1.tar.gz", "has_sig": false, "md5_digest": "51f0d83cb29f80283b9e808db0ed96b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19205, "upload_time": "2018-11-06T19:28:42", "url": "https://files.pythonhosted.org/packages/3b/f6/ee7161b7bc097c21e0ad185dad60e9ed46d4a1d55ebdb33b13a20a652bcc/krotov-0.0.1.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "fe130a4161f984a1c2dcf3a745e7d9a5", "sha256": "654918f9644dc0eecef3aca52c088a0e9fbe297323cda5c7507ab605aa1bc0ef" }, "downloads": -1, "filename": "krotov-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fe130a4161f984a1c2dcf3a745e7d9a5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35440, "upload_time": "2018-12-24T19:23:12", "url": "https://files.pythonhosted.org/packages/ef/74/00b44d248d145b30da512da1697de444d71a29b38e1cddac1a9a155a13e0/krotov-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4980ff532f570330b7891dde3eeba2e7", "sha256": "d044ec27dea8aab62aced06be2ecfbf9234baee7a444dde6943993782682a4f2" }, "downloads": -1, "filename": "krotov-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4980ff532f570330b7891dde3eeba2e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1119948, "upload_time": "2018-12-24T19:23:14", "url": "https://files.pythonhosted.org/packages/52/33/2a4a1fd0375d924f74f2e84a84f1f39d3cc1a04909eecd3c6f97574dcde8/krotov-0.1.0.tar.gz" } ], "0.1.0.post1": [ { "comment_text": "", "digests": { "md5": "23bce2da477963e4a7beb129e4400a57", "sha256": "9788222dd597ba06eb651b589f3ec3b8fb8da71989b471322ddceab6fc0904ab" }, "downloads": -1, "filename": "krotov-0.1.0.post1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "23bce2da477963e4a7beb129e4400a57", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35501, "upload_time": "2018-12-24T22:31:21", "url": "https://files.pythonhosted.org/packages/23/7a/d7a473d30a6072ab4551ea4c49c603ebb52a238ccdda201cd252465fb040/krotov-0.1.0.post1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff85471fc98728900a2eacf7daf5719a", "sha256": "96fd29826aff0c8fce817f5f49c3eea90b1967c68ed6e7a65e76a670072317de" }, "downloads": -1, "filename": "krotov-0.1.0.post1.tar.gz", "has_sig": false, "md5_digest": "ff85471fc98728900a2eacf7daf5719a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1120446, "upload_time": "2018-12-24T22:31:23", "url": "https://files.pythonhosted.org/packages/c8/bb/d7a927613a42830c0651b0287676d9ff49b7204ec64e122dc7ce88322f1e/krotov-0.1.0.post1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "5716f90cdf6ff1501e06d8dc98d001b1", "sha256": "dd42f8482965786fbeb96801f43b158739c993d9be571f8dcc98204614be189f" }, "downloads": -1, "filename": "krotov-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5716f90cdf6ff1501e06d8dc98d001b1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 54868, "upload_time": "2019-02-14T18:05:46", "url": "https://files.pythonhosted.org/packages/f9/68/54c1d8d003dcff876dbe91120f09cd80181d44f3a4bbe07a03f16d2d6236/krotov-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "998b53a45241a84378ab4d0e9c7b6a36", "sha256": "c8b151b37d481d0484bfe8945c9b92adc9d715d9fa8c418e49a0d793a2f55e47" }, "downloads": -1, "filename": "krotov-0.2.0.tar.gz", "has_sig": false, "md5_digest": "998b53a45241a84378ab4d0e9c7b6a36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1494469, "upload_time": "2019-02-14T18:05:48", "url": "https://files.pythonhosted.org/packages/6b/f2/c8def01c8aaa6679a96e22e9410ee293f9b37656f173a9b1f068c4383293/krotov-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "4d21351b0b595b31329e10d5ef38d514", "sha256": "6ffa19d61903edac42b2c965b0485b3b65ab0cd7e3328f42f7a1fb1108875275" }, "downloads": -1, "filename": "krotov-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4d21351b0b595b31329e10d5ef38d514", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.5", "size": 63536, "upload_time": "2019-03-01T07:31:21", "url": "https://files.pythonhosted.org/packages/aa/53/65a461abd3182a5c09d1ef7d1478b93540745d14434b6abe1c7231a7b703/krotov-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "15ecb5d8ac66d29d9c2c27284ad5cd08", "sha256": "4ebca474b510d0d82b407e8914bf6a8828267968555a0338dbdd7575e2bb9bd4" }, "downloads": -1, "filename": "krotov-0.3.0.tar.gz", "has_sig": false, "md5_digest": "15ecb5d8ac66d29d9c2c27284ad5cd08", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 2218577, "upload_time": "2019-03-01T07:31:23", "url": "https://files.pythonhosted.org/packages/f6/cd/5ebb87bd5b709d20b50ccfe5c1205e9143ad78bd92c2795ac70944c153b7/krotov-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "3507e3f79e671860a7c61d3660fd8dc3", "sha256": "cbe0c159681dafa2992cd020e8f09a2fb654f28f1c08fcd1e6333880511ab840" }, "downloads": -1, "filename": "krotov-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3507e3f79e671860a7c61d3660fd8dc3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.5", "size": 69075, "upload_time": "2019-10-08T19:40:53", "url": "https://files.pythonhosted.org/packages/c4/97/5c503310b09ff25884b29563268d06f0d7a824780a7827bba45ed3dc686e/krotov-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "afff9d4cea034ea559895c7c3a768e82", "sha256": "dfe30709a9ef10569f255a1391a906b09b86ec94a3f976620abbc08aa7580e40" }, "downloads": -1, "filename": "krotov-0.4.0.tar.gz", "has_sig": false, "md5_digest": "afff9d4cea034ea559895c7c3a768e82", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 3662214, "upload_time": "2019-10-08T19:40:55", "url": "https://files.pythonhosted.org/packages/62/8a/079023fc91c3a51899d6aae07843e32a9c1cf87b02fcf1ed22f114b48e4b/krotov-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "e54b2e388c61489353962be0e28a5a6a", "sha256": "eeb715b0283711e209fc8d0273e17ec927e9cd6239174b861e0ad3bb80b27e4d" }, "downloads": -1, "filename": "krotov-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e54b2e388c61489353962be0e28a5a6a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.5", "size": 68412, "upload_time": "2019-10-11T19:06:52", "url": "https://files.pythonhosted.org/packages/5c/5c/d70c71405493c0ece7037136efdeb3873aa77baa1f6492ccd6051804e52e/krotov-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fafeaaae907254e1cba131115dea6191", "sha256": "daadc77fccd480b606f76e867f827837f0ab473416d716e87d7bd59d5705e184" }, "downloads": -1, "filename": "krotov-0.4.1.tar.gz", "has_sig": false, "md5_digest": "fafeaaae907254e1cba131115dea6191", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 4753773, "upload_time": "2019-10-11T19:07:05", "url": "https://files.pythonhosted.org/packages/4e/97/e7369a62badbb57cf296b5e9d54ef72008c3aea6be79ef6e9f310bf86422/krotov-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e54b2e388c61489353962be0e28a5a6a", "sha256": "eeb715b0283711e209fc8d0273e17ec927e9cd6239174b861e0ad3bb80b27e4d" }, "downloads": -1, "filename": "krotov-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e54b2e388c61489353962be0e28a5a6a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.5", "size": 68412, "upload_time": "2019-10-11T19:06:52", "url": "https://files.pythonhosted.org/packages/5c/5c/d70c71405493c0ece7037136efdeb3873aa77baa1f6492ccd6051804e52e/krotov-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fafeaaae907254e1cba131115dea6191", "sha256": "daadc77fccd480b606f76e867f827837f0ab473416d716e87d7bd59d5705e184" }, "downloads": -1, "filename": "krotov-0.4.1.tar.gz", "has_sig": false, "md5_digest": "fafeaaae907254e1cba131115dea6191", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.5", "size": 4753773, "upload_time": "2019-10-11T19:07:05", "url": "https://files.pythonhosted.org/packages/4e/97/e7369a62badbb57cf296b5e9d54ef72008c3aea6be79ef6e9f310bf86422/krotov-0.4.1.tar.gz" } ] }