Skip to main content

High Performance DataFrame library written in C++ and wrapped with Python.

Project description

Grizzlars

A Python DataFrame library backed by a multithreaded C++ engine — built for speed.

More than 6x less memory consumed on loading large CSVs compared to polars

grizzlars wraps DataFrame, a high-performance C++ DataFrame, with a clean Python API. Columns are stored as typed std::vector<T> buffers — no GIL-bound Python object overhead. Sort, filter, groupby, join, and aggregate operations run in parallel across all CPU cores automatically.


Installation

Requires Python 3.10 or higher

pip install grizzlars

Quick Start

import grizzlars as gl

df = gl.DataFrame({
  "symbol": ["AAPL", "GOOGL", "MSFT", "AMZN", "META"],
  "price":  [189.3,  175.1,   415.2,  185.0,  502.7],
  "volume": [52_000_000, 18_000_000, 22_000_000, 31_000_000, 14_000_000],
  "active": [True, True, True, False, True],
})

print(df)
# Load from CSV
df = gl.read_csv("prices.csv")

Column Types

Python / NumPy type grizzlars type C++ storage
float / float64 "double" std::vector<double>
int / int64 "int64" std::vector<int64_t>
bool "bool" std::vector<bool>
str "string" std::vector<std::string>

The index is always uint64 and defaults to 0..N-1.


API Reference

I/O

grizzlars.read_csv(path, index_col=None, dtype=None)

Read a CSV file into a DataFrame. Uses a multithreaded native C++ reader by default.

df = gl.read_csv("data.csv")

# Promote a column to the index
df = gl.read_csv("data.csv", index_col="Id")

# Force a column to a specific type (triggers slower Python fallback)
df = gl.read_csv("data.csv", dtype={"code": str})

df.to_csv(path, index=True)

Write the DataFrame to a CSV file.

df.to_csv("output.csv")
df.to_csv("output.csv", index=False)  # omit index column

Construction

grizzlars.DataFrame(data=None, index=None)

Build a DataFrame from a dict of lists or NumPy arrays.

df = gl.DataFrame({
  "x": [1, 2, 3],
  "y": [4.0, 5.0, 6.0],
})

# Custom index
df = gl.DataFrame({"x": [10, 20, 30]}, index=[100, 200, 300])

Inspection

df.shape          # (rows, cols) — tuple
len(df)           # row count
df.columns        # list of column names
df.index          # numpy uint64 array of index values
df.dtypes()       # {"col": "double" | "int64" | "bool" | "string", ...}

Column Access & Mutation

# Read a column — returns numpy array (numeric/bool) or list (string)
prices = df["price"]

# Add or overwrite a column in-place
df["log_price"] = np.log(df["price"])
df["label"] = ["cheap", "expensive", "mid"]

# Check membership
"price" in df   # True / False

# Non-mutating variants
df2 = df.with_column("log_price", np.log(df["price"]))
df2 = df.assign(log_price=np.log(df["price"]), rank=[1, 2, 3])

# Select a subset of columns
df2 = df.select(["symbol", "price"])

# Rename columns in-place
df.rename({"symbol": "ticker", "price": "close"})

# Drop a column in-place
df.drop("log_price")

Slicing

df.head(10)          # first 10 rows
df.tail(10)          # last 10 rows

df.iloc[0]           # single row as DataFrame
df.iloc[10:50]       # slice (step=1 only)
df.iloc[-1]          # last row

Filtering

filter() is lazy — the boolean mask is stored and data is only copied when a materialising operation is called. len() and .shape are always O(1).

# Mask mode (recommended — compose with numpy operators)
cheap = df.filter(df["price"] < 200)
active = df.filter(df["active"] == True)

# String operator mode
cheap = df.filter("price", "<", 200)
# Operators: ">" ">=" "<" "<=" "==" "!="

# Combine conditions
mask = (df["price"] < 200) & (df["volume"] > 10_000_000)
df.filter(mask)

# len() and shape are free (no materialisation)
print(len(cheap))     # instant
print(cheap.shape)    # instant

# Materialises on first real operation
print(cheap["symbol"])
cheap.sort("price")

Sorting

All sort operations are non-mutating and return a new DataFrame.

df.sort("price")                       # ascending
df.sort("price", ascending=False)      # descending
df.sort_values("volume", ascending=False)  # alias for sort()
df.sort_index()                        # sort by index ascending
df.sort_index(ascending=False)         # sort by index descending

Statistics

All scalar stats operate on a single column and return a Python float or int.

df.mean("price")         # arithmetic mean
df.std("price")          # sample standard deviation (n-1)
df.sum("price")          # total
df.min("price")          # minimum value
df.max("price")          # maximum value
df.count("price")        # non-null count

df.quantile("price", 0.5)    # median (q in [0, 1])
df.corr("price", "volume")   # Pearson correlation
df.cov("price", "volume")    # sample covariance

df.nunique("symbol")         # number of distinct values
df.unique("symbol")          # sorted array of distinct values
df.n_missing("price")        # count of NaN / empty-string values

# Frequency table — returns DataFrame with ["value", "count"]
df.value_counts("symbol")

df.describe()

Returns a DataFrame with count / mean / std / min / max / sum for every numeric column.

stats = df.describe()
# statistic  |  price  |  volume
# -----------+---------+---------
# count      |  5.0    |  5.0
# mean       |  ...    |  ...
# std        |  ...    |  ...
# min        |  ...    |  ...
# max        |  ...    |  ...
# sum        |  ...    |  ...

GroupBy

groupby() returns a _GroupBy object. Chain .agg() or a shorthand method.

# agg() accepts a dict of {column: function}
# Functions: "mean", "sum", "min", "max", "count", "std"
result = df.groupby("sector").agg({"price": "mean", "volume": "sum"})

# Shorthand methods
df.groupby("sector").mean("price")
df.groupby("sector").sum("volume")
df.groupby("sector").min("price")
df.groupby("sector").max("price")
df.groupby("sector").count("price")
df.groupby("sector").std("price")

GroupBy uses string_view keys internally — zero string copies during bucketing.


Join

Joins operate on the DataFrame index. Load CSVs with index_col= to set the join key.

left  = gl.read_csv("orders.csv",   index_col="order_id")
right = gl.read_csv("products.csv", index_col="order_id")

inner  = left.join(right, how="inner")   # default
left_j = left.join(right, how="left")    # unmatched right → NaN / ""
right_j = left.join(right, how="right")
outer  = left.join(right, how="outer")

The join uses a hash table probe — O(n + m) with parallel column scatter.


Concat

Vertically stack two DataFrames (append rows). The index resets to 0..N-1.

combined = df_a.concat(df_b)

# Stack many frames
from functools import reduce
all_data = reduce(lambda a, b: a.concat(b), frames)

Only columns present in both frames with the same type are kept.


Window Functions

All window functions return a NumPy array (not a new DataFrame).

df.rolling_mean("price", window=20)   # 20-period moving average
df.rolling_sum("volume", window=5)
df.rolling_std("price", window=20)
df.rolling_min("price", window=10)
df.rolling_max("price", window=10)

# Generic form
df.rolling("price", window=20, func="mean")
# func: "mean" | "sum" | "std" | "min" | "max"

Cumulative Functions

df.cumsum("volume")    # cumulative sum
df.cumprod("factor")   # cumulative product
df.cummin("price")     # running minimum
df.cummax("price")     # running maximum

Shift & Percent Change

df.shift("price", n=1)    # lag by 1 period; NaN at boundary
df.shift("price", n=-1)   # lead by 1 period
df.pct_change("price")    # (price[i] - price[i-1]) / price[i-1]; first element NaN

Data Cleaning

# Remove rows with duplicate values in a column (keep first)
df.drop_duplicates("symbol")

# Remove rows where a column is NaN or empty string
df.drop_na("price")

# Fill NaN / empty values in-place (returns self)
df.fillna("price", 0.0)
df.fillna("label", "unknown")

Threading

grizzlars automatically enables multithreading on import using all logical CPU cores. You can adjust it at runtime.

import grizzlars as gl

gl.set_optimum_thread_level()   # auto-detect (called on import)
gl.set_thread_level(4)          # pin to 4 threads
gl.get_thread_level()           # returns current thread count

Performance

grizzlars is built for analytical workloads on large datasets:

  • CSV load — memory-mapped file read, multithreaded chunk parsing, move semantics for string columns
  • Filter — lazy evaluation; boolean mask stored until a materialising operation; len() is always O(1) via SIMD count_nonzero
  • Sortstring_view comparison keys (zero heap allocation per comparison); parallel permutation scatter
  • GroupByunordered_map<string_view> bucketing (zero string copies); parallel aggregation
  • Join — hash table probe O(n + m); parallel column scatter across all cores
  • Aggregate / describe — direct C++ vector reduction, no Python loop overhead

Full test result:

Faster than polars in some scenarios and have significantly lower memory usage

===============================================================================
  Customer data benchmark  —  grizzlars vs polars
  Dataset: customers-2000000.csv  (341227 KiB)
===============================================================================

  Rows: 2,000,000    Columns: 12

  ── Load ──────────────────────────────────────────────────────────────
  read_csv (customers)                       polars   253.72 ms   grizzlars   428.60 ms    → polars is 1.69x faster

  ── Memory ────────────────────────────────────────────────────────────
  RSS delta after load                       polars   925.2 MiB   grizzlars   139.8 MiB

  ── Operations ────────────────────────────────────────────────────────
  sort(Last Name asc)                        polars   291.14 ms   grizzlars   502.89 ms    → polars is 1.73x faster
  filter(Index > 50) → 1,999,950 rows        polars    78.67 ms   grizzlars    54.02 ms    → grizzlars is 1.46x faster
  groupby Country → 243 groups               polars   158.51 ms   grizzlars   103.29 ms    → grizzlars is 1.53x faster
  agg(mean/sum/std/min/max)                  polars     8.92 ms   grizzlars     8.24 ms    → grizzlars is 1.08x faster
  describe                                   polars    97.25 ms   grizzlars   255.81 ms    → polars is 2.63x faster

  ── Joins  (customers ⋈ people-100000.csv) ───────────────────────────
  join inner → 100,000 rows                  polars    30.66 ms   grizzlars   117.82 ms    → polars is 3.84x faster
  join left  → 2,000,000 rows (~50 000 unmatched) polars    38.12 ms   grizzlars   277.43 ms    → polars is 7.28x faster

===============================================================================

Project Structure

grizzlars/
├── DataFrame/             core C++ library
├── grizzlars/             Python package
│   └── __init__.py        DataFrame class + read_csv
├── src/
│   └── grizzlars_bindings.cpp   pybind11 C++ extension
├── tests/
│   ├── data               data for tests
│   ├── functional         functional tests
│   └── performance        performance tests
├── CMakeLists.txt
└── pyproject.toml

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

grizzlars-0.1.1.tar.gz (22.6 MB view details)

Uploaded Source

Built Distributions

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

grizzlars-0.1.1-cp312-cp312-win_amd64.whl (361.0 kB view details)

Uploaded CPython 3.12Windows x86-64

