Agent skill

Pathmc

by pymc-labs in pymc-labs/pathmc

Bayesian path analysis (observed-variable SEM) in PyMC. An agent skill from pymc-labs/pathmc.

MITAuto-check passed

Install Pathmc

skills CLI
$ npx skills add pymc-labs/pathmc --skill pathmc -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install pymc-labs/pathmc pathmc --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/pymc-labs/pathmc.git skills-src && mkdir -p .claude/skills && cp -r skills-src/pathmc/skills/pathmc .claude/skills/pathmc && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
pathmc
GitHub stars
132
Token cost
~4k tokens
SKILL.md length
1,210 words
Files
1
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

Bayesian path analysis (observed-variable SEM) in PyMC. An agent skill from pymc-labs/pathmc.

  • Works in 11 steps: pathmc.model(...) returns a PathModel,… → m.do(...) is a structural intervention,… → ate()/cate()/att()/atu() return an… → …
  • The user asks to specify
  • SKILL.md covers Installation, Quick start, Decision table and Gotchas, plus 3 more sections
  • Calls pip

What it does

Pathmc is an agent skill from pymc-labs/pathmc. Bayesian path analysis (observed-variable SEM) in PyMC. Compiles a lavaan-inspired formula DSL into a generative PyMC model, then layers introspection, identification diagnostics, the do() operator, and causal estimands (ATE/CATE/ATT/ATU/prob) on top. Use when the user asks to specify, fit, or query a Bayesian structural causal model; estimate average treatment effects via g-computation; check identification with adjustment sets or the front-door criterion; or simulate panel/longitudinal counterfactuals.

Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Requires Python =3.12, PyMC =6.0.

It works with PyMC. The repository describes itself as: Structural causal models with Bayesian estimation and interventional simulation via a concise DSL. The licence is MIT.

When your agent uses it

  • The user asks to specify
  • Query a Bayesian structural causal model
  • Estimate average treatment effects via g-computation
  • Check identification with adjustment sets

Example prompts

  • “/pathmc”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Requires Python >=3.12, PyMC >=6.0.

Workflow steps

11 steps, taken from the first numbered list in SKILL.md.

  1. pathmc.model(...) returns a PathModel, not a fitted result.
  2. m.do(...) is a structural intervention, not conditioning.
  3. ate()/cate()/att()/atu() return an EstimandResult, not a DoResult.
  4. The DSL is lavaan-*inspired*, not a 1:1 reimplementation.
  5. Prior is re-exported from pymc_extras for convenience.
  6. Panel lag terms are declared in the model spec.
  7. Data-free models have a partial method surface.
  8. PathModel is not in pathmc.__all__ — it's the class returned
  9. adjustment_model() returns an AdjustmentModel facade.
  10. **predictions() / comparisons() / slopes() share one API on
  11. **String columns become treatment-coded categoricals; integers stay

What it can do on your machine

Read from SKILL.md and the folder at commit e3b9467. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • pathmc.pymc-labs.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires Python >=3.12, PyMC >=6.0.

    From compatibility in the SKILL.md frontmatter.

Context cost

Pathmc loads about 4k tokens when it runs. Until then it costs about 130 tokens; SKILL.md has 1,210 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~130
When it runs · the whole SKILL.md, loaded when a task matches
~4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from pymc-labs/pathmc at commit e3b9467, republished under its MIT licence (© pymc-labs). 1,210 words, ~3,977 tokens.

