ptufile


Nameptufile JSON
Version 2024.4.24 PyPI version JSON
download
home_pagehttps://www.cgohlke.com
SummaryRead PicoQuant PTU and related files
upload_time2024-04-25 19:02:09
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.4.24
: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.9.13, 3.10.11, 3.11.9, 3.12.3 (64-bit)
- `Numpy <https://pypi.org/project/numpy>`_ 1.26.4
- `Xarray <https://pypi.org/project/xarray>`_ 2024.3.0 (recommended)
- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.8.4 (optional)
- `Tifffile <https://pypi.org/project/tifffile/>`_ 2024.4.24 (optional)
- `Numcodecs <https://pypi.org/project/numcodecs/>`_ 0.12.1 (optional)
- `Cython <https://pypi.org/project/cython/>`_ 3.0.10 (build)

Revisions
---------

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.

Other Python 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>`_
- `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/tree/master/tttr-toolbox>`_)
- `napari-flim-phasor-plotter
  <https://github.com/zoccoler/napari-flim-phasor-plotter/blob/main/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')

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
  * H        (H) float64... 0.0
Dimensions without coordinates: C
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/09/1b/4ccbbd05696aade530eee2626bc99696f17630b9fd9ba3a55dddcabdb666/ptufile-2024.4.24.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.4.24\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.9.13, 3.10.11, 3.11.9, 3.12.3 (64-bit)\n- `Numpy <https://pypi.org/project/numpy>`_ 1.26.4\n- `Xarray <https://pypi.org/project/xarray>`_ 2024.3.0 (recommended)\n- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.8.4 (optional)\n- `Tifffile <https://pypi.org/project/tifffile/>`_ 2024.4.24 (optional)\n- `Numcodecs <https://pypi.org/project/numcodecs/>`_ 0.12.1 (optional)\n- `Cython <https://pypi.org/project/cython/>`_ 3.0.10 (build)\n\nRevisions\n---------\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.\n\nOther Python 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- `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/tree/master/tttr-toolbox>`_)\n- `napari-flim-phasor-plotter\n  <https://github.com/zoccoler/napari-flim-phasor-plotter/blob/main/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\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  * H        (H) float64... 0.0\nDimensions without coordinates: C\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.4.24",
    "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": "b2f38f8982a3e330bbe80c80df3dc6ca94f9ccdd056204afa325e08ca3ad5676",
                "md5": "331f0b3f3001c642215f3c7674ba9427",
                "sha256": "10c28f0637e37f25b461f1401d89f7d273ec99793c75f2bc21b511c6a406c7ee"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "331f0b3f3001c642215f3c7674ba9427",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 207104,
            "upload_time": "2024-04-25T19:01:34",
            "upload_time_iso_8601": "2024-04-25T19:01:34.638578Z",
            "url": "https://files.pythonhosted.org/packages/b2/f3/8f8982a3e330bbe80c80df3dc6ca94f9ccdd056204afa325e08ca3ad5676/ptufile-2024.4.24-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "788d220612eeece7f54cd6945231fa2357c84ae99983a6c7b44978d1ce356a84",
                "md5": "fd2b5d324d8ff9dede64097115052747",
                "sha256": "36f4fa9ee9da6a90449a7dd765d2f56aae9838876daa660f09c8ec6ad2051e9c"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "fd2b5d324d8ff9dede64097115052747",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 192366,
            "upload_time": "2024-04-25T19:01:36",
            "upload_time_iso_8601": "2024-04-25T19:01:36.627949Z",
            "url": "https://files.pythonhosted.org/packages/78/8d/220612eeece7f54cd6945231fa2357c84ae99983a6c7b44978d1ce356a84/ptufile-2024.4.24-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5035a573e3602ba0914c028bdaed3a7d855ce19911a550bda44558c422b87a68",
                "md5": "d3c25215aa4c5c4d5009981a32b144fd",
                "sha256": "536d7091132a30a8ba7bfdaa7c3aef2f88a6d263918bd27e8e52d0baca44cf0d"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d3c25215aa4c5c4d5009981a32b144fd",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 1196452,
            "upload_time": "2024-04-25T19:01:38",
            "upload_time_iso_8601": "2024-04-25T19:01:38.413351Z",
            "url": "https://files.pythonhosted.org/packages/50/35/a573e3602ba0914c028bdaed3a7d855ce19911a550bda44558c422b87a68/ptufile-2024.4.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ca7b18b6aa25c2f973921529f430fcc10d7361fcdb12b9d819ce84107ed3bf36",
                "md5": "4aa3be0e53741a502a234f30c8b3356b",
                "sha256": "292e52dff67b5a2f08c95c06ce40aea652b594afa21f19602ab69bdc21a2ba40"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "4aa3be0e53741a502a234f30c8b3356b",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 144823,
            "upload_time": "2024-04-25T19:01:40",
            "upload_time_iso_8601": "2024-04-25T19:01:40.304935Z",
            "url": "https://files.pythonhosted.org/packages/ca/7b/18b6aa25c2f973921529f430fcc10d7361fcdb12b9d819ce84107ed3bf36/ptufile-2024.4.24-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5118beb68fbcd109f45e5eedbfa5b12e3e58076d1dd22497ab806c58b36828a2",
                "md5": "76beb14ad9f1a7634e81892500bd92c3",
                "sha256": "f36227b36b522b02ae75f2dba3338d2490648db87af7a7f0da0f2e50acdb7a94"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "76beb14ad9f1a7634e81892500bd92c3",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 174100,
            "upload_time": "2024-04-25T19:01:41",
            "upload_time_iso_8601": "2024-04-25T19:01:41.858270Z",
            "url": "https://files.pythonhosted.org/packages/51/18/beb68fbcd109f45e5eedbfa5b12e3e58076d1dd22497ab806c58b36828a2/ptufile-2024.4.24-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "83c84edb1de1f00093870e04bf58ad26ed28a6c477b86e589ee90d037f5ac369",
                "md5": "15f0ab4465c46ac92682939843ae0191",
                "sha256": "c5a7f167d4d5b40406647505447f5aa2ce2ac53381042b8e42816776ef1c8a74"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "15f0ab4465c46ac92682939843ae0191",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 208566,
            "upload_time": "2024-04-25T19:01:43",
            "upload_time_iso_8601": "2024-04-25T19:01:43.514190Z",
            "url": "https://files.pythonhosted.org/packages/83/c8/4edb1de1f00093870e04bf58ad26ed28a6c477b86e589ee90d037f5ac369/ptufile-2024.4.24-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "95259a1bf4cfe198e8553e276bca63f1a0b1f12d95966f95bc9623fc387e8d1e",
                "md5": "c2978f7efd04a85a1bbb1a18ed9ad6bf",
                "sha256": "66e8025d27ac51b11e07435d4d9f1a1fddf23f09a3de6d28b17d2fb2ac6617bb"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c2978f7efd04a85a1bbb1a18ed9ad6bf",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 190361,
            "upload_time": "2024-04-25T19:01:45",
            "upload_time_iso_8601": "2024-04-25T19:01:45.702396Z",
            "url": "https://files.pythonhosted.org/packages/95/25/9a1bf4cfe198e8553e276bca63f1a0b1f12d95966f95bc9623fc387e8d1e/ptufile-2024.4.24-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c1cae8df252986763156f11b539968167daf109f709b7030a2990fa70f87eb18",
                "md5": "b2c143f746c36911f51c8a914076ca0f",
                "sha256": "89afcdd11f65e77f3a91d319482a8c6ce3053562532eae3d07fde4aa2992a2e3"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b2c143f746c36911f51c8a914076ca0f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1305209,
            "upload_time": "2024-04-25T19:01:47",
            "upload_time_iso_8601": "2024-04-25T19:01:47.634436Z",
            "url": "https://files.pythonhosted.org/packages/c1/ca/e8df252986763156f11b539968167daf109f709b7030a2990fa70f87eb18/ptufile-2024.4.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "03649f178fb89cade58ed55401bf4f5d9accedccaedca0d56b9060e8d5c60fb9",
                "md5": "ccdcb509a76a297a57ffd1973e097209",
                "sha256": "8095d1b69b16dc406b7fc8afd47adeb4b71e1404e2ac92abcc07dcf1dddbf424"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "ccdcb509a76a297a57ffd1973e097209",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 143940,
            "upload_time": "2024-04-25T19:01:48",
            "upload_time_iso_8601": "2024-04-25T19:01:48.792486Z",
            "url": "https://files.pythonhosted.org/packages/03/64/9f178fb89cade58ed55401bf4f5d9accedccaedca0d56b9060e8d5c60fb9/ptufile-2024.4.24-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "80a52e3705824f7fd073e103cb7f1c0b48a79073f3942c106f6057f31f136ab9",
                "md5": "1580a822bc22471cd60c21ab2fd46fa0",
                "sha256": "4ef447d27bb3982ebcbd02381d775adcdd6ace73d764c72d561fd84f7db4c592"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1580a822bc22471cd60c21ab2fd46fa0",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 174179,
            "upload_time": "2024-04-25T19:01:50",
            "upload_time_iso_8601": "2024-04-25T19:01:50.417762Z",
            "url": "https://files.pythonhosted.org/packages/80/a5/2e3705824f7fd073e103cb7f1c0b48a79073f3942c106f6057f31f136ab9/ptufile-2024.4.24-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cd86fe8e694fb878c72f6ed0dba3f159995a56bfcc483a06029db3fe9730d4b6",
                "md5": "727cd821264cb9f45cc0e1ca311e0f00",
                "sha256": "9a7383e3527bf7e4bd481daccf951cf20dea21e7d4a88030c3f40a6ed32bfd4d"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp311-cp311-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "727cd821264cb9f45cc0e1ca311e0f00",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 146279,
            "upload_time": "2024-04-25T19:01:51",
            "upload_time_iso_8601": "2024-04-25T19:01:51.490610Z",
            "url": "https://files.pythonhosted.org/packages/cd/86/fe8e694fb878c72f6ed0dba3f159995a56bfcc483a06029db3fe9730d4b6/ptufile-2024.4.24-cp311-cp311-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ebd1043ea97e1a45726f9e3e18c5bcd2c53ebc42ebb2b708291b5b5f9700bef0",
                "md5": "f4fc9194581eef2d50db40421ca8a7aa",
                "sha256": "f701a93ef73622615a58bbd1bca5caa76bee05ef7c3652108d091983cfedf6b2"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp312-cp312-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f4fc9194581eef2d50db40421ca8a7aa",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 211212,
            "upload_time": "2024-04-25T19:01:52",
            "upload_time_iso_8601": "2024-04-25T19:01:52.645583Z",
            "url": "https://files.pythonhosted.org/packages/eb/d1/043ea97e1a45726f9e3e18c5bcd2c53ebc42ebb2b708291b5b5f9700bef0/ptufile-2024.4.24-cp312-cp312-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ca5e555abda783fd6e8a005c651b3d5061a32e31d8ea17e3cb360eb8bb97da40",
                "md5": "929c52966663748232c2689a8bb41efd",
                "sha256": "84354acde3e57fb443aab3c25060a5eda580c2a07e8af35d41a6b2498a46c7a5"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "929c52966663748232c2689a8bb41efd",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 195115,
            "upload_time": "2024-04-25T19:01:53",
            "upload_time_iso_8601": "2024-04-25T19:01:53.963628Z",
            "url": "https://files.pythonhosted.org/packages/ca/5e/555abda783fd6e8a005c651b3d5061a32e31d8ea17e3cb360eb8bb97da40/ptufile-2024.4.24-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "75c081f5fc55652a8dc33a03a656379897083e3392204c47a88dfb7e4e40d1f8",
                "md5": "4863281483ba70e6b55d20e2ea7ebf8a",
                "sha256": "bd4c2546507a1ec485cb2a7d735df1af61412b2ec8fce92b09284cbe3142c214"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4863281483ba70e6b55d20e2ea7ebf8a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1322178,
            "upload_time": "2024-04-25T19:01:55",
            "upload_time_iso_8601": "2024-04-25T19:01:55.815096Z",
            "url": "https://files.pythonhosted.org/packages/75/c0/81f5fc55652a8dc33a03a656379897083e3392204c47a88dfb7e4e40d1f8/ptufile-2024.4.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e54c4e16638674edc4849d10d28fe4c25174da254b3b796fa293cc953d29df3e",
                "md5": "0f37b95f78c60e96e2e089203a7506f7",
                "sha256": "81dd20d74ff3d5a11104d856596e401854fd2b7a80c21158bd05c3085a4b5af4"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "0f37b95f78c60e96e2e089203a7506f7",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 147406,
            "upload_time": "2024-04-25T19:01:58",
            "upload_time_iso_8601": "2024-04-25T19:01:58.005817Z",
            "url": "https://files.pythonhosted.org/packages/e5/4c/4e16638674edc4849d10d28fe4c25174da254b3b796fa293cc953d29df3e/ptufile-2024.4.24-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8b3ac3446930469eb3c3e07416eff1f33024f41519bbd8f9fcd047d4badc7c77",
                "md5": "5a3044750d66a35a112bc678fc0ecf13",
                "sha256": "fa8d178efdd7bc033600438e66bd95815d4ae177cf205d20fb325e015d712441"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5a3044750d66a35a112bc678fc0ecf13",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 177592,
            "upload_time": "2024-04-25T19:01:59",
            "upload_time_iso_8601": "2024-04-25T19:01:59.316062Z",
            "url": "https://files.pythonhosted.org/packages/8b/3a/c3446930469eb3c3e07416eff1f33024f41519bbd8f9fcd047d4badc7c77/ptufile-2024.4.24-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6415530760d9e2a74383e32768e65142009f56885af1291626c7803a4d9355a8",
                "md5": "b50547f257b7eb5ed6b4741ee15d62b9",
                "sha256": "46bd652cd98bcb7e9f689ffd32a121f54b71b27ef1dbd55babb79686c60c6906"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp312-cp312-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "b50547f257b7eb5ed6b4741ee15d62b9",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 147517,
            "upload_time": "2024-04-25T19:02:00",
            "upload_time_iso_8601": "2024-04-25T19:02:00.617912Z",
            "url": "https://files.pythonhosted.org/packages/64/15/530760d9e2a74383e32768e65142009f56885af1291626c7803a4d9355a8/ptufile-2024.4.24-cp312-cp312-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ddebec6891b8d53bef8c32dc0e9a407afa9e49d35ba8806a3a7985b04eef1175",
                "md5": "02c3fc8f2c45e5d66c3cc6524b21e702",
                "sha256": "e5c85fd5f384da8eca44d784dca87efdf70c724c1d5f1abab77d2523534a5cf6"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "02c3fc8f2c45e5d66c3cc6524b21e702",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 207759,
            "upload_time": "2024-04-25T19:02:02",
            "upload_time_iso_8601": "2024-04-25T19:02:02.394218Z",
            "url": "https://files.pythonhosted.org/packages/dd/eb/ec6891b8d53bef8c32dc0e9a407afa9e49d35ba8806a3a7985b04eef1175/ptufile-2024.4.24-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "298012ff0d1d646dd01444db44f8954b53aa67bb7fe209bbcea4a665b947cae0",
                "md5": "c63faadfc453623ee8409d99ea3bf91b",
                "sha256": "de544db70a9a7d11591e3bafb462a8cb87d86a0479372a015a866650080cb180"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c63faadfc453623ee8409d99ea3bf91b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 193058,
            "upload_time": "2024-04-25T19:02:03",
            "upload_time_iso_8601": "2024-04-25T19:02:03.491578Z",
            "url": "https://files.pythonhosted.org/packages/29/80/12ff0d1d646dd01444db44f8954b53aa67bb7fe209bbcea4a665b947cae0/ptufile-2024.4.24-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "70c1c6934c703008a12a7ccb4ec53f7745614c9c7951a479252847e289867d42",
                "md5": "78bafcb4e8b989eb0fddfdaa39cb7a71",
                "sha256": "dc1a7e6a3d9598773ea170f6d610912d57e485a3bd58d1fd5788680043ac09d9"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "78bafcb4e8b989eb0fddfdaa39cb7a71",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 1198301,
            "upload_time": "2024-04-25T19:02:04",
            "upload_time_iso_8601": "2024-04-25T19:02:04.799460Z",
            "url": "https://files.pythonhosted.org/packages/70/c1/c6934c703008a12a7ccb4ec53f7745614c9c7951a479252847e289867d42/ptufile-2024.4.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "86d50b31e42cfdd3bb9a5808bc3a86f430bc34802774ec40259cb6b630126236",
                "md5": "742cfca64e455c374602238b02449040",
                "sha256": "7e3f195415f9dc2275cbd161ac81a4540b751f044f08e5f06eedb5aa63d06f92"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "742cfca64e455c374602238b02449040",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 145388,
            "upload_time": "2024-04-25T19:02:06",
            "upload_time_iso_8601": "2024-04-25T19:02:06.253231Z",
            "url": "https://files.pythonhosted.org/packages/86/d5/0b31e42cfdd3bb9a5808bc3a86f430bc34802774ec40259cb6b630126236/ptufile-2024.4.24-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "177052b29d90c0bd18c481a06bfbafc994ff153177a9cb5e89df572e357f1580",
                "md5": "97a901bc22eb15f1ad21975634e7286a",
                "sha256": "139be7ba1888e3dcc7c42095c1460e8d2cff4daf1dcf806accf012d46247efd9"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "97a901bc22eb15f1ad21975634e7286a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 174531,
            "upload_time": "2024-04-25T19:02:07",
            "upload_time_iso_8601": "2024-04-25T19:02:07.529955Z",
            "url": "https://files.pythonhosted.org/packages/17/70/52b29d90c0bd18c481a06bfbafc994ff153177a9cb5e89df572e357f1580/ptufile-2024.4.24-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "091b4ccbbd05696aade530eee2626bc99696f17630b9fd9ba3a55dddcabdb666",
                "md5": "00a2f37deb58998e5a70a641b95e4df5",
                "sha256": "c8053ce5ba1af696ce9ea42db5ed1701e242f2d222a5a4a39cb01a2f0d2e57f8"
            },
            "downloads": -1,
            "filename": "ptufile-2024.4.24.tar.gz",
            "has_sig": false,
            "md5_digest": "00a2f37deb58998e5a70a641b95e4df5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 45159,
            "upload_time": "2024-04-25T19:02:09",
            "upload_time_iso_8601": "2024-04-25T19:02:09.186617Z",
            "url": "https://files.pythonhosted.org/packages/09/1b/4ccbbd05696aade530eee2626bc99696f17630b9fd9ba3a55dddcabdb666/ptufile-2024.4.24.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-25 19:02:09",
    "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: 0.31155s