Skip to main content

Tafra: essence of a dataframe

Project description

Tafra: a minimalist dataframe

PyPI version Python versions Coverage Status Documentation

The tafra began life as a thought experiment: how could we reduce the idea of a dataframe (as expressed in libraries like pandas or languages like R) to its useful essence, while carving away the cruft? The original proof of concept stopped at "group by".

This library expands on the proof of concept to produce a practically useful tafra, which we hope you may find to be a helpful lightweight substitute for certain uses of pandas.

A tafra is, more-or-less, a set of named columns or dimensions. Each of these is a typed numpy array of consistent length, representing the values for each column by rows.

The library provides lightweight syntax for manipulating rows and columns, support for managing data types, iterators for rows and sub-frames, pandas-like "transform" support and conversion from pandas Dataframes, and SQL-style "group by" and join operations.

Category Members
Tafra Tafra
Aggregations Union, GroupBy, Transform, IterateBy, InnerJoin, LeftJoin, CrossJoin
Aggregation Helpers union, union_inplace, group_by, transform, iterate_by, inner_join, left_join, cross_join
Chunking / Partitioning chunks, chunk_rows, partition, concat
Custom Aggregations percentile, geomean, harmean
Constructors as_tafra, from_dataframe, from_series, from_records
SQL Readers read_sql, read_sql_chunks
Destructors to_records, to_list, to_tuple, to_array, to_pandas
Properties rows, columns, data, dtypes, size, ndim, shape
Iter Methods iterrows, itertuples, itercols
Functional Methods row_map, tuple_map, col_map, pipe
Dict-like Methods keys, values, items, get, update, update_inplace, update_dtypes, update_dtypes_inplace
Data Exploration head, tail, sort, sample, describe, value_counts, drop_duplicates
Time Series shift
Other Helper Methods select, copy, rename, rename_inplace, coalesce, coalesce_inplace, _coalesce_dtypes, delete, delete_inplace
Printer Methods pprint, pformat, to_html
Indexing Methods _slice, _index, _ndindex

Getting Started

pip install tafra

Or from conda-forge:

conda install tafra -c conda-forge

Both provide pre-built wheels with the C extension compiled for your platform. No compiler needed.

Building from source

To build from source (including the optional C extension):

git clone https://github.com/petbox-dev/tafra.git
cd tafra
pip install -e .

Requirements:

  • Python >=3.10
  • numpy >=2.1
  • A C compiler (optional, for the _accel extension):
    • Windows: Visual Studio Build Tools (with Windows SDK) or MinGW-w64
    • Linux: gcc (usually pre-installed, or apt install build-essential)
    • macOS: Xcode Command Line Tools (xcode-select --install)

If no C compiler is available, the package installs without the extension and falls back to pure Python + numpy at runtime. To verify the C extension is active:

>>> from tafra._accel import groupby_sum
>>> print("C extension active")

To build a distributable wheel:

pip install build
python -m build

Windows build notes

The C extension requires the MSVC compiler to find the Windows SDK headers. If you get fatal error C1083: Cannot open include file: 'io.h', the Windows SDK include/lib paths are not set. Two options:

  1. Use a Developer Command Prompt (recommended): Open "Developer Command Prompt for VS" or "Developer PowerShell for VS" from the Start menu. This runs vcvarsall.bat automatically and sets all required paths.

  2. Use MinGW-w64 instead of MSVC:

    python setup.py build_ext --inplace --compiler=mingw32
    

    MinGW-w64 can be installed via conda (conda install m2w64-gcc -c conda-forge) or from winlibs.com.

If building with python -m build (which creates an isolated environment), use --no-isolation to inherit your shell's environment variables, or run from a Developer Command Prompt:

python -m build --no-isolation

A short example

>>> from tafra import Tafra

>>> t = Tafra({
...    'x': np.array([1, 2, 3, 4]),
...    'y': np.array(['one', 'two', 'one', 'two']),
... })

>>> t.pformat()
Tafra(data = {
 'x': array([1, 2, 3, 4]),
 'y': array(['one', 'two', 'one', 'two'])},
dtypes = {
 'x': 'int', 'y': 'str'},
rows = 4)

>>> print('List:', '\n', t.to_list())
List:
 [array([1, 2, 3, 4]), array(['one', 'two', 'one', 'two'], dtype=object)]

>>> print('Records:', '\n', tuple(t.to_records()))
Records:
 ((1, 'one'), (2, 'two'), (3, 'one'), (4, 'two'))

>>> gb = t.group_by(
...     ['y'], {'x': sum}
... )

>>> print('Group By:', '\n', gb.pformat())
Group By:
Tafra(data = {
 'x': array([4, 6]), 'y': array(['one', 'two'])},
dtypes = {
 'x': 'int', 'y': 'str'},
rows = 2)

group_by vs partition

group_by reduces -- one row per group, applies aggregation functions:

>>> tf.group_by(['wellid'], {'total_oil': (np.sum, 'oil')})
# Returns: one row per wellid, with summed oil

partition splits -- returns all original rows, grouped into sub-Tafras for independent processing (e.g., multiprocessing):

>>> from concurrent.futures import ProcessPoolExecutor

>>> def forecast_well(tf):
...     """Run a forecast on one well's production data."""
...     # tf contains all rows for a single well, sorted by date
...     return compute_forecast(tf['date'], tf['oil'])

>>> parts = tf.partition(['wellid'], sort_by=['date'])

>>> with ProcessPoolExecutor(max_workers=4) as pool:
...     results = list(pool.map(
...         forecast_well, [sub for _, sub in parts]))

>>> combined = Tafra.concat(results)

With 8 workers and ~13 ms of work per group, partition achieves ~5x speedup over serial execution. For light aggregations (sum, mean, std), group_by is 10-100x faster -- use it instead. See benchmarks for detailed benchmarks.

