Blazing-fast FP-Growth and Association Rules — pure Rust via PyO3
Project description
Blazing-fast Market Basket Analysis and Recommender Engines (ALS, BPR, FP-Growth, PrefixSpan) for Python, powered by Rust.
rusket is a modern library for Market Basket Analysis and Recommender Engines.
Arrow-backed, fully compatible with Spark, and written entirely in Rust (via PyO3), it delivers 2–15× speed-ups and dramatically lower memory usage compared to traditional Python implementations.
It features Alternating Least Squares (ALS) and Bayesian Personalized Ranking (BPR) for collaborative filtering, as well as FP-Growth (parallel via Rayon), Eclat (vertical bitset mining), HUPM (High-Utility Pattern Mining via EFIM), and PrefixSpan (sequential pattern mining). It serves as a drop-in replacement for mlxtend's APIs, natively supporting Pandas (including Arrow backend), Polars, and sparse DataFrames out of the box.
All algorithms expose both a functional API (mine(df, ...)) and an OOP class API (FPGrowth.from_transactions(df).mine()) that flows naturally from raw transaction logs.
✨ Highlights
rusket |
mlxtend |
|
|---|---|---|
| Core language | Rust (PyO3) | Pure Python |
| Algorithms | ALS, BPR, PrefixSpan, FP-Growth, Eclat, HUPM | FP-Growth only |
| Recommender API | ✅ Hybrid Engine + i2i Similarity | ❌ |
| Graph & Embeddings | ✅ NetworkX Export, Vector DB Export | ❌ |
| OOP class API | ✅ FPGrowth.from_transactions(df).mine() |
❌ |
| Pandas dense input | ✅ C-contiguous np.uint8 |
✅ |
| Pandas Arrow backend | ✅ Arrow zero-copy (pandas 2.0+) | ❌ Not supported |
| Pandas sparse input | ✅ Zero-copy CSR → Rust | ❌ Densifies first |
| Polars input | ✅ Arrow zero-copy | ❌ Not supported |
| Spark / distributed | ✅ mine_grouped, rules_grouped, prefixspan_grouped, hupm_grouped, recommend_batches |
❌ |
| Parallel mining | ✅ Rayon work-stealing | ❌ Single-threaded |
| Memory | Low (native Rust buffers) | High (Python objects) |
| API compatibility | ✅ Drop-in replacement | — |
| Metrics | 12 built-in metrics | 9 |
📦 Installation
pip install rusket
# or with uv:
uv add rusket
Optional extras:
# Polars support
pip install "rusket[polars]"
# Pandas/NumPy support (usually already installed)
pip install "rusket[pandas]"
🚀 Quick Start
"Frequently Bought Together" — Grocery Checkout Data
Identify which products co-occur most in customer baskets — the foundation of cross-sell widgets, promotional bundles, and shelf placement decisions.
import pandas as pd
from rusket import mine, association_rules
# One week of supermarket checkout data (1 row = 1 receipt, 1 col = 1 SKU)
receipts = pd.DataFrame({
"milk": [1, 1, 0, 1, 1, 0, 1],
"bread": [1, 0, 1, 1, 0, 1, 1],
"butter": [1, 0, 1, 0, 0, 1, 0],
"eggs": [0, 1, 1, 0, 1, 0, 1],
"coffee": [0, 1, 0, 0, 1, 1, 0],
"orange_juice": [1, 0, 0, 1, 0, 0, 1],
}, dtype=bool)
# Step 1 — which SKU combinations appear in ≥40% of receipts?
# method="auto" selects FP-Growth or Eclat based on catalogue density
freq = mine(receipts, min_support=0.4, use_colnames=True)
# Step 2 — keep rules with ≥60% confidence
rules = association_rules(
freq,
num_itemsets=len(receipts),
metric="confidence",
min_threshold=0.6,
)
# Lift > 1 means customers buy these together more than chance alone
print(rules[["antecedents", "consequents", "support", "confidence", "lift"]]
.sort_values("lift", ascending=False))
🛒 E-Commerce Order Lines (Long Format)
Real-world data arrives as (order_id, sku) rows from a database — not one-hot matrices.
Functional API
import pandas as pd
from rusket import from_transactions, mine
# Order line export from your e-commerce backend
orders = pd.DataFrame({
"order_id": [1001, 1001, 1001, 1002, 1002, 1003, 1003],
"sku": ["HDPHONES", "USB_DAC", "AUX_CABLE",
"HDPHONES", "CARRY_CASE",
"USB_DAC", "AUX_CABLE"],
})
# Convert long-format → one-hot boolean matrix, then mine
ohe = from_transactions(orders, transaction_col="order_id", item_col="sku")
freq = mine(ohe, min_support=0.3, use_colnames=True)
print(freq)
OOP Class API
All mining algorithms expose a class-based API that goes straight from order lines to recommendations:
from rusket import FPGrowth, Eclat, AutoMiner
model = AutoMiner.from_transactions(
orders,
transaction_col="order_id",
item_col="sku",
min_support=0.3,
)
freq = model.mine(use_colnames=True)
rules = model.association_rules(metric="confidence", min_threshold=0.6)
# Which accessories should be suggested when headphones are in the cart?
suggestions = model.recommend_items(["HDPHONES"], n=3)
# → e.g. ["USB_DAC", "AUX_CABLE", "CARRY_CASE"]
Or use the explicit type variants:
from rusket import from_pandas, from_polars
ohe = from_pandas(orders, transaction_col="order_id", item_col="sku")
ohe = from_polars(pl_orders, transaction_col="order_id", item_col="sku")
ohe = from_transactions([["HDPHONES", "USB_DAC"], ["HDPHONES", "CARRY_CASE"]]) # list of lists
Spark is also supported:
from_spark(spark_df)calls.toPandas()internally.
⚡ Eclat — Large SKU Catalogues
eclat uses vertical bitset representation + hardware popcnt for fast support counting. Ideal for large SKU catalogues where baskets contain only a handful of items out of thousands (low density, typically < 0.15).
import pandas as pd
from rusket import eclat, association_rules
# Fashion e-tailer: 5 receipts, basket contains only a subset of the catalogue
baskets = pd.DataFrame({
"jeans": [True, True, False, True, True],
"t_shirt": [True, False, True, True, False],
"sneakers": [True, True, True, False, True],
"belt": [False, True, True, False, True],
})
# Eclat — same API as fpgrowth, typically faster on sparse catalogues
freq = eclat(baskets, min_support=0.4, use_colnames=True)
rules = association_rules(freq, num_itemsets=len(baskets), min_threshold=0.6)
print(rules)
When to use which?
You almost always want to use rusket.mine(method="auto"). This evaluates the density of your dataset nnz / (rows * cols) using the Borgelt heuristic (2003) to pick the best algorithm under the hood:
| Scenario | Algorithm chosen by method="auto" |
|---|---|
| Large SKU catalogue, small basket size (density < 0.15) | eclat (bitset/SIMD intersections) |
| Smaller catalogue, dense baskets (density > 0.15) | fpgrowth (FP-tree traversals) |
🐻❄️ Polars Input — Reading from Data Lake Parquet
For teams running a modern data stack with Parquet files on S3/GCS/Azure Blob, rusket natively accepts Polars DataFrames. Data is transferred via Arrow zero-copy buffers — no conversion overhead.
The fastest path from a data lake to "Frequently Bought Together" rules:
import polars as pl
from rusket import mine, association_rules
# ── 1. Read a one-hot basket matrix directly from S3/GCS/local Parquet ──
# Columns = SKUs (bool), rows = receipts — produced by your dbt or Spark pipeline
baskets = pl.read_parquet("s3://data-lake/gold/basket_ohe.parquet")
print(f"Loaded {baskets.shape[0]:,} receipts × {baskets.shape[1]} SKUs")
# ── 2. Mine frequent combinations ────────────────────────────────────
freq = mine(baskets, min_support=0.02, use_colnames=True, max_len=3)
print(f"Found {len(freq):,} frequent itemsets")
print(freq.sort_values("support", ascending=False).head(10))
# ── 3. Generate cross-sell rules ────────────────────────────────────
rules = association_rules(freq, num_itemsets=len(baskets), metric="lift", min_threshold=1.2)
print(f"Rules with lift > 1.2: {len(rules):,}")
print(
rules[["antecedents", "consequents", "confidence", "lift"]]
.sort_values("lift", ascending=False)
.head(8)
)
How it works under the hood:
Polars → Arrow buffer →np.uint8(zero-copy) → Rustfpgrowth_from_dense
💎 High-Utility Pattern Mining (HUPM) — Profit-Driven Bundle Discovery
Frequent items aren't always the most profitable. HUPM finds product combinations that generate the highest total gross margin — even if they appear rarely. rusket implements the state-of-the-art EFIM algorithm in Rust.
OOP Class API
import pandas as pd
from rusket import HUPM
# Specialty foods retailer: receipt line items with gross margin per unit sold
orders = pd.DataFrame({
"receipt_id": [1, 1, 1, 2, 2, 3, 3],
"product": ["aged_cheese", "wine_flight", "charcuterie",
"aged_cheese", "charcuterie",
"wine_flight", "charcuterie"],
"margin": [8.50, 12.00, 6.50, # receipt 1 — margin per item
8.50, 6.50, # receipt 2
12.00, 6.50], # receipt 3
})
# Find all product bundles generating ≥ €20 total margin across all receipts
high_margin = HUPM.from_transactions(
orders,
transaction_col="receipt_id",
item_col="product",
utility_col="margin",
min_utility=20.0,
).mine()
print(high_margin.head())
# e.g. aged_cheese + wine_flight + charcuterie → total margin 81.0
Functional API
from rusket import mine_hupm
high_margin = mine_hupm(
data=orders,
transaction_col="receipt_id",
item_col="product",
utility_col="margin",
min_utility=20.0,
)
print(high_margin.head())
📊 Sparse Pandas Input
For very sparse datasets (e.g. e-commerce with thousands of SKUs), use Pandas SparseDtype to minimize memory. rusket passes the raw CSR arrays straight to Rust — no densification ever happens.
import pandas as pd
import numpy as np
from rusket import fpgrowth
rng = np.random.default_rng(7)
n_rows, n_cols = 30_000, 500
# Very sparse: average basket size ≈ 3 items out of 500
p_buy = 3 / n_cols
matrix = rng.random((n_rows, n_cols)) < p_buy
products = [f"sku_{i:04d}" for i in range(n_cols)]
df_dense = pd.DataFrame(matrix.astype(bool), columns=products)
df_sparse = df_dense.astype(pd.SparseDtype("bool", fill_value=False))
dense_mb = df_dense.memory_usage(deep=True).sum() / 1e6
sparse_mb = df_sparse.memory_usage(deep=True).sum() / 1e6
print(f"Dense memory: {dense_mb:.1f} MB")
print(f"Sparse memory: {sparse_mb:.1f} MB ({dense_mb / sparse_mb:.1f}× smaller)")
# Same API, same results — just faster and lighter
freq = mine(df_sparse, min_support=0.01, use_colnames=True)
print(f"Frequent itemsets: {len(freq):,}")
How it works under the hood:
Sparse DataFrame → COO → CSR →(indptr, indices)→ Rustfpgrowth_from_csr
🌊 Out-of-Core Processing (FPMiner Streaming)
For datasets scaling to Billion-row sizes that don't fit in memory, use the FPMiner accumulator. It accepts chunks of (txn_id, item_id) pairs, sorting them in-place immediately, and uses a memory-safe k-way merge across all chunks to build the CSR matrix on the fly avoiding massive memory spikes.
import numpy as np
from rusket import FPMiner
n_items = 5_000
miner = FPMiner(n_items=n_items)
# Feed chunks incrementally (e.g. from Parquet/CSV/SQL)
for chunk in dataset:
txn_ids = chunk["txn_id"].to_numpy(dtype=np.int64)
item_ids = chunk["item_id"].to_numpy(dtype=np.int32)
# Fast O(k log k) per-chunk sort
miner.add_chunk(txn_ids, item_ids)
# Stream k-way merge and mine in one pass!
# Returns a DataFrame with 'support' and 'itemsets' just like fpgrowth()
freq = miner.mine(min_support=0.001, max_len=3)
Memory efficiency: The peak memory overhead at mine() time is just $O(k)$ for the cursors (where $k$ is the number of chunks), plus the final compressed CSR allocation.
🌩️ Distributed Computing with Apache Spark
rusket ships a full Spark integration layer in rusket.spark. All algorithms run as Native Arrow UDFs via applyInArrow — Rust is called directly on each executor, with zero Python overhead per row.
How it works
PySpark DataFrame
└─► groupby(group_col).applyInArrow(...)
└─► Arrow Table (per partition / per group)
└─► Polars zero-copy conversion
└─► rusket Rust extension (on the executor)
└─► results → PyArrow → PySpark DataFrame
Full Example — Retail Basket Analysis per Store
from pyspark.sql import SparkSession
from rusket.spark import mine_grouped, rules_grouped
spark = SparkSession.builder.appName("rusket-demo").getOrCreate()
# ── 1. Load your OHE transaction table (one row = one basket) ──────────────
# Schema: store_id (string), bread (bool), butter (bool), milk (bool), ...
spark_df = spark.read.parquet("s3://data/baskets/")
# ── 2. Mine frequent itemsets per store in parallel ──────────────────────────
# Each Spark task calls the Rust FP-Growth/Eclat engine on its Arrow batch.
freq_df = mine_grouped(
spark_df,
group_col="store_id",
min_support=0.05, # 5% support per store
method="auto", # auto-selects FP-Growth or Eclat
)
# freq_df schema: store_id | support (double) | itemsets (array<string>)
# ── 3. Count transactions per store (needed for rule support) ────────────────
from pyspark.sql import functions as F
counts = (
spark_df.groupby("store_id")
.agg(F.count("*").alias("n"))
.rdd.collectAsMap() # {"store_1": 12000, "store_2": 8500, ...}
)
# ── 4. Generate association rules per store ──────────────────────────────────
rules_df = rules_grouped(
freq_df,
group_col="store_id",
num_itemsets=counts, # pass per-group counts as a dict
metric="confidence",
min_threshold=0.6,
)
# rules_df schema: store_id | antecedents | consequents | confidence | lift | ...
rules_df.orderBy("lift", ascending=False).show(10, truncate=False)
Sequential Patterns per Category
from rusket.spark import prefixspan_grouped
# event_log schema: category_id, user_id, item_id, event_ts
event_log = spark.read.parquet("s3://data/events/")
seq_df = prefixspan_grouped(
event_log,
group_col="category_id", # mine independently per product category
user_col="user_id", # sequence identifier within the group
time_col="event_ts", # ordering column
item_col="item_id",
min_support=50, # absolute count: pattern must appear in ≥50 sessions
max_len=4,
)
# seq_df schema: category_id | support (long) | sequence (array<string>)
seq_df.show(5, truncate=False)
High-Utility Patterns per Region
from rusket.spark import hupm_grouped
# profit_log schema: region_id, txn_id, item_id, profit
profit_log = spark.read.parquet("s3://data/profit/")
utility_df = hupm_grouped(
profit_log,
group_col="region_id",
transaction_col="txn_id",
item_col="item_id",
utility_col="profit",
min_utility=500.0, # only itemsets with combined profit ≥ €500
)
# utility_df schema: region_id | utility (double) | itemset (array<long>)
utility_df.show(5, truncate=False)
Batch Recommendations across the Cluster
from rusket.spark import recommend_batches
from rusket import ALS
# 1. Train an ALS model locally (or load a pre-trained one)
als = ALS(factors=64, iterations=15).from_transactions(
events_pd,
user_col="user_id",
item_col="item_id",
)
# 2. Scale-out scoring: one recommendation row per user
user_df = spark.read.parquet("s3://data/users/").select("user_id")
recs_df = recommend_batches(user_df, model=als, user_col="user_id", k=10)
# recs_df schema: user_id (string) | recommended_items (array<int>)
recs_df.show(5, truncate=False)
Tip — Databricks / Delta Lake: All functions return a standard PySpark DataFrame, so you can write results back with
.write.format("delta").save(...)or.saveAsTable(...)directly.
🔄 Migrating from mlxtend
rusket is a drop-in replacement. The only API difference is num_itemsets:
- from mlxtend.frequent_patterns import fpgrowth, association_rules
+ from rusket import mine, association_rules
- freq = fpgrowth(df, min_support=0.05, use_colnames=True)
+ freq = mine(df, min_support=0.05, use_colnames=True)
- rules = association_rules(freq, metric="lift", min_threshold=1.2)
+ rules = association_rules(freq, num_itemsets=len(df), # ← add this
+ metric="lift", min_threshold=1.2)
Why
num_itemsets? This makes support calculation explicit and avoids a hidden internal pandas join thatmlxtendperforms.
Gotchas:
- Input must be
boolor0/1integers —rusketwarns if you pass floats - Polars is supported natively — just pass the DataFrame directly
- Sparse pandas DataFrames work too — and use much less RAM
📖 API Reference
OOP Class API
Every algorithm in rusket exposes a class-based API in addition to the functional helpers. All classes share a unified interface inherited from BaseModel:
| Class | Inherits from | Description |
|---|---|---|
FPGrowth |
Miner, RuleMinerMixin |
FP-Tree parallel mining |
Eclat |
Miner, RuleMinerMixin |
Vertical bitset mining |
AutoMiner |
Miner, RuleMinerMixin |
Auto-selects FP-Growth or Eclat |
HUPM |
Miner |
High-Utility Pattern Mining (EFIM) |
PrefixSpan |
Miner |
Sequential pattern mining |
ALS |
ImplicitRecommender |
Alternating Least Squares CF |
BPR |
ImplicitRecommender |
Bayesian Personalized Ranking CF |
All classes share the following data-ingestion class methods inherited from BaseModel:
# Load from long-format (transaction_id, item_id) DataFrame or list of lists
model = FPGrowth.from_transactions(df, transaction_col="order_id", item_col="item", min_support=0.3)
# Typed convenience aliases — same result
model = FPGrowth.from_pandas(df, ...)
model = FPGrowth.from_polars(pl_df, ...)
model = FPGrowth.from_spark(spark_df, ...)
Miner subclasses (FPGrowth, Eclat, AutoMiner) additionally expose RuleMinerMixin, giving a fluent pipeline:
model = AutoMiner.from_transactions(df, min_support=0.3)
freq = model.mine(use_colnames=True) # pd.DataFrame [support, itemsets]
rules = model.association_rules(metric="lift") # pd.DataFrame [antecedents, consequents, ...]
recs = model.recommend_items(["bread", "milk"]) # list of suggested items
ImplicitRecommender subclasses (ALS, BPR) expose:
model = ALS(factors=64, iterations=15).fit(user_item_csr)
# — or directly from an event log —
model = ALS(factors=64).from_transactions(df, user_col="user_id", item_col="item_id")
items, scores = model.recommend_items(user_id=42, n=10, exclude_seen=True)
users, scores = model.recommend_users(item_id=99, n=5)
mine (functional)
rusket.mine(
df,
min_support: float = 0.5,
null_values: bool = False,
use_colnames: bool = False,
max_len: int | None = None,
method: str = "auto",
verbose: int = 0,
) -> pd.DataFrame
Dynamically selects the optimal mining algorithm based on the dataset density heuristically. It's highly recommended to use this instead of fpgrowth or eclat directly. Equivalent to AutoMiner(...).mine().
| Parameter | Type | Description |
|---|---|---|
df |
pd.DataFrame | pl.DataFrame | np.ndarray |
One-hot encoded input (bool / 0-1). Dense, sparse, or Polars. |
min_support |
float |
Minimum support threshold in (0, 1]. |
null_values |
bool |
Allow NaN values in df (pandas only). |
use_colnames |
bool |
Return column names instead of integer indices in itemsets. |
max_len |
int | None |
Maximum itemset length. None = unlimited. |
method |
"auto" | "fpgrowth" | "eclat" |
Algorithm to use. "auto" selects Eclat for <0.15 density distributions. |
verbose |
int |
Verbosity level. |
Returns a pd.DataFrame with columns ['support', 'itemsets'].
fpgrowth (functional)
rusket.fpgrowth(
df,
min_support: float = 0.5,
null_values: bool = False,
use_colnames: bool = False,
max_len: int | None = None,
verbose: int = 0,
) -> pd.DataFrame
Equivalent to FPGrowth(...).mine(). See class table above.
| Parameter | Type | Description |
|---|---|---|
df |
pd.DataFrame | pl.DataFrame | np.ndarray |
One-hot encoded input (bool / 0-1). Dense, sparse, or Polars. |
min_support |
float |
Minimum support threshold in (0, 1]. |
null_values |
bool |
Allow NaN values in df (pandas only). |
use_colnames |
bool |
Return column names instead of integer indices in itemsets. |
max_len |
int | None |
Maximum itemset length. None = unlimited. |
verbose |
int |
Verbosity level (kept for API compatibility with mlxtend). |
Returns a pd.DataFrame with columns ['support', 'itemsets'].
eclat (functional)
rusket.eclat(
df,
min_support: float = 0.5,
null_values: bool = False,
use_colnames: bool = False,
max_len: int | None = None,
verbose: int = 0,
) -> pd.DataFrame
Equivalent to Eclat(...).mine(). Same parameters as fpgrowth. Uses vertical bitset representation (Eclat algorithm) instead of FP-Tree.
Returns a pd.DataFrame with columns ['support', 'itemsets'].
association_rules (functional)
rusket.association_rules(
df,
num_itemsets: int,
metric: str = "confidence",
min_threshold: float = 0.8,
support_only: bool = False,
return_metrics: list[str] = [...], # all 12 metrics by default
) -> pd.DataFrame
Alternatively, if you used the OOP API, call model.association_rules(metric=..., min_threshold=...) directly — num_itemsets is tracked automatically.
| Parameter | Type | Description |
|---|---|---|
df |
pd.DataFrame |
Output from fpgrowth(). |
num_itemsets |
int |
Number of transactions in the original dataset (len(df_original)). |
metric |
str |
Metric to filter rules on (see table below). |
min_threshold |
float |
Minimum value of metric to include a rule. |
support_only |
bool |
Only compute support; fill other columns with NaN. |
return_metrics |
list[str] |
Subset of metrics to include in the result. |
Returns a pd.DataFrame with columns antecedents, consequents, plus all requested metric columns.
Available Metrics
| Metric | Formula / Description |
|---|---|
support |
P(A ∪ B) |
confidence |
P(B | A) |
lift |
confidence / P(B) |
leverage |
support − P(A)·P(B) |
conviction |
(1 − P(B)) / (1 − confidence) |
zhangs_metric |
Symmetrical correlation measure |
jaccard |
Jaccard similarity between A and B |
certainty |
Certainty factor |
kulczynski |
Average of P(B|A) and P(A|B) |
representativity |
Rule coverage across transactions |
antecedent support |
P(A) |
consequent support |
P(B) |
from_transactions (functional)
rusket.from_transactions(
data,
transaction_col: str | None = None,
item_col: str | None = None,
) -> pd.DataFrame
Converts long-format transactional data to a one-hot boolean matrix. Accepts Pandas DataFrames, Polars DataFrames, Spark DataFrames, or list[list[...]].
from_pandas / from_polars / from_spark
Explicit typed variants of from_transactions for specific DataFrame types:
rusket.from_pandas(df, transaction_col=None, item_col=None) -> pd.DataFrame
rusket.from_polars(df, transaction_col=None, item_col=None) -> pd.DataFrame
rusket.from_spark(df, transaction_col=None, item_col=None) -> pd.DataFrame
🧠 Advanced Pattern & Recommendation Algorithms
rusket provides more than just basic market basket analysis. It includes an entire suite of modern algorithms and a high-level Business Recommender API.
🎯 ALS & BPR Collaborative Filtering
Both models learn user and item embeddings from implicit feedback (purchases, clicks, plays) and power personalised recommendations at scale. Use ALS for broad serendipitous discovery; use BPR when you care only about top-N ranking.
from rusket import ALS, BPR
# ── "For You" homepage — music streaming platform ────────────────────
# event log: user_id | track_id | plays (optional weight)
plays = pd.DataFrame({
"user_id": [101, 101, 102, 102, 103, 103, 103],
"track_id": ["T01", "T03", "T01", "T05", "T02", "T03", "T05"],
"plays": [12, 5, 8, 3, 20, 1, 7], # play count as confidence weight
})
als = ALS(factors=64, iterations=15, alpha=40.0).from_transactions(
plays, user_col="user_id", item_col="track_id", rating_col="plays"
)
# Top-10 tracks for user 101, excluding already-played tracks
tracks, scores = als.recommend_items(user_id=101, n=10, exclude_seen=True)
# Which users are most likely to enjoy track T05? — useful for email campaigns
users, scores = als.recommend_users(item_id="T05", n=50)
# BPR — optimise ranking directly rather than reconstruction
bpr = BPR(factors=64, learning_rate=0.05, iterations=150).fit(user_item_csr)
🎯 Hybrid Recommender API
Combine Collaborative Filtering (ALS/BPR) with Frequent Pattern Mining to cover every placement surface — personalised homepage ("For You") and active cart ("Frequently Bought Together") — in a single engine.
from rusket import ALS, Recommender, mine, association_rules
# 1. Train on purchase history (implicit feedback)
als = ALS(factors=64, iterations=15).fit(user_item_csr)
# 2. Mine co-purchase rules from basket data
freq = mine(basket_ohe, min_support=0.01)
rules = association_rules(freq, num_itemsets=n_receipts)
# 3. Create the Hybrid Engine
rec = Recommender(als_model=als, rules_df=rules)
# "For You" homepage — personalised for customer 1001
items, scores = rec.recommend_for_user(user_id=1001, n=5)
# Blend CF + product embeddings (e.g. from a PIM or sentence-transformer)
items, scores = rec.recommend_for_user(user_id=1001, n=5, alpha=0.7,
target_item_for_semantic="HDPHONES")
# Active cart cross-sell — "Frequently Bought Together"
add_ons = rec.recommend_for_cart(["USB_DAC", "AUX_CABLE"], n=3)
# Overnight batch — score all customers, write to CRM
batch_df = rec.predict_next_chunk(user_history_df, user_col="customer_id", k=5)
🔍 Analytics Helpers
from rusket import find_substitutes, customer_saturation
# Identify cannibalizing SKUs (lift < 1.0) for assortment rationalisation
subs = find_substitutes(rules_df, max_lift=0.8)
# antecedents consequents lift
# (Cola A,) (Cola B,) 0.61 ← these products hurt each other's sales
# Segment customers by category penetration (decile 10 = buy everything; 1 = barely engaged)
saturation = customer_saturation(
purchases_df, user_col="customer_id", category_col="category_id"
)
📈 BPR & Sequential Patterns
- BPR (Bayesian Personalized Ranking): Directly optimises ranking of positive interactions over negative ones — ideal for newsfeeds, playlists, and app recommendation surfaces that prioritise top-N precision.
- Sequential Pattern Mining (PrefixSpan): Discovers ordered patterns across time (e.g., "Subscriber signed up for broadband → mobile plan → premium bundle" or "Customer viewed Camera → 2 weeks later bought Lens").
rusket natively extracts PrefixSpan sequences from Pandas, Polars, and PySpark event logs with zero-copy Arrow mapping:
OOP Class API
from rusket import PrefixSpan
# Telco product adoption journeys — what sequence of subscriptions do customers follow?
# df: customer_id | subscription_date | product_id
model = PrefixSpan.from_transactions(
subscription_events,
transaction_col="customer_id",
item_col="product_id",
time_col="subscription_date",
min_support=50, # at least 50 customers follow this path
max_len=4,
)
freq_seqs = model.mine()
# e.g. [broadband] → [mobile] → [tv_bundle] appears in 312 journeys
Functional API
from rusket.prefixspan import sequences_from_event_log, prefixspan
sequences, mapping = sequences_from_event_log(
df=subscription_events,
user_col="customer_id",
time_col="subscription_date",
item_col="product_id",
)
freq_seqs = prefixspan(sequences, min_support=50, max_len=4)
🕸️ Graph Analytics & Embeddings
Integrate natively with the modern GenAI/LLM stack:
- Vector Export: Export user/item factors to a Pandas
DataFrameready for FAISS/Qdrant usingrusket.export_item_factors. - Item-to-Item Similarity: Fast Cosine Similarity on embeddings using
rusket.similar_items(als_model, item_id). - Graph Generation: Automatically convert association rules into a
networkxdirected Graph for community detection usingrusket.viz.to_networkx(rules).
⚡ Benchmarks
Scale Benchmarks (1M → 200M rows)
| Scale | from_transactions → fpgrowth |
Direct CSR → Rust | Speedup |
|---|---|---|---|
| 1M rows | 5.0s | 0.1s | 50× |
| 10M rows | 24.4s | 1.2s | 20× |
| 50M rows | 63.1s | 4.0s | 15× |
| 100M rows (20M txns × 200k items) | 134.2s | 10.1s | 13× |
| 200M rows (40M txns × 200k items) | 246.8s | 17.6s | 14× |
Power-user path: Direct CSR → Rust
import numpy as np
from scipy import sparse as sp
from rusket import mine
# Build CSR directly from integer IDs (no pandas!)
csr = sp.csr_matrix(
(np.ones(len(txn_ids), dtype=np.int8), (txn_ids, item_ids)),
shape=(n_transactions, n_items),
)
freq = mine(csr, min_support=0.001, max_len=3,
use_colnames=True, column_names=item_names)
At 100M rows, the mining step takes 1.3 seconds — the bottleneck is entirely the CSR build.
Real-World Datasets
| Dataset | Transactions | Items | rusket |
mlxtend |
Speedup |
|---|---|---|---|---|---|
| andi_data.txt | 8,416 | 119 | 9.7 s (22.8M itemsets) | TIMEOUT 💥 | ∞ |
| andi_data2.txt | 540,455 | 2,603 | 7.9 s | 16.2 s | 2× |
Run benchmarks yourself:
uv run python benchmarks/bench_scale.py # Scale benchmark + Plotly chart
uv run python benchmarks/bench_realworld.py # Real-world datasets
uv run pytest tests/test_benchmark.py -v -s # pytest-benchmark
🏗 Architecture
Data Flow
pandas dense ──► np.uint8 array (C-contiguous) ──► Rust fpgrowth_from_dense
pandas Arrow backend ──► Arrow → np.uint8 (zero-copy) ──► Rust fpgrowth_from_dense
pandas sparse ──► CSR int32 arrays ──► Rust fpgrowth_from_csr
polars ──► Arrow → np.uint8 (zero-copy) ──► Rust fpgrowth_from_dense
numpy ndarray ──► np.uint8 (C-contiguous) ──► Rust fpgrowth_from_dense
All mining and rule generation happens inside Rust. No Python loops, no round-trips.
The 1 Billion Row Architecture
To pass the "1 Billion Row" threshold without OOM crashes, rusket employs a zero-allocation mining loop:
- Eclat Scratch Buffers:
intersect_count_intowrites intersections directly into thread-local pre-allocated memory bytes and computespopcntin a single pass. It implements early-exit loop termination the moment it proves a combination cannot reachmin_support. - FPGrowth Parallel Tree Build: Conditional FP-trees are collected concurrently inside the rayon parallel mining step, replacing the standard sequential loop and eliminating memory contention bottlenecks.
AHashMapDeduplication: Extremely fast O(N) duplicate basket counting replaces standard O(N log N) unstable sorts in the core pipeline.
Project Structure
├── src/ # Rust core (PyO3)
│ ├── lib.rs # Module root & Python bindings
│ ├── fpgrowth.rs # FP-Tree construction + FP-Growth mining (Rayon parallel)
│ ├── eclat.rs # Eclat vertical mining (bitset intersection + popcnt)
│ ├── als.rs # ALS collaborative filtering (CG + Cholesky + Anderson)
│ ├── bpr.rs # Bayesian Personalized Ranking (Hogwild! SGD)
│ ├── hupm.rs # High-Utility Pattern Mining (EFIM algorithm)
│ ├── prefixspan.rs # Sequential pattern mining (PrefixSpan)
│ └── association_rules.rs # Rule generation + 12 metrics (Rayon parallel)
│
├── rusket/ # Python wrappers & validation
│ ├── __init__.py # Package root
│ ├── model.py # BaseModel / Miner / ImplicitRecommender / RuleMinerMixin
│ ├── fpgrowth.py # FPGrowth class + fpgrowth() functional API
│ ├── eclat.py # Eclat class + eclat() functional API
│ ├── mine.py # AutoMiner class + mine() functional API
│ ├── als.py # ALS collaborative filtering model
│ ├── bpr.py # BPR collaborative filtering model
│ ├── hupm.py # HUPM class + hupm() / mine_hupm() functional API
│ ├── prefixspan.py # PrefixSpan class + prefixspan() functional API
│ ├── recommend.py # Recommender / NextBestAction / score_potential
│ ├── analytics.py # find_substitutes / customer_saturation
│ ├── similarity.py # similar_items()
│ ├── export.py # export_item_factors()
│ ├── streaming.py # FPMiner / mine_duckdb / mine_spark
│ ├── spark.py # mine_grouped / prefixspan_grouped / hupm_grouped /
│ │ # rules_grouped / recommend_batches / to_spark
│ ├── transactions.py # from_transactions / from_pandas / from_polars /
│ │ # from_spark / from_transactions_csr
│ ├── viz.py # to_networkx()
│ ├── _validation.py # Input validation
│ └── _rusket.pyi # Type stubs for Rust extension
│
├── tests/ # Comprehensive test suite
├── benchmarks/ # Real-world benchmark scripts
├── docs/ # Zensical documentation
└── pyproject.toml # Build config (maturin)
🧑💻 Development
Prerequisites
- Rust 1.83+ (
rustup update) - Python 3.10+
- uv (recommended package manager)
Getting Started
# Clone
git clone https://github.com/bmsuisse/rusket.git
cd rusket
# Build Rust extension in dev mode
uv run maturin develop --release
# Run the full test suite
uv run pytest tests/ -x -q
# Type-check the Python layer
uv run pyright rusket/
# Cargo check (Rust)
cargo check
Run Examples
# Getting started
uv run python examples/01_getting_started.py
# Market basket analysis with Faker
uv run python examples/02_market_basket_faker.py
# Polars input
uv run python examples/03_polars_input.py
# Sparse input
uv run python examples/04_sparse_input.py
# Large-scale mining (100k+ rows)
uv run python examples/05_large_scale.py
# mlxtend migration guide
uv run python examples/06_mlxtend_migration.py
🤖 AI Disclosure
A large part of this library — including the Rust core algorithms, the Python wrappers, the OOP class hierarchy, and the Spark integration layer — was written with substantial assistance from AI pair-programming tools (specifically Google Gemini / Antigravity). Human review, benchmarking, and architectural decisions were applied throughout.
We believe in transparency about AI-assisted development. The algorithms are correct, the tests pass, and the performance numbers are real — but if you find a bug or a piece of "AI slop", please open an issue!
📜 License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rusket-0.1.25-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: PyPy, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5eee05097f3b5d6d3a23edfad363953d515acf769cd06eaf63e17b885e2d3704
|
|
| MD5 |
787a63dd1c1b6b8678396d9193e08959
|
|
| BLAKE2b-256 |
25be786a57009a4848fcb5b46142b8ff23162b4b5603445dea58db4d54b260ed
|
Provenance
The following attestation bundles were made for rusket-0.1.25-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl -
Subject digest:
5eee05097f3b5d6d3a23edfad363953d515acf769cd06eaf63e17b885e2d3704 - Sigstore transparency entry: 976527982
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: PyPy, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09207b754d04d0a41db5651c6f47cc2e5a98528f1ea4705a4c652712b159837f
|
|
| MD5 |
a838e22dd96a6e91f060343a2b683d46
|
|
| BLAKE2b-256 |
4523530697461fbf864dc1796e926e6267abda6e51b42433cc200bfccb6f3081
|
Provenance
The following attestation bundles were made for rusket-0.1.25-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl -
Subject digest:
09207b754d04d0a41db5651c6f47cc2e5a98528f1ea4705a4c652712b159837f - Sigstore transparency entry: 976527958
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 837.5 kB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
318b5c0b6d1b40f6f709ed968da9047ac38ef49623f418d6813087a09aefa30e
|
|
| MD5 |
4b054a048b66e698782f4b84a1ebdf51
|
|
| BLAKE2b-256 |
22ecbf851ce583ae5469ddc353d76a9e531e53bbb53b867e868c9cff82e98272
|
Provenance
The following attestation bundles were made for rusket-0.1.25-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
318b5c0b6d1b40f6f709ed968da9047ac38ef49623f418d6813087a09aefa30e - Sigstore transparency entry: 976527955
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 935.5 kB
- Tags: PyPy, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40c26adc6144ff511289d126630858cf52293cf0a29cd1c5d3ab80a2bbf590a5
|
|
| MD5 |
505288161f61c1149039cade64b14eaa
|
|
| BLAKE2b-256 |
ad3006e84877c79cbcc0827aa8223ae7d325ff0ab3cd7e7c23265da571f34c8e
|
Provenance
The following attestation bundles were made for rusket-0.1.25-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
40c26adc6144ff511289d126630858cf52293cf0a29cd1c5d3ab80a2bbf590a5 - Sigstore transparency entry: 976527994
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp314-cp314t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp314-cp314t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.14t, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6123ed5290004cc851fc9fc4aa5ddf68965638462848ad495fe587d83c5dfb74
|
|
| MD5 |
22944bf25a782de629b24e73a9ed3acb
|
|
| BLAKE2b-256 |
88b7c83d4ecb0d93a782cf6b0df4815f3da3756917faffbf0f052eca17950e0d
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp314-cp314t-musllinux_1_2_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp314-cp314t-musllinux_1_2_x86_64.whl -
Subject digest:
6123ed5290004cc851fc9fc4aa5ddf68965638462848ad495fe587d83c5dfb74 - Sigstore transparency entry: 976527975
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp314-cp314t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp314-cp314t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.14t, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ece40737f33726baec902fcc931743344e1ef5cf8bc4d6c68d462cf64bc0dc28
|
|
| MD5 |
ec85459945f386eaa306d61aee2566dc
|
|
| BLAKE2b-256 |
46644873570a73ca8651f7adc84c45556877b9af05d836f4f8e344dcbfaae2ff
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp314-cp314t-musllinux_1_2_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp314-cp314t-musllinux_1_2_aarch64.whl -
Subject digest:
ece40737f33726baec902fcc931743344e1ef5cf8bc4d6c68d462cf64bc0dc28 - Sigstore transparency entry: 976527980
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.25-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 685.6 kB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18cd4064e249c9ecf3c88a6237eb173220c61e1d1e5fe1dd28c2c349d8bfd9b3
|
|
| MD5 |
daae1d01233ab11ab65c823bebe09a2a
|
|
| BLAKE2b-256 |
b145bfe5e4886c255dec76570700f4c8541d31beba33e9b506c1818c72acd049
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp314-cp314-win_amd64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp314-cp314-win_amd64.whl -
Subject digest:
18cd4064e249c9ecf3c88a6237eb173220c61e1d1e5fe1dd28c2c349d8bfd9b3 - Sigstore transparency entry: 976527974
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp314-cp314-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp314-cp314-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.14, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c69c2cbf7cd5c29d4327b618380f4e2f399c22ce6aa4b00484b8a6929a18839a
|
|
| MD5 |
6f62d28f8e101b346dc4d1318fe6b9d4
|
|
| BLAKE2b-256 |
b03f2d44395a9a9dac94283bc3fc9516ac46803ffaa861adfa7ee71c1e93eb51
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp314-cp314-musllinux_1_2_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp314-cp314-musllinux_1_2_x86_64.whl -
Subject digest:
c69c2cbf7cd5c29d4327b618380f4e2f399c22ce6aa4b00484b8a6929a18839a - Sigstore transparency entry: 976527977
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp314-cp314-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp314-cp314-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.14, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1f4b86f987579dfeecac86657075954da90d0d10499ffd391a62065b8fb0c04
|
|
| MD5 |
4c7f500e5a0bed448fb0bd9f555daa50
|
|
| BLAKE2b-256 |
a0e352dd128c56b4924fb4dd8d701ff799bee609db7ed9ac30ac4abebe0cc019
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp314-cp314-musllinux_1_2_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp314-cp314-musllinux_1_2_aarch64.whl -
Subject digest:
a1f4b86f987579dfeecac86657075954da90d0d10499ffd391a62065b8fb0c04 - Sigstore transparency entry: 976527973
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 836.6 kB
- Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea0652b96e13ae608242569a17f02d98dd6cffbc5c7212164251e0258ed9c47a
|
|
| MD5 |
717551e7c1bf513d72b0ff0db5d09eef
|
|
| BLAKE2b-256 |
7375765c58f657f5984577d7c6271407ac612ce72fbbbfe0ab86f5df431575c6
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
ea0652b96e13ae608242569a17f02d98dd6cffbc5c7212164251e0258ed9c47a - Sigstore transparency entry: 976528000
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 931.5 kB
- Tags: CPython 3.14, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
126fe543df04fdc1e641460ded1e6344aa953472f2b7404d44a55e5ffb6f9033
|
|
| MD5 |
4e9fff27e6921c256ac03b234d4095b2
|
|
| BLAKE2b-256 |
a6bd2bf2745ac722614f5e29d54aa0f3067811540ae834dc9a0b4083fe321c8a
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
126fe543df04fdc1e641460ded1e6344aa953472f2b7404d44a55e5ffb6f9033 - Sigstore transparency entry: 976528003
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: rusket-0.1.25-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 810.7 kB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39bb728a0dfc9116c5b0f77ce5a9444d0da058d034db5c50d540512e04878b0e
|
|
| MD5 |
a481f7524784a4992672b3e5be018efc
|
|
| BLAKE2b-256 |
730fe75d524fe136c75274cf8f0bab53ac446556343029b47f3dad8e12f118e5
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp314-cp314-macosx_11_0_arm64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp314-cp314-macosx_11_0_arm64.whl -
Subject digest:
39bb728a0dfc9116c5b0f77ce5a9444d0da058d034db5c50d540512e04878b0e - Sigstore transparency entry: 976528014
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp314-cp314-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp314-cp314-macosx_10_12_x86_64.whl
- Upload date:
- Size: 765.8 kB
- Tags: CPython 3.14, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be1fca1e70cbbe9766f81d07a3538b211a0abacba79520a4280f1d02301006f1
|
|
| MD5 |
159b987f578689b8d4d00f8e4d0589f0
|
|
| BLAKE2b-256 |
7e808b457feff5e76bddb217dcc005236c4810298163255f45fc303035053e9d
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp314-cp314-macosx_10_12_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp314-cp314-macosx_10_12_x86_64.whl -
Subject digest:
be1fca1e70cbbe9766f81d07a3538b211a0abacba79520a4280f1d02301006f1 - Sigstore transparency entry: 976527997
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp313-cp313t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp313-cp313t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13t, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbc5270e39d04b4548d0609fb9770ea31ae9c8dd6adda829121e32e17dd9feb9
|
|
| MD5 |
6953bc4fbeccc860aee6b7ef24204dad
|
|
| BLAKE2b-256 |
684e65de4f970d5f65c26a999e36ab6f461b1edc2e467ad656f135cdada49236
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp313-cp313t-musllinux_1_2_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp313-cp313t-musllinux_1_2_x86_64.whl -
Subject digest:
fbc5270e39d04b4548d0609fb9770ea31ae9c8dd6adda829121e32e17dd9feb9 - Sigstore transparency entry: 976527988
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp313-cp313t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp313-cp313t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13t, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1dccacbdf25d64f4f035ebce7f1fabbb1c097cd18ee15ca1656143a583418b0
|
|
| MD5 |
aa993f5d1817266ced229fd7dba6852f
|
|
| BLAKE2b-256 |
cd7983ab42efaa8c50c52e07cb2b8201c934208a0c04e6a209b683b1b8d71de3
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp313-cp313t-musllinux_1_2_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp313-cp313t-musllinux_1_2_aarch64.whl -
Subject digest:
c1dccacbdf25d64f4f035ebce7f1fabbb1c097cd18ee15ca1656143a583418b0 - Sigstore transparency entry: 976527998
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.25-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 687.4 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb2814d8e10ef236babe3d8f569b4ee373f62c8960e975a25291bee1cc990c4c
|
|
| MD5 |
0ff346d670a4e0bcd77fd488e2176bfb
|
|
| BLAKE2b-256 |
6d536b9637ab87802647bfa07ac78332264ddebda860f1f5d50fe975c738c4b7
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp313-cp313-win_amd64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp313-cp313-win_amd64.whl -
Subject digest:
fb2814d8e10ef236babe3d8f569b4ee373f62c8960e975a25291bee1cc990c4c - Sigstore transparency entry: 976528012
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp313-cp313-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp313-cp313-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
107b51d84db14ea1d7943ae3a44bd6436f892b0ea665843a4f1d12de3fc6aae1
|
|
| MD5 |
77c2e9ac56427b3b179b1236979ff4de
|
|
| BLAKE2b-256 |
e45cb947336acf43d3c4669bdeee474279ab72fc83e1654cfb30e1ad12186a6c
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp313-cp313-musllinux_1_2_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp313-cp313-musllinux_1_2_x86_64.whl -
Subject digest:
107b51d84db14ea1d7943ae3a44bd6436f892b0ea665843a4f1d12de3fc6aae1 - Sigstore transparency entry: 976527986
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp313-cp313-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp313-cp313-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4370429ca04155571d78dc39ab15a2677be361d77c370090eccbb435ed8a628
|
|
| MD5 |
dfb24894aa337969f8a183c1bbf94ebd
|
|
| BLAKE2b-256 |
935910fb3f987429a21be9f43b583085296101c03d4edb0fd67c69ee4891ebec
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp313-cp313-musllinux_1_2_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp313-cp313-musllinux_1_2_aarch64.whl -
Subject digest:
b4370429ca04155571d78dc39ab15a2677be361d77c370090eccbb435ed8a628 - Sigstore transparency entry: 976527983
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 838.5 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7330d0112384b88b75d8bdcbab4aeded82caa33066df3502692b68bebed756b6
|
|
| MD5 |
248bc062f844a941107d0d306536279b
|
|
| BLAKE2b-256 |
a03158b1f83878003eb24a867537def698a6a6c6cb647c8a8f150c05c81abf0a
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
7330d0112384b88b75d8bdcbab4aeded82caa33066df3502692b68bebed756b6 - Sigstore transparency entry: 976527993
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 932.7 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e4fd8c5fa7242add910a4b047463288e6712594ef69418ffda3d02451164e78
|
|
| MD5 |
a4ae265f1024b40fe5329c0c223b4f7d
|
|
| BLAKE2b-256 |
af9bc75c2f1e10fd81d3a9b501219b50101e825670115d4fa6a1e757428679fd
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
4e4fd8c5fa7242add910a4b047463288e6712594ef69418ffda3d02451164e78 - Sigstore transparency entry: 976528005
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: rusket-0.1.25-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 811.1 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d55097e405f6bdaf9a2292aeb275c259295fbb91a0f3033bec2748e971f58bb7
|
|
| MD5 |
1ab63c839581a434dfd9035066a8a772
|
|
| BLAKE2b-256 |
79f5d5351cdb9cd10bfc902ddf2172e023b0a9353ead97eb041223fbdd19cef4
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
d55097e405f6bdaf9a2292aeb275c259295fbb91a0f3033bec2748e971f58bb7 - Sigstore transparency entry: 976528008
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 765.8 kB
- Tags: CPython 3.13, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4288c17c3cb7028e5d4f4584cbbf02d9dc212c86d5ad4478b2656946ccee9d8a
|
|
| MD5 |
0e316f2c1747d6bfe80e03f6ca6f3ed6
|
|
| BLAKE2b-256 |
0bfc895cb991e7ce9ac6030906f000ec7057d7392180b08b152cd85cf54e6e97
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp313-cp313-macosx_10_12_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp313-cp313-macosx_10_12_x86_64.whl -
Subject digest:
4288c17c3cb7028e5d4f4584cbbf02d9dc212c86d5ad4478b2656946ccee9d8a - Sigstore transparency entry: 976527995
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.25-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 687.5 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd00ce14e37a7d26529acadc07f0c4ddd9bd2ee8ed9284cf5dc14b6b56069ec0
|
|
| MD5 |
d526e249b59e128b589a6beb7162f89f
|
|
| BLAKE2b-256 |
92cf85ee3dcd21a0b333ed92b848f3852707cbc6772fdcbe0e8e5e674de16949
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp312-cp312-win_amd64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp312-cp312-win_amd64.whl -
Subject digest:
fd00ce14e37a7d26529acadc07f0c4ddd9bd2ee8ed9284cf5dc14b6b56069ec0 - Sigstore transparency entry: 976527976
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f94e568be278fa61c7f3d3c39b5d47939e80af5e5087b5f71150e742f37a632
|
|
| MD5 |
d953b67a01ffc9f8118056c967e8baa7
|
|
| BLAKE2b-256 |
3a35a9f5b57ccec1dc8be51e09f399537c17c3ab30d25483483ba2020e42c1a2
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp312-cp312-musllinux_1_2_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp312-cp312-musllinux_1_2_x86_64.whl -
Subject digest:
6f94e568be278fa61c7f3d3c39b5d47939e80af5e5087b5f71150e742f37a632 - Sigstore transparency entry: 976527953
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp312-cp312-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp312-cp312-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6bc998c25301c83c44fe94e12388c6813ec070690f82ba7214936d45d52684d
|
|
| MD5 |
c082666653d53a64946eeecdedabd7dc
|
|
| BLAKE2b-256 |
ebf0abad67499cfaae641fc49fa39d4c4f8d750ca12f14f27fd016bd6371770f
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp312-cp312-musllinux_1_2_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp312-cp312-musllinux_1_2_aarch64.whl -
Subject digest:
d6bc998c25301c83c44fe94e12388c6813ec070690f82ba7214936d45d52684d - Sigstore transparency entry: 976527990
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 838.5 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74f7a48a4707315266b590ee1cc28738dd2f12c3781684e2a42c302db61bb9e8
|
|
| MD5 |
d7e499dabfc479715a3be2489155bdcf
|
|
| BLAKE2b-256 |
4a49c4579d336c4aab603813439452cf4bac15faf22314592392eb0ee74a69b4
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
74f7a48a4707315266b590ee1cc28738dd2f12c3781684e2a42c302db61bb9e8 - Sigstore transparency entry: 976527957
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 932.9 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f739348e62cf77a97e6b6d8cad5cd811632e15e782f3bcf3bed175ce5f63518
|
|
| MD5 |
6c54fedfcee8a9c54e4731094e566ee8
|
|
| BLAKE2b-256 |
67f498219f2e53ef07dcd5df55d6973bcaac403d535525f790742a132a975c5d
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
4f739348e62cf77a97e6b6d8cad5cd811632e15e782f3bcf3bed175ce5f63518 - Sigstore transparency entry: 976528010
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: rusket-0.1.25-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 811.3 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c71c52c50afd16debfe7c37adab4010a68443c0c263e2038995564ffde0bbb01
|
|
| MD5 |
9966adae44d8ce2a91f8667aa0ade098
|
|
| BLAKE2b-256 |
467a56d0478969753bf7bb1e1fab6a5c472e73887f485c43dc3b112a038c404e
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
c71c52c50afd16debfe7c37adab4010a68443c0c263e2038995564ffde0bbb01 - Sigstore transparency entry: 976528001
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 766.0 kB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ab802ffe5f74f816aabc3331cf579339aea7d548d2dd9d39a1cfd7e19a86d97
|
|
| MD5 |
533be4760877070ec2faf1dde2ff3fd2
|
|
| BLAKE2b-256 |
c865832fbcfb712a7e55d94621a629d737c29bd7348da6479fbbc79030bc4dce
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp312-cp312-macosx_10_12_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp312-cp312-macosx_10_12_x86_64.whl -
Subject digest:
4ab802ffe5f74f816aabc3331cf579339aea7d548d2dd9d39a1cfd7e19a86d97 - Sigstore transparency entry: 976528004
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.25-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 686.2 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7699cdf4d76e6708e256eebfa3ce3ea670aace185b35166fd3b647f48cdb41c7
|
|
| MD5 |
507f3feb3710679b1daf0ee848c4761f
|
|
| BLAKE2b-256 |
ee422ab0aa97493ebcd47b83b2b1f9fc50b3258a7d3901fc8babdfe9ad6704f9
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp311-cp311-win_amd64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp311-cp311-win_amd64.whl -
Subject digest:
7699cdf4d76e6708e256eebfa3ce3ea670aace185b35166fd3b647f48cdb41c7 - Sigstore transparency entry: 976527985
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
161ce4c02ef0c58696856af54b7aa42dc7bfa2c25ac22d7aadca660b8c4c3824
|
|
| MD5 |
649dbcf1cc10b6a9d68b68bb643cb949
|
|
| BLAKE2b-256 |
29a2eb42a34cae13e06259e7d05063b0b066b478eef76368c5b7abd3b291628d
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp311-cp311-musllinux_1_2_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp311-cp311-musllinux_1_2_x86_64.whl -
Subject digest:
161ce4c02ef0c58696856af54b7aa42dc7bfa2c25ac22d7aadca660b8c4c3824 - Sigstore transparency entry: 976527962
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp311-cp311-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp311-cp311-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81c811ba97488cb2c2d60612950e961f066a77e540c240d33513341da8e69289
|
|
| MD5 |
fabb0d83253accf8a21a3d50e14f4fb9
|
|
| BLAKE2b-256 |
dcd207f16517cba99e75204d62d147c97218d322175c1ed90c1ad4a153980313
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp311-cp311-musllinux_1_2_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp311-cp311-musllinux_1_2_aarch64.whl -
Subject digest:
81c811ba97488cb2c2d60612950e961f066a77e540c240d33513341da8e69289 - Sigstore transparency entry: 976527961
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 837.0 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f12c6721af4f9f4b3662587535ccc34b5da58248ec7ca4d29b51833d0ca94cf5
|
|
| MD5 |
af6af979df2001af0940ef45d1a6b28b
|
|
| BLAKE2b-256 |
22f918a3731f3414ec0d684b9fc2b2c12be43a5eb138ad951eb956a80ef6dc6c
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
f12c6721af4f9f4b3662587535ccc34b5da58248ec7ca4d29b51833d0ca94cf5 - Sigstore transparency entry: 976527967
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 933.0 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae2eb6b31a2bcee3a3e8a290d5d2f417f168fea3f82f5c1e6a02eb132080f361
|
|
| MD5 |
f6a2b97f05f4575c20bdce8795e83dd0
|
|
| BLAKE2b-256 |
f162a4f514b7c0838889d2370b09292e1c6e6a2a02a6b03668c9bfac62b8b2d1
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
ae2eb6b31a2bcee3a3e8a290d5d2f417f168fea3f82f5c1e6a02eb132080f361 - Sigstore transparency entry: 976527979
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: rusket-0.1.25-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 812.2 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
def245e829743c6d35f8735fd292c1c6b3513aa3c2ae426351e77cbfc71ba35a
|
|
| MD5 |
6b2785417ea98720e64c64c07d3aeb1b
|
|
| BLAKE2b-256 |
341b6d208fcf027dee912a1bf038defa652ac2d7c8cd904090fd17371b481053
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
def245e829743c6d35f8735fd292c1c6b3513aa3c2ae426351e77cbfc71ba35a - Sigstore transparency entry: 976528007
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 767.1 kB
- Tags: CPython 3.11, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afbc1bcae68a3f4aebabe2387170363e1c8cdd69fe37995695b16c68e5656b80
|
|
| MD5 |
aa8e54c699c38b19fe93f770035a1392
|
|
| BLAKE2b-256 |
859851454d7440a18c9afee6946408172e09c4078096a28b6bc76351ee6a67a9
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp311-cp311-macosx_10_12_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp311-cp311-macosx_10_12_x86_64.whl -
Subject digest:
afbc1bcae68a3f4aebabe2387170363e1c8cdd69fe37995695b16c68e5656b80 - Sigstore transparency entry: 976528002
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.25-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 686.3 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
677badb598e7fb8966e6408cfe608721baa4656b90af591c7987a61fb7c9d7c9
|
|
| MD5 |
1ff249f2d9a333c562827226c3d5308c
|
|
| BLAKE2b-256 |
c5d9c149c4e8dd801a456dd5d81ae7a800e8325a5e666f17aaf60b8731dc1276
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp310-cp310-win_amd64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp310-cp310-win_amd64.whl -
Subject digest:
677badb598e7fb8966e6408cfe608721baa4656b90af591c7987a61fb7c9d7c9 - Sigstore transparency entry: 976527992
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
109d45b4d2ddfd534567a1ae18281323ef8843b0fe54449e90012e52228ea72e
|
|
| MD5 |
d8e38d5dbca5ac00f9174e5e04cb53d2
|
|
| BLAKE2b-256 |
ff1e2d5584d189459150c243b4ee18419141583a864d0aa28e3a2edac840b06c
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp310-cp310-musllinux_1_2_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp310-cp310-musllinux_1_2_x86_64.whl -
Subject digest:
109d45b4d2ddfd534567a1ae18281323ef8843b0fe54449e90012e52228ea72e - Sigstore transparency entry: 976527981
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp310-cp310-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp310-cp310-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a45be1ae744edadea41e46d8fcea3d3c1ff633234fe4fc7673c1aa8264cd6759
|
|
| MD5 |
8b7b7845e0b1dac8c2085f6948700b93
|
|
| BLAKE2b-256 |
174a69b7dc01bd8a668ea713c416155d202a960dd178391dcb7dd78209b2a28f
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp310-cp310-musllinux_1_2_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp310-cp310-musllinux_1_2_aarch64.whl -
Subject digest:
a45be1ae744edadea41e46d8fcea3d3c1ff633234fe4fc7673c1aa8264cd6759 - Sigstore transparency entry: 976527970
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 837.1 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fb4455a450f94b9d53ccfe87b690a33a3691a1eae5bf1946b6b9e9fe2545b48
|
|
| MD5 |
844a1b5ef98960619a3be70e30aedd37
|
|
| BLAKE2b-256 |
399c18581f2c6cb4ae6ef8b4c643c4dd30d8e57e77b268fa735ea44f78516c80
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
4fb4455a450f94b9d53ccfe87b690a33a3691a1eae5bf1946b6b9e9fe2545b48 - Sigstore transparency entry: 976527965
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 933.2 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
379deae953debf0466ab6e14aed13bba58eb22a6353f1610feca142b438e6ff9
|
|
| MD5 |
ee1eb5011b6bcf285346438033c33473
|
|
| BLAKE2b-256 |
b08d6f68e80ff314f67212d5244e44f60b30c78d2649c5e82f52e413b2a1ec15
|
Provenance
The following attestation bundles were made for rusket-0.1.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
ci.yml on bmsuisse/rusket
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rusket-0.1.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
379deae953debf0466ab6e14aed13bba58eb22a6353f1610feca142b438e6ff9 - Sigstore transparency entry: 976527987
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@908c13faf344bfccf458b08f90d5f5372d64d858 -
Branch / Tag:
refs/tags/v0.1.25 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@908c13faf344bfccf458b08f90d5f5372d64d858 -
Trigger Event:
push
-
Statement type: