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.

grizzlars wraps hmdf, 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

df = grizzlars.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 = grizzlars.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 = grizzlars.read_csv("data.csv")

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

# Force a column to a specific type (triggers slower Python fallback)
df = grizzlars.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 = grizzlars.DataFrame({
    "x": [1, 2, 3],
    "y": [4.0, 5.0, 6.0],
})

# Custom index
df = grizzlars.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  = grizzlars.read_csv("orders.csv",   index_col="order_id")
right = grizzlars.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

grizzlars.set_optimum_thread_level()   # auto-detect (called on import)
grizzlars.set_thread_level(4)          # pin to 4 threads
grizzlars.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

Benchmark against polars on a 100 000-row customer dataset (12 columns, mixed string/numeric):

Operation grizzlars
read_csv 2.41× faster
sort 1.33× faster
filter 24.93× faster
groupby 2.69× faster
aggregate 20.39× faster
describe 61.97× faster
join inner 2.15× slower
join left 4.07× slower

Full test result:

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

  Rows: 100,000    Columns: 12

  ── Load ──────────────────────────────────────────────────────────────
  read_csv (customers)                       polars    76.13 ms   grizzlars    31.53 ms    → grizzlars is 2.41× faster

  ── Memory ────────────────────────────────────────────────────────────
  RSS delta after load                       polars      N/A   grizzlars      N/A
  In-process data size                       polars    15.5 MiB   grizzlars    15.9 MiB

  ── Operations ────────────────────────────────────────────────────────
  sort(Last Name asc)                        polars    45.97 ms   grizzlars    34.67 ms    → grizzlars is 1.33× faster
  filter(Index > 50) → 99,950 rows           polars    26.17 ms   grizzlars     1.05 ms    → grizzlars is 24.93× faster
  groupby Country → 243 groups               polars    13.79 ms   grizzlars     5.13 ms    → grizzlars is 2.69× faster
  agg(mean/sum/std/min/max)                  polars     5.72 ms   grizzlars    280.4 µs    → grizzlars is 20.39× faster
  describe                                   polars    23.60 ms   grizzlars    380.9 µs    → grizzlars is 61.97× faster

  ── Joins  (customers ⋈ people-100000.csv) ───────────────────────────
  join inner → 100,000 rows                  polars    20.54 ms   grizzlars    44.12 ms    → polars is 2.15× faster
  join left  → 100,000 rows (~50 000 unmatched) polars     9.90 ms   grizzlars    40.30 ms    → polars is 4.07× faster

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

Project Structure

