{ "info": { "author": "Don Gavel", "author_email": "donald.gavel@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Information Technology", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Operating System :: Unix", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Physics" ], "description": "Quantum Spin\n============\n\nThis is a little package that will help with learning how quantum spin and entanglement work.\nIt is meant to complement some of the \"theoretical minimum\" lectures and other web resources:\n\n[\n`Quantum state `_; \n`Pauli matrices `_;\n`Singlet state `_;\n`Triplet state `_;\n`Density matrix `_;\n`Quantum entanglement `_;\n`Entropy `_;\n`Quantum logic gate `_\n]\n\n- Book: **Quantum Mechanics - The Theoretical Minimum**, Leanoard Susskind and Art Friedman, Basic Books, 2014. (mostly chapters 6&7)\n- http://theoreticalminimum.com/courses/quantum-mechanics/2012/winter/lecture-6 and lecture-7\n\n`Link to documentation on readthedocs `_\n\n**Install**\n------------\n\n.. code:: bash\n\n pip install --upgrade qspin\n\n**Out-of-the box tests:**\n--------------------------\n.. code:: python\n\n $ python\n >>> import qspin\n >>> qspin.all_tests()\n\nExamples of code use\n--------------------\n\n**Spin states**\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nup, down and linear combinations to form mixed states\n\n.. code:: python\n\n >>> from qspin import bra,ket,u,d,s0,sx,sy,sz\n >>> u\n |u> \n >>> d\n |d> \n >>> u + d\n |u> + |d>\n >>> i = 1j\n >>> u + i*d\n |u> + i |d> \n\n**Operators**\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: python\n\n >>> sx # Pauli spin matrix\n [[0 1]\n [1 0]]\n >>> sy\n [[ 0.+0.j -0.-1.j]\n [ 0.+1.j 0.+0.j]]\n >>> sz\n [[ 1 0]\n [ 0 -1]]\n >>> sz*u\n |u>\n >>> sz*d\n - |d>\n\n**Expected value of an observable**\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nsz is the observable for z-component of spin, For the \"up\" state, the only\noutcome us +1, so the expected value is +1.\n\n.. code:: python\n\n >> u.H*sz*u\n 1.0\n >> sz.average(u) # another way to compute the average of an observable\n 1.0\n\n(`q.H` is Hermetian conjugate; it converts a ket to a bra, as in :math:`\\Braket{u|s_z|u}`).\nThe operator (sz in this case) is known in quantum mechanics as an observable,\nmeaning it measures something. Here it is the z-component of spin.\nThe eigenvalues of the observable are the possible outcomes the observation.\nUnderlying each state is a wave function. We store the wave function internally\nas vector, with each component being the wave function value for the basis eigenstate.\nThe operators (observables) are stored as matrices, also defined on the same basis.\nThe assumed basis throughout qspin is :math:`\\Ket{u}` and :math:`\\Ket{d}` for single particles.\n\n.. code:: python\n\n >>> u\n |u> \n >>> u.phi\n matrix([[ 1.],\n [ 0.]])\n\n**Eigenvalues**\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWe can evaluate the eigenvalues and eigenvectors of observables. \".matrix\" pulls out the matrix\nrepresentation of the operator.\n\n.. code:: python\n\n >>> import numpy as np\n >>> sz\n [[ 1 0]\n [ 0 -1]]\n >>> ev, evec = np.linalg.eig(sz.matrix)\n >>> ev\n array([ 1., -1.])\n >>> evec\n matrix([[ 1., 0.],\n [ 0., 1.]])\n >>> sx # spin x\n [[0 1]\n [1 0]]\n >>> ev, evec = np.linalg.eig(sx.matrix)\n >>> ev\n array([ 1., -1.])\n >>> evec\n matrix([[ 0.70710678, -0.70710678],\n [ 0.70710678, 0.70710678]])\n\nThere is a handy 'eig' method that produces a list of eigenvalues and a\nlist of eigenvectors, with the eigenvectors being states:\n\n.. code:: python\n\n >>> ev, evec = sx.eig()\n >>> ev\n array([1.,=1.])\n >>> evec\n [0.707107 |u> + 0.707107 |d> , -0.707107 |u> + 0.707107 |d> ]\n >>> sz.eig()\n (array([ 1., -1.]), [|u> , |d> ])\n\nNote that the spin-x observerable has the same eigenvalues as spin-z, +1 and -1. But the eigenvectors\nare different, in our basis, since we are using the {:math:`\\Ket{u}`, :math:`\\Ket{d}`} basis. They are\n:math:`(\\Ket{u} + \\Ket{d})/\\sqrt{2}`, which measures as sx = +1, and\n:math:`(\\Ket{u} - \\Ket{d})/\\sqrt{2}`, which measures as sx = -1.\n\n**Conditional Probabilities**\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nConditional probabilities are calculated using inner products of states with the\neigenvectors of the measurment, squared. So the probability\nof measuring sx = +1 given the particle is prepared in state :math:`\\Ket{u}` is:\n\n.. code:: python\n\n >>> l = (u+d).N # \"left\" state. The .N normalizes the state\n >>> (bra(l)*ket(u))**2 # expected value of up given left\n 0.5\n >>> np.abs( l.H * u )**2 # another way to do this. The .H means Hermetian conjugate; converts ket to bra\n 0.5\n >>> l.prob(sx,l)\n 1.0\n >>> l.prob(sx,u)\n 0.5\n\n\n**Measurement**\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe quantum measurement of an observable involves 'collapsing' the state\nto one of the eigen states of the obserable.\n\n.. code:: python\n\n >>> l = (u+d).N\n >>> sz.measure(l)\n (1.0, |u>)\n\nThe result is random, either up or down\n(with 50-50 probability in this case where the particle starts out in state 'spin left').\nThe measure function returns the value of the measurment, 1.0 in this case,\nand the collapsed state, :math:`\\Ket{u}`.\n\n**String Representation of State**\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWe can use strings to refer to basis states.\n\n.. code:: python\n\n >>> u = ket('|u>') # or ket('u') (the vert line and bracket are optional)\n >>> d = ket('|d>') # or ket('d')\n >>> u\n |u>\n >>> d\n |d>\n\nThe string representation of basis functions defaults to 'u' and 'd'. As\nan alternative, the representation can be set to\n'0' and '1' or to up and down arrows (the later require your\nterminal to have the ability to display unicode characters).\n\n.. code:: python\n\n >>> qspin.set_base_repr('01')\n >>> u = ket('0')\n >>> d = ket('1')\n >>> (u + d).N\n 0.707107 |0> + 0.707107 |1>\n\nWith :code:`qspin.set_base_repr('arrow')`, :code:`u=ket([1,0])` renders as :math:`\\Ket{\\uparrow}`\nThis provides cute printout, but is not too useful for string entry, since the up and\ndown arrows are unicode.\n\n**Wave Function Definition**\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nStates can also be defined using the wave function, given\nin the form of a matrix column vector. And it is good practice\nto normalize states.\n\n.. code:: python\n\n >>> w = ket( np.matrix([1.,1.]).T).N\n >>> w\n 0.707106781187 |u> + 0.707106781187 |d> \n\n\nForm a projection operator from outer products of basis states.\n\n.. code:: python\n\n >> rho = ket('|u>') * bra('') * bra('> # can also do this:\n >> u = ket('|u>'); d = ket('|d>');\n >> rho = ket(u) * bra(u) + ket(d) * bra(d)\n >>> rho\n [[ 1. 0.]\n [ 0. 1.]]\n >>> u\n 1.0 |u> \n >>> rho*u\n 1.0 |u> \n >>> rho*d\n 1.0 |d> \n\nNote that bra(ket(...)) and ket(bra(...)) convert, and takes care of the complex-conjugating.\n\n.. code:: python\n\n >> u.kind\n 'ket'\n >> bra(u).kind\n 'bra'\n\n**Density Matrix and Entropy**\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nCreate a density matrix for an ensemble of single particles.\n\n.. code:: python\n\n >> from qspin import entropy\n >> P = [0.5, 0.5]\n >> rho = P[0] * bra('|u>').density() + P[1] * bra('|d>').density() # make sure the probabilities add to one\n >> entropy(rho) # it's not zero because there is a mixture of states\n 0.69314718055994529\n >> rho = ( bra('|u>') + bra('|d>') ).N.density()\n >> entropy(rho) # this is zero because all electrons are prepared in the \"u+d\" state\n 0\n\nMake sure you normalize any states you define, using the post-operation .N.\n\nThe von Neumann **entropy** is\n:math:`S = -\\sum_i(p_i log(p_i))` where :math:`p_i` are the density matrix eigenvalues.\nThe entropy is essentially the randomness in a measurement of the quantum state. It\ncan be applied to any density matrix for either pure or mixed states. (A\npure state has zero entropy.)\n\n**Multi-particle States**\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMulti-particle states are in the space formed from the Kronecker product of Hilbert spaces\nof the individual particles. Since multi-particle quantum states can be mixed states, there\nare far more possible state vectors (:math:`2^n` dimensional vector space) than for classical\nsystems (which are in only :math:`n` dimensional space)\n\nWe build up multi-particle states with Kronecker products '**' (meaning :math:`\\otimes`), or with strings\n\n.. code:: python\n\n >>> uu = u**u\n >>> dd = ket('|dd>') # or ket('dd')\n >>> s = (d**u**u + u**d**u + d**d**u).N\n >>> s\n 0.57735 |udu> + 0.57735 |duu> + 0.57735 |ddu> \n\nMulti-particle operators are similarly built up with Kronecker products\n\n.. code:: python\n\n >>> s2x = sx**sx\n >>> s2x\n [[0 0 0 1]\n [0 0 1 0]\n [0 1 0 0]\n [1 0 0 0]\n\n**Partial Trace**\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe density matrix for a multi-particle state is :math:`2^n \\times 2^n`. A partial\ntrace is a way to form the density matrix for a subset of the particles. 'Tracing out'\n:math:`m` of the particles results in a :math:`2^{n-m} \\times 2^{n-m}` density matrix.\nPartial traces are important in many aspects of analyzing the multi-particle state,\nincluding evaluating the entanglement.\n\n.. code:: python\n\n >>> sing = (u**d - d**u).N\n >>> rho = sing.density()\n >>> rho\n matrix([[ 0. , 0. , 0. , 0. ],\n [ 0. , 0.5, -0.5, 0. ],\n [ 0. , -0.5, 0.5, 0. ],\n [ 0. , 0. , 0. , 0. ]])\n >>> rhoA = ptrace(rho,[1]) # trace over particle 1 ('Bob') to get particle 0 ('Alice') density\n >>> rhoA\n matrix([[0.5, 0. ],\n [0. , 0.5]])\n\n**Entangled States**\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nOnce you have created a (possibly) entangled state of two particles, you can test it for entanglement:\n\n.. code:: python\n\n >>> sing = (u**d - d**u).N\n >>> sing.entangled()\n True\n >>> (u**u).entangled()\n False\n\nThe test for entanglement is to check the entropy of one of the particles after\nthe other particle has been 'traced out.'\n\nQuantum Computing\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nSeveral quantum logic gates are now defined in qspin including:\nHadamard, NOT, SWAP, controlled gates, square root gates, and phase shift gates.\n\n.. code:: python\n\n >>> from qspin import u,d,gate\n >>> SWAP = gate('SWAP')\n >>> SWAP*(u**d)\n |du>\n >>> H = gate('Hadamard')\n >>> H*u\n 0.707 |u> + 0.707 |d> \n >>> H*d\n 0.707 |u> - 0.707 |d>\n\nshows that SWAP interchanges the q-bits, and Hadamard makes the Bell states\nfrom spin up and spin down.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://bitbucket.org/donald_gavel/qspin/downloads", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/donald_gavel/qspin", "keywords": "quantum,spin,electron,qubit,quantum computing,entanglement,entropy", "license": "", "maintainer": "", "maintainer_email": "", "name": "qspin", "package_url": "https://pypi.org/project/qspin/", "platform": "", "project_url": "https://pypi.org/project/qspin/", "project_urls": { "Download": "https://bitbucket.org/donald_gavel/qspin/downloads", "Homepage": "https://bitbucket.org/donald_gavel/qspin" }, "release_url": "https://pypi.org/project/qspin/2.3.2/", "requires_dist": [ "numpy", "scipy" ], "requires_python": "", "summary": "Learn quantum spin, entanglement, and quantum computer operations", "version": "2.3.2" }, "last_serial": 4951249, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "a2a2f479ec24e9cc69d4c5859bcebebc", "sha256": "8666be1a5dd732a6f2da0ae92c3e7333e5c1a572dee4f3323edb95f27b1f9e20" }, "downloads": -1, "filename": "qspin-0.1.tar.gz", "has_sig": false, "md5_digest": "a2a2f479ec24e9cc69d4c5859bcebebc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5121, "upload_time": "2016-08-22T02:22:23", "url": "https://files.pythonhosted.org/packages/58/d2/6323c69b480d4646ef0d66be823a7dd0672c929f4198b2aa128cd6c68314/qspin-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0ce440fd867b8e09fa17c288cdfec11b", "sha256": "28f0ab4fab1df44fbe892b2700f0d7eed2c29b89431eef772686f82c38c52c3c" }, "downloads": -1, "filename": "qspin-0.1.1.tar.gz", "has_sig": false, "md5_digest": "0ce440fd867b8e09fa17c288cdfec11b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5179, "upload_time": "2016-08-22T04:17:36", "url": "https://files.pythonhosted.org/packages/d2/35/5331fc4115679dd0ca2531d08467aac84f9d07a82ff90aa4dea420e62c52/qspin-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "cd83063dbf554a02168afae21a6daaa4", "sha256": "84ab60d8fd5106885a34d020c25e040e4bc942a2bd4a18bde2c9edd6173fb2fc" }, "downloads": -1, "filename": "qspin-0.1.2.tar.gz", "has_sig": false, "md5_digest": "cd83063dbf554a02168afae21a6daaa4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5187, "upload_time": "2016-08-24T01:40:10", "url": "https://files.pythonhosted.org/packages/bc/7a/65610aca89521b54e581947d4d6c6dc6b3c3e03924505c1e9e7e9b1dd85b/qspin-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "59cd41f264220e1d1db88eb4247fab0d", "sha256": "7222f2eede7e124ca9643ef63bb67d94d391d4586782d5c5b2e5a8b00872e8a4" }, "downloads": -1, "filename": "qspin-0.1.3.tar.gz", "has_sig": false, "md5_digest": "59cd41f264220e1d1db88eb4247fab0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5659, "upload_time": "2016-09-10T22:15:34", "url": "https://files.pythonhosted.org/packages/78/d5/2eb59a13a1bd8cd6457699251abf323d3ed9788e48193c9cdfd2b9cf0ad9/qspin-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "fd99abbb36090eeca470140b18c4bbfe", "sha256": "b6f230f92a16f0b58adf63fe1dc2d0dd52726679d335dc3c6f8d8c55e1a75e2d" }, "downloads": -1, "filename": "qspin-0.1.4.tar.gz", "has_sig": false, "md5_digest": "fd99abbb36090eeca470140b18c4bbfe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8441, "upload_time": "2017-08-05T22:30:19", "url": "https://files.pythonhosted.org/packages/ef/d3/8660f020be115b782e21634dbc37ae51bf1f6c5afbdfca447836aa6d3503/qspin-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "3c0b087e0819fc3283b049735c2d2b2e", "sha256": "7bacc7ab54b5536b0e22dd573d2be5980a2ed1508cf46f07fbd7101571b62fa5" }, "downloads": -1, "filename": "qspin-0.1.5.tar.gz", "has_sig": false, "md5_digest": "3c0b087e0819fc3283b049735c2d2b2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3540, "upload_time": "2017-08-06T04:31:34", "url": "https://files.pythonhosted.org/packages/7f/4d/dd21c9b8207b3612893be9acaf5617deaf8a1e3e29b4b8f0875f128cb831/qspin-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "ab26d172888d08ff4b66f33d0b6808eb", "sha256": "f6685b8fadc7d90d520d21ad4e2d125ff4417b7b940164a6e1519f098a8d9a66" }, "downloads": -1, "filename": "qspin-0.1.6.tar.gz", "has_sig": false, "md5_digest": "ab26d172888d08ff4b66f33d0b6808eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3559, "upload_time": "2017-08-06T05:33:54", "url": "https://files.pythonhosted.org/packages/f3/16/5e95ae1fbee2285e51578b8a2f863138816205a0e58814dadc37bb185118/qspin-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "c40fe317bed827c25434a8e237e5a75f", "sha256": "78fddb0cdf5611940bc3fbedc70a63e3c90c2bc6506ccf859157fbd886ef8e48" }, "downloads": -1, "filename": "qspin-0.1.7.tar.gz", "has_sig": false, "md5_digest": "c40fe317bed827c25434a8e237e5a75f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3555, "upload_time": "2017-08-06T05:46:38", "url": "https://files.pythonhosted.org/packages/c5/31/076a64351c0435a4d3ec3cb7fcc2296c2b1612f1e717d98d3ecc6b8771c3/qspin-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "66587b81f9e52d1fe3d2b41c4aeeff54", "sha256": "541b0549dc798bdfcbb82b139514441dc9d07905f407585dc074c244152d9b7c" }, "downloads": -1, "filename": "qspin-0.1.8-py2-none-any.whl", "has_sig": false, "md5_digest": "66587b81f9e52d1fe3d2b41c4aeeff54", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8247, "upload_time": "2017-08-10T03:20:07", "url": "https://files.pythonhosted.org/packages/99/27/4dc71e43a5a0c02fd82d88b66a666f9803b62a838e9337762f820b174a15/qspin-0.1.8-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b890161a3b28361f8f32e93bfeaf332", "sha256": "2612f70338c0138d3e4d4aaa38f313584b6c5d09faacf6de52875ba26910f5f3" }, "downloads": -1, "filename": "qspin-0.1.8.tar.gz", "has_sig": false, "md5_digest": "0b890161a3b28361f8f32e93bfeaf332", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9312, "upload_time": "2017-08-10T02:49:49", "url": "https://files.pythonhosted.org/packages/9c/37/49a65d017447739e21a74c64872479a8f7fbc68a5209fb8508d42f348381/qspin-0.1.8.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "cd6153888aec4a1c1fd31eecb3278b3c", "sha256": "055311f1ff1ee4d031310f841d6464445666b4086bb874e8ee5c63e63818356a" }, "downloads": -1, "filename": "qspin-2.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "cd6153888aec4a1c1fd31eecb3278b3c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14567, "upload_time": "2018-04-28T00:11:13", "url": "https://files.pythonhosted.org/packages/82/04/59b85ffad79104dccc471224e97a5ea345be62e08d736151dc18fad0fc00/qspin-2.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4c4cb1f59ae904b03c1b13cca28b6946", "sha256": "9e9911bdca988c6ca20273459078fd61463bc7c622e3720de6e4c76b347c4e0a" }, "downloads": -1, "filename": "qspin-2.1.0.tar.gz", "has_sig": false, "md5_digest": "4c4cb1f59ae904b03c1b13cca28b6946", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18431, "upload_time": "2018-04-28T00:10:50", "url": "https://files.pythonhosted.org/packages/a0/94/946d8151e1e9d36564d0babb6f1371f007abd29e8275345c6866f75249e5/qspin-2.1.0.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "82c6f9264f066372bdf60e5667567202", "sha256": "c6ecab1c1c121ce84a83d71ec4ed207943a196254ed01d9d968efdaa319a2098" }, "downloads": -1, "filename": "qspin-2.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "82c6f9264f066372bdf60e5667567202", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 22846, "upload_time": "2018-05-04T23:53:18", "url": "https://files.pythonhosted.org/packages/18/7c/cba7a71c5bc3509899f8ca6cb10529024592810107b51d6a37d861ea3d33/qspin-2.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b2dc2389a8cbf1a1ce9580d414f396c5", "sha256": "8d0b2d58099c7aaaeb2db0ed754d79643fe676982fcf7900380aa619121ee3ed" }, "downloads": -1, "filename": "qspin-2.2.0.tar.gz", "has_sig": false, "md5_digest": "b2dc2389a8cbf1a1ce9580d414f396c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22229, "upload_time": "2018-05-04T23:53:21", "url": "https://files.pythonhosted.org/packages/d2/13/3dd59f69e183bcb1dd894d28312cca27fed5796881d461ab99d56834c668/qspin-2.2.0.tar.gz" } ], "2.3.1": [ { "comment_text": "", "digests": { "md5": "c627867cfae49311e8b3f46a7dd844cb", "sha256": "b5eeebe4472979f6ab1991f4340a7f3b0005c65f1a3e35f31893f3b98f5fb0aa" }, "downloads": -1, "filename": "qspin-2.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c627867cfae49311e8b3f46a7dd844cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19012, "upload_time": "2019-03-17T18:49:52", "url": "https://files.pythonhosted.org/packages/71/d8/7f0831122ea325ce84ae96ec0dac0bad7ee2669246b7e4a47e8709680b92/qspin-2.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c71bffcbefc1b06658b547899848a0e6", "sha256": "0e8fa2efd4960e464a3e6ec783280a579418f446817a4cdc13331b53ab786214" }, "downloads": -1, "filename": "qspin-2.3.1.tar.gz", "has_sig": false, "md5_digest": "c71bffcbefc1b06658b547899848a0e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22435, "upload_time": "2019-03-17T18:49:53", "url": "https://files.pythonhosted.org/packages/24/0d/46cdd808d90a9d180171a37244a322b455db182e4e530130dd15adc4cb91/qspin-2.3.1.tar.gz" } ], "2.3.2": [ { "comment_text": "", "digests": { "md5": "86c7b2a730b9a1660eb67996445f9083", "sha256": "104905ad72d3c6af950aad6b0db1bf2756e3aa84d7685c4456a5253972b1ba59" }, "downloads": -1, "filename": "qspin-2.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "86c7b2a730b9a1660eb67996445f9083", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19127, "upload_time": "2019-03-17T19:53:56", "url": "https://files.pythonhosted.org/packages/62/ca/386faedbde66183763247abfb9bbd5537394f12ee70136cf619a501dd2d5/qspin-2.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "037e3a696488f14d1cbe4579b8c743e0", "sha256": "e2147fcb91c0528bcf0fb1e7628f4c8423bc34031cd5f9900776f12db9846eaa" }, "downloads": -1, "filename": "qspin-2.3.2.tar.gz", "has_sig": false, "md5_digest": "037e3a696488f14d1cbe4579b8c743e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22519, "upload_time": "2019-03-17T19:53:57", "url": "https://files.pythonhosted.org/packages/55/79/f1f510ac067e236ea6034df379cc4774cdeec8196390e11c47687912783e/qspin-2.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "86c7b2a730b9a1660eb67996445f9083", "sha256": "104905ad72d3c6af950aad6b0db1bf2756e3aa84d7685c4456a5253972b1ba59" }, "downloads": -1, "filename": "qspin-2.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "86c7b2a730b9a1660eb67996445f9083", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19127, "upload_time": "2019-03-17T19:53:56", "url": "https://files.pythonhosted.org/packages/62/ca/386faedbde66183763247abfb9bbd5537394f12ee70136cf619a501dd2d5/qspin-2.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "037e3a696488f14d1cbe4579b8c743e0", "sha256": "e2147fcb91c0528bcf0fb1e7628f4c8423bc34031cd5f9900776f12db9846eaa" }, "downloads": -1, "filename": "qspin-2.3.2.tar.gz", "has_sig": false, "md5_digest": "037e3a696488f14d1cbe4579b8c743e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22519, "upload_time": "2019-03-17T19:53:57", "url": "https://files.pythonhosted.org/packages/55/79/f1f510ac067e236ea6034df379cc4774cdeec8196390e11c47687912783e/qspin-2.3.2.tar.gz" } ] }