Read and write PicoQuant PTU and related files
==============================================
Ptufile is a Python library to
1. read data and metadata from PicoQuant PTU and related files
(PHU, PCK, PCO, PFS, PUS, PQRES, PQDAT, and SPQR), and
2. write TCSPC histograms to T3 image mode PTU files.
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: 2025.7.30
: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.11.9, 3.12.10, 3.13.5, 3.14.0rc 64-bit
- `NumPy <https://pypi.org/project/numpy>`_ 2.3.2
- `Xarray <https://pypi.org/project/xarray>`_ 2025.7.1 (recommended)
- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.10.3 (optional)
- `Tifffile <https://pypi.org/project/tifffile/>`_ 2025.6.11 (optional)
- `Numcodecs <https://pypi.org/project/numcodecs/>`_ 0.16.1 (optional)
- `Python-dateutil <https://pypi.org/project/python-dateutil/>`_ 2.9.0
(optional)
- `Cython <https://pypi.org/project/cython/>`_ 3.1.2 (build)
Revisions
---------
2025.7.30
- Add option to specify pixel time for decoding images.
- Add functions to read and write PicoQuant BIN files.
- Drop support for Python 3.10.
2025.5.10
- Mark Cython extension free-threading compatible.
- Support Python 3.14.
2025.2.20
- Rename PqFileMagic to PqFileType (breaking).
- Rename PqFile.magic to PqFile.type (breaking).
- Add PQDAT and SPQR file types.
2025.2.12
- Add options to specify file open modes to PqFile and PtuFile.read_records.
- Add convenience properties to PqFile and PtuFile.
- Cache records read from file.
2025.1.13
- Fall back to file size if TTResult_NumberOfRecords is zero (#2).
2024.12.28
- Add imwrite function to encode TCSPC image histogram in T3 PTU format.
- Add enums for more PTU tag values.
- Add PqFile.datetime property.
- Read TDateTime tag as datetime instead of struct_time (breaking).
- Rename PtuFile.type property to record_type (breaking).
- Fix reading PHU missing HistResDscr_HWBaseResolution tag.
- Warn if tags are not 8-byte aligned in file.
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
- …
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 due to the lack of
test files or documentation: PT2 and PT3 files, decoding images from
T2 and SPQR formats, bidirectional per frame, and deprecated image
reconstruction.
Compatibility of written PTU files with other software is limited,
as is decoding line, bidirectional, and sinusoidal scanning.
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/data/Settings.pfs')
>>> pq.type
<PqFileType.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/data/FLIM.ptu')
>>> ptu.type
<PqFileType.PTU: ...>
>>> ptu.record_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()
>>> decoded.dtype
dtype([('time', '<u8'), ('dtime', '<i2'), ('channel', 'i1'), ('marker', 'u1')])
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]], shape=(2, 3126), 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]]],
shape=(1, 256, 256), dtype=uint16)
Alternatively, decode the first channel and integrate all histogram bins
into 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]]]]], shape=(1, 256, 256, 1, 1), 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
...
Write the TCSPC histogram and metadata to a PicoHarpT3 image mode PTU file:
>>> imwrite(
... '_test.ptu',
... ptu[:],
... ptu.global_resolution,
... ptu.tcspc_resolution,
... # optional metadata
... pixel_time=ptu.pixel_time,
... record_type=PtuRecordType.PicoHarpT3,
... comment='Written by ptufile.py',
... tags={'File_RawData_GUID': [ptu.guid]},
... )
Read back the TCSPC histogram from the file:
>>> tcspc_histogram = imread('_test.ptu')
>>> import numpy
>>> numpy.array_equal(tcspc_histogram, ptu[:])
True
Close the file handle:
>>> ptu.close()
Preview the image and metadata in a PTU file from the console::
python -m ptufile tests/data/FLIM.ptu
Raw data
{
"_id": null,
"home_page": "https://www.cgohlke.com",
"name": "ptufile",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": null,
"author": "Christoph Gohlke",
"author_email": "cgohlke@cgohlke.com",
"download_url": "https://files.pythonhosted.org/packages/13/b1/4bae1a47291dc99064e7ffe0154e6e0c57cdb0cadcac513361ee5fc1fb13/ptufile-2025.7.30.tar.gz",
"platform": "any",
"description": "Read and write PicoQuant PTU and related files\n==============================================\n\nPtufile is a Python library to\n\n1. read data and metadata from PicoQuant PTU and related files\n (PHU, PCK, PCO, PFS, PUS, PQRES, PQDAT, and SPQR), and\n2. write TCSPC histograms to T3 image mode PTU files.\n\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: 2025.7.30\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.11.9, 3.12.10, 3.13.5, 3.14.0rc 64-bit\n- `NumPy <https://pypi.org/project/numpy>`_ 2.3.2\n- `Xarray <https://pypi.org/project/xarray>`_ 2025.7.1 (recommended)\n- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.10.3 (optional)\n- `Tifffile <https://pypi.org/project/tifffile/>`_ 2025.6.11 (optional)\n- `Numcodecs <https://pypi.org/project/numcodecs/>`_ 0.16.1 (optional)\n- `Python-dateutil <https://pypi.org/project/python-dateutil/>`_ 2.9.0\n (optional)\n- `Cython <https://pypi.org/project/cython/>`_ 3.1.2 (build)\n\nRevisions\n---------\n\n2025.7.30\n\n- Add option to specify pixel time for decoding images.\n- Add functions to read and write PicoQuant BIN files.\n- Drop support for Python 3.10.\n\n2025.5.10\n\n- Mark Cython extension free-threading compatible.\n- Support Python 3.14.\n\n2025.2.20\n\n- Rename PqFileMagic to PqFileType (breaking).\n- Rename PqFile.magic to PqFile.type (breaking).\n- Add PQDAT and SPQR file types.\n\n2025.2.12\n\n- Add options to specify file open modes to PqFile and PtuFile.read_records.\n- Add convenience properties to PqFile and PtuFile.\n- Cache records read from file.\n\n2025.1.13\n\n- Fall back to file size if TTResult_NumberOfRecords is zero (#2).\n\n2024.12.28\n\n- Add imwrite function to encode TCSPC image histogram in T3 PTU format.\n- Add enums for more PTU tag values.\n- Add PqFile.datetime property.\n- Read TDateTime tag as datetime instead of struct_time (breaking).\n- Rename PtuFile.type property to record_type (breaking).\n- Fix reading PHU missing HistResDscr_HWBaseResolution tag.\n- Warn if tags are not 8-byte aligned in file.\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- \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 due to the lack of\ntest files or documentation: PT2 and PT3 files, decoding images from\nT2 and SPQR formats, bidirectional per frame, and deprecated image\nreconstruction.\n\nCompatibility of written PTU files with other software is limited,\nas is decoding line, bidirectional, and sinusoidal scanning.\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/data/Settings.pfs')\n>>> pq.type\n<PqFileType.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/data/FLIM.ptu')\n>>> ptu.type\n<PqFileType.PTU: ...>\n>>> ptu.record_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>>> decoded.dtype\ndtype([('time', '<u8'), ('dtime', '<i2'), ('channel', 'i1'), ('marker', 'u1')])\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]], shape=(2, 3126), 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]]],\n shape=(1, 256, 256), dtype=uint16)\n\nAlternatively, decode the first channel and integrate all histogram bins\ninto 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]]]]], shape=(1, 256, 256, 1, 1), 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\nWrite the TCSPC histogram and metadata to a PicoHarpT3 image mode PTU file:\n\n>>> imwrite(\n... '_test.ptu',\n... ptu[:],\n... ptu.global_resolution,\n... ptu.tcspc_resolution,\n... # optional metadata\n... pixel_time=ptu.pixel_time,\n... record_type=PtuRecordType.PicoHarpT3,\n... comment='Written by ptufile.py',\n... tags={'File_RawData_GUID': [ptu.guid]},\n... )\n\nRead back the TCSPC histogram from the file:\n\n>>> tcspc_histogram = imread('_test.ptu')\n>>> import numpy\n>>> numpy.array_equal(tcspc_histogram, ptu[:])\nTrue\n\nClose the file handle:\n\n>>> ptu.close()\n\nPreview the image and metadata in a PTU file from the console::\n\n python -m ptufile tests/data/FLIM.ptu\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Read and write PicoQuant PTU and related files",
"version": "2025.7.30",
"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": null,
"digests": {
"blake2b_256": "e843260542feb63801828695c38317708359f433b52e5c0f71fc68fbea186792",
"md5": "29b8c0c92564a65175b6b8e2aecb33d6",
"sha256": "ee88a43a2df0e3d5bd88cc4066a6b6ac3f8f3f51bff27519234ade7331e9a193"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "29b8c0c92564a65175b6b8e2aecb33d6",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 215689,
"upload_time": "2025-07-30T00:26:54",
"upload_time_iso_8601": "2025-07-30T00:26:54.984028Z",
"url": "https://files.pythonhosted.org/packages/e8/43/260542feb63801828695c38317708359f433b52e5c0f71fc68fbea186792/ptufile-2025.7.30-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4fda6018c2db3c0709922821ad08586d51308df79110c182ea11311b362d2050",
"md5": "712c498749ecaa7655b2f0995a9eb2e7",
"sha256": "97a6c3dd439de31149a20cf56af3b4338461886010fb42050612a08f544c5e2c"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "712c498749ecaa7655b2f0995a9eb2e7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 198489,
"upload_time": "2025-07-30T00:26:56",
"upload_time_iso_8601": "2025-07-30T00:26:56.326479Z",
"url": "https://files.pythonhosted.org/packages/4f/da/6018c2db3c0709922821ad08586d51308df79110c182ea11311b362d2050/ptufile-2025.7.30-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "320dce53fc34e25e43ea6505997d42ac935ebc12be97aa9d228f3128cddd35f5",
"md5": "b314c4a0d96c6f9832298535570edfd2",
"sha256": "bc776e589c7b4fb6bc419155c24524cc2bbf0974ef1d467f4b473dd2638dafb3"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "b314c4a0d96c6f9832298535570edfd2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 1475388,
"upload_time": "2025-07-30T00:26:57",
"upload_time_iso_8601": "2025-07-30T00:26:57.393601Z",
"url": "https://files.pythonhosted.org/packages/32/0d/ce53fc34e25e43ea6505997d42ac935ebc12be97aa9d228f3128cddd35f5/ptufile-2025.7.30-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c6c91bd041f201a025300d44f12607824d39dff0a3112a269a78ae9b60e32dc8",
"md5": "21881539c7e4e93a1951277cf583385b",
"sha256": "68d7137f14907f990a363354f18220b37ffffa19a0052189526d9bcf4b73692e"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "21881539c7e4e93a1951277cf583385b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 1473269,
"upload_time": "2025-07-30T00:26:58",
"upload_time_iso_8601": "2025-07-30T00:26:58.897179Z",
"url": "https://files.pythonhosted.org/packages/c6/c9/1bd041f201a025300d44f12607824d39dff0a3112a269a78ae9b60e32dc8/ptufile-2025.7.30-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "08664d6ebfbbf17a5054262b8ec8dfcf7513bc4a1989667812279847f0262e3c",
"md5": "abb05f14fa49e58e12941307bcbd2d33",
"sha256": "2f0deca3f527ad1ad3a38df88aa1bd643af6011e510eef383d33363458600dd6"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "abb05f14fa49e58e12941307bcbd2d33",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 146747,
"upload_time": "2025-07-30T00:26:59",
"upload_time_iso_8601": "2025-07-30T00:26:59.959746Z",
"url": "https://files.pythonhosted.org/packages/08/66/4d6ebfbbf17a5054262b8ec8dfcf7513bc4a1989667812279847f0262e3c/ptufile-2025.7.30-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4213f44bb51c6b21eb0a27ce0250ca6578fe41054cd2bdc0b853a9154f2e59e9",
"md5": "f84bc433e7632e94234195a001f7203f",
"sha256": "e5f738043698301f49414fc9b25ec45b03f926fc891d67bc71a025f090b40ed8"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "f84bc433e7632e94234195a001f7203f",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 182003,
"upload_time": "2025-07-30T00:27:01",
"upload_time_iso_8601": "2025-07-30T00:27:01.147241Z",
"url": "https://files.pythonhosted.org/packages/42/13/f44bb51c6b21eb0a27ce0250ca6578fe41054cd2bdc0b853a9154f2e59e9/ptufile-2025.7.30-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e569c65833737dba821002b89d586dc80d65bf0e66b2001625888b39c5638dac",
"md5": "b21edce772fb93e8a9c428bb53b8e575",
"sha256": "8b405361363e4b61b6aab7e2a6a1ed8a4e237d799765537b84969ceac6fc6755"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp311-cp311-win_arm64.whl",
"has_sig": false,
"md5_digest": "b21edce772fb93e8a9c428bb53b8e575",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 155845,
"upload_time": "2025-07-30T00:27:02",
"upload_time_iso_8601": "2025-07-30T00:27:02.057338Z",
"url": "https://files.pythonhosted.org/packages/e5/69/c65833737dba821002b89d586dc80d65bf0e66b2001625888b39c5638dac/ptufile-2025.7.30-cp311-cp311-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eb78b1ad260798f3092e4c7fa577faeb8b298f780d71589f73664b7c2e592703",
"md5": "a0a3ba1d8b95c491b8a3e832a09bb671",
"sha256": "72c8b0db320b1542208a7f629a707d9fa9e99aacf051e34b6a2938eff57f23d2"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp312-cp312-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "a0a3ba1d8b95c491b8a3e832a09bb671",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 225236,
"upload_time": "2025-07-30T00:27:03",
"upload_time_iso_8601": "2025-07-30T00:27:03.009221Z",
"url": "https://files.pythonhosted.org/packages/eb/78/b1ad260798f3092e4c7fa577faeb8b298f780d71589f73664b7c2e592703/ptufile-2025.7.30-cp312-cp312-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eb3cd3a10896a7f1df0c677125f836446b48463b60e80553f95f208ca686e089",
"md5": "87cbdcfe750fc3b7206c0c0b569d6e27",
"sha256": "191cf1c0bf61b418367010aa5297ace38a36c5ebc48ae1cd45e0775cd97244ae"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "87cbdcfe750fc3b7206c0c0b569d6e27",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 197996,
"upload_time": "2025-07-30T00:27:03",
"upload_time_iso_8601": "2025-07-30T00:27:03.973774Z",
"url": "https://files.pythonhosted.org/packages/eb/3c/d3a10896a7f1df0c677125f836446b48463b60e80553f95f208ca686e089/ptufile-2025.7.30-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3df398131c0291e5c82a8c69803d83e483a6633607b4c8398c4e13fc7fb48ed2",
"md5": "3342104198322b86bc4d446c5e36a706",
"sha256": "b76ff9da77b9fe05017749123c8c90d286279876aeef521da9bcf19874a6bd57"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "3342104198322b86bc4d446c5e36a706",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 1492194,
"upload_time": "2025-07-30T00:27:05",
"upload_time_iso_8601": "2025-07-30T00:27:05.326098Z",
"url": "https://files.pythonhosted.org/packages/3d/f3/98131c0291e5c82a8c69803d83e483a6633607b4c8398c4e13fc7fb48ed2/ptufile-2025.7.30-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c5dcaaa033bb3bf95db3b3b6a03e006b32e7d86d5a9db1759b869981bf444ba3",
"md5": "319aca1df13d25edad0ac2e9ffdedb56",
"sha256": "b8148114fb3ff238508533e11017a79fea95cf292888e2c459736dfd6d1ccdf7"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "319aca1df13d25edad0ac2e9ffdedb56",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 1519439,
"upload_time": "2025-07-30T00:27:06",
"upload_time_iso_8601": "2025-07-30T00:27:06.568827Z",
"url": "https://files.pythonhosted.org/packages/c5/dc/aaa033bb3bf95db3b3b6a03e006b32e7d86d5a9db1759b869981bf444ba3/ptufile-2025.7.30-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ce977c66249c2cdf198ebbc5ea49b83a69c1168b98d5637ed0c6fc4d125ec86a",
"md5": "508d8dc3893a76b6a33dca56d7dd693d",
"sha256": "096b1723a1bbf5e81c69b614eab029b4934ccfbeaef2def97418541c67689725"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "508d8dc3893a76b6a33dca56d7dd693d",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 150186,
"upload_time": "2025-07-30T00:27:07",
"upload_time_iso_8601": "2025-07-30T00:27:07.733742Z",
"url": "https://files.pythonhosted.org/packages/ce/97/7c66249c2cdf198ebbc5ea49b83a69c1168b98d5637ed0c6fc4d125ec86a/ptufile-2025.7.30-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "374d6fce995356a6e04597cb9097c40cbcd891e7ba0381da81d356aba57628e4",
"md5": "ea247a7f0e49b902746c25e9631cdb8b",
"sha256": "9b9e3a88325d4ebea17e6d501a89c9f978cb3fc4e2ba9d4e4087a3c1c23c1b5b"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "ea247a7f0e49b902746c25e9631cdb8b",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 185440,
"upload_time": "2025-07-30T00:27:08",
"upload_time_iso_8601": "2025-07-30T00:27:08.610272Z",
"url": "https://files.pythonhosted.org/packages/37/4d/6fce995356a6e04597cb9097c40cbcd891e7ba0381da81d356aba57628e4/ptufile-2025.7.30-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9a02800da82436bc7cb350e36b2d4ad97fb7e80d2f649afc296aae372656bf0d",
"md5": "64677c67c06a094a53d52bf9586084a5",
"sha256": "db73e6fc6406ba88342d5129a2df062661fa12517814d226a34c80558d6b0c25"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp312-cp312-win_arm64.whl",
"has_sig": false,
"md5_digest": "64677c67c06a094a53d52bf9586084a5",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 156346,
"upload_time": "2025-07-30T00:27:09",
"upload_time_iso_8601": "2025-07-30T00:27:09.519375Z",
"url": "https://files.pythonhosted.org/packages/9a/02/800da82436bc7cb350e36b2d4ad97fb7e80d2f649afc296aae372656bf0d/ptufile-2025.7.30-cp312-cp312-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bcfe5a4ae6c8d42ef56864bc79b8652047991f6fa5fe5ad41798b6ba173ccb1b",
"md5": "335016eb41f69aa45aeca9cc9636b199",
"sha256": "058c7ec71b15b384eaa4089e2fbfbde8c8209a395cdf07e4ece6bc4519a2b5cb"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp313-cp313-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "335016eb41f69aa45aeca9cc9636b199",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 223884,
"upload_time": "2025-07-30T00:27:10",
"upload_time_iso_8601": "2025-07-30T00:27:10.768515Z",
"url": "https://files.pythonhosted.org/packages/bc/fe/5a4ae6c8d42ef56864bc79b8652047991f6fa5fe5ad41798b6ba173ccb1b/ptufile-2025.7.30-cp313-cp313-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "04423d759b27e219120c6394eeb524765f106d3c2502d30d3fcbb0a0b9f361d8",
"md5": "1216caf15041b35d4da5b82a5abb0eeb",
"sha256": "112d58c151b89b33611921614a7747df63f6e6d95b7b5088e1bad5a7f8666922"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1216caf15041b35d4da5b82a5abb0eeb",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 196756,
"upload_time": "2025-07-30T00:27:12",
"upload_time_iso_8601": "2025-07-30T00:27:12.065886Z",
"url": "https://files.pythonhosted.org/packages/04/42/3d759b27e219120c6394eeb524765f106d3c2502d30d3fcbb0a0b9f361d8/ptufile-2025.7.30-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2b2a09e1b9bb4204cfe84e05419ee830460c576df3f35b0720926af3316680b5",
"md5": "bf84201227812bc08e837f4ffb727953",
"sha256": "3d44a5a8c5e60565430e0122c15d97b138819cc02f4965039d3ee89311a46e6b"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "bf84201227812bc08e837f4ffb727953",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 1502879,
"upload_time": "2025-07-30T00:27:13",
"upload_time_iso_8601": "2025-07-30T00:27:13.426498Z",
"url": "https://files.pythonhosted.org/packages/2b/2a/09e1b9bb4204cfe84e05419ee830460c576df3f35b0720926af3316680b5/ptufile-2025.7.30-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f7a87b76e1fc0e10c71dc236c105cc03ca6a4d9c1968d98e3c1fe786db58f6c0",
"md5": "03af5c474d97c44fb5628673918facea",
"sha256": "721a66df1b58ed05154f0d62a74e6e96a55c99d068166ae88f752e99210856d3"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "03af5c474d97c44fb5628673918facea",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 1526174,
"upload_time": "2025-07-30T00:27:14",
"upload_time_iso_8601": "2025-07-30T00:27:14.609900Z",
"url": "https://files.pythonhosted.org/packages/f7/a8/7b76e1fc0e10c71dc236c105cc03ca6a4d9c1968d98e3c1fe786db58f6c0/ptufile-2025.7.30-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a37165c609fa1042f355e1c715522ddf70641034e35f9eed70480e736e19bd0d",
"md5": "0274f21e0f377282760a3e195997540d",
"sha256": "4189feda19d3232e5c5b8c0673535387f3c1caf47aa4471e6279f848067826e6"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp313-cp313-win32.whl",
"has_sig": false,
"md5_digest": "0274f21e0f377282760a3e195997540d",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 149487,
"upload_time": "2025-07-30T00:27:16",
"upload_time_iso_8601": "2025-07-30T00:27:16.115185Z",
"url": "https://files.pythonhosted.org/packages/a3/71/65c609fa1042f355e1c715522ddf70641034e35f9eed70480e736e19bd0d/ptufile-2025.7.30-cp313-cp313-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "862f77355879877e342355a6b886b1e54dec57781963dda4238f522e0aecda2b",
"md5": "f6bcb645c8cc5b264de4408cc1af1f9d",
"sha256": "fddb87f1d795e9ad83c26027e5196cfb3ce93e49610b013d16ff743d115425ec"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "f6bcb645c8cc5b264de4408cc1af1f9d",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 185309,
"upload_time": "2025-07-30T00:27:17",
"upload_time_iso_8601": "2025-07-30T00:27:17.299593Z",
"url": "https://files.pythonhosted.org/packages/86/2f/77355879877e342355a6b886b1e54dec57781963dda4238f522e0aecda2b/ptufile-2025.7.30-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f2ad7ca0c38b5eb525ca33925724949183e90b9370aae86de640c4f159696649",
"md5": "98b788af1f2b7c9e360385600fb6b6e3",
"sha256": "205d84738a45681a6262c2092be5fa5159142555b6129d00b166b5aba71a6719"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp313-cp313-win_arm64.whl",
"has_sig": false,
"md5_digest": "98b788af1f2b7c9e360385600fb6b6e3",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 156334,
"upload_time": "2025-07-30T00:27:18",
"upload_time_iso_8601": "2025-07-30T00:27:18.217730Z",
"url": "https://files.pythonhosted.org/packages/f2/ad/7ca0c38b5eb525ca33925724949183e90b9370aae86de640c4f159696649/ptufile-2025.7.30-cp313-cp313-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "62e44cd748effa962305b819c7e836bb340fa0ee7a89b5af288df568c8f743e3",
"md5": "c2489b5b76abc1751c4c560e50f46c1d",
"sha256": "d65638f4d2325a0590a6cd2346e56cf0bb1a85203aaf5ef39c6ca321dfabb233"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "c2489b5b76abc1751c4c560e50f46c1d",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 225397,
"upload_time": "2025-07-30T00:27:19",
"upload_time_iso_8601": "2025-07-30T00:27:19.068211Z",
"url": "https://files.pythonhosted.org/packages/62/e4/4cd748effa962305b819c7e836bb340fa0ee7a89b5af288df568c8f743e3/ptufile-2025.7.30-cp314-cp314-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2ee8dc3ca56a32a9949c8d251e7c1c177c648173c381e1cf97449c523a24d9d7",
"md5": "f64f14c920c182c859d65ac031c4ec20",
"sha256": "03570fb8a9b1471f06ae3b0c1234e363b766f75f798c55351f6140091a74d64d"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f64f14c920c182c859d65ac031c4ec20",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 197755,
"upload_time": "2025-07-30T00:27:20",
"upload_time_iso_8601": "2025-07-30T00:27:20.406021Z",
"url": "https://files.pythonhosted.org/packages/2e/e8/dc3ca56a32a9949c8d251e7c1c177c648173c381e1cf97449c523a24d9d7/ptufile-2025.7.30-cp314-cp314-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3d62d87b9fef5b338284c47de1f5cd906a553d78e9a34490467325b974680dc4",
"md5": "ebce2aacfb65313ead497cfdb4400dfe",
"sha256": "06a6b7c24583cc93aac731c20cb41a301eb29245beb7303943c22f776712cd92"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "ebce2aacfb65313ead497cfdb4400dfe",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 1504228,
"upload_time": "2025-07-30T00:27:21",
"upload_time_iso_8601": "2025-07-30T00:27:21.789846Z",
"url": "https://files.pythonhosted.org/packages/3d/62/d87b9fef5b338284c47de1f5cd906a553d78e9a34490467325b974680dc4/ptufile-2025.7.30-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b7e00d8a90fc3ae0b1d0f5c6f845411ecc12034da743c2bb5c4023ca73500147",
"md5": "15cab725e62c549d5a2884d708aca31a",
"sha256": "644e8d8ba4fe9aff4c2f760e08ddab8de7708bb0eb6e1e378c296e365746543e"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "15cab725e62c549d5a2884d708aca31a",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 1511350,
"upload_time": "2025-07-30T00:27:24",
"upload_time_iso_8601": "2025-07-30T00:27:24.545735Z",
"url": "https://files.pythonhosted.org/packages/b7/e0/0d8a90fc3ae0b1d0f5c6f845411ecc12034da743c2bb5c4023ca73500147/ptufile-2025.7.30-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cd41dc6e2da376bc3f6877069dac4fe369ab8c4eab336734e1564b6d119d4a82",
"md5": "c746d15067c8d233181a44027a08f33f",
"sha256": "6fa20ed1cf5551d8a668ceb8a271d357b74769f2dd54e7358e15031da84f8b2e"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314t-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "c746d15067c8d233181a44027a08f33f",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 241090,
"upload_time": "2025-07-30T00:27:29",
"upload_time_iso_8601": "2025-07-30T00:27:29.796838Z",
"url": "https://files.pythonhosted.org/packages/cd/41/dc6e2da376bc3f6877069dac4fe369ab8c4eab336734e1564b6d119d4a82/ptufile-2025.7.30-cp314-cp314t-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "93379cfd82a8d312174b21be37fc76ff43d101eea05e5d1797ca8d70c8fa56ee",
"md5": "435a273a429f713f9a7870439f44a4d5",
"sha256": "99abfa3b7ab195b4386453b86faf6542e3dc9e3fff4ef710eb1aa8274e16be07"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314t-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "435a273a429f713f9a7870439f44a4d5",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 226112,
"upload_time": "2025-07-30T00:27:31",
"upload_time_iso_8601": "2025-07-30T00:27:31.072003Z",
"url": "https://files.pythonhosted.org/packages/93/37/9cfd82a8d312174b21be37fc76ff43d101eea05e5d1797ca8d70c8fa56ee/ptufile-2025.7.30-cp314-cp314t-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a38c4d464881fa9afe00edf2370c9deecded8697f59bfdbe088459d1ff370e34",
"md5": "e427ef1f7b0dabdda18b5db8f1b8f431",
"sha256": "f47d30d23423e81464c4eac3074fb29746c53179b590cdd8f02b752d7485e686"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "e427ef1f7b0dabdda18b5db8f1b8f431",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 1473412,
"upload_time": "2025-07-30T00:27:32",
"upload_time_iso_8601": "2025-07-30T00:27:32.113772Z",
"url": "https://files.pythonhosted.org/packages/a3/8c/4d464881fa9afe00edf2370c9deecded8697f59bfdbe088459d1ff370e34/ptufile-2025.7.30-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "05297c48e61c94d898ee6ec39a0fdf9477e675a40f3cca414f72171904596d6d",
"md5": "80df16050e3c7276b0059ef2f9641275",
"sha256": "108c1b4b26e6d0b62ab2041fa33b09f16f273b94f95c9b266c0d19aab0a30a1e"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "80df16050e3c7276b0059ef2f9641275",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 1416837,
"upload_time": "2025-07-30T00:27:33",
"upload_time_iso_8601": "2025-07-30T00:27:33.275531Z",
"url": "https://files.pythonhosted.org/packages/05/29/7c48e61c94d898ee6ec39a0fdf9477e675a40f3cca414f72171904596d6d/ptufile-2025.7.30-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a44e3cbe20a19e0bf78c5ab019e0bf86a226467be4ca13430a98e34657d47e81",
"md5": "b9e6d7d74da2e2fb285768b590568f51",
"sha256": "bde25d9ecfaecd4f1fae659b445a054914931239030d2d1b78d01e2348d7c420"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314t-win32.whl",
"has_sig": false,
"md5_digest": "b9e6d7d74da2e2fb285768b590568f51",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 182773,
"upload_time": "2025-07-30T00:27:34",
"upload_time_iso_8601": "2025-07-30T00:27:34.348895Z",
"url": "https://files.pythonhosted.org/packages/a4/4e/3cbe20a19e0bf78c5ab019e0bf86a226467be4ca13430a98e34657d47e81/ptufile-2025.7.30-cp314-cp314t-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3df4f41cab9094c75434f1b23fb0313a7481ec0b799bbfc81904ea944519add8",
"md5": "d6a37ff197bb009943ba39f2da8da97a",
"sha256": "170852b1b1a0d65b6abe2b43cdf6acab999f4a3989dfaaa1f6a4e906166efb45"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314t-win_amd64.whl",
"has_sig": false,
"md5_digest": "d6a37ff197bb009943ba39f2da8da97a",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 218808,
"upload_time": "2025-07-30T00:27:35",
"upload_time_iso_8601": "2025-07-30T00:27:35.286654Z",
"url": "https://files.pythonhosted.org/packages/3d/f4/f41cab9094c75434f1b23fb0313a7481ec0b799bbfc81904ea944519add8/ptufile-2025.7.30-cp314-cp314t-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "10fbc5861001ea8191aef79e2e00fa71c33a2a732d54783c8b7f298bd8ec9d2a",
"md5": "6f0bcada310e1eaa3a8a107409b8c1e3",
"sha256": "7b7dd68f51a97f9b6bcea7ede438ad6e483e2d66844b7eb35c2b858c010d9d8c"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314t-win_arm64.whl",
"has_sig": false,
"md5_digest": "6f0bcada310e1eaa3a8a107409b8c1e3",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 171205,
"upload_time": "2025-07-30T00:27:36",
"upload_time_iso_8601": "2025-07-30T00:27:36.230374Z",
"url": "https://files.pythonhosted.org/packages/10/fb/c5861001ea8191aef79e2e00fa71c33a2a732d54783c8b7f298bd8ec9d2a/ptufile-2025.7.30-cp314-cp314t-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2a4e5a1ed1db52ef4b830d0fbd82854c717edd0cca45d2d487c074e8f4f70932",
"md5": "fabb797cd3d087f575f9970dca5c5ec6",
"sha256": "3977a9965a7f013861e734293ba7b8b5ba66a8d1fca8ac0a2ff62ccf3540d5b3"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314-win32.whl",
"has_sig": false,
"md5_digest": "fabb797cd3d087f575f9970dca5c5ec6",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 153167,
"upload_time": "2025-07-30T00:27:26",
"upload_time_iso_8601": "2025-07-30T00:27:26.180982Z",
"url": "https://files.pythonhosted.org/packages/2a/4e/5a1ed1db52ef4b830d0fbd82854c717edd0cca45d2d487c074e8f4f70932/ptufile-2025.7.30-cp314-cp314-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a39d6e6afa3cbe489e980412c5397216478ada1280805aa4cc169a7d22bf68e1",
"md5": "72c835c1b61acc9a96d6530c7944868c",
"sha256": "f84d880c6d618ab7736b870ac18c98739a19f04ce8aad04099c1afc8c6d0db2b"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314-win_amd64.whl",
"has_sig": false,
"md5_digest": "72c835c1b61acc9a96d6530c7944868c",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 190261,
"upload_time": "2025-07-30T00:27:27",
"upload_time_iso_8601": "2025-07-30T00:27:27.374324Z",
"url": "https://files.pythonhosted.org/packages/a3/9d/6e6afa3cbe489e980412c5397216478ada1280805aa4cc169a7d22bf68e1/ptufile-2025.7.30-cp314-cp314-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "51b46d85506343d6bd7a1b07df743d763ceaca55309259992ed156f78fe03774",
"md5": "2f3271ca0acd26d46ee6355c3e91b064",
"sha256": "b5a025e46dc4fb663c1176d82848d43780bb1c2e17528feb7229720fbce18622"
},
"downloads": -1,
"filename": "ptufile-2025.7.30-cp314-cp314-win_arm64.whl",
"has_sig": false,
"md5_digest": "2f3271ca0acd26d46ee6355c3e91b064",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.11",
"size": 161054,
"upload_time": "2025-07-30T00:27:28",
"upload_time_iso_8601": "2025-07-30T00:27:28.928180Z",
"url": "https://files.pythonhosted.org/packages/51/b4/6d85506343d6bd7a1b07df743d763ceaca55309259992ed156f78fe03774/ptufile-2025.7.30-cp314-cp314-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "13b14bae1a47291dc99064e7ffe0154e6e0c57cdb0cadcac513361ee5fc1fb13",
"md5": "90e1c95d97f78e44c280310900de055f",
"sha256": "ff9d4456629b28d9a4257a8781ac72563d988f17902bb3ad841ef6beb6e1b803"
},
"downloads": -1,
"filename": "ptufile-2025.7.30.tar.gz",
"has_sig": false,
"md5_digest": "90e1c95d97f78e44c280310900de055f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 66555,
"upload_time": "2025-07-30T00:27:37",
"upload_time_iso_8601": "2025-07-30T00:27:37.111957Z",
"url": "https://files.pythonhosted.org/packages/13/b1/4bae1a47291dc99064e7ffe0154e6e0c57cdb0cadcac513361ee5fc1fb13/ptufile-2025.7.30.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-30 00:27:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "cgohlke",
"github_project": "ptufile",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "ptufile"
}