Skip to main content

tenforty

GitHub Actions pre-commit.ci status

PyPI Python Version Downloads

License Operating System Built with uv Ruff

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: Try In Colab

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 polars dataframe.
  • 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 needs MS(head_of_family_eligible=...) (Head_of_House defaults to the documented resident-dependent baseline). Without them the call raises UnsupportedInputError before computing. MS Married/Joint state and total-tax derivatives and solves over household income are unsupported, and a nonzero schedule_1_income, state_adjustment, dependent_exemptions, itemized_deductions, state_and_local_taxes or federal_itemized regular-tax amount is refused for MS: itemizing on MS is not supported through either itemized input.
  • The earned income credit needs facts. eitc_eligible=False gives a determined 0, with no child count needed. eitc_eligible=True with num_eitc_children computes the credit. Otherwise it is None (not determined), and graph Missouri returns raise; eitc_eligible=False is accepted there. OTS always reports None.
  • 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 and backend="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 raises BackendUnavailableError there.

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 tenforty Python 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 a tenforty input, and list anything I gave you that tenforty can'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"
    )
)

Image: 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",
    )
)

Image: Federal Tax 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",
    )
)

Image: Impact of Long-Term Capital Gains

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",
    )
)

Image: Am I in AMT?

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_returns signature (year through spouse_65_or_older, then the keyword-only num_ctc_dependents, tax_exempt_interest, num_eitc_children, eitc_eligible, federal_itemized_regular_tax, federal_itemized_amt and state_facts), then the return fields of InterpretedTaxReturn;
  • year, num_dependents and num_ctc_dependents are Int64; num_eitc_children is a nullable Int64, eitc_eligible a nullable Boolean, and the two federal_itemized_* echoes nullable Float64 (null when not supplied); state, filing_status, standard_or_itemized and state_facts are String (state is null for a federal-only return, state_facts the 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; assumptions is 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 null assumptions.

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.

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. tenforty runs 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:

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)

Source distribution for tenforty 2025.13
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)

Table of built distributions (wheels) for tenforty 2025.13
File Actions
tenforty-2025.13-cp315-cp315-musllinux_1_2_x86_64.whl CPython 3.15 CPython 3.15 Linux musl 1.2+ x86-64 Details for tenforty-2025.13-cp315-cp315-musllinux_1_2_x86_64.whl
tenforty-2025.13-cp315-cp315-musllinux_1_2_aarch64.whl CPython 3.15 CPython 3.15 Linux musl 1.2+ ARM64 Details for tenforty-2025.13-cp315-cp315-musllinux_1_2_aarch64.whl
tenforty-2025.13-cp315-cp315-manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ x86-64 Details for tenforty-2025.13-cp315-cp315-manylinux_2_28_x86_64.whl
tenforty-2025.13-cp315-cp315-manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ ARM64 Details for tenforty-2025.13-cp315-cp315-manylinux_2_28_aarch64.whl
tenforty-2025.13-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details for tenforty-2025.13-cp315-cp315-macosx_11_0_arm64.whl
tenforty-2025.13-cp315-cp315-macosx_10_15_x86_64.whl CPython 3.15 CPython 3.15 macOS 10.15+ x86-64 Details for tenforty-2025.13-cp315-cp315-macosx_10_15_x86_64.whl
tenforty-2025.13-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details for tenforty-2025.13-cp314-cp314-musllinux_1_2_x86_64.whl
tenforty-2025.13-cp314-cp314-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARM64 Details for tenforty-2025.13-cp314-cp314-musllinux_1_2_aarch64.whl
tenforty-2025.13-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details for tenforty-2025.13-cp314-cp314-manylinux_2_28_x86_64.whl
tenforty-2025.13-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details for tenforty-2025.13-cp314-cp314-manylinux_2_28_aarch64.whl
tenforty-2025.13-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for tenforty-2025.13-cp314-cp314-macosx_11_0_arm64.whl
tenforty-2025.13-cp314-cp314-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.15+ x86-64 Details for tenforty-2025.13-cp314-cp314-macosx_10_15_x86_64.whl
tenforty-2025.13-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details for tenforty-2025.13-cp313-cp313-musllinux_1_2_x86_64.whl
tenforty-2025.13-cp313-cp313-musllinux_1_2_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARM64 Details for tenforty-2025.13-cp313-cp313-musllinux_1_2_aarch64.whl
tenforty-2025.13-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details for tenforty-2025.13-cp313-cp313-manylinux_2_28_x86_64.whl
tenforty-2025.13-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details for tenforty-2025.13-cp313-cp313-manylinux_2_28_aarch64.whl
tenforty-2025.13-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for tenforty-2025.13-cp313-cp313-macosx_11_0_arm64.whl
tenforty-2025.13-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details for tenforty-2025.13-cp313-cp313-macosx_10_13_x86_64.whl
tenforty-2025.13-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details for tenforty-2025.13-cp312-cp312-musllinux_1_2_x86_64.whl
tenforty-2025.13-cp312-cp312-musllinux_1_2_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARM64 Details for tenforty-2025.13-cp312-cp312-musllinux_1_2_aarch64.whl
tenforty-2025.13-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details for tenforty-2025.13-cp312-cp312-manylinux_2_28_x86_64.whl
tenforty-2025.13-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details for tenforty-2025.13-cp312-cp312-manylinux_2_28_aarch64.whl
tenforty-2025.13-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for tenforty-2025.13-cp312-cp312-macosx_11_0_arm64.whl
tenforty-2025.13-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details for tenforty-2025.13-cp312-cp312-macosx_10_13_x86_64.whl
tenforty-2025.13-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details for tenforty-2025.13-cp311-cp311-musllinux_1_2_x86_64.whl
tenforty-2025.13-cp311-cp311-musllinux_1_2_aarch64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ ARM64 Details for tenforty-2025.13-cp311-cp311-musllinux_1_2_aarch64.whl
tenforty-2025.13-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details for tenforty-2025.13-cp311-cp311-manylinux_2_28_x86_64.whl
tenforty-2025.13-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details for tenforty-2025.13-cp311-cp311-manylinux_2_28_aarch64.whl
tenforty-2025.13-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for tenforty-2025.13-cp311-cp311-macosx_11_0_arm64.whl
tenforty-2025.13-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details for tenforty-2025.13-cp311-cp311-macosx_10_12_x86_64.whl
tenforty-2025.13-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details for tenforty-2025.13-cp310-cp310-musllinux_1_2_x86_64.whl
tenforty-2025.13-cp310-cp310-musllinux_1_2_aarch64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ ARM64 Details for tenforty-2025.13-cp310-cp310-musllinux_1_2_aarch64.whl
tenforty-2025.13-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details for tenforty-2025.13-cp310-cp310-manylinux_2_28_x86_64.whl
tenforty-2025.13-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details for tenforty-2025.13-cp310-cp310-manylinux_2_28_aarch64.whl
tenforty-2025.13-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for tenforty-2025.13-cp310-cp310-macosx_11_0_arm64.whl
tenforty-2025.13-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details for tenforty-2025.13-cp310-cp310-macosx_10_12_x86_64.whl

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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Security 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.

Select from 37 files

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 log

A 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.

Release history Release notifications | RSS feed

This release

2025.13 This release

37 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page