factcircuit
FactCircuit: an auditable claim-and-evidence verification loop with immutable provenance, staged checks, bounded retrieval, and reproducible evaluation.
Deep feature synthesis for narwhals dataframes.
Translation pending
DataPython · JustGitHub @ExcidionOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Automated feature engineering for (almost) any dataframe
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
In nature, narwhals use their tusk to find mates.
In data science, you can use tusk to connect dataframes via narwhals.
This package helps to automate feature engineering with Deep Feature Synthesis for (almost) any dataframe library.
Powered by narwhals, inspired by featuretools.
feature_matrix comes back as an uncomputed query plan — tusk never collects —
so on a backend with a lazy frame type you get one back and decide when to
compute:
features is a FeatureList — a sequence of inspectable definitions that
knows its target table and can re-apply itself to new data:Read the full README ↗In nature, narwhals use their tusk to find mates. In data science, you can use tusk to connect dataframes via narwhals.
This package helps to automate feature engineering with Deep Feature Synthesis for (almost) any dataframe library. Powered by narwhals, inspired by featuretools.
uv add tusk-ml
from datetime import datetime
import narwhals as nw
import tusk
from tusk.primitives import Quantiles
db = tusk.Database("shop")
db.add_table(
"customers",
customers_lf,
primary_key="id",
row_creation_time="signed_up_at",
)
db.add_table("products", products_lf, primary_key="id")
db.add_table(
"orders",
orders_lf,
primary_key="id",
row_creation_time="placed_at",
row_update_times={"payed_at": {"payed_at": None, "payment_method": None}},
where={"large": nw.col("amount") >= 100.0},
when={
"open": lambda cutoff: (
nw.col("closed_at").is_null() | (nw.col("closed_at") > cutoff)
)
},
)
db.add_relationship(parent="customers", child="orders", foreign_key="customer_id")
db.add_relationship(parent="products", child="orders", foreign_key="product_id")
db.validate() # optional: confirm the keys really are keys, before you trust the numbers
feature_matrix, features = tusk.deep_feature_synthesis(
database=db,
target_table="customers",
agg_primitives=["mean", "count", Quantiles(qs=(0.25, 0.5, 0.75))],
conditional_primitives=("count", "sum"),
trans_primitives=["month", "weekday"],
max_depth=2,
cutoff_time=datetime(2026, 1, 1),
)
feature_matrix comes back as a data frame of the backend you put in,
changed to a lazy frame if that supports has one.
features is a FeatureList: a sequence of inspectable definitions that
knows its target table and can re-apply itself to new data:
matrix = features.apply(db_new)
plot() draws the database you just built, from the schema alone.
db.plot()
---
title: "shop"
---
erDiagram
"customers" {
Int64 id PK
String city
Datetime[us] signed_up_at "row creation time"
}
"products" {
Int64 id PK
Categorical category
Float64 price
}
"orders" {
Int64 id PK
Int64 customer_id FK "-> customers"
Int64 product_id FK "-> products"
Int64 quantity
Float64 amount
Datetime[us] placed_at "row creation time"
Datetime[us] payed_at "row update time"
Categorical payment_method "@ payed_at"
Datetime[us] closed_at
}
"customers" 1 to 0+ "orders" : ""
"products" 1 to 0+ "orders" : ""
The database's name becomes the title. In a notebook the diagram renders
inline, and so does the database itself; print(db.plot()) gives the Mermaid
source, and db.plot().save("schema.svg") writes an image with
tusk-ml[plot] installed.
Full documentation lives here. Or build the site locally with:
just docs-test