ptufile


Nameptufile JSON
Version 2024.10.10 PyPI version JSON
download
home_pagehttps://www.cgohlke.com
SummaryRead PicoQuant PTU and related files
upload_time2024-10-11 04:52:43
maintainerNone
docs_urlNone
authorChristoph Gohlke
requires_python>=3.9
licenseBSD
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Read PicoQuant PTU and related files
====================================

Ptufile is a Python library to read image and metadata from PicoQuant PTU
and related files: PHU, PCK, PCO, PFS, PUS, and PQRES.
PTU files contain time correlated single photon counting (TCSPC)
measurement data and instrumentation parameters.

:Author: `Christoph Gohlke <https://www.cgohlke.com>`_
:License: BSD 3-Clause
:Version: 2024.10.10
:DOI: `10.5281/zenodo.10120021 <https://doi.org/10.5281/zenodo.10120021>`_

Quickstart
----------

Install the ptufile package and all dependencies from the
`Python Package Index <https://pypi.org/project/ptufile/>`_::

    python -m pip install -U "ptufile[all]"

See `Examples`_ for using the programming interface.

Source code and support are available on
`GitHub <https://github.com/cgohlke/ptufile>`_.

Requirements
------------

This revision was tested with the following requirements and dependencies
(other versions may work):

- `CPython <https://www.python.org>`_ 3.10.11, 3.11.9, 3.12.7, 3.13.0 64-bit
- `NumPy <https://pypi.org/project/numpy>`_ 2.1.2
- `Xarray <https://pypi.org/project/xarray>`_ 2024.9.0 (recommended)
- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.9.2 (optional)
- `Tifffile <https://pypi.org/project/tifffile/>`_ 2024.9.20 (optional)
- `Numcodecs <https://pypi.org/project/numcodecs/>`_ 0.13.1 (optional)
- `Cython <https://pypi.org/project/cython/>`_ 3.0.11 (build)

Revisions
---------

2024.10.10

- Also trim leading channels without photons (breaking).
- Add property to identify channels with photons.

2024.9.14

- Improve typing.

2024.7.13

- Detect point scans in image mode.
- Deprecate Python 3.9, support Python 3.13.

2024.5.24

- Fix docstring examples not correctly rendered on GitHub.

2024.4.24

- Build wheels with NumPy 2.

2024.2.20

- Change definition of PtuFile.frequency (breaking).
- Add option to specify number of bins returned by decode_histogram.
- Add option to return histograms of one period.

2024.2.15

- Add PtuFile.scanner property.
- Add numcodecs compatible PTU codec.

2024.2.8

- Support sinusoidal scanning correction.

2024.2.2

- Change positive dtime parameter from index to size (breaking).
- Fix segfault with ImgHdr_TimePerPixel = 0.
- Rename MultiHarp to Generic conforming with changes in PicoQuant reference.

2023.11.16

- Fix empty line when first record is start marker.

2023.11.13

- Change image histogram dimension order to TYXCH (breaking).
- Change frame start to start of first line in frame (breaking).
- Improve trimming of incomplete frames (breaking).
- Remove trim_dtime option (breaking).
- Fix selection handling in PtuFile.decode_image.
- Add option to trim T, C, and H axes of image histograms.
- Add option to decode histograms to memory-mapped or user-provided arrays.
- Add ``__getitem__`` interface to image histogram.

2023.11.1

- Initial alpha release.

Notes
-----

The `Chan Zuckerberg Initiative
<https://chanzuckerberg.com/eoss/proposals/phasorpy-a-python-library-for-phasor-analysis-of-flim-and-spectral-imaging>`_
financially supported the development of this library.

`PicoQuant GmbH <https://www.picoquant.com/>`_ is a manufacturer of photonic
components and instruments.

The PicoQuant unified file formats are documented at the
`PicoQuant-Time-Tagged-File-Format-Demos
<https://github.com/PicoQuant/PicoQuant-Time-Tagged-File-Format-Demos/tree/master/doc>`_.

The following features are currently not implemented: PT2 and PT3 files,
decoding images from T2 formats, bidirectional scanning, and deprecated
image reconstruction. Line-scanning is not tested.

Other Python or C/C++ modules for reading PicoQuant files are:

- `Read_PTU.py
  <https://github.com/PicoQuant/PicoQuant-Time-Tagged-File-Format-Demos/blob/master/PTU/Python/Read_PTU.py>`_
- `readPTU_FLIM <https://github.com/SumeetRohilla/readPTU_FLIM>`_
- `PyPTU <https://gitlab.inria.fr/jrye/pyptu>`_
- `FlimReader <https://github.com/flimfit/FlimReader>`_
- `tttrlib <https://github.com/Fluorescence-Tools/tttrlib>`_
- `picoquantio <https://github.com/tsbischof/picoquantio>`_
- `ptuparser <https://pypi.org/project/ptuparser/>`_
- `phconvert <https://github.com/Photon-HDF5/phconvert/>`_
- `trattoria <https://pypi.org/project/trattoria/>`_
  (wrapper of `trattoria-core <https://pypi.org/project/trattoria-core/>`_ and
  `tttr-toolbox <https://github.com/GCBallesteros/tttr-toolbox/>`_)
