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.5.tar.gz (76.9 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.5-cp313-cp313-win_amd64.whl (62.4 kB view details)

Uploaded CPython 3.13Windows x86-64

tafra-2.2.5-cp313-cp313-win32.whl (61.7 kB view details)

Uploaded CPython 3.13Windows x86

tafra-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (98.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

tafra-2.2.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (99.1 kB view details)

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

tafra-2.2.5-cp313-cp313-macosx_11_0_arm64.whl (58.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tafra-2.2.5-cp312-cp312-win_amd64.whl (62.4 kB view details)

Uploaded CPython 3.12Windows x86-64

tafra-2.2.5-cp312-cp312-win32.whl (61.7 kB view details)

Uploaded CPython 3.12Windows x86

tafra-2.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (98.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

tafra-2.2.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (99.2 kB view details)

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

tafra-2.2.5-cp312-cp312-macosx_11_0_arm64.whl (58.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tafra-2.2.5-cp311-cp311-win_amd64.whl (62.2 kB view details)

Uploaded CPython 3.11Windows x86-64

tafra-2.2.5-cp311-cp311-win32.whl (61.5 kB view details)

Uploaded CPython 3.11Windows x86

tafra-2.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (95.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

tafra-2.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (96.6 kB view details)

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

tafra-2.2.5-cp311-cp311-macosx_11_0_arm64.whl (58.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tafra-2.2.5-cp310-cp310-win_amd64.whl (62.2 kB view details)

Uploaded CPython 3.10Windows x86-64

tafra-2.2.5-cp310-cp310-win32.whl (61.5 kB view details)

Uploaded CPython 3.10Windows x86

tafra-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (94.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

tafra-2.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (96.0 kB view details)

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

tafra-2.2.5-cp310-cp310-macosx_11_0_arm64.whl (58.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: tafra-2.2.5.tar.gz
  • Upload date:
  • Size: 76.9 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.5.tar.gz
Algorithm Hash digest
SHA256 68d00f6fd70b3bb99297783565b67f765415586a1ec0c0ab6d87c1465c67586b
MD5 523efe77d8ca83219946c6eda2fba3e3
BLAKE2b-256 017bbde47ae826fce16f26a3d7aa0875a2834ed669c5bcb1d7f4e16df7acdad8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tafra-2.2.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 62.4 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.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 463ad2ede4f6c450b0dac0656560cece37eea74951e37809494bb63250b71046
MD5 508f9d10576367137cbe1034256a86ea
BLAKE2b-256 add288fc1a6b2e4ebae30128ff6e4c076e23e895de4cf503429aae3ae04acea4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tafra-2.2.5-cp313-cp313-win32.whl
  • Upload date:
  • Size: 61.7 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.5-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 663252380aa8456e8342616835e1cc2f6c077036738b8f0024a95adf49618a0d
MD5 4d44b4dbd188021e2dc4f7bcba7d165e
BLAKE2b-256 5bfdb9a99026466d7b668ddb073ee7923b5e4d9b19c767a72001f2bc7decd9e4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a5cd65237fa224940e3f2e303d3d992d1bd2b12b4a316277a932c790a731dbee
MD5 2c070c8a90e396a009590c3fce979871
BLAKE2b-256 a087d7328622d9ca1cc205ab52ae90877d9b02374ce5bfd8fe62ad871ab65943

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 566914c994e175443a48ba82f82fafa2299ac456648c1205713b29ab1c2dd467
MD5 c358bfd572cd5f31290916227e5eb75b
BLAKE2b-256 284a109cd078d4a900aa8ad0168515b43d21ece321e54bc4d48eed60bd8d84c7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 486977f4f91138865327f02a5b9bb72feb7ec41c934f6f3151c6f928af3970fb
MD5 5bda23e7dccb2e3011d00cb285be3c78
BLAKE2b-256 a3907ff05fe69b3d6a71137616fa4c9e968f6318cd1b5dfd00d3f6f742f19b67

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tafra-2.2.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 62.4 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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1224834a8d7ae4750b906f103447924319faa1832c7b45cf46941575944122e0
MD5 db6dacb2822b08e1ea2afdf597965c40
BLAKE2b-256 a61b77146e6fc805fb013eebe19b9fa2286b808458dd0b472fcc348b0820d669

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tafra-2.2.5-cp312-cp312-win32.whl
  • Upload date:
  • Size: 61.7 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.5-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 44c108affa8806c9f099ee0a605b47f32512b17104c177314a134f43ec78e75b
MD5 002352722fcc9227980938ad3593db30
BLAKE2b-256 5c97bbab78238ba3df3085ef5f9b7135bb330756268207d3727c449483229e5f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d257947d42e7da47e1bf6d2bef6f3f97bfe67b8133d2d22cc86fce9235373410
MD5 a8b1f2177e8154cf47b105f31bab2c85
BLAKE2b-256 ffdbad04bbe22787368fc34ba64752b5fc51952a3cbbb37cf5bc1fdf4b05346e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6848ac913e89b05f213a49d00f8bc3675627886ceed76345400c5c5dcb66336d
MD5 ea1ab3dab6b17bf311662cc9f71fb77e
BLAKE2b-256 14e171906c6bce893261b809409dab4746b21f678b54388591a184d95541b7ad

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63cdf2cfe6cdd44e443340a20ed396940069579813962175d0400bfd88e70464
MD5 caa63689482e69939fe26e5788e388c6
BLAKE2b-256 6c9cab76e32a0cbb3e6834c146e8768fd34e0e295ab25da06fa2249b75fce6bd

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tafra-2.2.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 62.2 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.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9c3362857376acd9d50c585a037898ce48a3fb6c73ff4c159a64eeee931b7315
MD5 16b96977e13298bff9e8e63259474756
BLAKE2b-256 8fd39778107da5e0d37100da87ac3b2497e471e28376d0497dae09ee4223680e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tafra-2.2.5-cp311-cp311-win32.whl
  • Upload date:
  • Size: 61.5 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.5-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 90b4d9191fe8594b3db6d8f53b5bd11ccef35b55837bc87cd047e5797b7c7b82
MD5 9ed581206ff5feba85471f6d31a89b87
BLAKE2b-256 53ba4f61e3c0c42e245a83c2152055d2fefc9ebdb74ad5fe787c273f2a345adf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 91bdabb3afec1c5a7e4afa61788f8332a1289b470488be23a2f54daac575f2d2
MD5 c38dc653b6df2e0cf8af337fc774451d
BLAKE2b-256 f50e4d3278ea1f8c13e07e1d09bdc418b4151e1f188b7c32081e3143d4bfb099

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3dd6535c5d38083fc4dd96073b2325fdc0399e4bfcfeffe5ccc50371b325316e
MD5 ddb3c6c4dca89e3fd698f081616c5a60
BLAKE2b-256 2b788ed1dba12c507104750b920075b09d8916fbc75859e55792d57dd171f5ee

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 af2a7633377a9b16998058627286657c8901af1de45cb59ee40a4d628d6657c8
MD5 49f7740a7233f0296e5a8d68ec06b230
BLAKE2b-256 82f6601a7894ca373f670fb1dc1a96bf3d7394fe75c95fd340dc645e94e88b5b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tafra-2.2.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 62.2 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.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 eba4aac55d551b2291935faf53b04dccfea13133d0dabf0debeb280955ed06d3
MD5 4b0d33336c5d3a9a5508e6bf2ec5084d
BLAKE2b-256 3c9a26f24fb4c181c18a1739d77ffc3e4696d559f4366b5ac56709165af93c8c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tafra-2.2.5-cp310-cp310-win32.whl
  • Upload date:
  • Size: 61.5 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.5-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 a55091545570cdb4c9cec5bb134dcdbe49d041ebeaa827f04f001264acf93b11
MD5 702be3f1ab6bfb7104e39dc3988cf465
BLAKE2b-256 5abe94e833e80c76da0a5fde1282437209a7d7d529109b4ef0890c0cc7232bb3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 61e41b6c8a39a4834ff68c115ddbcdb09edcf33e0492fd7b9cddd0b53fbe376a
MD5 02e17d759f3d4aa31f6f274c3c61abc0
BLAKE2b-256 5f1f250a3c3d99bac0cdcdbf235ed01b91a8f80714fbe5eedcb9d59c4a6e2871

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 67eb36a85312eb75b02d0d157ae15a685e7c2894403c7b1ca84c897398f82ac3
MD5 cdf00903e4b076c4fc0a6d80b66e5743
BLAKE2b-256 5fad65c10597bb8d6017b43456898d2d2464da7a27b534a1894e926f02dc71b1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tafra-2.2.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 af1d90e7cd1c90b46b248a35c1f85ba7784815ff7b127a14a87cfbf8ea3e3e97
MD5 337f3c61df5630c9f8e374b4ae8540ba
BLAKE2b-256 185609526da1cecd61310359f66c1b121155ba11cea875e6a2ec6b4e4ffeb91b

See more details on using hashes here.

Provenance

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