tenforty
Overview
tenforty is an open-source Python package designed to help demystify US
federal and state tax computations. It offers an accessible way to explore tax
scenarios, compare different tax situations, and understand how the inputs to a
return affect what you owe. It's particularly useful for sensitivity analysis,
what-if sweeps, and optimizing your taxes.
The package is built on top of Open Tax Solver (OTS) and tenforty's own backend, wrapping them into a Python library. The ideas behind it are discussed in a blog post here.
You can try tenforty out immediately in your browser via the included Colab
notebook:
Features
- Compute US federal taxes and state taxes, back to the 2018 tax year.
- Explore how taxes vary as a function of income, state, filing status, and year.
- Evaluate "what if" tax scenarios efficiently and reproducibly, with results in
a
polarsdataframe. - Validated inputs with informative error messages, which make it a good tool-call target for a coding agent.
Disclaimer
tenforty is an open-source tool intended for informational and educational
purposes only and does not provide tax advice. Known limitations are detailed
in the Limitations section below.
Installation
pip install tenforty
Python 3.10–3.15 is supported on Linux and macOS. Windows is not supported; see Known Limitations for workarounds.
Building from source
pip install tenforty uses a prebuilt wheel where one matches your platform:
CPython 3.10–3.15 on Linux x86_64 and aarch64 (glibc 2.28+ and musl) and on
macOS arm64 and x86_64.
Elsewhere it builds from the source distribution, and that build needs a
Rust toolchain as well as a C++ compiler, because the graph
backend is compiled from Rust. Without Rust the build stops and explains why;
it no longer installs a package that lacks the graph backend.
Requiring Rust for a source build is an intermediate measure. The long-term answer is a prebuilt wheel for every platform, so that building from source is only the fallback for platforms without one.
To build the legacy OTS-only package instead, without Rust, set
TENFORTY_WITHOUT_GRAPH=1:
TENFORTY_WITHOUT_GRAPH=1 pip install tenforty
That package has no graph backend: backend="ots" works, and any return routed
to the graph backend raises an error instead of falling back to OTS.
Which Backend Computes Your Return
The default, backend="auto", picks the engine for each return before computing
it:
| Return | Under backend="auto" |
|---|---|
| Tax years 2018–2023 | OTS, for the states OTS has that year; any other state raises UnsupportedReturnError |
2024–2025, federal only (state=None) |
Graph |
| 2024–2025 in IL, MS or OR, or a state without an income tax (AK, FL, NV, SD, TN, TX, WA, WY) | Graph |
| 2024–2025 in AZ, CA, MA, MI, NC, NJ, NY, OH, PA or VA | OTS |
| 2024–2025 in AL, AR, CO, CT, DC, DE, GA, HI, IA, ID, IN, KS, KY, LA, MD, ME, MN, MO, MT, ND, NE, NH, NM, OK, RI, SC, UT, VT, WI or WV | Raises UnsupportedReturnError, naming the reason; backend="graph" computes it anyway |
- Graph scope. A 2024–2025 state goes to graph only when its known
graph-side defects are closed and official values support it. The other
states stay out for a named reason: an open defect, missing evidence, or a
decision. Graph state scope
has the reasons. MD, ME and NC wait on the itemized-deduction contract
(
tenforty-nuc6). Ohio stays on OTS by decision: graph Ohio Married/Joint requires the joint-credit state fact, which has no default, and since OTS already computes Ohio, routing it to graph would make calls that work today raise. Mississippi, which OTS doesn't cover, requires its facts instead of being unavailable. - Mississippi needs facts. MS is in graph scope, conditional on
state facts with no default. A Married/Joint return
needs both spouses' actual Mississippi AGIs,
state_facts.MS(taxpayer_adjusted_gross_income=..., spouse_adjusted_gross_income=...); a Widow(er) return needsMS(head_of_family_eligible=...)(Head_of_House defaults to the documented resident-dependent baseline). Without them the call raisesUnsupportedInputErrorbefore computing. MS Married/Joint state and total-tax derivatives and solves over household income are unsupported, and a nonzeroschedule_1_income,state_adjustment,dependent_exemptions,itemized_deductions,state_and_local_taxesorfederal_itemizedregular-tax amount is refused for MS: itemizing on MS is not supported through either itemized input. - The earned income credit needs facts.
eitc_eligible=Falsegives a determined 0, with no child count needed.eitc_eligible=Truewithnum_eitc_childrencomputes the credit. Otherwise it isNone(not determined), and graph Missouri returns raise;eitc_eligible=Falseis accepted there. OTS always reportsNone. - OTS is chosen by coverage, not as a retry. A state goes to OTS because it is outside graph scope and OTS computes it. A return that fails on the graph backend is not rerun on OTS.
- An explicit backend is never reinterpreted.
backend="ots"computes on OTS andbackend="graph"on graph, or the call raises before computing.backend="ots"gives the OTS results earlier releases defaulted to. It does not restore every earlier contract: the deduction election, the frame schema and the error behavior changed for both backends. See Migrating to the graph default. - The OTS-only package (
TENFORTY_WITHOUT_GRAPH=1) has no graph backend, so a return the default routes to graph raisesBackendUnavailableErrorthere.
Quick Start
The evaluate_return function computes the outputs for a single tax return
given some inputs:
from tenforty import evaluate_return
evaluate_return(
w2_income=100_000, state="CA", filing_status="Married/Joint", num_dependents=2
).model_dump()
This results in the following:
{'total_tax': 4476.0,
'federal_adjusted_gross_income': 100000.0,
'federal_effective_tax_rate': 4.884671532846715,
'federal_tax_bracket': 12.0,
'federal_taxable_income': 68500.0,
'federal_qbi_deduction': 0.0,
'federal_amt': 0.0,
'federal_income_tax': 3346.0,
'federal_se_tax': 0.0,
'federal_niit': 0.0,
'federal_additional_medicare_tax': 0.0,
'federal_child_tax_credit': 4400.0,
'federal_earned_income_credit': None,
'federal_total_tax': 3346.0,
'state_adjusted_gross_income': 100000.0,
'state_taxable_income': 88588.0,
'state_total_tax': 1130.0,
'state_tax_bracket': 6.0,
'state_effective_tax_rate': 1.2755677969928207,
'assumptions': ()}
No year= argument was specified here, so the default year, 2025, was used.
California is outside graph scope, so this return was computed on OTS. The
output is a pydantic model, and we've called its .model_dump() method to
show the result as a dictionary. Every argument and output field is listed in
the API Reference.
Previewing Your Own Return with a Coding Agent
The most practical way to use tenforty on your own taxes today is to let a
coding agent drive it, such as Claude Code,
Codex, or an open-source agent like
pi or OpenCode.
You describe your situation in plain language, and the agent maps your
figures onto tenforty's inputs, runs the return, and answers follow-up
questions by changing inputs and re-running.
How much to trust the result depends on what your return contains. The
evidence summary says, for each kind of return the
default computes, what is checked against independent published values and
what is only checked for agreement between the backends, against snapshots, or
by property tests. Tax-Calculator serves as an independent federal model
(differential audit). It's still a
preview, not a filing: nothing is guaranteed, and the usual way it goes wrong is a figure from
your documents that the agent maps to the wrong input or that tenforty
doesn't model (see the API Reference and
Known Limitations). It's well suited to "what will I owe,
and why?" and "what happens if I sell this stock in December?" before you file
with your usual software or preparer, and to cross-checking that software
afterwards.
1. Decide where your data goes. Your return is about as sensitive as personal data gets, and everything you tell the agent is sent to whichever model provider it uses. That's a choice worth making deliberately, and it's yours to make:
- If you use a hosted agent from Anthropic, OpenAI, or another provider, read that provider's data-retention and training policies for the plan you're on.
- Open-source agents such as pi and OpenCode can point at other endpoints, including inference providers that offer zero data retention, such as DeepInfra or Together AI. Check their current terms yourself.
- For the most privacy, run a model locally with a tool like llama.cpp, Ollama, or LM Studio, so nothing leaves your machine.
2. Consider giving it numbers, not documents. Transcribing the figures you need (W-2 box 1, 1099-INT and 1099-DIV totals, net short- and long-term gains, and so on) shares far less than scans that carry your SSN and account numbers.
3. Work in a scratch directory and let the agent install tenforty there:
mkdir tax-preview && cd tax-preview
uv venv && uv pip install tenforty
4. Ask, and ask for the mapping back. For example:
Use the
tenfortyPython package (read its README for the inputs) to estimate my 2025 federal and California taxes. Married filing jointly, two kids. W-2 box 1: $182,400 and $64,100. 1099-INT: $1,150. 1099-DIV: $3,200 ordinary, $2,600 qualified. Long-term gains: $12,000. Before running anything, show me how you mapped each of my figures to atenfortyinput, and list anything I gave you thattenfortycan't represent.
The last instruction matters most. A figure the agent silently drops, or puts
in the wrong input, is the most likely way to get a confidently wrong answer.
One common trap: ordinary_dividends is the total (1099-DIV box 1a) and
already includes qualified_dividends (box 1b).
Once the baseline matches your expectations, the follow-ups are where the package earns its keep: sweeps over a gain you haven't realized yet, or how close you are to AMT.
Examples
Here are some more examples of what you can do with tenforty:
Creating Tax Tables: Federal/State Tax Brackets as a Function of W2 Income
The evaluate_returns method sweeps out a grid over any input arguments that
are provided as lists, allowing you to evaluate a wide array of tax scenarios.
Here we make a simple tax table by varying W2 income:
from tenforty import evaluate_returns
evaluate_returns(
w2_income=list(range(50_000, 250_001, 50_000)),
state="CA",
filing_status="Married/Joint",
num_dependents=2,
)[
[
"w2_income",
"federal_effective_tax_rate",
"federal_tax_bracket",
"state_effective_tax_rate",
"state_tax_bracket",
]
]
This results in a polars.DataFrame (use .to_pandas() if you need pandas
compatibility). The rates are percentages, shown here to two decimals. The
effective rates divide by taxable income:
| w2_income | federal_effective_tax_rate | federal_tax_bracket | state_effective_tax_rate | state_tax_bracket |
|---|---|---|---|---|
| 50000 | 0.00 | 10 | 0.00 | 2 |
| 100000 | 4.88 | 12 | 1.28 | 6 |
| 150000 | 9.70 | 22 | 3.32 | 8 |
| 200000 | 13.35 | 22 | 4.86 | 9.3 |
| 250000 | 15.44 | 24 | 5.79 | 9.3 |
Plot: Federal Tax as a Function of W2 Income
Since the output is a dataframe, one may readily use any of numerous
visualization tools to make plots. The plots here use seaborn, which takes a
pandas frame, so they need pip install seaborn pyarrow and call
.to_pandas(). Here we revisit the example above, evaluating a wider range of
W2 incomes at finer resolution than before.
import seaborn.objects as so
df = evaluate_returns(w2_income=list(range(0, 250_001, 1_000)))
(
so.Plot(df.to_pandas(), x="w2_income", y="total_tax")
.add(so.Line())
.label(
x="W2 Income", y="Federal Tax", title="Federal Tax as a Function of W2 Income"
)
)
Plot: Federal Tax Over Time
One can just as easily vary the year as any other parameter. tenforty
supports back to the 2018 tax year; under the default, 2018–2023 are computed
on OTS (whose authors have published an edition every year for over two
decades) and 2024–2025 on the graph backend. Here we show the federal tax on
$100K of W2 income for each supported year.
import polars as pl
df = evaluate_returns(
year=[2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025], w2_income=100_000
).cast({"year": pl.Utf8})
(
so.Plot(df.to_pandas(), x="year", y="total_tax")
.add(so.Line())
.add(so.Dot())
.label(
x="Year",
y="Federal Tax",
title="Federal Tax on $100K W2 Income Over Time",
)
)
This one's a little melodramatic because we don't make the y-axis go to zero; it's only about a 3% drop over the years.
Plot: Impact of Long-Term Capital Gains
Both backends compute short- and long-term capital gains -- although, see the Limitations section below -- so you can ask questions about the impact on your taxes of selling some appreciated stock this year, and show the breakdown between state and federal taxes:
import polars as pl
df = (
evaluate_returns(
w2_income=75_000,
state="CA",
long_term_capital_gains=list(range(0, 125_001, 5000)),
)
.select(["long_term_capital_gains", "state_total_tax", "federal_total_tax"])
.unpivot(index="long_term_capital_gains", variable_name="Type", value_name="tax")
.with_columns(
pl.col("Type").replace(
{"state_total_tax": "State", "federal_total_tax": "Federal"}
)
)
)
(
so.Plot(df.to_pandas(), x="long_term_capital_gains", y="tax", color="Type").add(
so.Area(alpha=0.7), so.Stack()
)
.label(
x="Long-Term Capital Gains",
y="Total Tax",
title="Impact of LTCG on Total Tax for California Resident",
)
)
Plot: Will I Incur Alternative Minimum Tax (AMT)?
Employees at tech companies are commonly issued incentive stock options, the
exercise of which can put them in a situation where they need to pay actual
money in taxes on paper gains, via the alternative minimum tax. With
tenforty's help you can see it coming at least: ;)
federal_total_tax already includes the AMT, so the stack below splits it into
the tax excluding AMT and the AMT itself; the two layers sum to the total.
import polars as pl
df = (
evaluate_returns(
w2_income=100_000, incentive_stock_option_gains=list(range(0, 100_001, 2500))
)
.with_columns(
excluding_amt=pl.col("federal_total_tax") - pl.col("federal_amt")
)
.select(["incentive_stock_option_gains", "excluding_amt", "federal_amt"])
.unpivot(index="incentive_stock_option_gains", variable_name="Type", value_name="tax")
.with_columns(
pl.col("Type").replace(
{"federal_amt": "AMT", "excluding_amt": "Tax excluding AMT"}
)
)
)
(
so.Plot(df.to_pandas(), x="incentive_stock_option_gains", y="tax", color="Type")
.add(so.Area(alpha=0.7), so.Stack())
.label(
x="Incentive Stock Option Gains",
y="Total Federal Tax",
title="Effect of ISO Gains on Federal Alternative Minimum Tax\nGiven $100K W2 Income",
)
)
API Reference
The two functions evaluate_return and evaluate_returns are the main
interface to tenforty. They take exactly the same arguments, except that any
of the arguments to evaluate_returns may either be a single value, or a list
of values. evaluate_return evaluates one single return, and
evaluate_returns evaluates all combinations of inputs subtended by the
provided values and collects the results into a dataframe.
The inputs to either function are validated, and if for example a filing status
is misspelled, you'll get an informative error message along with a list of the
valid options. Error Handling describes the
on_error policies and exception types.
Arguments
| Argument | Type | Default | Notes |
|---|---|---|---|
year |
int | 2025 | 2018-2025 inclusive |
state |
str | None | None | Two-letter state code, or None for a federal-only return. The graph backend computes every state and DC for 2024-2025; OTS computes AZ, CA, MA, MI, NC, NJ, NY, OH, OR, PA, VA and the no-income-tax states, for the years it has them. Which one the default uses: Which backend computes your return |
filing_status |
str | Single | "Single", "Married/Joint", "Head_of_House", "Married/Sep", "Widow(er)" |
num_dependents |
int | 0 | Total dependents (qualifying children and qualifying relatives). Each gets the child tax credit or the $500 credit for other dependents; see num_ctc_dependents. Applied for 2023-2025 (OTS) and 2024-2025 (graph); OTS 2018-2022 applies neither. The refundable ACTC and dependent care are not modeled; the EITC is federal_earned_income_credit (see num_eitc_children). |
num_ctc_dependents |
int | None | None | Keyword-only. How many of num_dependents are child tax credit qualifying children (under 17, valid SSN; Schedule 8812 line 4). Unset means all of them. Set it lower for dependents who only get the $500 other-dependent credit: children 17+, dependents without an SSN, qualifying relatives. Must not exceed num_dependents |
dependent_exemptions |
float | 0.0 | State exemption dollars (not a count). A nonzero value is refused on OTS and under backend="auto" for every state and year; only an explicit backend="graph" accepts it, for GA, HI, IN, KS, LA 2024, MD, ME, NJ, VA, VT and WV. See its docstring in TaxReturnInput for the per-state rules |
num_eitc_children |
int | None | None | Keyword-only. Earned income credit qualifying children (Schedule EIC; at most 3 count): under 19, a student under 24, or disabled, with a valid SSN, living with you over half the year, and not claimed for the EIC by anyone else. Never inferred from num_dependents or the child tax credit count (a noncustodial parent with a Form 8332 release gets the CTC, not the EIC). Graph only |
eitc_eligible |
bool | None | None | Keyword-only. You meet the EIC conditions the inputs cannot show: valid SSNs, citizen or resident alien all year, no Form 2555, not another taxpayer's qualifying child, not barred after a disallowance; with no qualifying child also all of Pub 596 Rule 11 (one person, you or a joint spouse, at least 25 and under 65 at year end, by Rule 11's birth-date bounds), nobody's dependent or qualifying child, U.S. home over half the year. filer_65_or_older/spouse_65_or_older never affect the EIC. False: the credit is 0. True with num_eitc_children: computed. Otherwise federal_earned_income_credit is None (not determined). Graph Missouri returns, and derivatives or solves of an output that reads the EIC, require these facts. Graph only |
standard_or_itemized |
str | Auto | Federal deduction election: "Auto" takes the larger; "Standard" or "Itemized" forces that choice (contract) |
w2_income |
float | 0.0 | |
taxable_interest |
float | 0.0 | |
tax_exempt_interest |
float | 0.0 | Keyword-only. Form 1040 line 2a. Not taxed; counts toward the EIC investment income limit. Graph only |
qualified_dividends |
float | 0.0 | |
ordinary_dividends |
float | 0.0 | Total ordinary dividends, including qualified |
short_term_capital_gains |
float | 0.0 | |
long_term_capital_gains |
float | 0.0 | |
self_employment_income |
float | 0.0 | Schedule C profit used by Schedule SE and QBI |
qbi_w2_wages |
float | 0.0 | W-2 wages paid by the QBI business or aggregation |
qbi_ubia |
float | 0.0 | UBIA of qualified property for that business or aggregation |
qbi_is_sstb |
bool | False | Whether that business or aggregation is an SSTB |
rental_income |
float | 0.0 | |
schedule_1_income |
float | 0.0 | |
itemized_deductions |
float | 0.0 | Deprecated; use federal_itemized. An aggregate whose AMT treatment it does not state, so each backend applies its shipped convention (reported in assumptions); see Itemized deductions |
state_adjustment |
float | 0.0 | Deprecated; avoid. Meaning depends on state and backend; see state_adjustment |
incentive_stock_option_gains |
float | 0.0 | |
state_and_local_taxes |
float | 0.0 | Schedule A line 5d (entered on 5a), capped on line 5e: $10,000 ($5,000 MFS) through 2024. For 2025, $40,000 less 30% of AGI over $500,000 ($250,000 MFS), not below $10,000; MFS then halves that result (equivalently $20,000 less 15% of AGI over $250,000, not below $5,000) |
qualified_tips |
float | 0.0 | 2025 only. W-2 box 7 tips already in w2_income; Schedule 1-A Part II, Form 1040 line 13b |
qualified_overtime |
float | 0.0 | 2025 only. FLSA overtime premium already in w2_income; Schedule 1-A Part III |
vehicle_loan_interest |
float | 0.0 | 2025 only. Qualified passenger vehicle loan interest; Schedule 1-A Part IV |
filer_65_or_older |
bool | False | Additional standard deduction; for 2025 also the Schedule 1-A senior deduction |
spouse_65_or_older |
bool | False | As above for the spouse; Married/Joint or Married/Sep only (MFS: standard deduction box only) |
federal_itemized |
FederalItemized | None |
None | Keyword-only. Itemized deductions other than taxes, net of federal limits, as allowed for the regular tax and for the AMT: FederalItemized(regular_tax=..., amt=...); see Itemized deductions |
state_facts |
model or tuple | None | Keyword-only. State-specific facts from tenforty.state_facts, e.g. state_facts=tenforty.state_facts.OH(spouses_both_have_qualifying_income=False); one model, or a tuple for distinct states. tenforty.state_facts.available(state, year) lists them. Some are required where no default would be right: graph Ohio and Mississippi Married/Joint returns, and Mississippi Widow(er) returns, raise until the facts are given. See State facts |
on_error |
str | raise | "raise", "warn" or "ignore". Under warn/ignore a failed return has NaN in every numeric output and assumptions of None, never $0; see Failures and on_error |
backend |
str | auto | "auto", "ots", or "graph". "auto" uses graph for 2024-2025 within graph scope and OTS otherwise; pass "ots" for OTS results; see Which backend computes your return and Choosing a backend |
state_adjustment (deprecated)
state_adjustment is a legacy escape hatch with no single meaning, and a
nonzero value emits a DeprecationWarning. We recommend against new use; named
single-meaning inputs will replace it (tenforty-tj2.1, tenforty-tj2.2). CA and
AL stay out of backend="auto" graph scope while it means different things on
the two backends (tenforty-yu51).
| Backend and state | What state_adjustment does |
|---|---|
| OTS, CA | Schedule CA Part II addition to itemized deductions (CA540_P2_Add_6); no effect with the standard deduction |
| Graph, CA | Schedule CA Part I addition to income (ca_schedule_ca_A22_24): the opposite direction |
| Graph, AL | The Form 40 standard deduction amount (al_40_L12_std) |
| Everywhere else | OTS ignores it; the graph refuses a nonzero value |
The evaluate_returns frame
Every frame has the same columns, in the same order, with the same dtypes,
whichever backend computed it and whether the batch is empty, succeeded,
partly failed, or mixed engines under backend="auto":
- the inputs, in the order of the
evaluate_returnssignature (yearthroughspouse_65_or_older, then the keyword-onlynum_ctc_dependents,tax_exempt_interest,num_eitc_children,eitc_eligible,federal_itemized_regular_tax,federal_itemized_amtandstate_facts), then the return fields ofInterpretedTaxReturn; year,num_dependentsandnum_ctc_dependentsare Int64;num_eitc_childrenis a nullable Int64,eitc_eligiblea nullable Boolean, and the twofederal_itemized_*echoes nullable Float64 (null when not supplied);state,filing_status,standard_or_itemizedandstate_factsare String (stateis null for a federal-only return,state_factsthe canonical JSON of the model for the row's state, or null); boolean inputs are Boolean; float inputs and every numeric output are Float64, even when you pass whole numbers;assumptionsis List(String), each element one record's JSON;- the four rate columns (
federal_tax_bracket,federal_effective_tax_rate,state_tax_bracket,state_effective_tax_rate) are null where the rate is not defined. A failed row has NaN in every numeric output and a nullassumptions.
The input columns echo your request, after broadcasting: they identify
which return a row answers, not the values the engine used. For example, an
ordinary_dividends below qualified_dividends is lifted before computing,
but the frame shows the value you passed.
In mode="cross" the rows are the Cartesian product of the inputs, taken in
signature order (the first argument varies slowest). In mode="zip" row i
answers the i-th element of each list.
The three qbi_ inputs describe one trade or business, or businesses the
taxpayer has validly aggregated for section 199A. They are not totals across
unrelated businesses, because Form 8995-A applies its wage and UBIA limitation
per business or valid aggregation. Their defaults model a non-SSTB business
with no business W-2 wages or qualified property. The OTS backend uses OTS's
Form 8995 for the independent QBI base and taxable-income ceiling, then applies
the missing Form 8995-A wage, property, and SSTB limitation in tenforty's
orchestration layer before rerunning Form 1040.
Outputs
| Output Field | Description |
|---|---|
| total_tax | Combined federal and state tax liability |
| federal_adjusted_gross_income | Federal Adjusted Gross Income (Form 1040 Line 11) |
| federal_effective_tax_rate | Federal total tax as a percent of federal taxable income; None when taxable income is not positive |
| federal_tax_bracket | Rate-schedule bracket (percent) holding federal taxable income; a threshold amount stays in the lower bracket |
| federal_taxable_income | Income subject to federal tax after deductions |
| federal_qbi_deduction | Qualified business income deduction (Form 8995/8995-A) |
| federal_amt | Federal Alternative Minimum Tax |
| federal_income_tax | Federal income tax + AMT (excludes SE tax, NIIT, Additional Medicare Tax) |
| federal_se_tax | Federal self-employment tax (Schedule SE) |
| federal_niit | Net Investment Income Tax (Form 8960) |
| federal_additional_medicare_tax | Additional Medicare Tax (Form 8959) |
| federal_child_tax_credit | Nonrefundable child tax credit + credit for other dependents (Schedule 8812 line 14, Form 1040 line 19); already subtracted in federal_total_tax. Excludes the refundable ACTC |
| federal_earned_income_credit | Earned income credit (Form 1040 line 27; 2025 line 27a), read from the EIC Table. Refundable: a payment, not subtracted in federal_total_tax. Graph (2024-2025): 0 with eitc_eligible=False; computed with eitc_eligible=True and num_eitc_children; otherwise None (not determined). Always None on OTS. 0 is a determined zero |
| federal_total_tax | Total federal tax (income tax + SE + NIIT + Additional Medicare) |
| state_adjusted_gross_income | State-level Adjusted Gross Income |
| state_taxable_income | Income subject to state tax after deductions |
| state_total_tax | Total state tax liability |
| state_tax_bracket | Rate-schedule bracket (percent) holding state taxable income; None when not defined (no state, or not reported for that state) |
| state_effective_tax_rate | State tax as a percent of state taxable income; None when not defined |
| assumptions | Recorded conventions this computation used because no input supplied them, as Assumption records (() if none were recorded; None on a failed return). Most are state conventions; federal.itemized_deductions.legacy_amt is a federal record (state null) for the deprecated itemized_deductions. In evaluate_returns, a list of each record's JSON. See State facts and Itemized deductions |
The bracket fields are the rate schedule's own bracket, not marginal_rate(),
which is the graph's planning sensitivity (see
Marginal Rates for Every Input). The graph reports state brackets for CA,
NJ, NY, OH, OR and VA at full precision; OTS prints its bracket to 0.1%, so
the two can differ in the last digit (NY 6.85% is 6.9 on OTS).
The Graph Backend
The graph backend computes the default's 2024–2025 federal returns and its
graph-scope states (see
Which backend computes your return).
Tax forms are written in a Haskell DSL (tenforty-spec/),
compiled to JSON graphs, and evaluated by a Rust runtime exposed to Python.
Because the whole return is one differentiable graph, it can report planning
sensitivities and solve for inputs, which OTS can't. It is included in the
published wheels.
To force one backend, pass it explicitly. backend="graph" computes any state
the graph covers, in scope or not;
Migrating to the graph default lists
every difference to expect between "ots" and "auto":
evaluate_return(year=2025, state="CO", w2_income=100_000, backend="graph")
evaluate_return(year=2025, w2_income=100_000, backend="ots")
Compared with the OTS backend:
- It covers the 2024 and 2025 tax years only.
- It supports many more states: in addition to the OTS states, AL, AR, CO, CT, DC, DE, GA, HI, IA, ID, IL, IN, KS, KY, LA, MD, ME, MN, MO, MS, MT, ND, NE, NH, NM, OK, RI, SC, UT, VT, WI, and WV.
- Not every input is mapped for every state. It raises on an input it can't represent rather than dropping it.
- It takes
dependent_exemptions, state exemption dollars (not a count), for the states that use them. OTS has no such input and refuses a nonzero value.
Two function families exist only on this backend and take the same return
arguments as evaluate_return:
marginal_rates(...)gives the planning sensitivity of an output to every continuous input at once;marginal_rate(..., wrt=...)does one input.solve_for_income(target_tax, ..., for_input="w2_income")finds the value of one input that produces a target output.
Marginal Rates for Every Input
marginal_rates reports how a selected output responds to every continuous
public input at once:
from tenforty import marginal_rates
rates = marginal_rates(
year=2024,
state="CA",
filing_status="Single",
w2_income=100_000,
)
rates["w2_income"]
The returned dictionary uses the same natural input names as
evaluate_return. It includes federal inputs and any continuous inputs mapped
by the selected state; discrete choices such as filing status and number of
dependents are omitted. The existing marginal_rate(..., wrt="w2_income")
function remains available for one input at a time.
Tax calculations are piecewise functions. At a bracket, phase-out, or other
active boundary, both marginal-rate APIs report the composed function's
right-hand derivative: the change implied by adding a small amount to that
input. Smooth entries in marginal_rates share one reverse-mode traversal per
resolved output.
These are planning sensitivities, not always the literal derivative of the tax
you file. Below $100,000 of taxable income the federal tax comes from the Tax
Table, a staircase of $50 rows (and some states use similar tables): the
literal slope is zero inside a row and a jump at its edge. There the graph
reports the planning slope, the rate at the table row's midpoint: the bracket
rate the rows step through, not the zero inside a row. Some comparisons of nearly equal amounts can
also take the wrong side of a tie in floating point, which is tracked as
tenforty-msj2.
The reproducible autodiff planning examples show a full next-dollar table, the interaction between wages and long-term-gain stacking, and a bounded ordinary-income sizing exercise. They also measure where forward simulation remains competitive and explain why derivatives alone cannot find true tax cliffs.
Known Limitations
- Currently does not support Windows. The Colab notebook linked above, or using WSL are workarounds. Attempts have been made to get Windows builds working, but runtime crashes persist due to compiler interoperability challenges; see Windows Build Research for details.
- Net Investment Income Tax (Form 8960) and Additional Medicare Tax (Form 8959) are computed for the 2024 and 2025 tax years only. For earlier years they are reported as zero, so if they apply to your situation the total tax will be underestimated.
- Evidence is uneven across states and income types; the evidence summary says what is independently checked for each kind of return the default computes.
Related Projects
A few excellent open-source projects approach US tax computation from different angles. They are research tools, built for economists modeling policy and populations, and for that work one of them may fit better:
- Tax-Calculator (Policy
Simulation Library) is a federal income and payroll tax microsimulation
model with a long pedigree in the policy-economics world. Its special power
is counterfactual law: every rate, bracket, and phase-out is a reformable
parameter, so it can answer "what would this filer (or the whole country)
pay under a proposed reform?" It models per-spouse income attribution and
has been validated against NBER's TAXSIM for years. If your question is
about policy analysis, revenue estimation, or distributional effects, start
there.
tenfortyruns a differential test of its own federal results against Tax-Calculator — see docs/taxcalc-differential-audit.md. - TAXSIM (NBER) is the long-standing academic reference model for US federal and state income taxes, callable remotely.
- PolicyEngine-US models federal and many state taxes alongside benefit programs, with a policy-reform focus similar to Tax-Calculator's.
tenforty is built for a different use case: evaluating an individual
return, what it comes to and what would happen if something changed, without
clicking back through five screens of tax software to find out. That
is its express purpose, not a side use. It's a library first: one function
call, plainly named inputs (w2_income, long_term_capital_gains), validated
arguments with error messages that tell you (or your agent) what to fix,
federal and state computed together, and a dataframe out when you sweep a
grid of scenarios. The research models above can evaluate a single return
too, but you or your agent have to learn their input conventions first. With
tenforty that work is already done; on the graph backend it also gives
planning sensitivities and an input solver.
Development & Contributing
Contributions are welcome! See our Contributing Guidelines for the development process and coding standards.
Documentation for developers:
- Development Guide - Package internals, Cython extensions, and environment setup
- Error Handling - Configuring
on_errorpolicies and exception types - Evidence summary - What is independently evidenced, per kind of return
- IRS Validation - Historical record of the official-source test methodology
License
tenforty is released under the MIT License.
Acknowledgments
This project relies on the Open Tax Solver project for the underlying tax computation logic.
Metadata
Release files for tenforty 2025.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tenforty-2025.13.tar.gz | 2.2 MB | With provenance | Details for tenforty-2025.13.tar.gz |
Built distributions (wheels)
Total release size: 166.0 MB
Release files / tenforty-2025.13.tar.gz
| Download URL | tenforty-2025.13.tar.gz |
|---|---|
| Size | 2.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cf745195f473fd75eebf76662ebccc0805801403c2e034c8aa2545c9bb7ea1e9
|
|
BLAKE2b-256 checksum How to use checksums |
020e77bbecf8dd61000fc5593e535ef9b5036a8a36c4571e1728ee4399fe308f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp315-cp315-musllinux_1_2_x86_64.whl
| Download URL | tenforty-2025.13-cp315-cp315-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.15 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
21e68a6db123b2268618d13703bbe698de159c8a3daa0551d686dec9db2eb013
|
|
BLAKE2b-256 checksum How to use checksums |
03e7207775d29d20fa812714e78d735e40bffe139966124e7c30e955ee9c089d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp315-cp315-musllinux_1_2_aarch64.whl
| Download URL | tenforty-2025.13-cp315-cp315-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.15 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
4b8ac268999c14dabd99fb5fbdae65fa3da839167f5e820a40670e88ee31702a
|
|
BLAKE2b-256 checksum How to use checksums |
f236c994499f0dbebadae14c3a50deff440a5b5cfebaa87a437e2fd14ac2b924
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp315-cp315-manylinux_2_28_x86_64.whl
| Download URL | tenforty-2025.13-cp315-cp315-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.15 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
39955b8e23ac64e485645730da526d9d639b15b59f0ffd6a86e425fc8504a4e1
|
|
BLAKE2b-256 checksum How to use checksums |
09346173dd272e24de8383861e178bd57b16be2560233f62b1c8d078e805546e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp315-cp315-manylinux_2_28_aarch64.whl
| Download URL | tenforty-2025.13-cp315-cp315-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.15 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
014b92d412412bef259b28b4143a381761d2627099d357885775c66462d1e709
|
|
BLAKE2b-256 checksum How to use checksums |
43b7796203e49b0fda41ce541023e2d322b0ff49ba755e9841473fb6f7152d9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp315-cp315-macosx_11_0_arm64.whl
| Download URL | tenforty-2025.13-cp315-cp315-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.15 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
208aeed6f5fc5b17f4d1abed843327ff1cc35844928728b81b708223d6b004a7
|
|
BLAKE2b-256 checksum How to use checksums |
a62c620d704f3f9cc4f83c8a7f031d3b965bf713d93caefaeb33be21c0899726
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp315-cp315-macosx_10_15_x86_64.whl
| Download URL | tenforty-2025.13-cp315-cp315-macosx_10_15_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.15 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
c584bf5bd4e3075e1eff7f213160f10314b58f7da5264d15ed158b2648fb8288
|
|
BLAKE2b-256 checksum How to use checksums |
0ea37b14af776000f84a94116f644a5d6339f648b06755f4642134511489ce91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | tenforty-2025.13-cp314-cp314-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.14 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
4140fd6fb1c95d6c3ae65e2591e1501eec91a7e917551c24097cff3cf6b51fcd
|
|
BLAKE2b-256 checksum How to use checksums |
1379fc433d554f8180689808500dbf8fcf0ae2429a5a3bb2e7f4d39ea9a424af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp314-cp314-musllinux_1_2_aarch64.whl
| Download URL | tenforty-2025.13-cp314-cp314-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.14 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
d3e06f121626a51b099603aa75d5a227d2aca9802d4818e4ebb66fe5129c8bb2
|
|
BLAKE2b-256 checksum How to use checksums |
110a30a93abecc35ae9162506996d946b8b88307e45f425dd7e557e2cc79f474
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp314-cp314-manylinux_2_28_x86_64.whl
| Download URL | tenforty-2025.13-cp314-cp314-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
31daf7b5c2d5c581c2ce5dcd3ba2776eb7e5c10f259845b0980388070c963e8d
|
|
BLAKE2b-256 checksum How to use checksums |
b6305b6940c7db315a47f9686c8ef43a0deedf1c1fe09cc42153797660778715
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp314-cp314-manylinux_2_28_aarch64.whl
| Download URL | tenforty-2025.13-cp314-cp314-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
04dd3c5f7d08c9942c6a53d2e878412033f36104ea5d9b86327920a587b40011
|
|
BLAKE2b-256 checksum How to use checksums |
3a83e3a78a8a7e33d9a4f71388cbbcd7e4fbb075f1d9f15108ac8980536fb60b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | tenforty-2025.13-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
cc04c4394b52a99bbeef78785c409e3de8f96404ec55b7464c7bdaed94c24a24
|
|
BLAKE2b-256 checksum How to use checksums |
b2ae28d749e2cc867716d02f4c3e28e75ebcc8f411512b89fde7c5ce77259336
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp314-cp314-macosx_10_15_x86_64.whl
| Download URL | tenforty-2025.13-cp314-cp314-macosx_10_15_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.14 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
2ac3ee9ece251aa130eb77ff10dde1ea020dadebedbc67ea313cb2cff0578913
|
|
BLAKE2b-256 checksum How to use checksums |
a62b495f6e865b059d3e183addb2c93b5c8a5f9ae5e1d16b48ee04b5ac953b6e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | tenforty-2025.13-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
e5af4dabef9a074161eea64527bb673f2fdbd96bd543a6257bfd662e0768b166
|
|
BLAKE2b-256 checksum How to use checksums |
1517466ace9c95e832f7c0894b0afe6c097b92689ca2293d304e5b563fce01b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp313-cp313-musllinux_1_2_aarch64.whl
| Download URL | tenforty-2025.13-cp313-cp313-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.13 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
9cbcc4c643fcc4fa9f982d5efa7fb6b956af38f4f6e4b4306edf8ee71c0c3949
|
|
BLAKE2b-256 checksum How to use checksums |
4c07d4379cf776a5b51e20faf4aa53c04dd6ee90762a94b0226a8bc5b9fcb3d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | tenforty-2025.13-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
a3a5c5773fc5f5316bf3e7b11faf77d54d3f82d8898905a828c76b650024f6fd
|
|
BLAKE2b-256 checksum How to use checksums |
b523b486080aee1fe142244b961059fdb3206a66f28eb4e7ff13ad0c316c6ae3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp313-cp313-manylinux_2_28_aarch64.whl
| Download URL | tenforty-2025.13-cp313-cp313-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
acd8c47b72d3e1d3acc7b342439872b1d96326bcbeba00b385ee602e20521dd6
|
|
BLAKE2b-256 checksum How to use checksums |
55fbba454dd9d711cc76bbb6d22c504f8ee4cf05f127d35f6457ff4ffe818738
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | tenforty-2025.13-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
75084cd5cde2762385962061f4ac004962b58bb465e3af4dff46a844c91bffa8
|
|
BLAKE2b-256 checksum How to use checksums |
391f5f072e830a1f3d41b3ef9ec0a76fb5eb2675eaaba0c016a228ea73091769
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | tenforty-2025.13-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
279e5fcb16e5041c4a3cd2d18da0aef93e509390c314465200e166f5b9d4f9f4
|
|
BLAKE2b-256 checksum How to use checksums |
9c0049d7969c1b714fff5eaf33862680815db6f9424631c1a70951278207c103
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | tenforty-2025.13-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
d9af32c4f88fc5188ddc991151a0313cfd2f6ff8b90decaf912087d848c0f152
|
|
BLAKE2b-256 checksum How to use checksums |
5e4373455af4407e8e2492ec047e64521be2bfb5e1a23f07ec2b6ac517c753d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp312-cp312-musllinux_1_2_aarch64.whl
| Download URL | tenforty-2025.13-cp312-cp312-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.12 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
2fbf6030a5cc3eb2ce4587eaa9cbd2d30401f6123016190ddbd07e25c8eefa44
|
|
BLAKE2b-256 checksum How to use checksums |
1f684cca49aaeb9410daee6e23b5498305cc323395822347722d01e761a81cd5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | tenforty-2025.13-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
aebc1678ad59b0e08ded2d087618629c3189322676ab69f4b403bcd5769af4ab
|
|
BLAKE2b-256 checksum How to use checksums |
be3d7e1c00dbf13fae14b1f0c14ef6667fbd08fd06d22b3defedd9f19a00d04d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp312-cp312-manylinux_2_28_aarch64.whl
| Download URL | tenforty-2025.13-cp312-cp312-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
05b11b41e8b4a46461f11f52699c7715847f5087106f3cd0fa13f5bff131bd23
|
|
BLAKE2b-256 checksum How to use checksums |
8d9b7e8088d7074db65449f18f3766fca88ca8d85a7d5ae8c0f19e5899a1ec44
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | tenforty-2025.13-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
cc58024b3be995fa6892a0030630a5006c16fc105ea0ddfdfac6f6c6988bc3c0
|
|
BLAKE2b-256 checksum How to use checksums |
3a50d3b36cd17d60ae6eb931fd954a1dfa1ed6f95e011e3ee53441cc18c63e2f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | tenforty-2025.13-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
6682eff6e4c62a12532f2a844def3edadd92d105ed49fc4685859cb4917827d3
|
|
BLAKE2b-256 checksum How to use checksums |
cc9ef08d7868e0bbb5659f82ecb86e1de709e9b7985f5f758ba6671a33e76372
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | tenforty-2025.13-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
b8deceaeb680adf41d11e6a173d6fd4db8e9a957824560ad263ad05c432ef57c
|
|
BLAKE2b-256 checksum How to use checksums |
518f614286f510415d69047c7a1797e68aa3ed217f35c183e14959ef7f1a5a98
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp311-cp311-musllinux_1_2_aarch64.whl
| Download URL | tenforty-2025.13-cp311-cp311-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.11 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
ec6ee72925b0a110ab7995cc3d91674aa08967623f294e47f8bb1ea3b275ac6a
|
|
BLAKE2b-256 checksum How to use checksums |
930bac1249591c72ba963b1c4672e3120e6ddeec8f8ecac777b6f767724cc835
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | tenforty-2025.13-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f6c3368a4c01b47afe9b94de6bdbef6edb71230e9dfd2db34a8e215eef176f1e
|
|
BLAKE2b-256 checksum How to use checksums |
bf2c86b334f7f2d0a4699da351a6d676776dfb09835f7792ba2a51fa237bd954
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp311-cp311-manylinux_2_28_aarch64.whl
| Download URL | tenforty-2025.13-cp311-cp311-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
2185dd4c150604de9ee8ef0e6c03f017c248e198432d0b52ba55d3a8b6c7224c
|
|
BLAKE2b-256 checksum How to use checksums |
203f828677b5e9705ca7ceb40af97d207e90dcf4bd7582f0a69b643fdf4442d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | tenforty-2025.13-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
10b228aaf0724aade0f6bd50abb400f937f74981c6025af4a33c88d19a79bd27
|
|
BLAKE2b-256 checksum How to use checksums |
f2132e1ff34c236aa43956110fd3e0be0400b8f5b1c9e7d00f55f69d83382dfc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp311-cp311-macosx_10_12_x86_64.whl
| Download URL | tenforty-2025.13-cp311-cp311-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.11 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
8fefcd64aeb79a64e8bdc54473000d80a5bc49ac3835d0a334f8b1c7e982ce8c
|
|
BLAKE2b-256 checksum How to use checksums |
4ef8278e6b6c6a058b3e4b35b25845804bd2aa7457781c1bfc9b67dbfce6be34
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp310-cp310-musllinux_1_2_x86_64.whl
| Download URL | tenforty-2025.13-cp310-cp310-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
eff047144e196049ee885a2e8fa2fadc01a0e8af822c38883751331b7891fe8b
|
|
BLAKE2b-256 checksum How to use checksums |
1e351dbe328f6ae1588ff8ed4e581b2d0215bff7ac12f228fbd14004869ba15c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp310-cp310-musllinux_1_2_aarch64.whl
| Download URL | tenforty-2025.13-cp310-cp310-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.10 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
ebf1f617ffdaae98ebe2ab74d3ffbc03e1ac37a1c7d61f386c55358b4fe7723d
|
|
BLAKE2b-256 checksum How to use checksums |
b56225034f181e892abe47bb4802bc3f35c09e07e091197c3c67adec4c6dc74c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | tenforty-2025.13-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
cc20bce38568c8789d7e8e1abd2b2a7c67d2232ea3712f4b24d16f9c790e1abf
|
|
BLAKE2b-256 checksum How to use checksums |
91d70c8d5d5f2884e0a667330279fbc6f79551be34531c55a40e6b71358447fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp310-cp310-manylinux_2_28_aarch64.whl
| Download URL | tenforty-2025.13-cp310-cp310-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
bb4a4855ac08ac3860503b78268bac406f7fe1155906b95b96833dae26c3fd79
|
|
BLAKE2b-256 checksum How to use checksums |
01d3695fe60c22d7c1e6a1e89d7b3ec479ef8e452e0c005b629dc379ba32c70b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | tenforty-2025.13-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d8da868cae674c7ba76ff698089244e61d7d630e0269a34f9266af4694621386
|
|
BLAKE2b-256 checksum How to use checksums |
dc57a344dbf36c50223320e325bc238b300d3d1f023841efbc2d099fab5b71e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logRelease files / tenforty-2025.13-cp310-cp310-macosx_10_12_x86_64.whl
| Download URL | tenforty-2025.13-cp310-cp310-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.10 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
57729d80294c594c79ea81d42567c1691c89aace8724cd5ba926057d07588a68
|
|
BLAKE2b-256 checksum How to use checksums |
02d220544021da39ac9ae67f9093daee69a9915e9922e2c385bfd03140f2c080
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logSecurity for tenforty 2025.13
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 37 files in this release have been uploaded with provenance metadata.
Attestation for tenforty-2025.13.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.