- `napari-flim-phasor-plotter
  <https://github.com/zoccoler/napari-flim-phasor-plotter/blob/0.0.6/src/napari_flim_phasor_plotter/_io/readPTU_FLIM.py>`_

Examples
--------

Read properties and tags from any type of PicoQuant unified tagged file:

>>> pq = PqFile('tests/Settings.pfs')
>>> pq.magic
<PqFileMagic.PFS: ...>
>>> pq.guid
UUID('86d428e2-cb0b-4964-996c-04456ba6be7b')
>>> pq.tags
{...'CreatorSW_Name': 'SymPhoTime 64', 'CreatorSW_Version': '2.1'...}
>>> pq.close()

Read metadata from a PicoQuant PTU FLIM file:

>>> ptu = PtuFile('tests/FLIM.ptu')
>>> ptu.magic
<PqFileMagic.PTU: ...>
>>> ptu.type
<PtuRecordType.PicoHarpT3: 66307>
>>> ptu.measurement_mode
<PtuMeasurementMode.T3: 3>
>>> ptu.measurement_submode
<PtuMeasurementSubMode.IMAGE: 3>

Decode TTTR records from the PTU file to ``numpy.recarray``:

>>> decoded = ptu.decode_records()

Get global times of frame changes from markers:

>>> decoded['time'][(decoded['marker'] & ptu.frame_change_mask) > 0]
array([1571185680], dtype=uint64)

Decode TTTR records to overall delay-time histograms per channel:

>>> ptu.decode_histogram(dtype='uint8')
array([[ 5,  7,  7, ..., 10,  9,  2]], dtype=uint8)

Get information about the FLIM image histogram in the PTU file:

>>> ptu.shape
(1, 256, 256, 2, 3126)
>>> ptu.dims
('T', 'Y', 'X', 'C', 'H')
>>> ptu.coords
{'T': ..., 'Y': ..., 'X': ..., 'H': ...}
>>> ptu.dtype
dtype('uint16')
>>> ptu.active_channels
(0, 1)

Decode parts of the image histogram to ``numpy.ndarray`` using slice notation.
Slice step sizes define binning, -1 being used to integrate along axis:

>>> ptu[:, ..., 0, ::-1]
array([[[103, ..., 38],
              ...
        [ 47, ..., 30]]], dtype=uint16)

Alternatively, decode the first channel and integrate all histogram bins
to a ``xarray.DataArray``, keeping reduced axes:

>>> ptu.decode_image(channel=0, dtime=-1, asxarray=True)
<xarray.DataArray (T: 1, Y: 256, X: 256, C: 1, H: 1)> ...
array([[[[[103]],
           ...
         [[ 30]]]]], dtype=uint16)
Coordinates:
  * T        (T) float64... 0.05625
  * Y        (Y) float64... -0.0001304 ... 0.0001294
  * X        (X) float64... -0.0001304 ... 0.0001294
  * C        (C) uint8... 0
  * H        (H) float64... 0.0
Attributes...
    frequency:      19999200.0
...
>>> ptu.close()

Preview the image and metadata in a PTU file from the console::

    python -m ptufile tests/FLIM.ptu

            