grizzlars/
├── grizzlars/             Python package
│   └── __init__.py        DataFrame class + read_csv
├── src/
│   └── grizzlars_bindings.cpp   pybind11 C++ extension
├── DataFrame/             hmdf C++ library (header-only + DateTime.cc)
├── tests/
│   ├── text_benchmark_test.py    customer data benchmark
│   ├── numeric_benchmark_test.py stock data benchmark
│   └── mixed_benchmark_test.py   warehouse data benchmark
├── 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.0.tar.gz (20.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-0.1.0-cp312-cp312-win_amd64.whl (277.7 kB view details)

Uploaded CPython 3.12Windows x86-64

grizzlars-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (312.6 kB view details)

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

grizzlars-0.1.0-cp312-cp312-macosx_15_0_arm64.whl (310.5 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

grizzlars-0.1.0-cp312-cp312-macosx_14_0_arm64.whl (321.5 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

grizzlars-0.1.0-cp311-cp311-win_amd64.whl (275.6 kB view details)

Uploaded CPython 3.11Windows x86-64

grizzlars-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (312.7 kB view details)

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

grizzlars-0.1.0-cp311-cp311-macosx_15_0_arm64.whl (309.1 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

grizzlars-0.1.0-cp311-cp311-macosx_14_0_arm64.whl (319.4 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

grizzlars-0.1.0-cp310-cp310-win_amd64.whl (274.9 kB view details)

Uploaded CPython 3.10Windows x86-64

grizzlars-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (312.8 kB view details)

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

grizzlars-0.1.0-cp310-cp310-macosx_15_0_arm64.whl (308.2 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

grizzlars-0.1.0-cp310-cp310-macosx_14_0_arm64.whl (318.5 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

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

File metadata

  • Download URL: grizzlars-0.1.0.tar.gz
  • Upload date:
  • Size: 20.8 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.0.tar.gz
Algorithm Hash digest
SHA256 702438d83d3a94630519a46c3748f5c4a5695537ba6128cd7d2eb65bbed915cf
MD5 cdccf9b1533cc0d5c4b60944c9c8a82b
BLAKE2b-256 646c4df40e31931f5233b3ae59b56e6ec1500fd0ac6bc2080035d6913c5f0b37

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: grizzlars-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 277.7 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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a586929ea359a7ac1351ab4d38475cc8743b887474899001a6d3032b90511668
MD5 dec1190a101b8b66196efe7a1cd0644f
BLAKE2b-256 4989ffd3f232e7133556aa414503c162f0f5e12bf0a6f1337971de6260b1c21d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for grizzlars-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c107f84e10e9fc4605f640e52e34aed2cda6a13d1619ef15fdab92c4d5fa3633
MD5 45746c90f0f463f484e5d1e164682083
BLAKE2b-256 c113df398b87baed061b5a1b8e5155f114ff5a2763a237f678a869995778380a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for grizzlars-0.1.0-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a509fed7e0ef7ae5a57cd70bdf74a777e3cf4710177d270a2dec68224a4ff300
MD5 ed53a14289380ab652f435694566e4c8
BLAKE2b-256 56a5834ae4eeb7784072f7e00ccf51d6be06f8671058d13a1bbecb4426028aa5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for grizzlars-0.1.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 43b1939e4de124d41ab7a8126c35ca758ff28b7cdb979b2e8c9e6ae83e59d786
MD5 ae5b515659b6d10f89611773fc7547ed
BLAKE2b-256 63318385229458a275208771a18befb8cb74d36f7d8f51fbcc4fe378ab1a4414

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: grizzlars-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 275.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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7839ae29d187bbdd94484abfb9a54928229a851eb2ee1b844186fe4ac36acb52
MD5 815066707e6298b457db1660f1eb3350
BLAKE2b-256 7cd8128eb440cc51e60a612e934bcf6d8287c3981875a5e5f22248ec925a13f0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for grizzlars-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a9980cc09cb9a7a2a99a00e5769c9c1e6c903653b35970b03988de73fb8b5b75
MD5 46cab4260442860bbf13a4d2512e0d19
BLAKE2b-256 bd509b704153e368cf200a51a933305cf26d7377f28c32ceb27e91bfec450ce5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for grizzlars-0.1.0-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 ccb8ccbe3ffdd015db3acf08ebdeb29297290a7505e812716bc001a39f162f26
MD5 12c043397a135d7bf0e72f33a54d85e8
BLAKE2b-256 4e29ea502312bae1fd99c4cdf9527d8baaf3304ce5d554096fa41ba28ad4aa4c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for grizzlars-0.1.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 41bb961baa4c4e505e576ba27fbbd2324cf759a40297137742c32c2a578f6cdf
MD5 d363a754f9269bb013debaa9f9ad6b3e
BLAKE2b-256 37a71ee719782e03ce54252c3098763df0edec6bf4345c0b8f5eca91934687bb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: grizzlars-0.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 274.9 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.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 abdae4ca6a9ef69fd63793840fa8a476b6bdd7ce0ce7a15804ea2f054207918a
MD5 d069be8989a185dbfff9b58640546080
BLAKE2b-256 592eabec443528a6071b8a4969045004501fcb021fb74696bfe8cffd8e6dfe7e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for grizzlars-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d1c70d64c0199842ac8ff13a87a7b018fe9f307dd7d5f22a230e8178195fb308
MD5 56c92de32481c8de13b470f27346cdbd
BLAKE2b-256 f7be91e5e51eb27ea2b13da31125952bea56eabcd7eb81ded2778ebc57662204

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for grizzlars-0.1.0-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 fe8fed11b09cd687ad64738699c0d29f5cb3058ce1ad8f594832e8f7bb2e3c93
MD5 35fb970de1628c0705afcd1530475667
BLAKE2b-256 030a59f9166fe796640261102d2f6e2251141c65e7911b800f29028b041b08ad

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for grizzlars-0.1.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 baab19a2aa1c85e89daaa5ac23c6700aac3a87c63cd99a5a9823f78956f308b2
MD5 dadf0544f5b87978ac6fc67cd45d750d
BLAKE2b-256 154b7c96ed0806f431b03e17570107344361671c15769857607f52a6e927a32a

See more details on using hashes here.

Provenance

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