Skip to main content

Grizzlars

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

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

Full test result for numeric csv:

===============================================================================
  Stock data benchmark  —  grizzlars vs polars  (numeric-heavy)
  Dataset: 11 CSVs from stock_data/  (4908 KiB total)
===============================================================================

  Rows: 49,446    Columns: 8    Tickers: 11

  ── Load + stack ──────────────────────────────────────────────────────
  read_csv x all + concat            polars    20.57 ms   grizzlars    69.61 ms    → polars is 3.38x faster

  ── Memory ────────────────────────────────────────────────────────────
  RSS delta after load               polars    25.3 MiB   grizzlars     6.9 MiB

  ── Operations ────────────────────────────────────────────────────────
  sort(Close asc)                    polars     2.17 ms   grizzlars     3.08 ms    → polars is 1.42x faster
  filter(Volume > 100,000) → 26,979 rows polars     6.14 ms   grizzlars     2.39 ms    → grizzlars is 2.58x faster
  groupby Symbol → 11 groups (mean Close) polars     2.97 ms   grizzlars     1.03 ms    → grizzlars is 2.89x faster
  agg(mean/sum/std/min/max on Close) polars    427.0 µs   grizzlars    296.1 µs    → grizzlars is 1.44x faster
  describe                           polars     3.39 ms   grizzlars     7.20 ms    → polars is 2.13x faster

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

Full test result for big text csv:

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

  Rows: 2,000,000    Columns: 12

  ── Load ──────────────────────────────────────────────────────────────
  read_csv (customers)                       polars   485.47 ms   grizzlars    1.075  s    → polars is 2.21x faster

  ── Memory ────────────────────────────────────────────────────────────
  RSS delta after load                       polars   924.9 MiB   grizzlars   788.9 MiB

  ── Operations ────────────────────────────────────────────────────────
  sort(Last Name asc)                        polars   190.95 ms   grizzlars   542.07 ms    → polars is 2.84x faster
  filter(Index > 50) → 1,999,950 rows        polars     6.34 ms   grizzlars   324.10 ms    → polars is 51.13x faster
  groupby Country → 243 groups               polars    72.63 ms   grizzlars   108.20 ms    → polars is 1.49x faster
  agg(mean/sum/std/min/max)                  polars     3.53 ms   grizzlars     2.22 ms    → grizzlars is 1.59x faster
  describe                                   polars    44.41 ms   grizzlars    34.86 ms    → grizzlars is 1.27x faster

  ── Joins  (customers ⋈ people-100000.csv) ───────────────────────────
  join inner → 100,000 rows                  polars    29.14 ms   grizzlars    22.81 ms    → grizzlars is 1.28x faster
  join left  → 2,000,000 rows (~50 000 unmatched) polars    30.42 ms   grizzlars   410.00 ms    → polars is 13.48x 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

Download files

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

Source Distribution

grizzlars-4.1.0.tar.gz (25.8 MB view details)

Uploaded Source

Built Distributions

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

grizzlars-4.1.0-cp312-cp312-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.12Windows x86-64

grizzlars-4.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

grizzlars-4.1.0-cp312-cp312-macosx_15_0_arm64.whl (886.2 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

grizzlars-4.1.0-cp312-cp312-macosx_14_0_arm64.whl (917.2 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

grizzlars-4.1.0-cp311-cp311-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.11Windows x86-64

grizzlars-4.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

grizzlars-4.1.0-cp311-cp311-macosx_15_0_arm64.whl (887.0 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

grizzlars-4.1.0-cp311-cp311-macosx_14_0_arm64.whl (917.9 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

grizzlars-4.1.0-cp310-cp310-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.10Windows x86-64

grizzlars-4.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

grizzlars-4.1.0-cp310-cp310-macosx_15_0_arm64.whl (887.2 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

grizzlars-4.1.0-cp310-cp310-macosx_14_0_arm64.whl (918.0 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

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

File metadata

  • Download URL: grizzlars-4.1.0.tar.gz
  • Upload date:
  • Size: 25.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for grizzlars-4.1.0.tar.gz
Algorithm Hash digest
SHA256 2627b37d1c9a06dcbed6ca0ab036b567e7a8f883d3032c1ef4023213c98702cf
MD5 3ae3f32337f6f80c9db401cab32b6d05
BLAKE2b-256 32b45a1e8031bfcd3d937bfb342b220e6fca3cdf79fa4a19323e1fe25a31a47b

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0.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-4.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: grizzlars-4.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for grizzlars-4.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 248672b0895fad4fbb72ef6416470a76c44b9e18c9458b209d6ebb8a2e3b13b8
MD5 2f7b5341c2037f8c9124133360f8069f
BLAKE2b-256 0f764e2dce582da959614f075e894151a18a0d72ccd6eb8f93eb77dc5b274e9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for grizzlars-4.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 17d7399017b54837b245d1d9f0120e432174207bfa1741748420afbcc7301406
MD5 0ec8177ea23eaae89bb16a50fc333dc5
BLAKE2b-256 2e7f9564f08aebc6852581c7654e16e3af391352450cbd3120e6da84efa76b54

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-4.1.0-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 dc0fce441a62849d7f278c124929c0c97397b363a09e576f04e3e763a59b299f
MD5 206d52afb9caacafd17859952fbd3234
BLAKE2b-256 95a4ec1a1d913712bf9d6404ebaf94dd0d340136e7cd7c9fd6b29a21e974ee01

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-4.1.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2d08c2910879e4b727fbee052409a7f123e57f41c143a9faa3e344ab039dac9d
MD5 d9162365032dc303d62cb2440ad16eac
BLAKE2b-256 4f795011f4c83ef33b4eff7180468b171a35717112ae0638d70449fd00e15374

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: grizzlars-4.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for grizzlars-4.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 35325f40bd2f1af46e4e2b21f468217d09313b8de3ec460ac9abf5bc72e78e15
MD5 8abbca76bc4c4e463cd2ae8bc556bcba
BLAKE2b-256 1d58721d570e99c93f133164c42ba5028359c90f0b8a0a5f0d888391dd4d44d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for grizzlars-4.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e559e6e2c94c93f9bd82ede1ccd9fa8de20619f77592777928af6371dade688f
MD5 2dd902307f0cf19cb444d65fadf75714
BLAKE2b-256 2181e3ac1d38ba6c48346638b2910b1168575a819244e6a103fe1ff236fa900b

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-4.1.0-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4e0026b31bdbc589e40495040fbff50b2c9be8fbf2aef071b8a79f65e58a6690
MD5 3a033a93d451f6418d29e1486d382f8f
BLAKE2b-256 ec953039d6ce559fa9f64480a3c8c661a54f43b2a280be63937c48efe4bde1ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-4.1.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 fb3309a29da2f38770eca9551046ca3c8e4b21956a48a1a3608374407f1386fa
MD5 4a50f690a10b331cb1285bdb803a21a6
BLAKE2b-256 b14450644d3c024c759ff2e7fecad87f52ed507cb73fc6cecd75d7f432117c4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: grizzlars-4.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for grizzlars-4.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8ba895be659e8059d127463b6dce2adaa7de9b38c4c6cd499b2d38b9310e0aa9
MD5 7a044aca8c55ddf9363d1d6d94f9412a
BLAKE2b-256 382893678173b13a02c1cef3e577c48e77987e9a123fe9e047868ccabb5d3c47

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for grizzlars-4.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a3bb7e403034754d6c8fb3d6e1e0ee0b778600bd50f0136020eea62f4e155b25
MD5 79d32708fc04a4c870c5e7960a40b544
BLAKE2b-256 609b008428d16d94400d62342f2ec87ba1cbd4cd09bcffe97f1d3c32859b069a

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-4.1.0-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e80bbd78ff8c7c9bb54c2be89dbb2b39422f1f5fdac44b6b425d6ba36e30769b
MD5 4c35e317e503f1645faec2138e4c842a
BLAKE2b-256 83dd4e2deafaea1752b7bd135cb3eae08d82ff08bbd8048175963d3b5382ef8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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-4.1.0-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for grizzlars-4.1.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 b6875c1bb898b4ca770d60be58be564d4f998a1281d855e4e37d49b409cac2b7
MD5 c8880e5a2b22e5e176c18b538f7aa504
BLAKE2b-256 1259c05eb9abbeb7ca89866f87697a7082cccfa0a11d13b19493098d34f7135a

See more details on using hashes here.

Provenance

The following attestation bundles were made for grizzlars-4.1.0-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 Sentry Error logging StatusPage Status page