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.12.20
: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.8, 3.13.1 64-bit
- `NumPy <https://pypi.org/project/numpy>`_ 2.1.3
- `Xarray <https://pypi.org/project/xarray>`_ 2024.11.0 (recommended)
- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.10.0 (optional)
- `Tifffile <https://pypi.org/project/tifffile/>`_ 2024.12.12 (optional)
- `Numcodecs <https://pypi.org/project/numcodecs/>`_ 0.14.1 (optional)
- `Cython <https://pypi.org/project/cython/>`_ 3.0.11 (build)
Revisions
---------
2024.12.20
- Support bi-directional sinusoidal scanning (WIP).
2024.11.26
- Support bi-directional scanning (FLIMbee scanner).
- Drop support for Python 3.9.
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
- …
Refer to the CHANGES file for older revisions.
Notes
-----
`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, and deprecated image reconstruction.
Line, bidirectional, and sinusoidal scanning are limited tested.
Other modules for reading or writing 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>`_,
`fastFLIM <https://github.com/RobertMolenaar-UT/fastFLIM>`_,
`PyPTU <https://gitlab.inria.fr/jrye/pyptu>`_,
`PTU_Reader <https://github.com/UU-cellbiology/PTU_Reader>`_,
`PTU_Writer <https://github.com/ekatrukha/PTU_Writer>`_,
`FlimReader <https://github.com/flimfit/FlimReader>`_,
`tangy <https://github.com/Peter-Barrow/tangy>`_,
`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/>`_,
`tttr-toolbox <https://github.com/GCBallesteros/tttr-toolbox/>`_), and
`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.10",
"maintainer_email": null,
"keywords": null,
"author": "Christoph Gohlke",
"author_email": "cgohlke@cgohlke.com",
"download_url": "https://files.pythonhosted.org/packages/6e/d9/cc03a9db95aa1ec0ea65200cf82fd7f0d0fa367d311808055417b8684c10/ptufile-2024.12.20.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.12.20\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.8, 3.13.1 64-bit\n- `NumPy <https://pypi.org/project/numpy>`_ 2.1.3\n- `Xarray <https://pypi.org/project/xarray>`_ 2024.11.0 (recommended)\n- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.10.0 (optional)\n- `Tifffile <https://pypi.org/project/tifffile/>`_ 2024.12.12 (optional)\n- `Numcodecs <https://pypi.org/project/numcodecs/>`_ 0.14.1 (optional)\n- `Cython <https://pypi.org/project/cython/>`_ 3.0.11 (build)\n\nRevisions\n---------\n\n2024.12.20\n\n- Support bi-directional sinusoidal scanning (WIP).\n\n2024.11.26\n\n- Support bi-directional scanning (FLIMbee scanner).\n- Drop support for Python 3.9.\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- \u2026\n\nRefer to the CHANGES file for older revisions.\n\nNotes\n-----\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, and deprecated image reconstruction.\nLine, bidirectional, and sinusoidal scanning are limited tested.\n\nOther modules for reading or writing PicoQuant files are\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`fastFLIM <https://github.com/RobertMolenaar-UT/fastFLIM>`_,\n`PyPTU <https://gitlab.inria.fr/jrye/pyptu>`_,\n`PTU_Reader <https://github.com/UU-cellbiology/PTU_Reader>`_,\n`PTU_Writer <https://github.com/ekatrukha/PTU_Writer>`_,\n`FlimReader <https://github.com/flimfit/FlimReader>`_,\n`tangy <https://github.com/Peter-Barrow/tangy>`_,\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/>`_ (wrapper of\n`trattoria-core <https://pypi.org/project/trattoria-core/>`_,\n`tttr-toolbox <https://github.com/GCBallesteros/tttr-toolbox/>`_), and\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.12.20",
"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": "cb90ae7c72a6b8d905a639106e9c1b08f641cdff4cb35a2ada1104dae55453d4",
"md5": "b1006bef3e7f588f3194dc542f094837",
"sha256": "8a14bdcf67494789beb24b0134ac9f8593173e2c39dea3d3ec4e13907ebb6872"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "b1006bef3e7f588f3194dc542f094837",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 202362,
"upload_time": "2024-12-21T05:32:34",
"upload_time_iso_8601": "2024-12-21T05:32:34.734452Z",
"url": "https://files.pythonhosted.org/packages/cb/90/ae7c72a6b8d905a639106e9c1b08f641cdff4cb35a2ada1104dae55453d4/ptufile-2024.12.20-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3b54c8b1f825d93d6d4fb2f086c52163fd92653297142a6cb913d6c534aa8ced",
"md5": "34ea04aa1a58ad32d52f6174b5f38e49",
"sha256": "bfefb76c0983e77296dbcd8456645d223fc202de8717c0ef9e5d81b8313d975b"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "34ea04aa1a58ad32d52f6174b5f38e49",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 187826,
"upload_time": "2024-12-21T05:32:37",
"upload_time_iso_8601": "2024-12-21T05:32:37.413224Z",
"url": "https://files.pythonhosted.org/packages/3b/54/c8b1f825d93d6d4fb2f086c52163fd92653297142a6cb913d6c534aa8ced/ptufile-2024.12.20-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ca64a5e6ae2c5b6d8cc00c772fa91278c8cfdcd7df6ba30dc1a1352dea34f90b",
"md5": "23e374d8f7162da9ae4903b8747b31c9",
"sha256": "18cc8236bd381d2a59d764a23db368a7e8daffe8263c2626f3285ffde69c0a84"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "23e374d8f7162da9ae4903b8747b31c9",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1224077,
"upload_time": "2024-12-21T05:32:39",
"upload_time_iso_8601": "2024-12-21T05:32:39.838275Z",
"url": "https://files.pythonhosted.org/packages/ca/64/a5e6ae2c5b6d8cc00c772fa91278c8cfdcd7df6ba30dc1a1352dea34f90b/ptufile-2024.12.20-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3dbd72b1c6f4121e52a67a29a174e211f3e67e6cbf6e3cea8061ec1658785e36",
"md5": "34bbd23d8841e1bdcdc617e91dfa5fc5",
"sha256": "ac4eefd7fbaf1cd9a37bb565e9b66672ffc08117b3bb34936845d97a2a0ceb22"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "34bbd23d8841e1bdcdc617e91dfa5fc5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1224962,
"upload_time": "2024-12-21T05:32:41",
"upload_time_iso_8601": "2024-12-21T05:32:41.237088Z",
"url": "https://files.pythonhosted.org/packages/3d/bd/72b1c6f4121e52a67a29a174e211f3e67e6cbf6e3cea8061ec1658785e36/ptufile-2024.12.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "83c69e5979cfd34a1a4d1dbcbff1d6409850cf3b39a61f6c04de955e5167c483",
"md5": "d96fb29a79f21c527404e17e092fbf44",
"sha256": "df34696fe437f09f4d7e63739d85419087952a109ac2603e24b5c06c2ee948c4"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "d96fb29a79f21c527404e17e092fbf44",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 148203,
"upload_time": "2024-12-21T05:32:43",
"upload_time_iso_8601": "2024-12-21T05:32:43.770281Z",
"url": "https://files.pythonhosted.org/packages/83/c6/9e5979cfd34a1a4d1dbcbff1d6409850cf3b39a61f6c04de955e5167c483/ptufile-2024.12.20-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9e25df62daa0fab06179dfecc60ab128b9082f43da7b32a6052db563d8ec8c01",
"md5": "ea07a6770847e8d087b4303892bb431b",
"sha256": "2401c60365bd0443589cf3033f46a54fbb66df7f19584e432af9097751793740"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "ea07a6770847e8d087b4303892bb431b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 178768,
"upload_time": "2024-12-21T05:32:46",
"upload_time_iso_8601": "2024-12-21T05:32:46.121177Z",
"url": "https://files.pythonhosted.org/packages/9e/25/df62daa0fab06179dfecc60ab128b9082f43da7b32a6052db563d8ec8c01/ptufile-2024.12.20-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "34f804414fca21912f3630f0b1b466146928654b64a04f0c7cd0d67265f0c7f1",
"md5": "622f4e8fc397d62eb14d1312196a48fe",
"sha256": "540832140fdd821e392b5b0037d825a425f29e128f57053e9d1beda2bbe12abf"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "622f4e8fc397d62eb14d1312196a48fe",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 201743,
"upload_time": "2024-12-21T05:32:48",
"upload_time_iso_8601": "2024-12-21T05:32:48.371188Z",
"url": "https://files.pythonhosted.org/packages/34/f8/04414fca21912f3630f0b1b466146928654b64a04f0c7cd0d67265f0c7f1/ptufile-2024.12.20-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "791cd7fd4c40c85c72c75c99e60159f7b2c1306f970ddca68d14b90c6c1ed0af",
"md5": "430bde9ae17d59a6ca0d5a44673ed32c",
"sha256": "741f6a957dbe81ac874d267d41493b145b9f0ea4d6591f3c3f02b760dd68824b"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "430bde9ae17d59a6ca0d5a44673ed32c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 187193,
"upload_time": "2024-12-21T05:32:49",
"upload_time_iso_8601": "2024-12-21T05:32:49.494174Z",
"url": "https://files.pythonhosted.org/packages/79/1c/d7fd4c40c85c72c75c99e60159f7b2c1306f970ddca68d14b90c6c1ed0af/ptufile-2024.12.20-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9d43e3e1990fe8cf56507cbedec19abcbe7d74f23cd510949d00e56003ff2143",
"md5": "e014dbfac40aecf4a44e9fea3195f951",
"sha256": "da75ed94bc6a11bda434b79034fd2383a07b836d9c1a8f58f938e91682af2ff6"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "e014dbfac40aecf4a44e9fea3195f951",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1352836,
"upload_time": "2024-12-21T05:32:50",
"upload_time_iso_8601": "2024-12-21T05:32:50.680633Z",
"url": "https://files.pythonhosted.org/packages/9d/43/e3e1990fe8cf56507cbedec19abcbe7d74f23cd510949d00e56003ff2143/ptufile-2024.12.20-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e8c5f861b5d3b20cc7097ed1e037564a93c9ec159b0eb915399057fdf1a82df5",
"md5": "5af94266216d861d74390a65aa70cbd8",
"sha256": "b7f386350ca00efdcba4abc5b5eb71b4515c0a18d2d23997fc7453839e28a44f"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "5af94266216d861d74390a65aa70cbd8",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1362416,
"upload_time": "2024-12-21T05:32:52",
"upload_time_iso_8601": "2024-12-21T05:32:52.025735Z",
"url": "https://files.pythonhosted.org/packages/e8/c5/f861b5d3b20cc7097ed1e037564a93c9ec159b0eb915399057fdf1a82df5/ptufile-2024.12.20-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "326216424a6ee5de880f6b852cefec4d05f027ea85b9b1bbe94e072f53d9d464",
"md5": "040b4b7b3979ccb375bda5e8cd0c05f6",
"sha256": "2ddce060f656a1842b598569bcf3b6c8932dbf7a712a0b682499d879c730d900"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "040b4b7b3979ccb375bda5e8cd0c05f6",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 148007,
"upload_time": "2024-12-21T05:32:54",
"upload_time_iso_8601": "2024-12-21T05:32:54.824740Z",
"url": "https://files.pythonhosted.org/packages/32/62/16424a6ee5de880f6b852cefec4d05f027ea85b9b1bbe94e072f53d9d464/ptufile-2024.12.20-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9fc1baac9e78ade0e8d41b7a8164b6fb5a90057851b5b6f26b33d6f238cb00d9",
"md5": "d4c4b66c0b41958ddc88683adaddbabd",
"sha256": "57316823270df85a10433d4216beb13d92948ecb164b80a9fe9e27218a226a02"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "d4c4b66c0b41958ddc88683adaddbabd",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 180439,
"upload_time": "2024-12-21T05:32:57",
"upload_time_iso_8601": "2024-12-21T05:32:57.101453Z",
"url": "https://files.pythonhosted.org/packages/9f/c1/baac9e78ade0e8d41b7a8164b6fb5a90057851b5b6f26b33d6f238cb00d9/ptufile-2024.12.20-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0bcb43c0b4f07d9b9f91a6c1e0c7aea3ddbb81ae888de0ac4533ae5e6df0511c",
"md5": "8c7da57d1350313aeab72a920576e111",
"sha256": "957d5ed8d4498b47d36dc81ac7c7a1e8456f4983b75171960ad8d4c1b2ce4247"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp311-cp311-win_arm64.whl",
"has_sig": false,
"md5_digest": "8c7da57d1350313aeab72a920576e111",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 151112,
"upload_time": "2024-12-21T05:32:58",
"upload_time_iso_8601": "2024-12-21T05:32:58.241514Z",
"url": "https://files.pythonhosted.org/packages/0b/cb/43c0b4f07d9b9f91a6c1e0c7aea3ddbb81ae888de0ac4533ae5e6df0511c/ptufile-2024.12.20-cp311-cp311-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f979bf5311372accc31c9c62c2661dd1875f9df56913cf4591ea39a0dba9bb97",
"md5": "2c6eea4ad350ff96aac5feb74a8df1e2",
"sha256": "84a0682aa026a83c3d9472ded659fa26119fa79d6e9aa6f0518fd2d58baafb03"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp312-cp312-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "2c6eea4ad350ff96aac5feb74a8df1e2",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 213011,
"upload_time": "2024-12-21T05:32:59",
"upload_time_iso_8601": "2024-12-21T05:32:59.847383Z",
"url": "https://files.pythonhosted.org/packages/f9/79/bf5311372accc31c9c62c2661dd1875f9df56913cf4591ea39a0dba9bb97/ptufile-2024.12.20-cp312-cp312-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "504f2445b716d8a8bd33c715edb53e16be399c442596c0dd158e7ee26328deb2",
"md5": "a7e0960705518010a3243d2825d60e2d",
"sha256": "ae0bf82ecbcba8e23d0dc3cfa91676b6981f76b3a04034e414a46e62644ac783"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "a7e0960705518010a3243d2825d60e2d",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 190093,
"upload_time": "2024-12-21T05:33:02",
"upload_time_iso_8601": "2024-12-21T05:33:02.070796Z",
"url": "https://files.pythonhosted.org/packages/50/4f/2445b716d8a8bd33c715edb53e16be399c442596c0dd158e7ee26328deb2/ptufile-2024.12.20-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4b3c17d70d33bc31c33744370fb6214c6169361aed229e30d9b692c0a495032e",
"md5": "516d54cdbbb043a16754cf6591f91d36",
"sha256": "ccd27c1080134f3827bc45e9a93acca1c1f6ef0d5efee0e6ddeb8d3c0e1817e4"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "516d54cdbbb043a16754cf6591f91d36",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1325090,
"upload_time": "2024-12-21T05:33:04",
"upload_time_iso_8601": "2024-12-21T05:33:04.882362Z",
"url": "https://files.pythonhosted.org/packages/4b/3c/17d70d33bc31c33744370fb6214c6169361aed229e30d9b692c0a495032e/ptufile-2024.12.20-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "507469c16b3d3f5ae2e195ca80b68042834f2b4439e79f6dbb913a90ab55cc55",
"md5": "d20b4b1ecad1e130f35bf638deeec816",
"sha256": "6bc0326596b0dd6e01281953a9698a0b9c4a8937c0cd612b02caf35b0d468705"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "d20b4b1ecad1e130f35bf638deeec816",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1326637,
"upload_time": "2024-12-21T05:33:07",
"upload_time_iso_8601": "2024-12-21T05:33:07.542655Z",
"url": "https://files.pythonhosted.org/packages/50/74/69c16b3d3f5ae2e195ca80b68042834f2b4439e79f6dbb913a90ab55cc55/ptufile-2024.12.20-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7dc925314b8db77522918df30bbd1659a7113d6d23a3803c7f6daa8f7e545dcf",
"md5": "21ec26ddc60dd57e3ebe3bc84f0fde99",
"sha256": "93e4d0ccdff32af6880ff11e1905a44212f219adf5c3013d2222ed51b77b3ac6"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "21ec26ddc60dd57e3ebe3bc84f0fde99",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 151531,
"upload_time": "2024-12-21T05:33:08",
"upload_time_iso_8601": "2024-12-21T05:33:08.851771Z",
"url": "https://files.pythonhosted.org/packages/7d/c9/25314b8db77522918df30bbd1659a7113d6d23a3803c7f6daa8f7e545dcf/ptufile-2024.12.20-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8f84d1dd03105381b071bca614a1a7c1d0251470bf8ad88f52f518af41ab2965",
"md5": "617ec33fd53212ade58762ba46aa951a",
"sha256": "64c16b633a9121c2bf683507bcd4dbc3e07bd8d33ac32cd1a559616f5b9eef23"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "617ec33fd53212ade58762ba46aa951a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 182045,
"upload_time": "2024-12-21T05:33:09",
"upload_time_iso_8601": "2024-12-21T05:33:09.971059Z",
"url": "https://files.pythonhosted.org/packages/8f/84/d1dd03105381b071bca614a1a7c1d0251470bf8ad88f52f518af41ab2965/ptufile-2024.12.20-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4001f1cb9dde7877e24085478aa97ebf7ec57566af7c96990d5fa68923fd0e6d",
"md5": "0a5ef2d9103a1257dab33d454e7a145e",
"sha256": "19755f6c33e137ecc78b11ac45f1a2472426f9f2ea0eb05b26e5522ebc907261"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp312-cp312-win_arm64.whl",
"has_sig": false,
"md5_digest": "0a5ef2d9103a1257dab33d454e7a145e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 151616,
"upload_time": "2024-12-21T05:33:11",
"upload_time_iso_8601": "2024-12-21T05:33:11.599257Z",
"url": "https://files.pythonhosted.org/packages/40/01/f1cb9dde7877e24085478aa97ebf7ec57566af7c96990d5fa68923fd0e6d/ptufile-2024.12.20-cp312-cp312-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0ea58cff7c5f99a85e6e6d0b45b03efc106566f2e9073268ac207708208914b5",
"md5": "d718da9f63e139433ffe2c899df14e48",
"sha256": "a19935ff2ae720acf6f0dd09c90ba5a6dee95a0eafd8b9c1a4a1f4fb86f0b359"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp313-cp313-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "d718da9f63e139433ffe2c899df14e48",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 211005,
"upload_time": "2024-12-21T05:33:12",
"upload_time_iso_8601": "2024-12-21T05:33:12.636878Z",
"url": "https://files.pythonhosted.org/packages/0e/a5/8cff7c5f99a85e6e6d0b45b03efc106566f2e9073268ac207708208914b5/ptufile-2024.12.20-cp313-cp313-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9b413c038703dc3f281a379acf1a67fcc265911dbdf427ec253840fc306f0ad0",
"md5": "d6dd69f5545f067ace89d3b1fdd43c13",
"sha256": "5402d5853645152966a60873aed5cd87c9a855104aed5a70050babe900539457"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "d6dd69f5545f067ace89d3b1fdd43c13",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 190732,
"upload_time": "2024-12-21T05:33:17",
"upload_time_iso_8601": "2024-12-21T05:33:17.609959Z",
"url": "https://files.pythonhosted.org/packages/9b/41/3c038703dc3f281a379acf1a67fcc265911dbdf427ec253840fc306f0ad0/ptufile-2024.12.20-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "99b0142e70b7893d1ceb5a9b9f47ac934c314e61e7b05fe04a403d6d376cad06",
"md5": "8bf8fde2a7ad1a65be9d316e776d04ef",
"sha256": "3e3fbf9ca96fb530888f38b1e61d7d586f8013af65a6e3d597cf3cfd7b9b83e3"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "8bf8fde2a7ad1a65be9d316e776d04ef",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 1311548,
"upload_time": "2024-12-21T05:33:18",
"upload_time_iso_8601": "2024-12-21T05:33:18.738282Z",
"url": "https://files.pythonhosted.org/packages/99/b0/142e70b7893d1ceb5a9b9f47ac934c314e61e7b05fe04a403d6d376cad06/ptufile-2024.12.20-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d8616fbe947f08c7189b36f6913ab1c5def434883149cfed5f7b8e54a66f7583",
"md5": "82a5334f222b6e5f210b7c208153681b",
"sha256": "e2282f2bd32b4e973d802809e9b490355c209aae756a7becb372764632fab78c"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "82a5334f222b6e5f210b7c208153681b",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 1314519,
"upload_time": "2024-12-21T05:33:21",
"upload_time_iso_8601": "2024-12-21T05:33:21.274753Z",
"url": "https://files.pythonhosted.org/packages/d8/61/6fbe947f08c7189b36f6913ab1c5def434883149cfed5f7b8e54a66f7583/ptufile-2024.12.20-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "62fc57649853e70cb06dce2d63b2e48e8dc0c8d46ebfd6a48078049a6c8e369f",
"md5": "cb53c150aef5c35cf7ec29ea02a88bde",
"sha256": "291d46a92dc0a04ee8025913b0195ec49ec3ffea157a580ffc6b2b20949c33d7"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp313-cp313-win32.whl",
"has_sig": false,
"md5_digest": "cb53c150aef5c35cf7ec29ea02a88bde",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 150941,
"upload_time": "2024-12-21T05:33:22",
"upload_time_iso_8601": "2024-12-21T05:33:22.978876Z",
"url": "https://files.pythonhosted.org/packages/62/fc/57649853e70cb06dce2d63b2e48e8dc0c8d46ebfd6a48078049a6c8e369f/ptufile-2024.12.20-cp313-cp313-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0ed98094900b4d907d17f5c4e91d3f89e72c058e3d6d4a8514d33b35189dcf07",
"md5": "e23b34ecddc8b29789884b5d542c68c6",
"sha256": "5b20880a659f4cffb5811a88d524f4ce8c87643a02fd1126d329926dab14e859"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "e23b34ecddc8b29789884b5d542c68c6",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 181993,
"upload_time": "2024-12-21T05:33:24",
"upload_time_iso_8601": "2024-12-21T05:33:24.271405Z",
"url": "https://files.pythonhosted.org/packages/0e/d9/8094900b4d907d17f5c4e91d3f89e72c058e3d6d4a8514d33b35189dcf07/ptufile-2024.12.20-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d550755aeefbbf51b73ae379cec4c72c4076cd92dfd34b4624003ae299d28e95",
"md5": "b30b2affbd00de938267d216c8da5ea2",
"sha256": "94c8cc7bfeb55fa5fbe7e63ce2c0d410741ea4d5a81dbf572bdab3deeedce398"
},
"downloads": -1,
"filename": "ptufile-2024.12.20-cp313-cp313-win_arm64.whl",
"has_sig": false,
"md5_digest": "b30b2affbd00de938267d216c8da5ea2",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 151631,
"upload_time": "2024-12-21T05:33:26",
"upload_time_iso_8601": "2024-12-21T05:33:26.091265Z",
"url": "https://files.pythonhosted.org/packages/d5/50/755aeefbbf51b73ae379cec4c72c4076cd92dfd34b4624003ae299d28e95/ptufile-2024.12.20-cp313-cp313-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6ed9cc03a9db95aa1ec0ea65200cf82fd7f0d0fa367d311808055417b8684c10",
"md5": "108583dda014d69cb4bf1c4b60e760be",
"sha256": "c162f149f8fd9a2dfa4975ab3e01977811720f1636890133486194af4094b448"
},
"downloads": -1,
"filename": "ptufile-2024.12.20.tar.gz",
"has_sig": false,
"md5_digest": "108583dda014d69cb4bf1c4b60e760be",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 50279,
"upload_time": "2024-12-21T05:33:28",
"upload_time_iso_8601": "2024-12-21T05:33:28.470599Z",
"url": "https://files.pythonhosted.org/packages/6e/d9/cc03a9db95aa1ec0ea65200cf82fd7f0d0fa367d311808055417b8684c10/ptufile-2024.12.20.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-21 05:33:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "cgohlke",
"github_project": "ptufile",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "ptufile"
}