Skip to main content

theoryforge (Python) theoryforge hex logo

Systematic theory development: a rigorous, reproducible workflow for building, developing and testing scientific theories. This is the Python twin of the R package of the same name, and the two return identical results.

The rendered documentation site, with the API reference and worked guides, is at https://pablobernabeu.github.io/theoryforge/python/.

Prefer to click rather than install? The interactive web app runs this package in your browser via Pyodide: load a theory, run any operation, and export the visualisation (SVG/PNG) and the Python code to reproduce it.

import theoryforge as tf

# read + check an existing theory
t = tf.read("../fixtures/panic-network.theory.yaml")
t.validate()                       # structural validation against the shared schema
print(t.report("json"))            # 12-item rigour checklist + gate
print(t.diagram("nomological_net"))# Graphviz DOT
# t.render_diagram("nomological_net")  # rendered inline; needs theoryforge[render]
t.redundancy_check()               # lexical jingle-jangle screen

# BUILD a theory programmatically (provenance auto-logged)
b = (tf.new_theory("panic_demo", "A demonstration theory of panic")
       .add_construct("arousal", "Physiological arousal", "bodily signs of sympathetic activation",
                      measurement=["heart_rate", "skin_conductance"], boundary_conditions=["adults"])
       .add_construct("catastrophic_interpretation", "Catastrophic interpretation",
                      "appraisal of bodily sensations as dangerous", measurement=["bsiq"])
       .add_proposition("p1", "arousal", "catastrophic_interpretation", "increases",
                        mechanism="rising arousal is read as evidence of threat")
       .add_prediction("pred1", "higher arousal predicts more catastrophic interpretation",
                       "directional", derives_from=["p1"]))
b.validate(full=True)              # ids are unique and every cross-reference resolves

# DEVELOP: progressive vs degenerating appraisal of an amendment
v1 = tf.read("../fixtures/panic-network.theory.yaml")
v2 = tf.read("../fixtures/panic-network-2026-v2.theory.yaml")
print(v2.appraise_amendment(v1))   # -> {'verdict': 'progressive', ...}

# TEST: operationalised severity + a preregistration document
t.severity()                       # per-prediction risk + computed severity
print(t.preregister())             # markdown prereg

# LITERATURE: map the field, then position the theory against it
corpus = tf.read_corpus("../fixtures/panic-corpus.yaml")
tf.litmap(corpus)                  # keyword co-occurrence, themes, co-citation
t.landscape(corpus)                # -> themes flagged 'under_theorised' / 'crowded' (redundancy risk)
# tf.fetch_corpus("panic disorder theory")  # optional OpenAlex fetch (network call)

The ../fixtures/*.yaml files referenced above are sample theories that live in the project repository; adjust the paths to your own theory files when running the examples.

Install

pip install theoryforge

The optional render extra adds native diagram rendering (render_diagram(), which wraps the DOT views in a graphviz.Source):

pip install "theoryforge[render]"

To work on the package itself, install an editable checkout with the development extras:

pip install -e ".[dev]"

Test

pytest

What the package provides

The deterministic core covers theory-object I/O and validation, the 12-item rigour checklist with its weighted aggregate score and blocker gate, ten diagram exporters and a lexical redundancy screen. The three workflow modes sit on the same object: a BUILDING builder API with auto-logged provenance, the Lakatosian amendment appraisal (DEVELOPMENT), and the operationalised severity rubric with preregistration export (TESTING). The literature layer comprises read_corpus, litmap (keyword co-occurrence, deterministic connected-component themes and co-citation), landscape (which maps a theory and its alternatives onto the themes, flagging under-theorised fronts and redundancy risk), lit_diagram, the network-dependent fetch_corpus OpenAlex adapter, and new_evidence_dois (a deterministic check for candidate DOIs, from any search tool, not yet cited by a theory). compile_sem translates constructs and propositions to lavaan model syntax, and dossier assembles a reviewer-facing audit bundle. Simulation and adapters round the package out: simulate (a deterministic dynamical-system runner over the construct network), render_report (a Quarto report wrapping the dossier), embedding_redundancy (an opt-in, embedder-dependent screen) and osf_push (an OSF deposit adapter, dry-run by default).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

theoryforge-0.5.0.tar.gz (99.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

theoryforge-0.5.0-py3-none-any.whl (39.2 kB view details)

Uploaded Python 3

File details

Details for the file theoryforge-0.5.0.tar.gz.

File metadata

  • Download URL: theoryforge-0.5.0.tar.gz
  • Upload date:
  • Size: 99.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for theoryforge-0.5.0.tar.gz
Algorithm Hash digest
SHA256 1bed11ff53777dc189219df78b64340ec33996fca702a56ec5dde0fbf3210780
MD5 5c855111896ca79a617cf0d4eef77211
BLAKE2b-256 38f8b5d21540b9ee3d2c4537b83da573b0a039749ad0f3ecd248a3177e2a52c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for theoryforge-0.5.0.tar.gz:

Publisher: publish.yml on pablobernabeu/theoryforge

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file theoryforge-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: theoryforge-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 39.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for theoryforge-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 99cc44ef825de2a26236b9aa46c0cc45361e4f4410be29406b309e7005d96878
MD5 f96f7b5c40f469ab5a80ea2be839e3d8
BLAKE2b-256 78ab92078f5785488a84dd5ee5a14bfa7fb750908c37a2265cab1860654bab98

See more details on using hashes here.

Provenance

The following attestation bundles were made for theoryforge-0.5.0-py3-none-any.whl:

Publisher: publish.yml on pablobernabeu/theoryforge

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.6.0

2 files

This release

0.5.0 This release

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

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