Download SKILL.mdSave it as .claude/skills/pathmc/SKILL.md (or your agent's skills folder).
name
pathmc
description
Bayesian path analysis (observed-variable SEM) in PyMC. Compiles a lavaan-inspired formula DSL into a generative PyMC model, then layers introspection, identification diagnostics, the `do()` operator, and causal estimands (ATE/CATE/ATT/ATU/prob) on top. Use when the user asks to specify, fit, or query a Bayesian structural causal model; estimate average treatment effects via g-computation; check identification with adjustment sets or the front-door criterion; or simulate panel/longitudinal counterfactuals.
compatibility
Requires Python >=3.12, PyMC >=6.0.
license
MIT
metadata.author
drbenvincent
metadata.version
0.1
metadata.homepage
https://github.com/pymc-labs/pathmc
metadata.tags
causal-inference, bayesian, sem, path-analysis, pymc

pathmc

pathmc lets you specify a system of structural equations as a string, compile it to a generative PyMC model, fit with MCMC, and reason about causal effects using the do-operator.

Installation

bash
pip install pathmc
# Optional faster samplers (nutpie, numpyro, jax):
pip install "pathmc[samplers]"

Quick start

python
import pathmc

spec = """
M ~ a*X
Y ~ b*M + c*X
indirect := a*b
"""

m = pathmc.model(spec, data=df)   # returns a PathModel (NOT a fitted result)
m.fit(draws=1000, chains=2)       # MCMC happens here

m.effects_summary()                # labeled coefficients + defined params
m.ate("Y", "X", values=(0, 1))     # average treatment effect via do()
m.adjustment_sets("X", "Y")        # valid backdoor adjustment sets

The DSL is lavaan-inspired:

  • Y ~ X — regression
  • Y ~~ X — residual covariance
  • indirect := a*b — defined parameter
  • a*X — labeled coefficient
  • Transforms: adstock(x, decay=...), logistic_saturation(x, lam=...)
  • Categorical predictors: string columns are treatment-coded automatically; C(region, reference='north', prior='hierarchical') makes the coding explicit

Decision table

NeedUse
Build a model from a spec + datam = pathmc.model(spec, data=df)
Explore the DAG without datam = pathmc.model(spec) (data-free mode)
Inspect causal DAGm.graph()
Inspect structural equations + priorsm.equations()
Inspect priors onlym.priors()
Refine priorsm.set_priors({"beta_Y": Prior(...)})
Prior predictive checkm.sample_prior_predictive()
Run MCMCm.fit(draws=1000, chains=2)
Summarize posteriorsm.summary() or m.effects_summary()
Standardized (stdyx) coefficientsm.standardized()
Path-specific effect (e.g. X -> M -> Y)m.effect("X -> M -> Y")
Posterior predictionsm.predict(...)
Average treatment effectm.ate(outcome, treatment, values=(0, 1))
Conditional ATE (effect modification)m.cate(outcome, treatment, condition={"Z": z0})
ATE on the treated / untreatedm.att(...) / m.atu(...)
Backdoor-adjusted outcome regressionadj = m.adjustment_model("X -> Y") then adj.fit()
Inspect adjustment set / formula before fitadj.adjustment_set, adj.formula (before adj.fit())
Interventional / associational predictionsm.predictions(outcome, set={...})
Interventional contrasts (structural model)m.comparisons(outcome, variable, contrast=(0, 1))
Marginal slopes under interventionm.slopes(outcome, variable)
Same interpret API on adjustment modeladj.comparisons(...), adj.slopes(...), etc.
Probability under interventionm.prob("Y > 0", set={"X": 1})
Manual interventionm.do(set={"X": 1})
Intervene on a categorical levelm.do(set={"region": "south"}), m.ate("Y", "region", values=("north", "south"))
Declare an integer-coded column as labelsY ~ C(store_type)
Counterfactual / time-forward (panel)m.do(set={...}, kind="time-forward")
Adjustment sets for identificationm.adjustment_sets(treatment, outcome)
Yes/no identification checkm.is_identifiable(treatment, outcome)
Front-door identificationm.frontdoor_identifiable(treatment, outcome)
Flag colliders on any path (heuristic; validity is is_valid_adjustment_set)m.collider_warnings(adjust, treatment, outcome)
Enumerate implied conditional independencesm.implied_independences()
Test DAG implications against datam.test_implications()
Falsify the whole DAG (permutation test)m.falsify()
Sensitivity analysis (unmeasured confounding)m.sensitivity(outcome, treatment)
Placebo refutation of an estimated effectm.refute_placebo(outcome, treatment)
Simulate from a fully-specified modelpathmc.simulate(spec, data, params=...)

Gotchas

  1. pathmc.model(...) returns a PathModel, not a fitted result. You must call .fit() separately. model() only parses, builds the DAG, and compiles the PyMC graph — it does not sample.
  2. m.do(...) is a structural intervention, not conditioning. It applies pm.do() graph surgery and forward-simulates from the intervened model, propagating posterior uncertainty through the causal chain (g-computation; Robins, 1986). It is not the same as conditioning on observed values. For typical user-facing queries, prefer the wrappers m.ate(), m.cate(), m.att(), m.atu(), m.prob().
  3. ate()/cate()/att()/atu() return an EstimandResult, not a DoResult. It knows the outcome, so r.mean(), r.hdi(), and r.prob("> 0") need no variable argument, float(r) gives the posterior mean, and printing it shows a tidy summary. m.do(...) returns a DoResult describing the whole system, where accessors still take a variable name (r.mean("Y")).
  4. The DSL is lavaan-inspired, not a 1:1 reimplementation. ~, ~~, :=, and labeled coefficients all work. Latent-variable measurement models (=~) are out of scope in v0.1 — see the user guide for the full operator list.
  5. Prior is re-exported from pymc_extras for convenience. from pathmc import Prior is a shortcut for from pymc_extras.prior import Prior. The canonical reference and list of supported distributions live in pymc_extras.
  6. Panel lag terms are declared in the model spec. Use lag(sales) directly in the DSL and pass panel={"unit": "region", "time": "week"} to pathmc.model(...). pathmc builds the lagged design internally.
  7. Data-free models have a partial method surface. When data=None, graph(), equations(), priors(), adjustment_sets(), is_identifiable(), collider_warnings(), implied_independences() all work. fit(), do(), ate(), cate(), design(), sample_prior_predictive(), test_implications(), falsify(), sensitivity(), refute_placebo() raise RuntimeError until the model is rebuilt with data (and refute_placebo() also needs a prior .fit()).
  8. PathModel is not in pathmc.__all__ — it's the class returned by model(). You don't import it directly; you receive it. Type annotations can use pathmc.PathModel (it is reachable as an attribute) but the public entrypoint is the model() function.
  9. adjustment_model() returns an AdjustmentModel facade. Inspect adj.adjustment_set and adj.formula before calling adj.fit(). An empty set {} is valid when no covariates are needed to block backdoors; if no valid set exists, construction raises (effect not identifiable via backdoor). When several minimal sets exist, pass adjustment_set= explicitly; pathmc does not pick among them. Pass data= when the parent structural model is data-free. Panel models are not supported on the adjustment path. Outcome dispersion priors (sigma_Y, nu_Y, alpha_disp_Y) are inherited from the parent, but coefficient priors are not, because the reduced predictor set can differ: if the parent set a custom beta_Y, pass priors={"beta_Y": ...} to adjustment_model().
  10. predictions() / comparisons() / slopes() share one API on PathModel and AdjustmentModel. On the structural model they use truncated-factorization g-computation; on adjustment_model() they delegate to the reduced outcome equation with estimator="regression_adjustment". Read result.causal: only queries on the designated treatment support a causal reading; slopes or contrasts on adjustment covariates are interventional on the fitted surface, not causal effects of those covariates. See the user guide page Predictions, Comparisons, and Slopes.
  11. String columns become treatment-coded categoricals; integers stay continuous. Y ~ region on a string column creates beta_Y_region indexed by level name (coordinate Y_region_levels), with the first sorted level as reference. Wrap integer codes in C(...) to treat them as labels. The level set is frozen at model() time: do(), ate(), prob(), and predict(data=...) accept labels, and an unseen label raises rather than re-inferring the coding. Categorical interactions, transforms, outcomes, and panel models are rejected with an explanatory error.
Show full SKILL.md (341 more words)Show less

Capabilities and boundaries

Agents using pathmc can:

  • Write spec strings in the DSL (regressions, residual covariances, defined parameters, labeled coefficients, transforms, categorical predictors via inference or C(...)).
  • Configure custom priors via Prior objects from pymc_extras.
  • Run fit() with PyMC's NUTS sampler (or nutpie / numpyro via the samplers extra).
  • Query ate/cate/att/atu/prob/effect with full posterior uncertainty.
  • Fit a DAG-derived backdoor adjustment model via adjustment_model() when a single treatment-outcome query suffices.
  • Run predictions() / comparisons() / slopes() on structural PathModel or fitted AdjustmentModel objects for interpret-style queries (check result.causal on adjustment models).
  • Check identification (adjustment_sets, is_identifiable, frontdoor_identifiable, collider_warnings).
  • Test the DAG's conditional-independence implications against data (test_implications).
  • Falsify the whole DAG with a permutation-based test (falsify), which grades the graph against randomly-rewired competitors (a port of dowhy's gcm.falsify_graph).
  • Build hierarchical panel models with random intercepts/slopes and use lag() terms.
  • Run sensitivity analysis to quantify robustness to unmeasured confounding.
  • Refute an estimated effect with a Bayesian placebo treatment (refute_placebo): permute the treatment, re-fit, and pool the per-permutation ATE posteriors through a hierarchical normal-normal null model whose null predictive should straddle zero. Upgrades dowhy's placebo_treatment_refuter with a calibrated z_cal/p_tail for the real effect.

Out of scope (do not attempt):

  • Latent variables / SEM measurement models (the =~ operator). Out of scope in v0.1; on the post-v1 roadmap.
  • Categorical labels in the interpret API (predictions(), comparisons(), slopes(), att(), atu(), effect()). Use m.do(set={"region": "south"}), m.ate("Y", "region", values=(a, b)), m.prob(...), or m.cate(..., condition={"region": ...}) instead.
  • Categorical outcomes, interactions, transforms, or panel models. Only cross-sectional treatment / cell-means coding of predictors is supported.
  • Editing the compiled pm.Model object directly. pathmc owns the graph; mutating it bypasses the introspection layer and breaks do() propagation. To customize, change the spec or pass priors= / families= to model().

Patterns

Inspect before sampling (data-free DAG exploration)
python
m = pathmc.model("""
    M ~ a*X
    Y ~ b*M + c*X
    indirect := a*b
""")
m.graph()                      # DAG plot
m.equations()                  # structural equations + priors
m.adjustment_sets("X", "Y")    # what to adjust for
m.is_identifiable("X", "Y")    # can we estimate the effect at all?
Standard fit-and-query workflow
python
m = pathmc.model(spec, data=df)
m.fit(draws=1000, chains=2)
m.effects_summary()                          # labeled coefs
m.ate("Y", "X", values=(0, 1))               # ATE
m.cate("Y", "X", condition={"Z": 1})         # CATE | Z=1
m.test_implications()                        # DAG vs data check
Backdoor adjustment model
python
m = pathmc.model(spec, data=df)              # structural DAG + data
adj = m.adjustment_model("X -> Y")           # inspect before fit
adj.adjustment_set                           # validated backdoor set
adj.formula                                  # reduced outcome equation
adj.fit(draws=1000, chains=2)
adj.ate(values=(0, 1))                       # outcome-regression standardization
adj.comparisons(comparison="lift")             # same API as PathModel
adj.slopes(wrt="X")                            # defaults to designated treatment

When several minimal adjustment sets exist, pass adjustment_set= explicitly. When the structural model has no data, pass data= to adjustment_model().

Panel model
python
import pathmc
m = pathmc.model(
    "sales ~ b*price + a*lag(sales) + trend",
    data=df,
    panel={"unit": "region", "time": "week"},
    pooling="partial",
)
m.fit()
m.do(set={"price": 1.5}, kind="time-forward")
Custom priors
python
from pathmc import Prior   # re-export of pymc_extras.prior.Prior

m = pathmc.model(
    spec,
    data=df,
    priors={
        "beta_Y": Prior("Normal", mu=0, sigma=2),
        "sigma_Y": Prior("HalfNormal", sigma=1),
    },
)
m.priors()                  # confirm overrides applied
m.sample_prior_predictive() # check the priors imply plausible data

Resources

© pymc-labs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in pathmc/skills/pathmc of pymc-labs/pathmc.

Open the folder on GitHubat commit e3b9467

Compare with similar skills

Pathmc next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Pathmc compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pathmc this skillpymc-labs/pathmc132—~4kAutomated safety check: PassMIT
Statistical Analysisspacering-net/codeg3.8k3 repos~5kAutomated safety check: PassMIT
Bayesian Workflowbrycewang-stanford/Auto-Empirical-Research-Skills4.5k—~3.5kAutomated safety check: PassMIT
Running Placebo Analysispymc-labs/CausalPy1.2k1 repos~442Automated safety check: PassApache-2.0
PyMC Bayesian Modelingdavila7/claude-code-templates32k12 repos~3.9kAutomated safety check: PassMIT
Feature Explorationpymc-labs/CausalPy1.2k—~442Automated safety check: PassApache-2.0

Similar skills

  • Statistical Analysis

    spacering-net/codeg

    Guided statistical analysis for research data - test selection, assumption checking, effect sizes, power analysis, Bayesian alternatives, and APA-formatted reporting.

    3.8k GitHub starsUsed in 3 repos~5k tokens
    Data & AnalyticsAuto-check passed
  • Bayesian Workflow

    brycewang-stanford/Auto-Empirical-Research-Skills

    Opinionated Bayesian modeling workflow with PyMC and ArviZ. An agent skill from brycewang-stanford/Auto-Empirical-Research-Skills.

    4.5k GitHub stars~3.5k tokensUpdated 2 days ago
    Data & AnalyticsAuto-check passed
  • Running Placebo Analysis

    pymc-labs/CausalPy

    Performs placebo-in-time sensitivity analysis with hierarchical null model and optional Bayesian assurance.

    1.2k GitHub starsUsed in 1 repo~442 tokens
    Auto-check passed
  • PyMC Bayesian Modeling

    davila7/claude-code-templates

    Builds, fits, checks and compares Bayesian models in PyMC, from priors and NUTS sampling to variational inference, LOO and WAIC comparison, and diagnostics.

    32k GitHub starsUsed in 12 repos~3.9k tokens
    Data & AnalyticsAuto-check passed
  • Feature Exploration

    pymc-labs/CausalPy

    Explore unfamiliar APIs, libraries, or implementation behavior with minimal reproducible examples and documented findings.

    1.2k GitHub stars~442 tokensUpdated yesterday
    Auto-check passed
  • Fit, summarize, plot, and interpret a chosen CausalPy experiment.

    1.2k GitHub starsUsed in 1 repo~1.3k tokens
    Data & AnalyticsAuto-check passed

More from pymc-labs/pathmc

  • Great Docs

    pymc-labs/pathmc

    Generate documentation sites for Python packages with Great Docs.

    132 GitHub stars~2.7k tokensUpdated 5 days ago
    Auto-check passed
  • Author Skills

    pymc-labs/pathmc

    Author, configure, and distribute Agent Skills for a Great Docs site.

    132 GitHub stars~2.6k tokensUpdated 5 days ago
    Auto-check passed
  • Configure Site

    pymc-labs/pathmc

    Configure a Great Docs documentation site through great-docs.yml.

    132 GitHub stars~2k tokensUpdated 5 days ago
    Auto-check passed
  • Revise Docstrings

    pymc-labs/pathmc

    Review and improve Python docstrings for Great Docs API reference generation.

    132 GitHub stars~2.3k tokensUpdated 5 days ago
    Auto-check passed
  • Write User Guide

    pymc-labs/pathmc

    Write and maintain narrative user-guide pages for a Great Docs site.

    132 GitHub stars~2.3k tokensUpdated 5 days ago
    Auto-check passed
  • Fix Bug

    pymc-labs/pathmc

    Autonomous bug-fix workflow. An agent skill from pymc-labs/pathmc.

    132 GitHub stars~4.6k tokensUpdated 5 days ago
    Auto-check passed

Works with

Questions about Pathmc

What does Pathmc do?

Bayesian path analysis (observed-variable SEM) in PyMC. An agent skill from pymc-labs/pathmc. Pathmc is an agent skill from pymc-labs/pathmc. Bayesian path analysis (observed-variable SEM) in PyMC.

When should I use Pathmc?

Pathmc fits situations like: the user asks to specify; query a Bayesian structural causal model; estimate average treatment effects via g-computation; check identification with adjustment sets.

How do I install Pathmc in Claude Code?

Run `npx skills add pymc-labs/pathmc --skill pathmc -a claude-code`. Or copy the skill folder (pathmc/skills/pathmc in pymc-labs/pathmc) into .claude/skills/pathmc in your project. Claude Code loads it when a task matches its description.

How do I install Pathmc in Codex?

Run `npx skills add pymc-labs/pathmc --skill pathmc -a codex`. Or copy the skill folder (pathmc/skills/pathmc in pymc-labs/pathmc) into .agents/skills/pathmc in your project. Codex loads it when a task matches its description.

Can I use Pathmc in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pymc-labs/pathmc --skill pathmc -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pathmc, .gemini/skills/pathmc, .github/skills/pathmc and .opencode/skills/pathmc in your project.

What does Pathmc need to run?

Going by SKILL.md and its folder, Pathmc needs the command-line tools its instructions call (pip). Our summary lists: Python 3. Compatibility (from SKILL.md): Requires Python >=3.12, PyMC >=6.0..

Does Pathmc access the network?

SKILL.md names 1 domain. As links in the text: pathmc.pymc-labs.com. This is read from the text; nothing was executed.

Is Pathmc safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Pathmc use?

Pathmc is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pathmc use?

About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pathmc?

Skills that share tags, products or a category with Pathmc: Statistical Analysis (spacering-net/codeg, 3.8k stars), Bayesian Workflow (brycewang-stanford/Auto-Empirical-Research-Skills, 4.5k stars), Running Placebo Analysis (pymc-labs/CausalPy, 1.2k stars) and PyMC Bayesian Modeling (davila7/claude-code-templates, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pathmc?

pymc-labs (a GitHub organization) maintains it in pymc-labs/pathmc, which has 132 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 2, 2026.

Source: pymc-labs/pathmc on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.