Raw data

            {
    "_id": null,
    "home_page": "https://www.cgohlke.com",
    "name": "ptufile",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": "Christoph Gohlke",
    "author_email": "cgohlke@cgohlke.com",
    "download_url": "https://files.pythonhosted.org/packages/f7/4a/5b6d6bce10301531c0f3cff9e1c50e381b8de1033b8eb1015cb9a2b808b7/ptufile-2024.10.10.tar.gz",
    "platform": "any",
    "description": "Read PicoQuant PTU and related files\n====================================\n\nPtufile is a Python library to read image and metadata from PicoQuant PTU\nand related files: PHU, PCK, PCO, PFS, PUS, and PQRES.\nPTU files contain time correlated single photon counting (TCSPC)\nmeasurement data and instrumentation parameters.\n\n:Author: `Christoph Gohlke <https://www.cgohlke.com>`_\n:License: BSD 3-Clause\n:Version: 2024.10.10\n:DOI: `10.5281/zenodo.10120021 <https://doi.org/10.5281/zenodo.10120021>`_\n\nQuickstart\n----------\n\nInstall the ptufile package and all dependencies from the\n`Python Package Index <https://pypi.org/project/ptufile/>`_::\n\n    python -m pip install -U \"ptufile[all]\"\n\nSee `Examples`_ for using the programming interface.\n\nSource code and support are available on\n`GitHub <https://github.com/cgohlke/ptufile>`_.\n\nRequirements\n------------\n\nThis revision was tested with the following requirements and dependencies\n(other versions may work):\n\n- `CPython <https://www.python.org>`_ 3.10.11, 3.11.9, 3.12.7, 3.13.0 64-bit\n- `NumPy <https://pypi.org/project/numpy>`_ 2.1.2\n- `Xarray <https://pypi.org/project/xarray>`_ 2024.9.0 (recommended)\n- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.9.2 (optional)\n- `Tifffile <https://pypi.org/project/tifffile/>`_ 2024.9.20 (optional)\n- `Numcodecs <https://pypi.org/project/numcodecs/>`_ 0.13.1 (optional)\n- `Cython <https://pypi.org/project/cython/>`_ 3.0.11 (build)\n\nRevisions\n---------\n\n2024.10.10\n\n- Also trim leading channels without photons (breaking).\n- Add property to identify channels with photons.\n\n2024.9.14\n\n- Improve typing.\n\n2024.7.13\n\n- Detect point scans in image mode.\n- Deprecate Python 3.9, support Python 3.13.\n\n2024.5.24\n\n- Fix docstring examples not correctly rendered on GitHub.\n\n2024.4.24\n\n- Build wheels with NumPy 2.\n\n2024.2.20\n\n- Change definition of PtuFile.frequency (breaking).\n- Add option to specify number of bins returned by decode_histogram.\n- Add option to return histograms of one period.\n\n2024.2.15\n\n- Add PtuFile.scanner property.\n- Add numcodecs compatible PTU codec.\n\n2024.2.8\n\n- Support sinusoidal scanning correction.\n\n2024.2.2\n\n- Change positive dtime parameter from index to size (breaking).\n- Fix segfault with ImgHdr_TimePerPixel = 0.\n- Rename MultiHarp to Generic conforming with changes in PicoQuant reference.\n\n2023.11.16\n\n- Fix empty line when first record is start marker.\n\n2023.11.13\n\n- Change image histogram dimension order to TYXCH (breaking).\n- Change frame start to start of first line in frame (breaking).\n- Improve trimming of incomplete frames (breaking).\n- Remove trim_dtime option (breaking).\n- Fix selection handling in PtuFile.decode_image.\n- Add option to trim T, C, and H axes of image histograms.\n- Add option to decode histograms to memory-mapped or user-provided arrays.\n- Add ``__getitem__`` interface to image histogram.\n\n2023.11.1\n\n- Initial alpha release.\n\nNotes\n-----\n\nThe `Chan Zuckerberg Initiative\n<https://chanzuckerberg.com/eoss/proposals/phasorpy-a-python-library-for-phasor-analysis-of-flim-and-spectral-imaging>`_\nfinancially supported the development of this library.\n\n`PicoQuant GmbH <https://www.picoquant.com/>`_ is a manufacturer of photonic\ncomponents and instruments.\n\nThe PicoQuant unified file formats are documented at the\n`PicoQuant-Time-Tagged-File-Format-Demos\n<https://github.com/PicoQuant/PicoQuant-Time-Tagged-File-Format-Demos/tree/master/doc>`_.\n\nThe following features are currently not implemented: PT2 and PT3 files,\ndecoding images from T2 formats, bidirectional scanning, and deprecated\nimage reconstruction. Line-scanning is not tested.\n\nOther Python or C/C++ modules for reading PicoQuant files are:\n\n- `Read_PTU.py\n  <https://github.com/PicoQuant/PicoQuant-Time-Tagged-File-Format-Demos/blob/master/PTU/Python/Read_PTU.py>`_\n- `readPTU_FLIM <https://github.com/SumeetRohilla/readPTU_FLIM>`_\n- `PyPTU <https://gitlab.inria.fr/jrye/pyptu>`_\n- `FlimReader <https://github.com/flimfit/FlimReader>`_\n- `tttrlib <https://github.com/Fluorescence-Tools/tttrlib>`_\n- `picoquantio <https://github.com/tsbischof/picoquantio>`_\n- `ptuparser <https://pypi.org/project/ptuparser/>`_\n- `phconvert <https://github.com/Photon-HDF5/phconvert/>`_\n- `trattoria <https://pypi.org/project/trattoria/>`_\n  (wrapper of `trattoria-core <https://pypi.org/project/trattoria-core/>`_ and\n  `tttr-toolbox <https://github.com/GCBallesteros/tttr-toolbox/>`_)\n- `napari-flim-phasor-plotter\n  <https://github.com/zoccoler/napari-flim-phasor-plotter/blob/0.0.6/src/napari_flim_phasor_plotter/_io/readPTU_FLIM.py>`_\n\nExamples\n--------\n\nRead properties and tags from any type of PicoQuant unified tagged file:\n\n>>> pq = PqFile('tests/Settings.pfs')\n>>> pq.magic\n<PqFileMagic.PFS: ...>\n>>> pq.guid\nUUID('86d428e2-cb0b-4964-996c-04456ba6be7b')\n>>> pq.tags\n{...'CreatorSW_Name': 'SymPhoTime 64', 'CreatorSW_Version': '2.1'...}\n>>> pq.close()\n\nRead metadata from a PicoQuant PTU FLIM file:\n\n>>> ptu = PtuFile('tests/FLIM.ptu')\n>>> ptu.magic\n<PqFileMagic.PTU: ...>\n>>> ptu.type\n<PtuRecordType.PicoHarpT3: 66307>\n>>> ptu.measurement_mode\n<PtuMeasurementMode.T3: 3>\n>>> ptu.measurement_submode\n<PtuMeasurementSubMode.IMAGE: 3>\n\nDecode TTTR records from the PTU file to ``numpy.recarray``:\n\n>>> decoded = ptu.decode_records()\n\nGet global times of frame changes from markers:\n\n>>> decoded['time'][(decoded['marker'] & ptu.frame_change_mask) > 0]\narray([1571185680], dtype=uint64)\n\nDecode TTTR records to overall delay-time histograms per channel:\n\n>>> ptu.decode_histogram(dtype='uint8')\narray([[ 5,  7,  7, ..., 10,  9,  2]], dtype=uint8)\n\nGet information about the FLIM image histogram in the PTU file:\n\n>>> ptu.shape\n(1, 256, 256, 2, 3126)\n>>> ptu.dims\n('T', 'Y', 'X', 'C', 'H')\n>>> ptu.coords\n{'T': ..., 'Y': ..., 'X': ..., 'H': ...}\n>>> ptu.dtype\ndtype('uint16')\n>>> ptu.active_channels\n(0, 1)\n\nDecode parts of the image histogram to ``numpy.ndarray`` using slice notation.\nSlice step sizes define binning, -1 being used to integrate along axis:\n\n>>> ptu[:, ..., 0, ::-1]\narray([[[103, ..., 38],\n              ...\n        [ 47, ..., 30]]], dtype=uint16)\n\nAlternatively, decode the first channel and integrate all histogram bins\nto a ``xarray.DataArray``, keeping reduced axes:\n\n>>> ptu.decode_image(channel=0, dtime=-1, asxarray=True)\n<xarray.DataArray (T: 1, Y: 256, X: 256, C: 1, H: 1)> ...\narray([[[[[103]],\n           ...\n         [[ 30]]]]], dtype=uint16)\nCoordinates:\n  * T        (T) float64... 0.05625\n  * Y        (Y) float64... -0.0001304 ... 0.0001294\n  * X        (X) float64... -0.0001304 ... 0.0001294\n  * C        (C) uint8... 0\n  * H        (H) float64... 0.0\nAttributes...\n    frequency:      19999200.0\n...\n>>> ptu.close()\n\nPreview the image and metadata in a PTU file from the console::\n\n    python -m ptufile tests/FLIM.ptu\n",
    "bugtrack_url": null,
    "license": "BSD",
    "summary": "Read PicoQuant PTU and related files",
    "version": "2024.10.10",
    "project_urls": {
        "Bug Tracker": "https://github.com/cgohlke/ptufile/issues",
        "Homepage": "https://www.cgohlke.com",
        "Source Code": "https://github.com/cgohlke/ptufile"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4bd319fe883271417344af6249f7e6687c33eb54b1384846fa226763ac21aac1",
                "md5": "2afde9662b97ede3ec235de1c95ba7d8",
                "sha256": "44c63dc84e5742aa0b4bcf120e21e29f4d4633e8be2cd0af929340be538e91bc"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2afde9662b97ede3ec235de1c95ba7d8",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 216074,
            "upload_time": "2024-10-11T04:51:51",
            "upload_time_iso_8601": "2024-10-11T04:51:51.221409Z",
            "url": "https://files.pythonhosted.org/packages/4b/d3/19fe883271417344af6249f7e6687c33eb54b1384846fa226763ac21aac1/ptufile-2024.10.10-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dff67fc31b646c613d8ce8da83d2e1fa4291c562c7f6481615bb9f1b641c2e6c",
                "md5": "c028cca524118815c9ac58e5a426c58e",
                "sha256": "b67c565964d7d2d7178afc11c182ff8fc9951ed7adaf45032dd8536bf60ba43e"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c028cca524118815c9ac58e5a426c58e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 199614,
            "upload_time": "2024-10-11T04:51:53",
            "upload_time_iso_8601": "2024-10-11T04:51:53.135150Z",
            "url": "https://files.pythonhosted.org/packages/df/f6/7fc31b646c613d8ce8da83d2e1fa4291c562c7f6481615bb9f1b641c2e6c/ptufile-2024.10.10-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "18c6d25a728e6e7f0f919dcbf42aa58a8007b136694194dc9392ccb71ac2adb4",
                "md5": "3ba76f4a6afeef1417863b9f6110da93",
                "sha256": "be2ca4e688c75a47dce60071168ca4826ea6e07ad7acc96aa07ad185826d5c6d"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "3ba76f4a6afeef1417863b9f6110da93",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 1207678,
            "upload_time": "2024-10-11T04:51:55",
            "upload_time_iso_8601": "2024-10-11T04:51:55.069460Z",
            "url": "https://files.pythonhosted.org/packages/18/c6/d25a728e6e7f0f919dcbf42aa58a8007b136694194dc9392ccb71ac2adb4/ptufile-2024.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "48d95215458daf813b4c578a2f3062efb008d07936a513b732eb183fd3cb579a",
                "md5": "cf5ec4cede72673d5b05950607c24bc9",
                "sha256": "3bb942df0c465316ac5562a0b9c4f081445a9118aff4bfefa837c0b9348ed1c2"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cf5ec4cede72673d5b05950607c24bc9",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 1213428,
            "upload_time": "2024-10-11T04:51:57",
            "upload_time_iso_8601": "2024-10-11T04:51:57.937250Z",
            "url": "https://files.pythonhosted.org/packages/48/d9/5215458daf813b4c578a2f3062efb008d07936a513b732eb183fd3cb579a/ptufile-2024.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6e81b8bfdce41f68fd7cf4962b526828380e249f343192db12da01a816744fce",
                "md5": "4b4086c4b19deab513a9a61beb6a6ab3",
                "sha256": "4852b42745e56cb8c10cbc1f04c60e49bb6380946ac6e83b448679d7f432ccf3"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "4b4086c4b19deab513a9a61beb6a6ab3",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 147150,
            "upload_time": "2024-10-11T04:51:59",
            "upload_time_iso_8601": "2024-10-11T04:51:59.830604Z",
            "url": "https://files.pythonhosted.org/packages/6e/81/b8bfdce41f68fd7cf4962b526828380e249f343192db12da01a816744fce/ptufile-2024.10.10-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f567bdfe1d7ac4f6772a3816a1ed8abf0f04ab8bf1e4c4110bdb48ba343e5ade",
                "md5": "b369c125230652ae51899d80f90c210b",
                "sha256": "03574820e9ee8bfaf6a630fc4f405125539d4d11956ad5c5bd32743db08241f2"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b369c125230652ae51899d80f90c210b",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 177181,
            "upload_time": "2024-10-11T04:52:00",
            "upload_time_iso_8601": "2024-10-11T04:52:00.900787Z",
            "url": "https://files.pythonhosted.org/packages/f5/67/bdfe1d7ac4f6772a3816a1ed8abf0f04ab8bf1e4c4110bdb48ba343e5ade/ptufile-2024.10.10-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e1a60bb183840a3818b69fbb1a1fb1ed44ded024664d080ee8bc29474c8f3fb6",
                "md5": "2d6e50b9870df6d26729dc8c74c72a24",
                "sha256": "007cf1bf1da9a22adb795fe9e89871d470023741f81827664ac704c33b5f26fb"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2d6e50b9870df6d26729dc8c74c72a24",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 214582,
            "upload_time": "2024-10-11T04:52:02",
            "upload_time_iso_8601": "2024-10-11T04:52:02.171723Z",
            "url": "https://files.pythonhosted.org/packages/e1/a6/0bb183840a3818b69fbb1a1fb1ed44ded024664d080ee8bc29474c8f3fb6/ptufile-2024.10.10-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "851621a73ff6b95ddf22a80af431251b30b287827c53688c85b5fb271a3c9289",
                "md5": "3d7c3c4057d7b74524892511156dc957",
                "sha256": "9719e4ec1ee820fdd87faa6fd077ef58ee89cf6ffff87ddfe68a5de9069e19a3"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "3d7c3c4057d7b74524892511156dc957",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 197639,
            "upload_time": "2024-10-11T04:52:03",
            "upload_time_iso_8601": "2024-10-11T04:52:03.729483Z",
            "url": "https://files.pythonhosted.org/packages/85/16/21a73ff6b95ddf22a80af431251b30b287827c53688c85b5fb271a3c9289/ptufile-2024.10.10-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9416fcb763a14b839be731d008f4aff0a811259c213ea65a72b229f0d170aba6",
                "md5": "c51540853419db749509fa4581a2962d",
                "sha256": "364519d7fb063ea8f8517f977a9b1ec735ff8c128722cfefbac85c662f23b99a"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "c51540853419db749509fa4581a2962d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1324041,
            "upload_time": "2024-10-11T04:52:05",
            "upload_time_iso_8601": "2024-10-11T04:52:05.286436Z",
            "url": "https://files.pythonhosted.org/packages/94/16/fcb763a14b839be731d008f4aff0a811259c213ea65a72b229f0d170aba6/ptufile-2024.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a1d9c5f57dd89ddc93f4e7f5295aeb51e3aa4e6afc353def50cd82e06a5db94a",
                "md5": "00c389daa499404e8a03d2cb4cf8d5d8",
                "sha256": "02c66a67e23266967b4784f232d2cadde45daa40397d132e4e00639f202df627"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "00c389daa499404e8a03d2cb4cf8d5d8",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1313990,
            "upload_time": "2024-10-11T04:52:07",
            "upload_time_iso_8601": "2024-10-11T04:52:07.376177Z",
            "url": "https://files.pythonhosted.org/packages/a1/d9/c5f57dd89ddc93f4e7f5295aeb51e3aa4e6afc353def50cd82e06a5db94a/ptufile-2024.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cfbd7fd046a5dc87f8583ce8e821880eac5f6216c92658749261c0491331c7b1",
                "md5": "e7d1aeccedee73bed34288ac32f189f5",
                "sha256": "5a4185ab837539e31060b5b889b80f4906385b6fc705e538f130d7faf32bf480"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "e7d1aeccedee73bed34288ac32f189f5",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 146361,
            "upload_time": "2024-10-11T04:52:08",
            "upload_time_iso_8601": "2024-10-11T04:52:08.649403Z",
            "url": "https://files.pythonhosted.org/packages/cf/bd/7fd046a5dc87f8583ce8e821880eac5f6216c92658749261c0491331c7b1/ptufile-2024.10.10-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "62e439609dc678842f0442d4860763c4621421c0f3b887ffb830332865679204",
                "md5": "a78879e2f0e38997ff55658eb0f42426",
                "sha256": "64a2309fe8ab0abe8bcb19b076840ba0e19371ee305c2365113acc97d9e09e0a"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a78879e2f0e38997ff55658eb0f42426",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 177214,
            "upload_time": "2024-10-11T04:52:10",
            "upload_time_iso_8601": "2024-10-11T04:52:10.399513Z",
            "url": "https://files.pythonhosted.org/packages/62/e4/39609dc678842f0442d4860763c4621421c0f3b887ffb830332865679204/ptufile-2024.10.10-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ca9b9936e97a95eec331760e08786df97b1a7e27217a2c2e124914b416e2ed13",
                "md5": "b6a346062430244775cd0262eaaae0e2",
                "sha256": "b7e24ba9cf05f0a98f41b0c7af94156da754605b0ce8e537769ad24b1c9d21dd"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp311-cp311-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "b6a346062430244775cd0262eaaae0e2",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 149393,
            "upload_time": "2024-10-11T04:52:11",
            "upload_time_iso_8601": "2024-10-11T04:52:11.840005Z",
            "url": "https://files.pythonhosted.org/packages/ca/9b/9936e97a95eec331760e08786df97b1a7e27217a2c2e124914b416e2ed13/ptufile-2024.10.10-cp311-cp311-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "14dd04bdee82b7efbf2e093c913047d0eef64718152fde0dc5a5dc407b555e1a",
                "md5": "7d7f2432fb671271022bb5012ca09abc",
                "sha256": "73516d4677054c8a013fee2ced68f4edccac402c8f825810d7ee0576b24afe58"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp312-cp312-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7d7f2432fb671271022bb5012ca09abc",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 219398,
            "upload_time": "2024-10-11T04:52:12",
            "upload_time_iso_8601": "2024-10-11T04:52:12.849735Z",
            "url": "https://files.pythonhosted.org/packages/14/dd/04bdee82b7efbf2e093c913047d0eef64718152fde0dc5a5dc407b555e1a/ptufile-2024.10.10-cp312-cp312-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "328e9a1648cc23dcbe95b25f59d8c57d92c21e0c8e2526358be3739ee169ec20",
                "md5": "5d347bfb5233e67036ad927295a82099",
                "sha256": "3b88a0a980fecf7f0f8e1b275967049d058a6d695e99d1a40891b3166470d7c6"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "5d347bfb5233e67036ad927295a82099",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 204879,
            "upload_time": "2024-10-11T04:52:14",
            "upload_time_iso_8601": "2024-10-11T04:52:14.603099Z",
            "url": "https://files.pythonhosted.org/packages/32/8e/9a1648cc23dcbe95b25f59d8c57d92c21e0c8e2526358be3739ee169ec20/ptufile-2024.10.10-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "72678e4449c05437db36b21327ea58e99d853c624bb0e0a9496a285d223b27a3",
                "md5": "66a49c687f7cd74b0cd71b395ae860cf",
                "sha256": "7ba1b35fdcabb60afc61db03904ebf38e89a53c38b779f949ac9e7dc1e96bf2a"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "66a49c687f7cd74b0cd71b395ae860cf",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1339300,
            "upload_time": "2024-10-11T04:52:16",
            "upload_time_iso_8601": "2024-10-11T04:52:16.363803Z",
            "url": "https://files.pythonhosted.org/packages/72/67/8e4449c05437db36b21327ea58e99d853c624bb0e0a9496a285d223b27a3/ptufile-2024.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "985c6ab8112310d97e37f0d2347411644f2765eebe7e56da1aa0a4965798ad6d",
                "md5": "81fc3b95a120f1f7698651011922d240",
                "sha256": "d68a5515c541720b78583ead79c0c2f92692b76ff53f8b6b71b4369477814298"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "81fc3b95a120f1f7698651011922d240",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1329236,
            "upload_time": "2024-10-11T04:52:18",
            "upload_time_iso_8601": "2024-10-11T04:52:18.124620Z",
            "url": "https://files.pythonhosted.org/packages/98/5c/6ab8112310d97e37f0d2347411644f2765eebe7e56da1aa0a4965798ad6d/ptufile-2024.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cc86e354306108f41bb91369d140be6d263e7f48a682b614eacd4034dd817e05",
                "md5": "671ad766bd92d3a63d79146628fb8681",
                "sha256": "b00e5b44d5ef1359b3fc37c112a38252660bc80b093bcde820c50fbc71e5da51"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "671ad766bd92d3a63d79146628fb8681",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 149677,
            "upload_time": "2024-10-11T04:52:19",
            "upload_time_iso_8601": "2024-10-11T04:52:19.987692Z",
            "url": "https://files.pythonhosted.org/packages/cc/86/e354306108f41bb91369d140be6d263e7f48a682b614eacd4034dd817e05/ptufile-2024.10.10-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "298fbd5a637dd6fccf12710d8d29d855c956f74a8c2e8988bb9f9e6d0c689940",
                "md5": "5ddce24657ec0356230055d64750573a",
                "sha256": "60576c3180f116cfb7b302d1320d14c2216e95d80e84421bbfb529e73e50629e"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5ddce24657ec0356230055d64750573a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 180739,
            "upload_time": "2024-10-11T04:52:21",
            "upload_time_iso_8601": "2024-10-11T04:52:21.229691Z",
            "url": "https://files.pythonhosted.org/packages/29/8f/bd5a637dd6fccf12710d8d29d855c956f74a8c2e8988bb9f9e6d0c689940/ptufile-2024.10.10-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f384e8237da16e0a4551feac74e211d9a6f4f8f9370cd675e9c0e0defac83e05",
                "md5": "0adeb737de421c7ecd5c9ad8fa926ab5",
                "sha256": "6a471d1a2d175f80dc3abdc6b3a071835d44b2ffe8e75629ea5490a60ef1b113"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp312-cp312-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "0adeb737de421c7ecd5c9ad8fa926ab5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 150182,
            "upload_time": "2024-10-11T04:52:22",
            "upload_time_iso_8601": "2024-10-11T04:52:22.686478Z",
            "url": "https://files.pythonhosted.org/packages/f3/84/e8237da16e0a4551feac74e211d9a6f4f8f9370cd675e9c0e0defac83e05/ptufile-2024.10.10-cp312-cp312-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7c4ff292f0cd0656a107b91002ee10201a05fa78b6a138c5a852cf58b54160d1",
                "md5": "a1c9960cec50b6df27c7f329ac86384b",
                "sha256": "1cf0dd1ccf5455b97edd3f41f908eec32992924e9920d609795192aee24384ef"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp313-cp313-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a1c9960cec50b6df27c7f329ac86384b",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 217973,
            "upload_time": "2024-10-11T04:52:23",
            "upload_time_iso_8601": "2024-10-11T04:52:23.759338Z",
            "url": "https://files.pythonhosted.org/packages/7c/4f/f292f0cd0656a107b91002ee10201a05fa78b6a138c5a852cf58b54160d1/ptufile-2024.10.10-cp313-cp313-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0b48c12652b6aeaffaf86fd6ef8998e2f6cc20d0e8a55fd559d3ba89692999ca",
                "md5": "ee2b86b6e83e1ece5c9f98378278910b",
                "sha256": "aaa7dfac2af5614dd7d5f05775a6b7b13d622da5e99678d760856b0e7c45677c"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "ee2b86b6e83e1ece5c9f98378278910b",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 204645,
            "upload_time": "2024-10-11T04:52:25",
            "upload_time_iso_8601": "2024-10-11T04:52:25.314709Z",
            "url": "https://files.pythonhosted.org/packages/0b/48/c12652b6aeaffaf86fd6ef8998e2f6cc20d0e8a55fd559d3ba89692999ca/ptufile-2024.10.10-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f6d9c8c8e96b1355b307ec7585c6e4a6e71e32002e1fe32b6f394f9ae6aafe58",
                "md5": "579a1b2377bf079be7648503c2f3f333",
                "sha256": "1d15c274609acfc98f42a9d292059e415a32fae860096c4466d9e63f4a80a838"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "579a1b2377bf079be7648503c2f3f333",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1324930,
            "upload_time": "2024-10-11T04:52:26",
            "upload_time_iso_8601": "2024-10-11T04:52:26.811895Z",
            "url": "https://files.pythonhosted.org/packages/f6/d9/c8c8e96b1355b307ec7585c6e4a6e71e32002e1fe32b6f394f9ae6aafe58/ptufile-2024.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "558fa3b551de20ed2498b4e7f15fd2fca161f59993e998e60a75cd90a538db86",
                "md5": "be9ac52c3edd467b32751eca0fdef286",
                "sha256": "ed2554762ac996cdf3da314d915aa5b1afaa7fc6f1b41a9bd5f97b3520521300"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "be9ac52c3edd467b32751eca0fdef286",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1339965,
            "upload_time": "2024-10-11T04:52:28",
            "upload_time_iso_8601": "2024-10-11T04:52:28.143838Z",
            "url": "https://files.pythonhosted.org/packages/55/8f/a3b551de20ed2498b4e7f15fd2fca161f59993e998e60a75cd90a538db86/ptufile-2024.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4deb57bdacbb494f404580049d9b08a378e1056d593c8eecbb891ff3854792ee",
                "md5": "573bf55fd6572b58b859f0df0dc0f767",
                "sha256": "bfec3dbdab17144e1d0142a7af043eb9d54afb1558baa18c0f107a12e34c85c7"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp313-cp313-win32.whl",
            "has_sig": false,
            "md5_digest": "573bf55fd6572b58b859f0df0dc0f767",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 149578,
            "upload_time": "2024-10-11T04:52:30",
            "upload_time_iso_8601": "2024-10-11T04:52:30.136735Z",
            "url": "https://files.pythonhosted.org/packages/4d/eb/57bdacbb494f404580049d9b08a378e1056d593c8eecbb891ff3854792ee/ptufile-2024.10.10-cp313-cp313-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5d30ed9122c0ed9d3576cdbd650ed17807608a3e015a82976f86b0b76919ca0e",
                "md5": "21cd2e247a452d70a740d6764708b25c",
                "sha256": "9153382656c7117788f4b6d66c7d49ee271b6b165d4c70b9e04d16c5b4dca24c"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "21cd2e247a452d70a740d6764708b25c",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 180663,
            "upload_time": "2024-10-11T04:52:31",
            "upload_time_iso_8601": "2024-10-11T04:52:31.161264Z",
            "url": "https://files.pythonhosted.org/packages/5d/30/ed9122c0ed9d3576cdbd650ed17807608a3e015a82976f86b0b76919ca0e/ptufile-2024.10.10-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "814a7a4ff067618465b0ad5778f228371a868d167b2f8f33e2f3fff008bc5a05",
                "md5": "e7706f3fb6432943b457e42dd9529c12",
                "sha256": "9b53b5181eb6d9eb496a6643487e6d422f762d19a042bb290806288609d26377"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp313-cp313-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "e7706f3fb6432943b457e42dd9529c12",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 150168,
            "upload_time": "2024-10-11T04:52:32",
            "upload_time_iso_8601": "2024-10-11T04:52:32.621309Z",
            "url": "https://files.pythonhosted.org/packages/81/4a/7a4ff067618465b0ad5778f228371a868d167b2f8f33e2f3fff008bc5a05/ptufile-2024.10.10-cp313-cp313-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b7b67d9bc020017840b5f835a079e4b1c32b01825c833866fcbebbd6940d43d9",
                "md5": "1feb6c0ded40a455109e02124101ee44",
                "sha256": "c5aab2882e5a6077e9fcc44ea1af9432fa48199e50e0c6728b2ff64b5a184ae6"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1feb6c0ded40a455109e02124101ee44",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 216842,
            "upload_time": "2024-10-11T04:52:34",
            "upload_time_iso_8601": "2024-10-11T04:52:34.690531Z",
            "url": "https://files.pythonhosted.org/packages/b7/b6/7d9bc020017840b5f835a079e4b1c32b01825c833866fcbebbd6940d43d9/ptufile-2024.10.10-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ea8059b40e41da4adcab278c6beacdd513fffdb1845f962079c67fd18d5d892e",
                "md5": "97e7c22d3dd465c19c5b1d41de99cd44",
                "sha256": "42b9bf48463c71e83f9a7f6b4adedade72f3a5f4d4b80d2663b432c890a578a6"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "97e7c22d3dd465c19c5b1d41de99cd44",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 200172,
            "upload_time": "2024-10-11T04:52:37",
            "upload_time_iso_8601": "2024-10-11T04:52:37.325553Z",
            "url": "https://files.pythonhosted.org/packages/ea/80/59b40e41da4adcab278c6beacdd513fffdb1845f962079c67fd18d5d892e/ptufile-2024.10.10-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3aac3c50177fb44bd42d2de1a545411a53a6fce17c022c9d216685f6f22d4741",
                "md5": "42c45a541bf25137de7cb95e89755dbb",
                "sha256": "f0de7714d75f68d3e2cddf061c1d35c81ef3a20e8111ebe7edd79a7f4f17ea05"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "42c45a541bf25137de7cb95e89755dbb",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 1215793,
            "upload_time": "2024-10-11T04:52:38",
            "upload_time_iso_8601": "2024-10-11T04:52:38.842155Z",
            "url": "https://files.pythonhosted.org/packages/3a/ac/3c50177fb44bd42d2de1a545411a53a6fce17c022c9d216685f6f22d4741/ptufile-2024.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6f9aae2f3f3cfbbc79bca9142aa23411e79a7b05d942acf10e816af3936184ed",
                "md5": "3c19d47c7af6b3c23d4aa1223d8a2505",
                "sha256": "c6dcecfd56d07e884baa73577facfd3be5b50e5097efbc2e337ff42143e1e793"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "3c19d47c7af6b3c23d4aa1223d8a2505",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 147749,
            "upload_time": "2024-10-11T04:52:40",
            "upload_time_iso_8601": "2024-10-11T04:52:40.038321Z",
            "url": "https://files.pythonhosted.org/packages/6f/9a/ae2f3f3cfbbc79bca9142aa23411e79a7b05d942acf10e816af3936184ed/ptufile-2024.10.10-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "863593ae77c9c9bd27ad0a52caf3a0ee6b1f6ca1848d44dad2d6cecdc5505865",
                "md5": "9d9f277550eddf4bd0406e182edc0ce4",
                "sha256": "49150668e4b0411fab4578b1979af43564887c7d8b548b9ccf9ca6f58a26a5d0"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "9d9f277550eddf4bd0406e182edc0ce4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 177696,
            "upload_time": "2024-10-11T04:52:41",
            "upload_time_iso_8601": "2024-10-11T04:52:41.481685Z",
            "url": "https://files.pythonhosted.org/packages/86/35/93ae77c9c9bd27ad0a52caf3a0ee6b1f6ca1848d44dad2d6cecdc5505865/ptufile-2024.10.10-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f74a5b6d6bce10301531c0f3cff9e1c50e381b8de1033b8eb1015cb9a2b808b7",
                "md5": "e2c26789002a5fac8f9d69d69146b6e9",
                "sha256": "1c9a45968cf6f09689b9e588ecd9a5d5beff025908ca3ae8cdbc2479429f7c12"
            },
            "downloads": -1,
            "filename": "ptufile-2024.10.10.tar.gz",
            "has_sig": false,
            "md5_digest": "e2c26789002a5fac8f9d69d69146b6e9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 49369,
            "upload_time": "2024-10-11T04:52:43",
            "upload_time_iso_8601": "2024-10-11T04:52:43.007328Z",
            "url": "https://files.pythonhosted.org/packages/f7/4a/5b6d6bce10301531c0f3cff9e1c50e381b8de1033b8eb1015cb9a2b808b7/ptufile-2024.10.10.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-11 04:52:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "cgohlke",
    "github_project": "ptufile",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ptufile"
}
        
Elapsed time: 2.70367s