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.1.tar.gz (60.5 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.1-cp313-cp313-win_amd64.whl (56.8 kB view details)

Uploaded CPython 3.13Windows x86-64

tafra-2.2.1-cp313-cp313-win32.whl (55.7 kB view details)

Uploaded CPython 3.13Windows x86

tafra-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (87.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

tafra-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (86.8 kB view details)

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

tafra-2.2.1-cp313-cp313-macosx_11_0_arm64.whl (53.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tafra-2.2.1-cp312-cp312-win_amd64.whl (56.8 kB view details)

Uploaded CPython 3.12Windows x86-64

tafra-2.2.1-cp312-cp312-win32.whl (55.7 kB view details)

Uploaded CPython 3.12Windows x86

tafra-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (87.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

tafra-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (86.8 kB view details)

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

tafra-2.2.1-cp312-cp312-macosx_11_0_arm64.whl (53.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tafra-2.2.1-cp311-cp311-win_amd64.whl (56.6 kB view details)

Uploaded CPython 3.11Windows x86-64

tafra-2.2.1-cp311-cp311-win32.whl (55.6 kB view details)

Uploaded CPython 3.11Windows x86

tafra-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (85.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

tafra-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (84.4 kB view details)

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

tafra-2.2.1-cp311-cp311-macosx_11_0_arm64.whl (53.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tafra-2.2.1-cp310-cp310-win_amd64.whl (56.6 kB view details)

Uploaded CPython 3.10Windows x86-64

tafra-2.2.1-cp310-cp310-win32.whl (55.6 kB view details)

Uploaded CPython 3.10Windows x86

tafra-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (84.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

tafra-2.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (83.8 kB view details)

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

tafra-2.2.1-cp310-cp310-macosx_11_0_arm64.whl (53.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for tafra-2.2.1.tar.gz
Algorithm Hash digest
SHA256 853f235edc068801dc1a3617bf0cd8cb58bd8f5d67f52e6888527cbd03fba7cb
MD5 1de9ec0e0d6b9adb0c879750cb0cd56e
BLAKE2b-256 cc2527aae68bf3bb0f3789256b3b1caf1d7edd9cadad3b3c61c92a7984b9bbc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1.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.1-cp313-cp313-win_amd64.whl.

File metadata

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

File hashes

Hashes for tafra-2.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 82b11a8ebce91a32d8feeb9f8984e4e105e313f7d717da71da1690321cb51fec
MD5 d4884f0cbc5f3b98886e83a1eb96fece
BLAKE2b-256 c652ba6d2707e4b38581fc4f6b21b7b013c1b4666e4363b6f5f2be701f507339

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp313-cp313-win32.whl.

File metadata

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

File hashes

Hashes for tafra-2.2.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 5f3012baa8e3034d179618da72c30483af3c7e2f21b3e95c9f66390dc672f9a1
MD5 c2c4e04668a906c70bcfb8ec0943a0be
BLAKE2b-256 567ecba4df86ee26ffbe20524ff85aeec980769bd3975550937a2f939cde3d5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9b0dbc572a02674432820970493f5590e69c6b0096ae67f82f15a4fccfad292b
MD5 b10744e544996c336126c19a3dd9b221
BLAKE2b-256 bb66e01e407b613dfb5b6e23c6c851b8e245c98d03bab364f08843f4bcaaa393

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7fda5159157335e3b9129a452c982f4ead6d3414ca17662dbd6b83cb02dbc845
MD5 99d49a3df3f78db00eb9d66d89ed49b4
BLAKE2b-256 c0966bde3bdff31e8d327219e890f1c586b3b1cd320252b02489773dca9dbfd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 31753e0c3a443c3bc955c4e1ca7f170896de82c87084305a2032bb843fc12a81
MD5 f0913b3f7f13b1b93de0c9968953e98a
BLAKE2b-256 81aaa4f876208c5de10dbe5b59a9ed09ee88fce40d86bcb63647733bcc4fc875

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp312-cp312-win_amd64.whl.

File metadata

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

File hashes

Hashes for tafra-2.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6647fb0a9fb22ce19ab144713119d71f6491cd12f78fea991b7646a08c2c54b9
MD5 2ef953eb157e97551ac5f6c09fb02b60
BLAKE2b-256 d499e1a8c5fdf3e7f5c88c86c763d4234914a41942e66ef9878af29fc6fb99ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp312-cp312-win32.whl.

File metadata

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

File hashes

Hashes for tafra-2.2.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 fa352c7da71fba669f6331940996919293a5f0012157d6590a70fc58dfc632f0
MD5 8742e24efcc7e7b0767141622f7b57db
BLAKE2b-256 a9677590d0d8ff8652a17a5dbc8ddc374c093c5ea5b34379adc945a3d0516dc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5b697fdf5990047df65d25ce542469ba5e4fe9f0344ccf966f72e0255cc86929
MD5 eb90d1e3cd3d61ba11a605e336ba0c73
BLAKE2b-256 5d1c97d22983652d9a6580cc08f143359c6480a3a4b89183cc8b94ec122b2b3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5fb5c7114557b140b71a9670de1087666a8d46be67daccd287b011bb095e5441
MD5 8a24f1541e8e3319914dd6b302ec9c0a
BLAKE2b-256 a7ea50c8315299932e74af32b41f7a207d51c3c0bd33586e5494d4335664f3a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a96549c45b5e02f0b5e0762da39071f2b09faaa8dcbfee6cbc198391a486154c
MD5 4262a2c353aca445066d89d16c009b29
BLAKE2b-256 47d47ad79dc7adc6994f8c219a1fce22cacf6430a079f7b877bf2a3b5f30237f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp311-cp311-win_amd64.whl.

File metadata

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

File hashes

Hashes for tafra-2.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 33aa4ccf1dc71e6cddde4b3187f7a9137aa41fbc37ad2c5f6b2b2a3fdaf7b872
MD5 c60a9abc10873a32b0d63dd486f22e2a
BLAKE2b-256 f67389d9797025c114fc39a0b243302e90dd9b659f5a34d853c6a6162de7f3e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp311-cp311-win32.whl.

File metadata

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

File hashes

Hashes for tafra-2.2.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 fa663395d2a0a8139d85f16dd30328253a4e48923217d06f8640f4a9fd2d015f
MD5 373bf47c82337c2fab3b5f20fc5cda8c
BLAKE2b-256 911f8eb0b60b7c2a947c4424dc6d5d33b3a6d0a5e6f8b591f3133bf8092ac71c

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ec975e0f810a76af3d9cafc6616d92d95e0420e19d271329ed80e98a7acb3f9e
MD5 25d2d1328c6002fe5aacfb7f9f89dccc
BLAKE2b-256 8c8dd77a363db47cc73fb05c0bc7acd1c52bcc3b76fa37f1aa93c83a10aa8891

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a6965bf4a0430727a002587302f7916a9a0f4a1489b4b0dc3bbd9e92aa1048cb
MD5 c94cf032e325dce3c85de661a155c43a
BLAKE2b-256 c9df55b8ae6652ee32711675ed925282b9509daf4586be18d48a3ac8ccfb1603

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 26ae3ae2f644d184acbce1ab358279a5e918584beaaac30dbf5225dcfd3aa606
MD5 14ab8cd67a3fec7c9343f10788385f5f
BLAKE2b-256 5232f2ec991798e71de43a9993cdc2c50b96b63ac56d3650d14f66cfdbb53cf2

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp310-cp310-win_amd64.whl.

File metadata

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

File hashes

Hashes for tafra-2.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 156a9a3481049fb3a314d381b6abc7e763fd15f921ce35ac71ccf353feb81e14
MD5 8eee6a51bfceebefd7fbc965a4482796
BLAKE2b-256 6781382c0dbd45fee979120e77c75c0b1a3c85d4866a62d9676c112354733429

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp310-cp310-win32.whl.

File metadata

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

File hashes

Hashes for tafra-2.2.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 fc8c7de250dcee0d3c01a878361453ea3ba87dc5294f272df8ecc1924f669a26
MD5 febc9a3f13f6920fedfb42fcf60ccfa5
BLAKE2b-256 b25b0b1153eaaee70ad3c4b7af569776b5cac4b081391d9d7f06c9ffd1950c1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bba4721c2996d46c8092384d548c12514432a65aba7a84ea09f2a272ddaff506
MD5 814856148ce3c2ab75eb41d921d3b9a8
BLAKE2b-256 f25bc29c0a19a9fa4ce867edd626485d84540c2b2b83c926c050cf2782c5d097

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0206f08364e45708d167beccaa3ef26e6b44ef395055b33af264887688e426c5
MD5 b997ccdab5e25ca3708506685bed5134
BLAKE2b-256 de1c98a1f69ad44b98667c262f6c3f70842ea23c5d0ce44bcae4de257ce46dad

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tafra-2.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2c6912a9af0acd8d8e9476877856fde04e6860b61f17da745f37919969fe817
MD5 c60fb3a158cc0b9f7d6bf745c3c6ab7e
BLAKE2b-256 97f2854c94fcaa151ee3b85e9f6246b3a37256feb5f6e904cfe131f14748c9bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for tafra-2.2.1-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