Ultra-fast Recommender Engines & Market Basket Analysis for Python, written in Rust.
Project description
Ultra-fast Recommender Engines & Market Basket Analysis for Python, written in Rust.
Made with โค๏ธ by the Data & AI Team.
๐ฏ Goals
| Goal | Details |
|---|---|
| โก Blazing fast | All algorithms run in compiled Rust (via PyO3) with multi-threaded Rayon parallelism and SIMD-accelerated kernels. ALS is 11ร, and FP-Growth is 140ร faster than PySpark. |
| ๐ฆ Zero dependencies | No TensorFlow, no PyTorch, no JVM. A single ~3 MB wheel is all you need โ pip install rusket and go. |
| ๐งโ๐ป Easy to use | Common cases are one-liners: model.recommend_items(user_id), model.recommend_users(item_id), model.export_item_factors() for vector/embedding export. No boilerplate. |
| ๐๏ธ Modern data stack | Native Pandas, Polars, and Apache Spark support with zero-copy Arrow transfers. Works seamlessly with Delta Lake, Databricks, Snowflake, and any dbt/Parquet pipeline. |
โ ๏ธ Note:
rusketis currently under heavy construction. The API will probably change in upcoming versions.
rusket is a modern, Rust-powered library for Market Basket Analysis and Recommender Engines. It delivers significant speed-ups and lower memory usage compared to traditional Python implementations, while natively supporting Pandas, Polars, and Spark out of the box.
Zero runtime dependencies. No TensorFlow, no PyTorch, no JVM โ just pip install rusket and go. The entire engine is compiled Rust, distributed as a single ~3 MB wheel.
It features Collaborative Filtering (ALS, BPR, SVD, LightGCN, ItemKNN, UserKNN, EASE), Sequential Recommendation (FPMC, SASRec), Context-aware Prediction (FM), Pattern Mining (FP-Growth, Eclat, FIN, LCM, HUPM, PrefixSpan), and built-in Hyperparameter Tuning (Optuna + MLflow tracking) with high performance and low memory footprints. Both functional and OOP APIs are available for seamless integration.
โจ Highlights
rusket |
LibRecommender |
implicit |
pyspark.ml |
|
|---|---|---|---|---|
| Core language | Rust (PyO3) | TF + PyTorch + Cython | Cython / C++ | Scala / Java (JVM) |
| Runtime deps | 0 | TF + PyTorch + gensim (~2 GB) | OpenBLAS / MKL | JVM + Spark |
| Install size | ~3 MB | ~2 GB | ~50 MB | ~300 MB |
| Algorithms | ALS, BPR, SVD, LightGCN, ItemKNN, UserKNN, EASE, FM, FPMC, SASRec, FP-Growth, Eclat, FIN, LCM, HUPM, PrefixSpan | ALS, BPR, SVD, LightGCN, ItemCF, FM, DeepFM, ... | ALS, BPR | ALS, FP-Growth, PrefixSpan |
| Recommender API | โ Hybrid Engine + i2i Similarity | โ | โ | โ (ALS only) |
| Graph & Embeddings | โ NetworkX Export, Vector DB Export | โ | โ | โ |
| OOP class API | โ
ALS.from_transactions(df).fit() |
โ | โ | โ |
| Pandas / Polars / Spark | โ / โ / โ | โ / โ / โ | โ / โ / โ | โ / โ / โ |
| Parallel execution | โ Rayon work-stealing | โ TF/PyTorch threads | โ OpenMP | โ Spark Cluster |
| Memory | Low (native Rust buffers) | High (TF/PyTorch graphs) | Low (C++ arrays) | High (JVM overhead) |
๐ฆ 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 FPGrowth
# 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?
model = FPGrowth(receipts, min_support=0.4)
freq = model.mine(use_colnames=True)
# Step 2 โ keep rules with โฅ60% confidence
rules = model.association_rules(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.
All mining algorithms expose a class-based API that goes straight from order lines to recommendations:
import pandas as pd
from rusket import FPGrowth
# 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"],
})
model = FPGrowth.from_transactions(
orders,
transaction_col="order_id",
item_col="sku",
min_support=0.3,
)
freq = model.mine(use_colnames=True) # Miner classes: mine() never auto-fits
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 FPGrowth
ohe = FPGrowth.from_pandas(orders, transaction_col="order_id", item_col="sku")
ohe = FPGrowth.from_polars(pl_orders, transaction_col="order_id", item_col="sku")
ohe = FPGrowth.from_transactions([["HDPHONES", "USB_DAC"], ["HDPHONES", "CARRY_CASE"]]) # list of lists
Spark is also supported:
FPGrowth.from_spark(spark_df)calls.toPandas()internally.
๐ปโโ๏ธ 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 FPGrowth
# โโ 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. Instantiate FPGrowth (zero-copy from Polars) โโโโโโโโโโโโโโโโโ
model = FPGrowth(baskets, min_support=0.02, max_len=3)
# โโ 3. Mine frequent combinations โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
freq = model.mine(use_colnames=True)
print(f"Found {len(freq):,} frequent itemsets")
print(freq.sort_values("support", ascending=False).head(10))
# โโ 4. Generate cross-sell rules โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
rules = model.association_rules(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.
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
๐ 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 = FPGrowth(df_sparse, min_support=0.01).mine(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
)
# 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.from_transactions(
events_pd,
user_col="user_id",
item_col="item_id",
).fit() # โ always call .fit() after from_transactions()
# 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.
๐ 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 |
FPGrowth |
Miner, RuleMinerMixin |
Frequent Pattern Growth algorithm |
FIN |
Miner, RuleMinerMixin |
FP-tree Node-list intersection mining |
LCM |
Miner, RuleMinerMixin |
Linear-time Closed itemset Mining |
HUPM |
Miner |
High-Utility Pattern Mining (EFIM) |
PrefixSpan |
Miner |
Sequential pattern mining |
ALS |
ImplicitRecommender |
Alternating Least Squares CF |
BPR |
ImplicitRecommender |
Bayesian Personalized Ranking CF |
SVD |
ImplicitRecommender |
Funk SVD (biased SGD) |
LightGCN |
ImplicitRecommender |
Graph Convolutional CF |
ItemKNN |
ImplicitRecommender |
Item-based k-NN CF |
UserKNN |
ImplicitRecommender |
User-based k-NN CF |
EASE |
ImplicitRecommender |
Embarrassingly Shallow Autoencoders |
FM |
BaseModel |
Factorization Machines (CTR prediction) |
FPMC |
SequentialRecommender |
Factorizing Personalized Markov Chains |
SASRec |
SequentialRecommender |
Self-Attentive Sequential Recommendation |
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) additionally expose RuleMinerMixin, giving a fluent pipeline:
model = FPGrowth.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, SVD, LightGCN, ItemKNN, UserKNN, EASE) follow the scikit-learn fit()/predict() pattern.
SequentialRecommender subclasses (FPMC, SASRec) use from_transactions(..., time_col=...).fit() for sequential next-item prediction:
# Option A โ construct then fit with a sparse matrix
model = ALS(factors=64, iterations=15)
model.fit(user_item_csr)
# Option B โ from event log, then explicit .fit()
model = ALS(factors=64).from_transactions(
df, user_col="user_id", item_col="item_id"
).fit() # โ .fit() is always required
# Predict / recommend
items, scores = model.recommend_items(user_id=42, n=10, exclude_seen=True)
users, scores = model.recommend_users(item_id=99, n=5)
Breaking change vs older versions:
from_transactions()no longer auto-fits. Always chain.fit()after it.
๐ง 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.
๐ฏ ItemKNN & UserKNN โ Nearest-Neighbor Collaborative Filtering
Two complementary memory-based methods that consistently rank among the top performers in academic benchmarks (see Anelli et al. 2022).
- ItemKNN โ Finds items similar to what the user already liked. Fast, stable, and scales well with pre-computed item-item similarity.
- UserKNN โ Finds users similar to the target user and recommends what they liked. Often more serendipitous and performs particularly well on dense datasets.
Both support BM25, TF-IDF, Cosine, and raw Count weighting, with the top-K neighbor pruning running in parallel Rust.
from rusket import ItemKNN, UserKNN
# โโ Item-based: "Customers who bought X also bought Y" โโโโโโโโโโโโ
item_knn = ItemKNN.from_transactions(
purchases, user_col="user_id", item_col="item_id",
method="bm25", k=100,
).fit()
items, scores = item_knn.recommend_items(user_id=42, n=10)
# โโ User-based: "Users similar to you enjoyed these items" โโโโโโโโ
user_knn = UserKNN.from_transactions(
purchases, user_col="user_id", item_col="item_id",
method="cosine", k=50,
).fit()
items, scores = user_knn.recommend_items(user_id=42, n=10)
Which one to choose? Start with
ItemKNN(method="bm25")โ it's the fastest and most stable. Switch toUserKNNif you have a dense dataset or want more diverse recommendations. In production, try both and evaluate withrusket.evaluate().
๐ฏ 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"
).fit() # โ always call .fit() after from_transactions()
# 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, FPGrowth
# 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
miner = FPGrowth(basket_ohe, min_support=0.01)
freq = miner.mine()
rules = miner.association_rules()
# 3. Create the Hybrid Engine
rec = Recommender(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)
๐ฏ Multi-Stage Recommendation Pipeline
For production systems requiring advanced retrieval and ranking, use the Pipeline class. This mirrors the "retrieve โ rerank โ filter" paradigm used by Twitter/X and modern ML stacks.
It chains multiple models together:
- Retrieve: Candidate generation
- Rerank: Re-score candidates using a heavier scoring function
- Filter: Apply business rules (e.g. exclude out-of-stock items, diversify)
from rusket import ALS, BPR, Pipeline, RuleBasedRecommender
import pandas as pd
# 1. Train multiple base models
als = ALS(factors=64).fit(interactions)
bpr = BPR(factors=128).fit(interactions)
# 2. Define explicit business rules (e.g. promoting warranties with laptops)
rules_df = pd.DataFrame({
"antecedent": ["102"], # Laptop SKU
"consequent": ["999"], # Warranty SKU
"score": [2.0]
})
rules = RuleBasedRecommender.from_transactions(
interactions, rules=rules_df, user_col="user", item_col="item"
).fit()
# 3. Compose the Pipeline (Retrieve from ALS, rerank with deeper BPR vectors)
# Items from the `rules` model receive an artificial +1,000,000 score
# ensuring they rank at the top *after* the algorithmic reranking.
pipeline = Pipeline(
retrieve=[als, bpr],
merge_strategy="max", # how to combine candidate scores
rerank=bpr,
rules=rules,
)
# Recommend for a user
items, scores = pipeline.recommend(user_id=42, n=10, exclude_seen=True)
# Blazing-fast Batch Scoring utilizing Rust inner loops
batch_recs = pipeline.recommend_batch(
user_ids=[1, 2, 3],
n=10,
format="polars" # Returns a native Polars DataFrame instantly
)
๐พ Saving, Loading and Serving (LanceDB / Vector DBs)
rusket models use a unified BaseModel that provides .save() and .load() functionality. You can also export trained models to a Vector Database for fast, real-time serving in production. We even provide load_model which automatically infers the model architecture from the pickle file.
import rusket
# 1. Train the model
model = rusket.ALS(factors=32).fit(interactions)
# 2. Save your trained model to disk
model.save("my_als_model.pkl")
# 3. Load it back using the generic loader
loaded_model = rusket.load_model("my_als_model.pkl")
# 4. Export the embeddings for a Vector Database
items_df = rusket.export_item_factors(
loaded_model,
normalize=True, # Best for Cosine Similarity search
format="pandas"
)
# 5. Serve it in real-time (Example using LanceDB)
import lancedb
# Create a local vector database
db = lancedb.connect("./lancedb_store")
table = db.create_table("items", data=items_df)
# Query the table with a specific user's latent factors
user_emb = loaded_model.user_factors[0]
# Retrieve top 5 item recommendations for this user using L2-normalized vector search!
results = table.search(user_emb).limit(5).to_pandas()
๐ 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:
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
๐ธ๏ธ Graph Analytics & Embeddings
Integrate natively with the modern GenAI/LLM stack:
- Vector Export: Export user/item factors to a Pandas
DataFrameready for FAISS/Qdrant usingmodel.export_item_factors(). - Item-to-Item Similarity: Fast Cosine Similarity on embeddings using
model.similar_items(item_id). - Graph Generation: Automatically convert association rules into a
networkxdirected Graph for community detection usingrusket.viz.to_networkx(rules).
๐ฌ MLOps: MLflow Tracking & Hyperparameter Tuning
rusket has built-in support for MLflow experiment tracking, mlflow.pyfunc packaging, and Bayesian hyperparameter optimisation using Optuna's TPE sampler. For ALS/eALS models, each Optuna trial runs the Rust-native cross-validation backend โ making the entire search blazingly fast.
import rusket
import rusket.mlflow
from rusket import OptunaSearchSpace
# โโ 1. Enable MLflow Autologging โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
rusket.mlflow.autolog()
# โโ 2. Train a single model with automatic tracking โโโโโโโโโโโโโโโโโโ
# Hyperparameters (factors, iterations) and training_duration_seconds are logged!
import mlflow
with mlflow.start_run():
model = rusket.ALS(factors=64, iterations=15).fit(df)
# Save/Load models as native MLflow pyfunc artifacts for easy deployment
rusket.mlflow.save_model(model, "my_als_model")
loaded_model = mlflow.pyfunc.load_model("my_als_model") # Has a .predict(df) method
# โโ 3. Quick hyperparameter search with sensible defaults โโโโโโโโโโโ
result = rusket.optuna_optimize(
rusket.ALS,
df,
user_col="user_id",
item_col="item_id",
n_trials=50,
metric="ndcg",
k=10,
)
print(f"Best ndcg@10: {result.best_score:.4f}")
print(f"Best params: {result.best_params}")
# โโ Custom search space + refit best model โโโโโโโโโโโโโโโโโโโโโโโโโโโ
result = rusket.optuna_optimize(
rusket.eALS,
df,
user_col="user_id",
item_col="item_id",
search_space=[
OptunaSearchSpace.int("factors", 16, 256, log=True),
OptunaSearchSpace.float("alpha", 1.0, 100.0, log=True),
OptunaSearchSpace.float("regularization", 1e-4, 1.0, log=True),
OptunaSearchSpace.int("iterations", 5, 30),
],
n_trials=100,
n_folds=3,
metric="precision",
refit_best=True, # best model is already fitted
)
items, scores = result.best_model.recommend_items(user_id=42, n=10)
# โโ MLflow experiment tracking โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# pip install mlflow optuna-integration
import mlflow
mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("als-tuning")
result = rusket.optuna_optimize(
rusket.ALS, df,
user_col="user_id", item_col="item_id",
n_trials=50, metric="ndcg",
mlflow_tracking=True, # โ every trial logged to MLflow
)
# โโ Custom callbacks โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
result = rusket.optuna_optimize(
rusket.ALS, df,
user_col="user_id", item_col="item_id",
n_trials=50,
callbacks=[my_custom_callback], # any Optuna-compatible callback
)
โก Benchmarks
Benchmark environment: Apple Silicon MacBook Air (M-series, arm64, 8 GB RAM). All timings are single-run wall-clock measurements.
Scale Benchmarks (1M โ 200M rows)
What's measured:
from_transactions()converts long-format(txn_id, item_id)rows into a sparse OHE matrix.fpgrowth()then mines that matrix. Both steps have the same Rust mining cost โ the only difference at large scale is whether you pay the conversion cost upfront.
| Scale | from_transactions (conversion) |
fpgrowth (mining) |
Total |
|---|---|---|---|
| 1M rows | 4.9s | 0.1s | 5.0s |
| 10M rows | 23.2s | 1.2s | 24.4s |
| 50M rows | 59.1s | 4.0s | 63.1s |
| 100M rows (20M txns ร 200k items) | 124.1s | 10.1s | 134.2s |
| 200M rows (40M txns ร 200k items) | 229.2s | 17.6s | 246.8s |
The mining step is fast โ the bottleneck at scale is the long-format โ sparse-matrix conversion. If your pipeline already produces a CSR/sparse matrix (e.g., from a Parquet/warehouse export), you skip the conversion entirely and only pay the mining cost.
Power-user path: Direct CSR โ Rust
import numpy as np
from scipy import sparse as sp
from rusket import FPGrowth
# 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 = FPGrowth(csr, item_names=item_names).mine(
min_support=0.001, max_len=3, use_colnames=True
)
At 100M rows, the mining step itself takes 10.1 seconds. Building the CSR directly skips the
from_transactionsconversion cost (~124s) but does not change the mining time.
Real-World Datasets
| Dataset | Transactions | Items | rusket |
|---|---|---|---|
| andi_data.txt | 8,416 | 119 | 9.7 s (22.8M itemsets) |
| andi_data2.txt | 540,455 | 2,603 | 7.9 s |
Run benchmarks yourself:
uv run pytest benchmarks/bench_scale.py -v -s # Scale benchmark
uv run python benchmarks/bench_realworld.py # Real-world datasets
uv run pytest tests/test_benchmark.py -v -s # pytest-benchmark
Recommender Benchmarks vs LibRecommender
Measured with
pytest-benchmark(5 rounds, warmed up, GC disabled). MovieLens 100k dataset (943 users, 1,682 items, 100k ratings). Onlymodel.fit()is timed โ no startup or data loading overhead.
| Benchmark | rusket | LibRecommender | Speedup |
|---|---|---|---|
| ALS (Cholesky) (64 factors, 15 epochs) | 427 ms | 1,324 ms | 3.1ร |
| ALS (eALS) (64 factors, 15 epochs) | 360 ms | N/A | โ |
| BPR (64 factors, 10 epochs) | 33 ms | 681 ms | 20.4ร |
| ItemKNN (k=100) | 55 ms | 287 ms | 5.2ร |
| SVD (64 factors, 20 epochs) | 55 ms | โ TF-only (broken) | โ |
| EASE | 71 ms | N/A | โ |
Note: LibRecommender requires TensorFlow + PyTorch + gensim + Cython (~2 GB of dependencies). rusket has zero runtime dependencies.
uv run pytest benchmarks/bench_pytest_librecommender.py -v --benchmark-columns=mean,stddev,rounds
๐ 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.
๐งโ๐ป 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
๐ค 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 Distribution
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.83.tar.gz.
File metadata
- Download URL: rusket-0.1.83.tar.gz
- Upload date:
- Size: 244.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20fea4a44911cafda34dec8c1a48b95e753d1b1e77b09da16ca1ca37bdac24ef
|
|
| MD5 |
7bce5f49784340652e05f4699e9d4668
|
|
| BLAKE2b-256 |
a3edc71818252f99fb59b0e13614f4e9a24198f781e5d4d55e7f40587c1be627
|
Provenance
The following attestation bundles were made for rusket-0.1.83.tar.gz:
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.83.tar.gz -
Subject digest:
20fea4a44911cafda34dec8c1a48b95e753d1b1e77b09da16ca1ca37bdac24ef - Sigstore transparency entry: 1012378126
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 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 |
9a3e3a641231c000169a190e244b3eae2f8f8c80377cc93a5b3fd48962a75d91
|
|
| MD5 |
e7901dfde7ff40f9f6d8e88e9e056510
|
|
| BLAKE2b-256 |
b7a47def947bd7acb26b2e4400c76abbd3d91704a4d2e2ac27414b2d92a3522e
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl -
Subject digest:
9a3e3a641231c000169a190e244b3eae2f8f8c80377cc93a5b3fd48962a75d91 - Sigstore transparency entry: 1012378974
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.5 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 |
1b521027ea168e8a8255ed69d16e34e0ad53f174c742b20f623ce11a420e159f
|
|
| MD5 |
3196759b60a4e23494f2e21e6149443c
|
|
| BLAKE2b-256 |
c6f6a7ef4ab31fb11f5b84c5299278911ff17d0b32be17b06d7e0537b418a6bf
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl -
Subject digest:
1b521027ea168e8a8255ed69d16e34e0ad53f174c742b20f623ce11a420e159f - Sigstore transparency entry: 1012378956
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
78731e31b0e48810621a44cdf6eac224979941d6562377b004de975e6b251e18
|
|
| MD5 |
48f6af746b24f6fa70ff715a7b330bc4
|
|
| BLAKE2b-256 |
ed802d8e892f44571e22732cf454b6587cc7d91c771988edeff9940f80440402
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
78731e31b0e48810621a44cdf6eac224979941d6562377b004de975e6b251e18 - Sigstore transparency entry: 1012378255
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.4 MB
- 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 |
4ab5c280ed3faeff45de91451ee083d2f40d6c32bda137ab58bba5f41d6ab4f1
|
|
| MD5 |
a9e48164a660bf02c813c352c93feaaf
|
|
| BLAKE2b-256 |
743ca44838d1a0425a25dbfb4212e9032a4412e0faf11e6324ad179de608e02d
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
4ab5c280ed3faeff45de91451ee083d2f40d6c32bda137ab58bba5f41d6ab4f1 - Sigstore transparency entry: 1012378730
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp314-cp314t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp314-cp314t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 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 |
1bdbde60aceaff7219da1af884f9288868d3d2025ae9c3f6702ed5ac1469573c
|
|
| MD5 |
5eb2134a8e60fc639667de4156365707
|
|
| BLAKE2b-256 |
5ec4bc63a762c0e06d2459f49a374c5f2c382fd84d35df14590686da94f6a8f7
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp314-cp314t-musllinux_1_2_x86_64.whl -
Subject digest:
1bdbde60aceaff7219da1af884f9288868d3d2025ae9c3f6702ed5ac1469573c - Sigstore transparency entry: 1012378175
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp314-cp314t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp314-cp314t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.5 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 |
599c62526307575144755908d93b1e4a628cbd15916692e40cd50cff9120678c
|
|
| MD5 |
b69a47d4459ba52295de9574825e3551
|
|
| BLAKE2b-256 |
8a968c9610a967ac0548ad1362c777aff6e967225e9a541ad6f79aed659d2aa5
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp314-cp314t-musllinux_1_2_aarch64.whl -
Subject digest:
599c62526307575144755908d93b1e4a628cbd15916692e40cd50cff9120678c - Sigstore transparency entry: 1012378644
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.83-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 1.2 MB
- 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 |
12807a6b67167cdb3eb453095ca76c04fe53f78b17f17acc01f0214d5aba580e
|
|
| MD5 |
5c258f59ee73c1ded871cbc599373a59
|
|
| BLAKE2b-256 |
84f8558dfd98140f60b4f85f70f66116716d263c5a5b61eb6d3f4471f9b18e86
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp314-cp314-win_amd64.whl -
Subject digest:
12807a6b67167cdb3eb453095ca76c04fe53f78b17f17acc01f0214d5aba580e - Sigstore transparency entry: 1012378827
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp314-cp314-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp314-cp314-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 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 |
60bd7688db4a534dce66011c20a32705a58cc41ced641bbe218edd46e86ccc94
|
|
| MD5 |
2f9bdc80a8185216a55be9e29734be90
|
|
| BLAKE2b-256 |
11c692693e456cdea99a7905bfb590c8e65dcc41d88d194902e3249ab57a3243
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp314-cp314-musllinux_1_2_x86_64.whl -
Subject digest:
60bd7688db4a534dce66011c20a32705a58cc41ced641bbe218edd46e86ccc94 - Sigstore transparency entry: 1012378391
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp314-cp314-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp314-cp314-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.5 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 |
722062ad2c33b7e3c19ac42b99b2a11616a7057f65c2d67969b191c92b13b023
|
|
| MD5 |
d0149d7afb06f3eb49ef16bc655d26e7
|
|
| BLAKE2b-256 |
399511ee4e2f89062920baea055a6060741537891cd847971a18d286d600a4c0
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp314-cp314-musllinux_1_2_aarch64.whl -
Subject digest:
722062ad2c33b7e3c19ac42b99b2a11616a7057f65c2d67969b191c92b13b023 - Sigstore transparency entry: 1012378147
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
1ff1992e8a195a37e77ac27c5f800467a6f8ad9309e655caf97cb3552870a283
|
|
| MD5 |
33a5732513d266a0bb958d879e38ce0a
|
|
| BLAKE2b-256 |
1c4bd47267841b133c3405f85ba851d67bd8cae49b5776bac27f300f00d6f028
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
1ff1992e8a195a37e77ac27c5f800467a6f8ad9309e655caf97cb3552870a283 - Sigstore transparency entry: 1012378552
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.4 MB
- 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 |
e3d66a15474ea6e3ca19bde3bcf6aed0bf71a2f5153e1a51821673faf3f02b81
|
|
| MD5 |
3b0831a251e60c91d796de8c30732b26
|
|
| BLAKE2b-256 |
020c5a501dd88ea1467191b93ec7de12c7fd0c9019f4af73e1588001e0c7421d
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
e3d66a15474ea6e3ca19bde3bcf6aed0bf71a2f5153e1a51821673faf3f02b81 - Sigstore transparency entry: 1012378467
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: rusket-0.1.83-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- 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 |
720d3cb5cb45f9c748e6ceae729edf15509da726e86e9c5909142c129fff4af3
|
|
| MD5 |
afc99283834130c6fcaa75fd2f7de35e
|
|
| BLAKE2b-256 |
7acab8ac65ed0b21cd18101f34660f8e01b8eda038209804a2276d4165669d5a
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp314-cp314-macosx_11_0_arm64.whl -
Subject digest:
720d3cb5cb45f9c748e6ceae729edf15509da726e86e9c5909142c129fff4af3 - Sigstore transparency entry: 1012378704
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp314-cp314-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp314-cp314-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
f82a8b6db45b0c1657c0ab578815bc9b435714eae62c08d0a3a704845819a3de
|
|
| MD5 |
05d3ccbb1880cd81ecf93353eb922a97
|
|
| BLAKE2b-256 |
d3346615c768f28ab35e519e2466d98890bb58306456b93abd28f653a9bf4589
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp314-cp314-macosx_10_12_x86_64.whl -
Subject digest:
f82a8b6db45b0c1657c0ab578815bc9b435714eae62c08d0a3a704845819a3de - Sigstore transparency entry: 1012378854
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp313-cp313t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp313-cp313t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 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 |
afa6c98e7fa1cf4b8a1a3ca9e3fcec3a448fd43939a7aa66a3c94624acaeb996
|
|
| MD5 |
d1f0b2796fed0defec46201560e554ff
|
|
| BLAKE2b-256 |
85a5360b59fce85fa1e8c68b70bb84c74de2286f8452086fd7abd6d5c9f38e0d
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp313-cp313t-musllinux_1_2_x86_64.whl -
Subject digest:
afa6c98e7fa1cf4b8a1a3ca9e3fcec3a448fd43939a7aa66a3c94624acaeb996 - Sigstore transparency entry: 1012378753
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp313-cp313t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp313-cp313t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.5 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 |
f2dc893142f3492a9a49b5095027f8c21f46f1335699d38b4e3e92d909ad501f
|
|
| MD5 |
ad7ad27ee91e533bcfa908b792c695f3
|
|
| BLAKE2b-256 |
4980d0f8f677f589d16a7f1a9f45c3fa7ea1f5ee39e87279541d2645f314c06f
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp313-cp313t-musllinux_1_2_aarch64.whl -
Subject digest:
f2dc893142f3492a9a49b5095027f8c21f46f1335699d38b4e3e92d909ad501f - Sigstore transparency entry: 1012378617
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.83-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.2 MB
- 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 |
68234d07ecdaceeb3cd025b263d373831d4b9798731c625785b070e46bd57c44
|
|
| MD5 |
bdb2d118c89d6db19f690b6cfc44b345
|
|
| BLAKE2b-256 |
768261342bd9c4a39cbbf175d75a1d1d6c0bd1bc37368e79f9c7cd2c563a2cc3
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp313-cp313-win_amd64.whl -
Subject digest:
68234d07ecdaceeb3cd025b263d373831d4b9798731c625785b070e46bd57c44 - Sigstore transparency entry: 1012378658
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp313-cp313-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp313-cp313-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 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 |
cc69a7f85bf523db9e488c890bf3d781527cf3c3b80b4940b7f26f2f0d9db59b
|
|
| MD5 |
f4c789284a0169c7ed20e4847a8c5df4
|
|
| BLAKE2b-256 |
96415c4ad743e5e6291eea61cd255a37975af582351ef44b98f4ad4afa4c7f81
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp313-cp313-musllinux_1_2_x86_64.whl -
Subject digest:
cc69a7f85bf523db9e488c890bf3d781527cf3c3b80b4940b7f26f2f0d9db59b - Sigstore transparency entry: 1012378595
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp313-cp313-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp313-cp313-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.5 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 |
3de38f4e4c2074d8a5aa808d3cbc2119820905c1eb0248c8f9557305214e5e3f
|
|
| MD5 |
48d0f878db9de9a7d363c72918a95884
|
|
| BLAKE2b-256 |
0513ed68dd1498938518cf78997be4faf08d2b7eaebd0142aa41c40e7f0e3625
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp313-cp313-musllinux_1_2_aarch64.whl -
Subject digest:
3de38f4e4c2074d8a5aa808d3cbc2119820905c1eb0248c8f9557305214e5e3f - Sigstore transparency entry: 1012378921
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
a9c5cc92b48e5c9b504fb60a689164d1647bff399c4ffbcff14f92022220f387
|
|
| MD5 |
6e3678340e35653c1db5b7d8871b5c40
|
|
| BLAKE2b-256 |
3454662fd4c89f828d9807d9d89255f88bf18cdab39b209eef59908b09c93b37
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
a9c5cc92b48e5c9b504fb60a689164d1647bff399c4ffbcff14f92022220f387 - Sigstore transparency entry: 1012378902
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.4 MB
- 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 |
4484ae8fc419409c99fffbc1fd4f28812b296bf36885259b1e717e1771eef649
|
|
| MD5 |
861d5032c5ae92ae632c41750d044ea1
|
|
| BLAKE2b-256 |
361d7181a65a4fb1213b493648d44fb990439a8b35015240938204274808c40b
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
4484ae8fc419409c99fffbc1fd4f28812b296bf36885259b1e717e1771eef649 - Sigstore transparency entry: 1012378362
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: rusket-0.1.83-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- 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 |
c4a9e8f558bed9ca52014e4c1344202c9a9acf8d608bebd09c599b5b3b6aaec7
|
|
| MD5 |
d39e474831b2f141fdb78a0212097e16
|
|
| BLAKE2b-256 |
cd01eeb44d2c3e4a073925c6a00a54d96975ad4a9621c7a608d46e6d833d94bc
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
c4a9e8f558bed9ca52014e4c1344202c9a9acf8d608bebd09c599b5b3b6aaec7 - Sigstore transparency entry: 1012378836
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
d2acd4265c2127ca67615c05f69a9a7aae244bb27b6f7c1fdcd265dc5dd0767b
|
|
| MD5 |
8b4e850c2fcddad72c4f4348450643b6
|
|
| BLAKE2b-256 |
2ebe3925a47e1445821df58e6b4166965fdb7805bea759dd932ab657676b86b0
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp313-cp313-macosx_10_12_x86_64.whl -
Subject digest:
d2acd4265c2127ca67615c05f69a9a7aae244bb27b6f7c1fdcd265dc5dd0767b - Sigstore transparency entry: 1012378937
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.83-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.2 MB
- 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 |
ed1c233bfdc9d11d76abd5f497af09bf397d876ab297ce5e78ba69263cd5b4e1
|
|
| MD5 |
24b5f39e57b92dbc84067bb5f2f431bb
|
|
| BLAKE2b-256 |
ad48b3a0c991d118c98db6f9a7999a8488a22c0f4287406d1aa4aa0ea77cb199
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp312-cp312-win_amd64.whl -
Subject digest:
ed1c233bfdc9d11d76abd5f497af09bf397d876ab297ce5e78ba69263cd5b4e1 - Sigstore transparency entry: 1012378412
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 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 |
565baebe47031248c3096f8905046dda38a5cc674730a4024f04af5510c9b96e
|
|
| MD5 |
0cc8cb4140fc6dd2f1af8f72c50cfc0f
|
|
| BLAKE2b-256 |
e2e1b0bfc9faf8709bbee3dade1cca80d86f955527b4561d10cd8268bc611eb9
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp312-cp312-musllinux_1_2_x86_64.whl -
Subject digest:
565baebe47031248c3096f8905046dda38a5cc674730a4024f04af5510c9b96e - Sigstore transparency entry: 1012378450
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp312-cp312-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp312-cp312-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.5 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 |
e5d2d0c0cf1be90ee8ca23961583096625512a58445ee13b75d211747a148143
|
|
| MD5 |
79c25c75a298607296f2f32aadad959c
|
|
| BLAKE2b-256 |
1926340282711f5bc373308aae78ecc207cca4660614d1a7750f104a188749bf
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp312-cp312-musllinux_1_2_aarch64.whl -
Subject digest:
e5d2d0c0cf1be90ee8ca23961583096625512a58445ee13b75d211747a148143 - Sigstore transparency entry: 1012378992
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
0d01f16da9e940073dcf91dd7cf0cfc0f014d672a8c8db1abf6bdf5d37a8404b
|
|
| MD5 |
1e64d90352680e12276cd79f279c56a6
|
|
| BLAKE2b-256 |
264176ec13b036fd11e827151fd6f5c33e06b33e5c3a15e4d04f7cd49eb3da8f
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
0d01f16da9e940073dcf91dd7cf0cfc0f014d672a8c8db1abf6bdf5d37a8404b - Sigstore transparency entry: 1012378309
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.4 MB
- 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 |
851b50e375486f5c199c6b3fd830eb532e984ad3c052f39a0f45e4aa43fc724d
|
|
| MD5 |
03c1aba639237ffb1ae79895efbeb34e
|
|
| BLAKE2b-256 |
601aead1fd2b2d7992fb7b6a1909b4c41ad0df09caaf82c65230812320acb76f
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
851b50e375486f5c199c6b3fd830eb532e984ad3c052f39a0f45e4aa43fc724d - Sigstore transparency entry: 1012378225
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: rusket-0.1.83-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- 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 |
d764d77effb25cfee52f31edb519a0b1216d1c3ae0d700d131d21de028360b32
|
|
| MD5 |
ee22a0330f89d3cfedbd079e000d6358
|
|
| BLAKE2b-256 |
11b7c8b267e2ecb19dad453fdea7dc7b315aa2d08ed4d5ce1780c401c6b0635e
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
d764d77effb25cfee52f31edb519a0b1216d1c3ae0d700d131d21de028360b32 - Sigstore transparency entry: 1012378493
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
c8e880281c06a8591ea77e326c02b71a79fdff5fce537bd5381e21e23911c6a2
|
|
| MD5 |
ae5b6f7aca468bae90d0bc7ccffc3711
|
|
| BLAKE2b-256 |
9b3aa5b13b0a150e80a1b76dc33ed81c741c2391e77d7351e941132a0a105c14
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp312-cp312-macosx_10_12_x86_64.whl -
Subject digest:
c8e880281c06a8591ea77e326c02b71a79fdff5fce537bd5381e21e23911c6a2 - Sigstore transparency entry: 1012378877
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.83-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.2 MB
- 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 |
6b69ee42b8fc7002e4b0a20abaf5f3e75ae2aa651d5331ee6e34501c2ca05efe
|
|
| MD5 |
9d676d77bb2faa154e9444d93b803eb4
|
|
| BLAKE2b-256 |
032cac26fd1bda24403361a7a4e2635fd2e3e7a6f68bacc80aa83f40a809563a
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp311-cp311-win_amd64.whl -
Subject digest:
6b69ee42b8fc7002e4b0a20abaf5f3e75ae2aa651d5331ee6e34501c2ca05efe - Sigstore transparency entry: 1012378434
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 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 |
262b7672801f293edcbcdc2d1d7b6fe40602e6d8a0cda4b3fe345555de0d87a1
|
|
| MD5 |
4a6dafbab4912a10a9304f4a1b51cf7a
|
|
| BLAKE2b-256 |
fcef33525afdef35234cadcdab6ce51f00d6436246e181f2bd89ccd0c4be82b0
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp311-cp311-musllinux_1_2_x86_64.whl -
Subject digest:
262b7672801f293edcbcdc2d1d7b6fe40602e6d8a0cda4b3fe345555de0d87a1 - Sigstore transparency entry: 1012378526
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp311-cp311-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp311-cp311-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.5 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 |
c1eb39efaf04f0f5f4576cf79666b7e85454e179924d3003725ab3e24ff81bd3
|
|
| MD5 |
95466769e5078b74e1c193961d95ed9d
|
|
| BLAKE2b-256 |
97c8bd19b381787dcba95f3f8f8dce7d4aa05592f6d7c06db9d1c977b9c069c1
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp311-cp311-musllinux_1_2_aarch64.whl -
Subject digest:
c1eb39efaf04f0f5f4576cf79666b7e85454e179924d3003725ab3e24ff81bd3 - Sigstore transparency entry: 1012378676
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
d5e8e961ce5fd7cd7631b3e5bb00b438c85d61b16243b26fd331abdf0181c997
|
|
| MD5 |
8bdaeef42a50a764396ce6a938c46ab9
|
|
| BLAKE2b-256 |
37970f01d3b55f61a0516c1feaf1b13cc66fa6452866b874226a590055aa8d0d
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
d5e8e961ce5fd7cd7631b3e5bb00b438c85d61b16243b26fd331abdf0181c997 - Sigstore transparency entry: 1012378581
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.4 MB
- 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 |
bb5dc07e9caaccfe918a0ef30f525fdd3bcd041294a0d0284ca2945e7d48e1ca
|
|
| MD5 |
e1eaa9c7d695bea177e9187d6221138e
|
|
| BLAKE2b-256 |
cbeb4f90321b57cd2603d1d45a834b5c628f9b3f2e6f02b754bef673233ae884
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
bb5dc07e9caaccfe918a0ef30f525fdd3bcd041294a0d0284ca2945e7d48e1ca - Sigstore transparency entry: 1012379020
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: rusket-0.1.83-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- 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 |
7a05f6715b2a34a600bc68a1d196de0981534722b18dc3070d1f8b7113d4206a
|
|
| MD5 |
6e6cb6ac96d04b78b2ae75ac2e0d4566
|
|
| BLAKE2b-256 |
2872b21f13da5d201ddb400f062dc56eded80790eb29852c3af2a8781c867cfd
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
7a05f6715b2a34a600bc68a1d196de0981534722b18dc3070d1f8b7113d4206a - Sigstore transparency entry: 1012378505
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
ed315fb3e24a26afc2299e288ac2d0c6a74eb53203fb921fce4f6029c43d9fdf
|
|
| MD5 |
423b5aa39cad8835645750ad8587b94c
|
|
| BLAKE2b-256 |
d77187e0678d82ef2420bb051d3522e2013b3f12e951e421ed1e03c1a4097987
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp311-cp311-macosx_10_12_x86_64.whl -
Subject digest:
ed315fb3e24a26afc2299e288ac2d0c6a74eb53203fb921fce4f6029c43d9fdf - Sigstore transparency entry: 1012378203
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: rusket-0.1.83-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 1.2 MB
- 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 |
9266fc1aa516a5e854c0bf35703f44318ba7b7ae39161e89a9c86d219eab4557
|
|
| MD5 |
e9837104dd270fdfa15e1970f792bfbe
|
|
| BLAKE2b-256 |
b31b35c9ff07885dab0e99ed1737755bf251f970d20d9fcdb18cf94c8ceac124
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp310-cp310-win_amd64.whl -
Subject digest:
9266fc1aa516a5e854c0bf35703f44318ba7b7ae39161e89a9c86d219eab4557 - Sigstore transparency entry: 1012378484
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 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 |
01593bb86e0e2fb1cf1c9bb084ff878b2efeea521beb92ada796368291e1e266
|
|
| MD5 |
8c6daf9b12aaf9c9d57c03f9b7047802
|
|
| BLAKE2b-256 |
c54773527bf86bf67400b924f7961270bc635e327a37bec6d39e8ccb9c8776ce
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp310-cp310-musllinux_1_2_x86_64.whl -
Subject digest:
01593bb86e0e2fb1cf1c9bb084ff878b2efeea521beb92ada796368291e1e266 - Sigstore transparency entry: 1012378799
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp310-cp310-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp310-cp310-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.5 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 |
28f99ede1f9b345b71eb17ba771387d5736cf9af4ad5db8bbf2109d0355ea14e
|
|
| MD5 |
14f7d70e546c37a70a800012dcf3322e
|
|
| BLAKE2b-256 |
0151e7bb0dc5b50fd89959dc41b47ba6ce420db2f8d4a2a28d1a13d837142959
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp310-cp310-musllinux_1_2_aarch64.whl -
Subject digest:
28f99ede1f9b345b71eb17ba771387d5736cf9af4ad5db8bbf2109d0355ea14e - Sigstore transparency entry: 1012378331
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rusket-0.1.83-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.3 MB
- 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 |
1bbe5fa2ed314590e6891c8bc03ea8633005cfb8601a6ac18553035f8d8d91df
|
|
| MD5 |
1c7005337db97f61a292f2a9a4173722
|
|
| BLAKE2b-256 |
3f41502e26502038db15c453b099fde11e66cd101612a1d38bdce318bad2932a
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
1bbe5fa2ed314590e6891c8bc03ea8633005cfb8601a6ac18553035f8d8d91df - Sigstore transparency entry: 1012378777
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rusket-0.1.83-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rusket-0.1.83-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.4 MB
- 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 |
5187c83b7a3ff264e98168903839d364b0df42b040dfa612ebc517feac2266cc
|
|
| MD5 |
7bd47a12ee0fcb9f21c7bc1d1056d2ce
|
|
| BLAKE2b-256 |
d188f258da8cc40c21f86d84c702d867050c32cd4db7c0a1f6ecc36a868daa2d
|
Provenance
The following attestation bundles were made for rusket-0.1.83-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.83-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
5187c83b7a3ff264e98168903839d364b0df42b040dfa612ebc517feac2266cc - Sigstore transparency entry: 1012378285
- Sigstore integration time:
-
Permalink:
bmsuisse/rusket@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Branch / Tag:
refs/tags/v0.1.83 - Owner: https://github.com/bmsuisse
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@218c5a2d978260ebdf36e44e9980dd10a6b9a861 -
Trigger Event:
push
-
Statement type: