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

Metadata

Release files for grizzlars 4.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for grizzlars 4.2.0
File Size Uploaded
grizzlars-4.2.0.tar.gz 25.8 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for grizzlars 4.2.0
File
grizzlars-4.2.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
grizzlars-4.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
grizzlars-4.2.0-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details
grizzlars-4.2.0-cp312-cp312-macosx_14_0_arm64.whl CPython 3.12 CPython 3.12 macOS 14.0+ ARM64 Details
grizzlars-4.2.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
grizzlars-4.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
grizzlars-4.2.0-cp311-cp311-macosx_15_0_arm64.whl CPython 3.11 CPython 3.11 macOS 15.0+ ARM64 Details
grizzlars-4.2.0-cp311-cp311-macosx_14_0_arm64.whl CPython 3.11 CPython 3.11 macOS 14.0+ ARM64 Details
grizzlars-4.2.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
grizzlars-4.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
grizzlars-4.2.0-cp310-cp310-macosx_15_0_arm64.whl CPython 3.10 CPython 3.10 macOS 15.0+ ARM64 Details
grizzlars-4.2.0-cp310-cp310-macosx_14_0_arm64.whl CPython 3.10 CPython 3.10 macOS 14.0+ ARM64 Details

Total release size: 38.6 MB

Release files / grizzlars-4.2.0.tar.gz

Download URL grizzlars-4.2.0.tar.gz
Size 25.8 MB
Tags Source
SHA-256 checksum
How to use checksums
d5823f96a770976e2814fdb56b1b0e86337eed58e41f172d406d9f976a8eb95a
BLAKE2b-256 checksum
How to use checksums
4014b4c164fc2dcbbc614b6adc0aa8d67359009f4611cc31d80e069b24fb928a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp312-cp312-win_amd64.whl

Download URL grizzlars-4.2.0-cp312-cp312-win_amd64.whl
Size 1.2 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
abf8ff10f7a849c01c01e857122cf503ded69a3c4a3d4dc171fafe7b620e68ae
BLAKE2b-256 checksum
How to use checksums
a112487566d61115958e6a34565362cc9a3ff0651c1366b44042bc3271e2170b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL grizzlars-4.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
839e329eb2a4fc6a8fa2c0dce60937ccf2d704eab9ddfb5870ea09e89a3ef1a6
BLAKE2b-256 checksum
How to use checksums
819435d352de44ddaf39afacce973674f1dbb22db645d5675f160638e2863b91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp312-cp312-macosx_15_0_arm64.whl

Download URL grizzlars-4.2.0-cp312-cp312-macosx_15_0_arm64.whl
Size 916.7 kB
Tags CPython 3.12 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
692cd1bd01c9d4687036169b6b3c21ed9d198e9e5cf522c04cfdc68e28be3ece
BLAKE2b-256 checksum
How to use checksums
e4bfecedb1ecaad741a9dd22780b2e5d95f494c586b2ec86d6532361d41479c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp312-cp312-macosx_14_0_arm64.whl

Download URL grizzlars-4.2.0-cp312-cp312-macosx_14_0_arm64.whl
Size 945.8 kB
Tags CPython 3.12 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
bc6bd80993474f10f45beb02da5c112d0c71476e9393e4e3a420e73526c23f04
BLAKE2b-256 checksum
How to use checksums
66109bb1044ff01afb659fa416a0b47dcc69b23c8772caed068ddb415b240a87
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp311-cp311-win_amd64.whl

Download URL grizzlars-4.2.0-cp311-cp311-win_amd64.whl
Size 1.2 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
540674e96ee7eda65084a5cd2e8b6841319d539863a854160553f08470bae86c
BLAKE2b-256 checksum
How to use checksums
344acfc056d106b1bbbb0908d2b2425f1dd844c8b8236ba94ab8c55f0a005111
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL grizzlars-4.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c2eaaa7a9846bfe8d147aa5378938a3799251e2d9aca24f2d24aad9008c8bcc3
BLAKE2b-256 checksum
How to use checksums
802cf731c8ca3a041851980078c87e847d69302744406b8ae67731c1cee20bed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp311-cp311-macosx_15_0_arm64.whl

Download URL grizzlars-4.2.0-cp311-cp311-macosx_15_0_arm64.whl
Size 917.3 kB
Tags CPython 3.11 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
a6395cac69acb2bd547db4cfc9049cd4f35bacad1d5052234771675cfc09fdc2
BLAKE2b-256 checksum
How to use checksums
f2479fa838ed6e7405730c6e0ed4a9e804828876e1b3b90f22de3f74440784bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp311-cp311-macosx_14_0_arm64.whl

Download URL grizzlars-4.2.0-cp311-cp311-macosx_14_0_arm64.whl
Size 946.7 kB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
6c8e8f823601a6b9f0629815b297cd83ea4064be0f069261f941d96de33aa4fc
BLAKE2b-256 checksum
How to use checksums
77fe18aaf4a6e634ec4e4fb342f0dfa277f891eff5668b98c667b340fa0957aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp310-cp310-win_amd64.whl

Download URL grizzlars-4.2.0-cp310-cp310-win_amd64.whl
Size 1.2 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
63030af9ef21daf6956d4819ae99704f8a4f19a577d7c2c9e92a19803ce25ec5
BLAKE2b-256 checksum
How to use checksums
f1c294448228f0f7d8832ebfcddbba0a15bb503439f723bce539fe9264543a2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL grizzlars-4.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
95eab3078fb3e0c24a3c81f675fb5b6eb0ed4f024df0de3a870db9a5176f4074
BLAKE2b-256 checksum
How to use checksums
273888b5a0780c5b8c3836c389884bc70293502c9c6b36b24f513eb7fbc0733e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp310-cp310-macosx_15_0_arm64.whl

Download URL grizzlars-4.2.0-cp310-cp310-macosx_15_0_arm64.whl
Size 917.5 kB
Tags CPython 3.10 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
e48f60c4bef45b317a1abd90189a7c0598db6a0f7d87e12892f1253e60c262a2
BLAKE2b-256 checksum
How to use checksums
872a2c9aa4b27c1fbe3780b8026c37576371202cfa584796935a9ac7f5dc2ee7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / grizzlars-4.2.0-cp310-cp310-macosx_14_0_arm64.whl

Download URL grizzlars-4.2.0-cp310-cp310-macosx_14_0_arm64.whl
Size 946.9 kB
Tags CPython 3.10 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
84bc61ddab1c59d14894da41bd279547863841dd4aa7c816956ff93735a50fcf
BLAKE2b-256 checksum
How to use checksums
599165b00eb18dbb2b16d7fbeb536334ac7374e12263b3b8ae41fe1a628ac0b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

4.2.0 This release

13 release files

4.1.0

13 release files

0.1.1

13 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page