chunks splits by row count (for data-parallel workloads where group integrity doesn't matter):

>>> for chunk in tf.chunks(n=4, sort_by=['date']):
...     process(chunk)

Flexibility

Have some code that works with pandas, or just a way of doing things that you prefer? tafra is flexible:

>>> df = pd.DataFrame(np.c_[
...     np.array([1, 2, 3, 4]),
...     np.array(['one', 'two', 'one', 'two'])
... ], columns=['x', 'y'])

>>> t = Tafra.from_dataframe(df)

And going back is just as simple:

>>> df = pd.DataFrame(t.data)

Timings

Note: Benchmarks collected with tafra 2.2.0. See benchmarks for full benchmarks against pandas 2.3/3.0 and polars 1.39.

Lightweight means performant. By minimizing abstraction to access the underlying numpy arrays, tafra provides dramatic speedups over pandas and polars on construction and access:

# Construction: 100k rows, 5 columns
Tafra():         0.01 ms
pd.DataFrame():  4.22 ms   # 422x slower
pl.DataFrame():  0.03 ms   # 3x slower

# Column access: 100k rows, per call
tf['x']:         0.09 µs
df['x']:        11.47 µs   # 127x slower
plf['x']:        0.57 µs   # 6x slower

tafra uses vectorized numpy operations (np.bincount, ufunc.reduceat) and an optional C extension (single-pass aggregation, hash-based composite key encoding, hash joins) for GroupBy and joins:

# GroupBy: 10k rows, 50 groups, sum + mean
Tafra+C: 0.15 ms
pandas:  0.71 ms   # 5x slower
polars:  0.54 ms   # 4x slower

# Transform: 1M rows, 1k groups
Tafra+C: 8.44 ms
pandas:  20.90 ms  # 2.5x slower
polars:  9.62 ms   # 1.1x slower

# Numba JIT: 1M rows
Tafra:   7.74 ms
pandas:  7.81 ms   # same (numpy underneath)
polars:  7.87 ms   # +2% (arrow→numpy conversion)

Dtype metadata

Each Tafra tracks column dtypes in _dtypes — a dict of user-declared type labels (e.g. 'str', 'int64', 'float64'). This metadata is the source of truth for dtype validation in joins, unions, and dtype updates. Use update_dtypes_inplace to change a column's type:

>>> t.update_dtypes_inplace({'x': 'str'})  # converts to StringDType
>>> t.update_dtypes_inplace({'x': 'float64'})  # converts to float64

If you assign directly to Tafra.data or Tafra._data, you must call Tafra._coalesce_dtypes() to resync the metadata.

Left join null handling

When a left join has unmatched rows, right-side columns are filled with native null values where possible:

  • String columnsStringDType(na_object=None) with None
  • Float columns → original dtype with NaN
  • Datetime/timedelta columns → original dtype with NaT
  • Int/bool/bytes columnsobject dtype with None (a warning is emitted)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tafra-2.2.4.tar.gz (76.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tafra-2.2.4-cp313-cp313-win_amd64.whl (62.2 kB view details)

Uploaded CPython 3.13Windows x86-64

tafra-2.2.4-cp313-cp313-win32.whl (61.5 kB view details)

Uploaded CPython 3.13Windows x86

tafra-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (98.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

tafra-2.2.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (98.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

tafra-2.2.4-cp313-cp313-macosx_11_0_arm64.whl (58.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tafra-2.2.4-cp312-cp312-win_amd64.whl (62.2 kB view details)

Uploaded CPython 3.12Windows x86-64

tafra-2.2.4-cp312-cp312-win32.whl (61.5 kB view details)

Uploaded CPython 3.12Windows x86

tafra-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (98.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

tafra-2.2.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (98.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

tafra-2.2.4-cp312-cp312-macosx_11_0_arm64.whl (58.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tafra-2.2.4-cp311-cp311-win_amd64.whl (62.0 kB view details)

Uploaded CPython 3.11Windows x86-64

tafra-2.2.4-cp311-cp311-win32.whl (61.2 kB view details)

Uploaded CPython 3.11Windows x86

tafra-2.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (95.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

tafra-2.2.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (96.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

tafra-2.2.4-cp311-cp311-macosx_11_0_arm64.whl (58.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tafra-2.2.4-cp310-cp310-win_amd64.whl (62.0 kB view details)

Uploaded CPython 3.10Windows x86-64

tafra-2.2.4-cp310-cp310-win32.whl (61.2 kB view details)

Uploaded CPython 3.10Windows x86

tafra-2.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (94.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

tafra-2.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (95.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

tafra-2.2.4-cp310-cp310-macosx_11_0_arm64.whl (58.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file tafra-2.2.4.tar.gz.

File metadata

  • Download URL: tafra-2.2.4.tar.gz
  • Upload date:
  • Size: 76.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tafra-2.2.4.tar.gz
Algorithm Hash digest
SHA256 55c8020b4e6a55e9bc52599c8e321899bb9704ca026497f276d3544f5f02400d
MD5 9e64f630a8852b7d5b0533c6b48b3cf3
BLAKE2b-256 738c5cb565e82181adc604787619a614c9c8c8634a2c1cbf2e11188723f303f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4.tar.gz:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: tafra-2.2.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 62.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tafra-2.2.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4a13c9902aa9d7c61763d80bfbd35c3dd0cf37a6b5a41f6d6cbe932692303c71
MD5 7e1748f86518bbf4dde329ab44e84c5b
BLAKE2b-256 05b8691e530a1e3056bf06e8401064872f471ce3676589b532dee618dd4e039e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp313-cp313-win32.whl.

File metadata

  • Download URL: tafra-2.2.4-cp313-cp313-win32.whl
  • Upload date:
  • Size: 61.5 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tafra-2.2.4-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 9c320be88e04cb6c23598619d974444e7474dc7047e840abe35ef13d59c9cf5a
MD5 f679d51bbbb89c12a55debfe2c9b5577
BLAKE2b-256 5593ef22851be108a3fb5ed147ed5c25c82f2c85c0d958af5b6a655636f5227e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp313-cp313-win32.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c06cf25a8c6ff8e94ac9d83f4216e8cac764b44db5fa556c647c2bf9ec15330c
MD5 a55d076d52be12d4baff34b7c346f412
BLAKE2b-256 2b02a98389769bce962e94d334ceeab191766a3a0014270a2f3a595d7c2009f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 35fbfb3344b3e772f3a3d123ebd34446998cb3010cc16dcc61b09e55962fd77c
MD5 79fa267f9bff93feb67ce0c188b3b85b
BLAKE2b-256 7494f0c7f673a85a50954d845097c23191f932f6d50324b3a2c969089205a13e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 96cc139ab5e38149884bc660c589b48566743935682f403f1471a364d9c17444
MD5 3e1361593572ce079a5d7564c5cf5de0
BLAKE2b-256 09a91c07fa6481a4992b5918a7acc9c091a4b3ca96ab016cfaabbadc1edd2fd0

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: tafra-2.2.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 62.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tafra-2.2.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4ecde0fce7630c60135c4a3ca466557c399a6e62ae880185fe92d1b3af06985b
MD5 42920d23abef4801b6dbfd3c9b64012e
BLAKE2b-256 9bb63006208e0c98206b285f36568452ea4d8212811135a3752dba2e4438c19f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp312-cp312-win32.whl.

File metadata

  • Download URL: tafra-2.2.4-cp312-cp312-win32.whl
  • Upload date:
  • Size: 61.5 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tafra-2.2.4-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 0eb490ea890d8db0a257369713b577f10eb0c1886cdbaeeabc5da3e66bd2a7a8
MD5 c150a48ba555ae4de9f8984d1e304da4
BLAKE2b-256 e8f90614556ff6ef3fbf1d299ae080d83878385eacd43bed823903c7657a0796

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp312-cp312-win32.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e2154167fe83c092787f5fac58046de16958d5462e476c7ba96f87d777e44731
MD5 33e360ded17bfaf8b46df7813947e284
BLAKE2b-256 b4d7add88736181c4bfbe2d4a6ef4f9d9892f2ea7cf8de2a49028797012e8ae7

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7113e6f9a139455f83509631f4c806dd79a532c5b3690c8c989b058d690721ea
MD5 6b545e8e14ec77139e846e65c680fc77
BLAKE2b-256 c1f78438d148e7cc4009216562b180d1587aecb451d08d9ccffc8f6acd5326ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d7604199d899b231143feff90160e7ab744e168e2c7d32c80681dd6fcd45012c
MD5 e599ae49714ad964dc546af2f9b4dc38
BLAKE2b-256 468fe453bef69f006d1618d31a2414544e15913983bd60a316c10ef6f4c1270a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: tafra-2.2.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 62.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tafra-2.2.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1925196ecba6c89881c9d13ac260d9c2801c229309746d30c5f8bc33e06e947d
MD5 3a64784e0547b9bad6cf149c4e0fbe39
BLAKE2b-256 9de5629e4b4671a821193de4b285c9b457f25523fead4c9d97998bb05f2bd4cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp311-cp311-win32.whl.

File metadata

  • Download URL: tafra-2.2.4-cp311-cp311-win32.whl
  • Upload date:
  • Size: 61.2 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tafra-2.2.4-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 e8c6c796c7a3c95adbcffd8cde5a1413fcb9d02f69af00a9d3482de33b4381fa
MD5 326974f390e27499be7fc9ed1dfec914
BLAKE2b-256 110256df515ba4e38c9c5fbd32a4f31b77a2d4aa173ddc2ef626109398f8aabc

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp311-cp311-win32.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b7e6b58e06e44320e2ef20a0db4f59b8ed623c92b450bb69d713c17ef9b52280
MD5 58f8172d2251e6383726c13d766c6704
BLAKE2b-256 c1da28dc1eb0c2d9271a2980c5e3647319accb88d5f4a9c7c49fbdfb0dfa8a5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b23658152ee6c571402f5df4b376d3747528bc7727c124d8115759b16c45eac4
MD5 b42495390b4f203ca4e74a73674923f4
BLAKE2b-256 e47a1a2e9527d31b0ddf28de6b4fc821e23a2b77ee28cd84782be15599eee649

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 17ecd0d547fb067500df704dd927f085a259c68f5bd6aab462ddaa8a153c28bd
MD5 0884209829eadba7f18d0f78b43c9c35
BLAKE2b-256 55c79fc3fc75e84afe443767bccfec7c10cea56c5f60379fb0c184f57073b511

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: tafra-2.2.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 62.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tafra-2.2.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a1a1fe83f0110c0ea8da12719b0390d1e83da8895099db2b3af07fbeb64e959e
MD5 b49090c62cec293d3961759da1a173e4
BLAKE2b-256 18f383e5269db803c0d3bb8953248202c9eaaf7a10bfcefcb38930996e9a6449

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp310-cp310-win32.whl.

File metadata

  • Download URL: tafra-2.2.4-cp310-cp310-win32.whl
  • Upload date:
  • Size: 61.2 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tafra-2.2.4-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 6a81b69d0898809cfc597d99ed97a548b1a2410b315369f4bab0c4126259a824
MD5 ab48c08d1a42129bb21a5a09ba8a0af0
BLAKE2b-256 c5856daad74b3809f8be556947b3539cec5a9ca979734ff4bfdc11ccc703d5dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp310-cp310-win32.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 33423f7a1a08abb38ca9afbeb6ef62fe136d8d55652165b4103df7c3df62eb92
MD5 209e9c1d69e7c2bfad4995970ab58281
BLAKE2b-256 2cfc39f33c650bb2ef79d138bd18d0750c83a3517c440897475a93925192e715

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1c8fe7cdbbd5f92bcdfd936b35dd2ada9661edeb835d536e1548922f36262e0a
MD5 2e927d133651a5ef50e9a01a0d7d956c
BLAKE2b-256 6e42c8fb266a1a8799c0a4f932cc735ae879b444f8f3f3acfe24e2f0008fd46a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tafra-2.2.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tafra-2.2.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c9253290723388a52b616e35bb0f5a6b820d091cd81261672239293d26087c46
MD5 469c103338b5af898fbc7d32942ad47a
BLAKE2b-256 3a65832e3d7a73bb62719a2891d19774e361d4f13af12329f89e94d4ae576c79

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.4-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on petbox-dev/tafra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page