grizzlars-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (448.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

grizzlars-0.1.1-cp312-cp312-macosx_15_0_arm64.whl (392.5 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

grizzlars-0.1.1-cp312-cp312-macosx_14_0_arm64.whl (406.8 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

grizzlars-0.1.1-cp311-cp311-win_amd64.whl (359.6 kB view details)

Uploaded CPython 3.11Windows x86-64

grizzlars-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (446.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

grizzlars-0.1.1-cp311-cp311-macosx_15_0_arm64.whl (390.5 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

grizzlars-0.1.1-cp311-cp311-macosx_14_0_arm64.whl (405.4 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

grizzlars-0.1.1-cp310-cp310-win_amd64.whl (358.7 kB view details)

Uploaded CPython 3.10Windows x86-64

grizzlars-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (446.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

grizzlars-0.1.1-cp310-cp310-macosx_15_0_arm64.whl (389.3 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

grizzlars-0.1.1-cp310-cp310-macosx_14_0_arm64.whl (404.5 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

Details for the file grizzlars-0.1.1.tar.gz.

File metadata

  • Download URL: grizzlars-0.1.1.tar.gz
  • Upload date:
  • Size: 22.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for grizzlars-0.1.1.tar.gz
Algorithm Hash digest
SHA256 309adc1fcf26e16eb7b7509bb0cc6de7457e694b22f54acd59d81d97daa59ec0
MD5 aff8f8f8160995baf09783107409b5fb
BLAKE2b-256 62e59c18ec027f41f2f3beccd658f770e8897b993bb55e7f0e27d6233c27faec

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1.tar.gz:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: grizzlars-0.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 361.0 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 grizzlars-0.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 29db6b28fc25f4b3c34002b9bfbebe420b3d12213ad7d73951b8e61402d5d6d8
MD5 532df33c526b4404585acbcf73125c40
BLAKE2b-256 e743cdbbe3894e20467d3ac67788db8cd8c6ac568f4d42841b3e1c6b6c367f48

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp312-cp312-win_amd64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for grizzlars-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1c37ec6a9328ea9a682e0fe67d2fff640eb81e6c48d7edaf24435370c1f7127c
MD5 85dc83b9c231c1961cbf545a91599fd6
BLAKE2b-256 9aa80d8c4b0115c8410f286ec9faaf65b0e9aa59f787f91355b49dcc4ba22e56

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-0.1.1-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c9a56dc4c80d42a049fd6caac19e9515a87c0676122e8962610166feefd6bd32
MD5 bf6d9d963153c7a9a3224e93225e26a5
BLAKE2b-256 a0072e2c75f0b36725775023146f5602acb0fc7dfd1368765dbc9ff94ec2932b

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp312-cp312-macosx_15_0_arm64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-0.1.1-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6dc2913f6e944faa6736bce99517d499a2bb41e9a7a0f90212fdd743d4f94eac
MD5 07e41c8cd37c55b1a78744dc2451c6fe
BLAKE2b-256 df84407041fd963f72dcc38f3b18c2f8ffc3b22d22c6de01c40211cab12e46f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: grizzlars-0.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 359.6 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 grizzlars-0.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fcb9fe05ed26e5a8a1b698d86c9cff534cd1a4c0a44c0e3f7ba5583d9ad67f88
MD5 83ed58d910e5c9d8c6afddf24f6c278b
BLAKE2b-256 fab366b6127ac26c8da16dd843206dc59a40689b431a634d4d6a8dcbcd416f4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp311-cp311-win_amd64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for grizzlars-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b508440b3351e5b5ad0ae590a411366741d04f5ee853f583755036b54c674695
MD5 8c01f406b55dc8db6e2750e0df0d1b8d
BLAKE2b-256 c05e6ecd0ff3702516ecb8faa8bd26cfda32c52e4bcb275fedc67f4918c6d8a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-0.1.1-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 8f76378b7edbc0d730837cee3df04a8fef4af7cbfde8c92b9701380e4d4c78bd
MD5 9dac2918e8048905fa7d544c91eb8eca
BLAKE2b-256 42df7b980019190e08c1d770f32e3bb109c17055a9bbf759556bbf54dc2b74f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp311-cp311-macosx_15_0_arm64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-0.1.1-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 904146c62bc433f8116513b469a48a6d76d7e8e15db087db67d90e099a897b42
MD5 aa248ce8a8b2e4c2819ca1ba70e66fa9
BLAKE2b-256 5d1cb1d49279a6ed4ae420404e9fd549568d109a48d095bf2f960314443fd619

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: grizzlars-0.1.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 358.7 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 grizzlars-0.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e399e482cc4e230f87709fdfff5ea6dba2667f81df5a7184fb0ce66c2ba859c0
MD5 1fb3a7e375df440ed2e7f88f19e7bad1
BLAKE2b-256 45f8c77c7b2230ec583d604ab95c027ee3c4372baa8d4ca5094c9cd127be306f

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp310-cp310-win_amd64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for grizzlars-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4ff2305c6bf47dc68a55836ece741fef9e00cd5167747801c915e58a39ad0f0e
MD5 881d2acdc1a9e3b856812546018c84aa
BLAKE2b-256 a652eb649567fcda18744cc11e0a0dc2d29cd93060204a5907199b9c9a3027df

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-0.1.1-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6cedce71c94a8eb23d1f135e36202bd1345aa2da0bb2ab80494d541ba63eeb6e
MD5 6f20c156f30cf5571fdb097ab33dd107
BLAKE2b-256 793c36f4cea03f09b0c71343e3eec2be21df7f2694c7b82a8ee96e2bc1fec0e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp310-cp310-macosx_15_0_arm64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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

File details

Details for the file grizzlars-0.1.1-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-0.1.1-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 384b0482d2cda6be07ef0b0073101eff486165755c70e4d1fdd9b5118adddc78
MD5 7acd28e407b78c9dfb8676ef766250dc
BLAKE2b-256 05c624e623d0d365d15422e5048b8f199e76a741d13606c5770d52537a0c9d96

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-0.1.1-cp310-cp310-macosx_14_0_arm64.whl:

Publisher: build.yml on NavodPeiris/grizzlars

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