{ "info": { "author": "Talley Lambert", "author_email": "talley.lambert@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# PSFmodels-py\n\nPython bindings for scalar and vectorial models of the point spread function.\n\nOriginal C++ code and MATLAB MEX bindings Copyright © 2006-2013, [Francois Aguet](http://www.francoisaguet.net/software.html), distributed under GPL-3.0 license.\nPython bindings by Talley Lambert\n\nThe model is described in Auget et al 20091. For more information and implementation details, see Francois' Thesis2.\n\n1 [F. Aguet et al., (2009) Opt. Express 17(8), pp. 6829-6848](https://doi.org/10.1364/OE.17.006829)\n\n2 [F. Aguet. (2009) Super-Resolution Fluorescence Microscopy Based on Physical Models. Swiss Federal Institute of Technology Lausanne, EPFL Thesis no. 4418](http://bigwww.epfl.ch/publications/aguet0903.html)\n\n### see also:\n\nFor a different (faster) scalar-based Gibson\u2013Lanni PSF model, see the [MicroscPSF](https://github.com/MicroscPSF) project, based on [Li et al (2017)](https://doi.org/10.1364/JOSAA.34.001029) which has been implemented in [Python](https://github.com/MicroscPSF/MicroscPSF-Py), [MATLAB](https://github.com/MicroscPSF/MicroscPSF-Matlab), and [ImageJ/Java](https://github.com/MicroscPSF/MicroscPSF-ImageJ)\n\n## Install\n\nPrebuilt binaries available on pypi for OS X and Windows, sdist available for linux\n\n```\npip install psfmodels\n```\n\n### from source\n\n(requires cmake and a c++ compiler)\n\n```\ngit clone --recurse-submodules https://github.com/tlambert03/PSFmodels-py.git\ncd PSFmodels-py\npython setup.py install\n# or python setup.py build to just build but not install\n```\n\n## Usage\n\nThere are two main functions in `psfmodels`: `vectorial_psf` and `scalar_psf`. Additionally, each version has a helper function called `vectorial_psf_centered` and `scalar_psf_centered` respectively. The main difference is that the `_psf` functions accept a vector of Z positions `zv` (relative to coverslip) at which PSF is calculated. As such, the point source may or may not actually be in the center of the rendered volume. The `_psf_centered` variants, by contrast, do _not_ accecpt `zv`, but rather accept `nz` (the number of z planes) and `dz` (the z step size in microns), and always generates an output volume in which the point source is positioned in the middle of the Z range, with planes equidistant from each other. All functions accept an argument `pz`, specifying the position of the point source relative to the coverslip. See additional keyword arguments below\n\n_Note, all output dimensions (`nx` and `nz`) should be odd._\n\n```python\nimport psfmodels as psfm\nimport matplotlib.pyplot as plt\nfrom matplotlib.colors import PowerNorm\n\n# generate centered psf with a point source at `pz` from coverslip\nnx = 127\nnz = nx\ndxy = 0.05\npsf = psfm.vectorial_psf_centered(nz=nz, nx=nx, dxy=dxy, dz=dxy, pz=0)\nfig, (ax1, ax2) = plt.subplots(1, 2)\nax1.imshow(psf[nz//2], norm=PowerNorm(gamma=0.4))\nax2.imshow(psf[:, nx//2], norm=PowerNorm(gamma=0.4))\nplt.show()\n```\n\n![Image of PSF](fig.png)\n\n```python\n# instead of nz and dz, you can directly specify a vector of z positions\nimport numpy as np\n\n# generate 31 evenly spaced Z positions from -3 to 3 microns\nzv = np.linspace(-3, 3, 31)\npsf = psfm.vectorial_psf(zv, nx=127)\npsf.shape # (31, 127, 127)\n```\n\n**all** PSF functions accept the following parameters. In general, units should be provided in microns. Python API may change slightly in the future. See function docstrings as well.\n\n```\nnx (int): XY size of output PSF in pixels, must be odd.\ndxy (float): pixel size in sample space (microns) [default: 0.05]\npz (float): depth of point source relative to coverslip (in microns) [default: 0]\nti0 (float): working distance of the objective (microns) [default: 1.515]\nni0 (float): immersion medium refractive index, design value [default: 1.515]\nni (float): immersion medium refractive index, experimental value [default: 1.515]\ntg0 (float): coverslip thickness, design value (microns) [default: 170]\ntg (float): coverslip thickness, experimental value (microns) [default: 170]\nng0 (float): coverslip refractive index, design value [default: 1.515]\nng (float): coverslip refractive index, experimental value [default: 1.515]\nns (float): sample refractive index [default: 1.47]\nwvl (float): emission wavelength (microns) [default: 0.6]\nNA (float): numerical aperture [default: 1.4]\nsf (int): oversampling factor to approximate pixel integration [default: 3]\nmode (int): if 0, returns oversampled PSF [default: 1]\n```\n\n## Comparison with other models\n\nWhile these models are definitely slower than the one implemented in [Li et al (2017)](https://doi.org/10.1364/JOSAA.34.001029) and [MicroscPSF](https://github.com/MicroscPSF), there are some interesting differences between the scalar and vectorial approximations, particularly with higher NA lenses, non-ideal sample refractive index, and increasing spherical aberration with depth from the coverslip.\n\nFor an interactive comparison, see the [examples.ipynb](examples.ipynb) Jupyter notebook.\n\n## Lightsheet PSF utility function\n\nThe `psfmodels.tot_psf()` function provides a quick way to simulate the total system PSF (excitation x detection) as might be observed on a light sheet microscope (currently, only strictly orthogonal illumination and detection are supported). See the [lightsheet.ipynb](lightsheet.ipynb) Jupyter notebook for examples.", "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/tlambert03/PSFmodels-py", "keywords": "", "license": "GPL-3.0", "maintainer": "", "maintainer_email": "", "name": "psfmodels", "package_url": "https://pypi.org/project/psfmodels/", "platform": "", "project_url": "https://pypi.org/project/psfmodels/", "project_urls": { "Homepage": "https://github.com/tlambert03/PSFmodels-py" }, "release_url": "https://pypi.org/project/psfmodels/0.2.0/", "requires_dist": null, "requires_python": "", "summary": "Scalar and vectorial models of the microscope point spread function (PSF).", "version": "0.2.0" }, "last_serial": 5838287, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "9a46a21bbf2aafc763d5c35aa92ed954", "sha256": "fcece92e3dabde90b3abae0e7529e44ca3ec7d1cbbc1b67968bef9408ec288a3" }, "downloads": -1, "filename": "psfmodels-0.1.0-cp27-cp27m-macosx_10_6_x86_64.whl", "has_sig": false, "md5_digest": "9a46a21bbf2aafc763d5c35aa92ed954", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 85317, "upload_time": "2019-09-15T18:38:17", "url": "https://files.pythonhosted.org/packages/38/6c/57f49efae391630cb9b9a1a1d2d3c1f919c3f6f1316e77b1c9c8d39d4d9e/psfmodels-0.1.0-cp27-cp27m-macosx_10_6_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "9ffd2364b9e5a84c16016f716756faa3", "sha256": "658aa3f20c2fb2d1814b7274643a86f0e0cf63c6c009f21dfdbfd8528c7178db" }, "downloads": -1, "filename": "psfmodels-0.1.0-cp35-cp35m-macosx_10_9_x86_64.whl", "has_sig": false, "md5_digest": "9ffd2364b9e5a84c16016f716756faa3", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 85088, "upload_time": "2019-09-15T18:38:08", "url": "https://files.pythonhosted.org/packages/4c/99/202d1e39b764b7c691cf1793a13b30d8ec1ecc91522795abd04856309cfc/psfmodels-0.1.0-cp35-cp35m-macosx_10_9_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "22f623ea147c09e84b310e903338e255", "sha256": "bbbf7207dd2d88ba7605982038d04c447874ef51e10737b20b373067dc0cd8d2" }, "downloads": -1, "filename": "psfmodels-0.1.0-cp35-cp35m-win_amd64.whl", "has_sig": false, "md5_digest": "22f623ea147c09e84b310e903338e255", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 83062, "upload_time": "2019-09-15T18:35:55", "url": "https://files.pythonhosted.org/packages/e0/ed/e4cfcfd550a897824ed9254626a2e8474fa0857a6a810ab4ac4750965196/psfmodels-0.1.0-cp35-cp35m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "895b45d209d41149e5848a965a188acf", "sha256": "e2f50e899c6e4aec252d6f457f98d947f3ad514a39e4e76ad2f0008b7ff918c0" }, "downloads": -1, "filename": "psfmodels-0.1.0-cp36-cp36m-macosx_10_7_x86_64.whl", "has_sig": false, "md5_digest": "895b45d209d41149e5848a965a188acf", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 85086, "upload_time": "2019-09-15T18:38:19", "url": "https://files.pythonhosted.org/packages/79/66/4232f69ea7d18566f70e64b2ba85dbfb9d60cfb39137ad5332c5fc3351b3/psfmodels-0.1.0-cp36-cp36m-macosx_10_7_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "ddb031d7a1c08a23ec2dd52c458427eb", "sha256": "cfb4250316206993db10b40b65672b900c344dd437a0e64e704a2046a85e9add" }, "downloads": -1, "filename": "psfmodels-0.1.0-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "ddb031d7a1c08a23ec2dd52c458427eb", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 83057, "upload_time": "2019-09-15T18:37:30", "url": "https://files.pythonhosted.org/packages/89/db/35a317d499a97f73e367ba388226c2d4919eaeecdfd4da12d5f7182d336c/psfmodels-0.1.0-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "1621cbe837e0c0b1537d1c2319c93f75", "sha256": "48507079967b3251d6cca36868210448d3073fe6ea906dabb66fa94f168482dd" }, "downloads": -1, "filename": "psfmodels-0.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", "has_sig": false, "md5_digest": "1621cbe837e0c0b1537d1c2319c93f75", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 85012, "upload_time": "2019-09-15T18:38:10", "url": "https://files.pythonhosted.org/packages/0e/a0/46df88ef4835450e075805256b691f3b7d106eca187c756f452aa016f492/psfmodels-0.1.0-cp37-cp37m-macosx_10_9_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "31119a47389035985dc220285a1baa2b", "sha256": "e8c31082c685e53caea0dc9d8f1190c5b4a735c0879f7199a32c8e805cf063c4" }, "downloads": -1, "filename": "psfmodels-0.1.0-cp37-cp37m-win_amd64.whl", "has_sig": false, "md5_digest": "31119a47389035985dc220285a1baa2b", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 83053, "upload_time": "2019-09-15T18:39:04", "url": "https://files.pythonhosted.org/packages/1b/3b/1fef0cceff331bea1bd4f25b6751c1821006857dc71beba58de0aa64004f/psfmodels-0.1.0-cp37-cp37m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "fcac082be7ba9f47c64686471fdd5cfc", "sha256": "e2786b5218978317f73001ea987d2d3ff398115a402426ef4a1c1d41c3d9e870" }, "downloads": -1, "filename": "psfmodels-0.1.0.tar.gz", "has_sig": false, "md5_digest": "fcac082be7ba9f47c64686471fdd5cfc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162985, "upload_time": "2019-09-15T18:36:13", "url": "https://files.pythonhosted.org/packages/14/3b/a4a64c858fec5c32036caf469dbdc884fe35381a14f757ae53a7e976a019/psfmodels-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ac8ac6d60757bc22a33be01152813420", "sha256": "c2281c2b8ceaf385585967017ca2542b69bdf284589e5987ece9fabbf179a4c6" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp27-cp27m-macosx_10_6_x86_64.whl", "has_sig": false, "md5_digest": "ac8ac6d60757bc22a33be01152813420", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 86641, "upload_time": "2019-09-16T21:17:33", "url": "https://files.pythonhosted.org/packages/1a/bf/f847aa12cf844ded03a51e9b8aa43cb2240739f251a0ebd3fb5d96beb13f/psfmodels-0.2.0-cp27-cp27m-macosx_10_6_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "61b13077367112e0e4a814524621df9d", "sha256": "5a024e2b124d783efe3434e751e7bcccd2394eb6f472cd6cb2bc4f2cec927b23" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp35-cp35m-macosx_10_9_x86_64.whl", "has_sig": false, "md5_digest": "61b13077367112e0e4a814524621df9d", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 86409, "upload_time": "2019-09-16T21:17:04", "url": "https://files.pythonhosted.org/packages/a2/46/febbdcb9bfa7e5ce054129dbb66d95c5c9e19c08319dcf66615ef74486c0/psfmodels-0.2.0-cp35-cp35m-macosx_10_9_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "418dc3d9132e3313643ef27ff2d79d53", "sha256": "282b27e24dc975fe29766f159fee8a0c55536ed48043c9ee7d87acc19dcffee3" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp35-cp35m-win_amd64.whl", "has_sig": false, "md5_digest": "418dc3d9132e3313643ef27ff2d79d53", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 84385, "upload_time": "2019-09-16T21:19:53", "url": "https://files.pythonhosted.org/packages/27/18/c4356fe60c33ed3dc8bb877d4af2ece08b506b35c973258c62131803c29f/psfmodels-0.2.0-cp35-cp35m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "93325b215be1d9f8a8cb1d2e912cb48c", "sha256": "979c5405de2cf7c89f76f736386cf432d3ac380bc4fc11b321a59355aa65a59f" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp36-cp36m-macosx_10_7_x86_64.whl", "has_sig": false, "md5_digest": "93325b215be1d9f8a8cb1d2e912cb48c", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 86411, "upload_time": "2019-09-16T21:16:41", "url": "https://files.pythonhosted.org/packages/79/2f/e0f00a3ad5fcb1b38388bff392908333a86a8747eec465e7e3b486e06158/psfmodels-0.2.0-cp36-cp36m-macosx_10_7_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "26ec8d9c19bb6f818ab23938ed9294e7", "sha256": "ae0159178cf11f7f167f7ba1c5241edbf2067f4230f1f105763bb5893f310d9f" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "26ec8d9c19bb6f818ab23938ed9294e7", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 84380, "upload_time": "2019-09-16T21:21:46", "url": "https://files.pythonhosted.org/packages/e3/c5/e01563e019644568c9f991bbc65625496a3080fffeb941aad67159bcd4b8/psfmodels-0.2.0-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "bb147cbc78e726fa2d784d7567ccdfd2", "sha256": "e97d96224057d2c6a7265471ef140a388fb7c8d70b57b2114db73c27c2dfb3fe" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", "has_sig": false, "md5_digest": "bb147cbc78e726fa2d784d7567ccdfd2", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 86334, "upload_time": "2019-09-16T21:18:24", "url": "https://files.pythonhosted.org/packages/6d/94/73cda46babaa47af15ed8bdf1046ab60258f810b65c8c4782206ac9f3552/psfmodels-0.2.0-cp37-cp37m-macosx_10_9_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "8aee12ba9f9a4aa74f64b08cab70f913", "sha256": "c2cc28b9eaacf02b2290a76eb9a4c218925510c2f41b7459f145b4193e2f78e1" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp37-cp37m-win_amd64.whl", "has_sig": false, "md5_digest": "8aee12ba9f9a4aa74f64b08cab70f913", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 84372, "upload_time": "2019-09-16T21:23:32", "url": "https://files.pythonhosted.org/packages/83/bf/6044f4385d99444c710981dac3967e3e5dcdda180562a174f3d228153f6b/psfmodels-0.2.0-cp37-cp37m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "3ebc26adba2481edc55d6a1e024d113b", "sha256": "9482ae47ef37e7d1305376885458becfa8536bd15d69de157930325a2b412885" }, "downloads": -1, "filename": "psfmodels-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3ebc26adba2481edc55d6a1e024d113b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 164291, "upload_time": "2019-09-16T21:14:57", "url": "https://files.pythonhosted.org/packages/d8/3b/0c82b3e25c27453ef453c476fd90cc1a6d2526a7e4f6c368563c06d0fc28/psfmodels-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ac8ac6d60757bc22a33be01152813420", "sha256": "c2281c2b8ceaf385585967017ca2542b69bdf284589e5987ece9fabbf179a4c6" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp27-cp27m-macosx_10_6_x86_64.whl", "has_sig": false, "md5_digest": "ac8ac6d60757bc22a33be01152813420", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 86641, "upload_time": "2019-09-16T21:17:33", "url": "https://files.pythonhosted.org/packages/1a/bf/f847aa12cf844ded03a51e9b8aa43cb2240739f251a0ebd3fb5d96beb13f/psfmodels-0.2.0-cp27-cp27m-macosx_10_6_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "61b13077367112e0e4a814524621df9d", "sha256": "5a024e2b124d783efe3434e751e7bcccd2394eb6f472cd6cb2bc4f2cec927b23" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp35-cp35m-macosx_10_9_x86_64.whl", "has_sig": false, "md5_digest": "61b13077367112e0e4a814524621df9d", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 86409, "upload_time": "2019-09-16T21:17:04", "url": "https://files.pythonhosted.org/packages/a2/46/febbdcb9bfa7e5ce054129dbb66d95c5c9e19c08319dcf66615ef74486c0/psfmodels-0.2.0-cp35-cp35m-macosx_10_9_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "418dc3d9132e3313643ef27ff2d79d53", "sha256": "282b27e24dc975fe29766f159fee8a0c55536ed48043c9ee7d87acc19dcffee3" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp35-cp35m-win_amd64.whl", "has_sig": false, "md5_digest": "418dc3d9132e3313643ef27ff2d79d53", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 84385, "upload_time": "2019-09-16T21:19:53", "url": "https://files.pythonhosted.org/packages/27/18/c4356fe60c33ed3dc8bb877d4af2ece08b506b35c973258c62131803c29f/psfmodels-0.2.0-cp35-cp35m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "93325b215be1d9f8a8cb1d2e912cb48c", "sha256": "979c5405de2cf7c89f76f736386cf432d3ac380bc4fc11b321a59355aa65a59f" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp36-cp36m-macosx_10_7_x86_64.whl", "has_sig": false, "md5_digest": "93325b215be1d9f8a8cb1d2e912cb48c", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 86411, "upload_time": "2019-09-16T21:16:41", "url": "https://files.pythonhosted.org/packages/79/2f/e0f00a3ad5fcb1b38388bff392908333a86a8747eec465e7e3b486e06158/psfmodels-0.2.0-cp36-cp36m-macosx_10_7_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "26ec8d9c19bb6f818ab23938ed9294e7", "sha256": "ae0159178cf11f7f167f7ba1c5241edbf2067f4230f1f105763bb5893f310d9f" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp36-cp36m-win_amd64.whl", "has_sig": false, "md5_digest": "26ec8d9c19bb6f818ab23938ed9294e7", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 84380, "upload_time": "2019-09-16T21:21:46", "url": "https://files.pythonhosted.org/packages/e3/c5/e01563e019644568c9f991bbc65625496a3080fffeb941aad67159bcd4b8/psfmodels-0.2.0-cp36-cp36m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "bb147cbc78e726fa2d784d7567ccdfd2", "sha256": "e97d96224057d2c6a7265471ef140a388fb7c8d70b57b2114db73c27c2dfb3fe" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", "has_sig": false, "md5_digest": "bb147cbc78e726fa2d784d7567ccdfd2", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 86334, "upload_time": "2019-09-16T21:18:24", "url": "https://files.pythonhosted.org/packages/6d/94/73cda46babaa47af15ed8bdf1046ab60258f810b65c8c4782206ac9f3552/psfmodels-0.2.0-cp37-cp37m-macosx_10_9_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "8aee12ba9f9a4aa74f64b08cab70f913", "sha256": "c2cc28b9eaacf02b2290a76eb9a4c218925510c2f41b7459f145b4193e2f78e1" }, "downloads": -1, "filename": "psfmodels-0.2.0-cp37-cp37m-win_amd64.whl", "has_sig": false, "md5_digest": "8aee12ba9f9a4aa74f64b08cab70f913", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 84372, "upload_time": "2019-09-16T21:23:32", "url": "https://files.pythonhosted.org/packages/83/bf/6044f4385d99444c710981dac3967e3e5dcdda180562a174f3d228153f6b/psfmodels-0.2.0-cp37-cp37m-win_amd64.whl" }, { "comment_text": "", "digests": { "md5": "3ebc26adba2481edc55d6a1e024d113b", "sha256": "9482ae47ef37e7d1305376885458becfa8536bd15d69de157930325a2b412885" }, "downloads": -1, "filename": "psfmodels-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3ebc26adba2481edc55d6a1e024d113b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 164291, "upload_time": "2019-09-16T21:14:57", "url": "https://files.pythonhosted.org/packages/d8/3b/0c82b3e25c27453ef453c476fd90cc1a6d2526a7e4f6c368563c06d0fc28/psfmodels-0.2.0.tar.gz" } ] }