Skip to main content

psforge-grid

PyPI version Python versions Tests License: Dual

Hub data model for the psforge power system analysis ecosystem

Core data models and I/O for power system analysis with LLM-friendly design.

Quick Start

pip install psforge-grid
from psforge_grid import System

# Load from any supported format
system = System.from_raw("ieee14.raw")              # PSS/E RAW
system = System.from_matpower("case14.m")            # MATPOWER
system = System.from_dss("network.dss")              # OpenDSS
system = System.from_json("ieee14.psfg.json")        # psforge JSON
system = System.from_file("case14.m")                # Auto-detect

# Export to any format
system.to_raw("output.raw")
system.to_matpower("output.m")
system.to_json("output.psfg.json")                   # Human/LLM-friendly
system.to_file("output.m")                           # Auto-detect

# Explore the system
print(f"Buses: {len(system.buses)}, Branches: {len(system.branches)}")
print(system.to_summary())
# Or use the CLI
psforge-grid info ieee14.raw
psforge-grid show case14.m buses -f json

Why psforge-grid?

Feature psforge-grid Others
LLM-friendly output Built-in JSON/summary formats Manual formatting
Educational design Rich docstrings, clear naming Varies
Type hints Complete type annotations Often missing
CLI included Yes, with multiple output formats Usually separate
Multi-format I/O 5 formats: RAW (v33/v34), MATPOWER, OpenDSS, psforge JSON Usually single format

Overview

psforge-grid serves as the Hub of the psforge ecosystem, providing:

  • Common data classes (System, Bus, Branch, Generator, GeneratorCost, Load, Shunt)
  • Diagram data (DiagramData, BusPosition, BranchRoute) for single-line diagram layouts and GIS coordinates
  • Parsers & Writers for 7 formats (see Supported Formats)
  • Factory pattern: ParserFactory / WriterFactory for format-agnostic I/O
  • Scenario loading: Base case + differential modifications for N-1 / parametric studies
  • OPF data support (GeneratorCost with polynomial and piecewise-linear cost models)
  • Zero-sequence impedance and generator machine parameters for fault/stability analysis

Supported Formats

Format Parse Write Extension Round-trip
PSS/E RAW (v33/v34) Yes Yes (v33) .raw Yes
MATPOWER Yes Yes .m Yes
OpenDSS Yes Yes .dss Yes
psforge JSON Yes Yes .psfg.json Yes
psforge Scenario Yes Yes .psfg.json -
PSS/E RAW format details

PSS/E RAW

The parser supports core power flow data for AC power flow analysis:

Section v33 v34 Notes
Case Identification Yes Yes Base MVA, system info
Bus Data Yes Yes All bus types (PQ, PV, Slack, Isolated)
Load Data Yes Yes Constant power loads
Fixed Shunt Data Yes Yes Capacitors and reactors
Generator Data Yes Yes P, Q, voltage setpoint, Q limits
Branch Data Yes Yes Transmission lines
Transformer Data Yes Yes Two-winding, magnetizing admittance, is_xfmr flag

Not yet supported: Area/Zone/Owner Data, DC lines, FACTS, Switched Shunts, Three-winding Transformers.

Test data sources (terms for each are recorded in tests/fixtures/NOTICE.md):

MATPOWER format details

MATPOWER

Supports MATPOWER .m files, including pglib-opf benchmark cases.

Section Notes
Bus Data (13 columns) All bus types, Vmin/Vmax for OPF
Generator Data (10 columns) Pmin/Pmax, Qmin/Qmax
Branch Data (13 columns) Including angmin/angmax for OPF
Generator Cost Data Polynomial (model=2) and piecewise-linear (model=1)
system = System.from_matpower("pglib_opf_case14_ieee.m")
for cost in system.generator_costs:
    print(cost.to_description())
    # "Generator Cost (polynomial, degree 2): 0.0430 * P^2 + 20.00 * P + 0.00"
OpenDSS format details

OpenDSS

Supports OpenDSS .dss script files via opendssdirect.py.

DSSWriter converts per-unit → physical units:

System Element OpenDSS Element
Swing bus New Circuit (Vsource)
Branch (line) New Line
Branch (transformer) New Transformer
Generator New Generator
Load / Shunt New Load / New Capacitor / New Reactor

Fault study mode (write_fault_study()): Y-circuit transformer model with Yg-Delta grounding for zero-sequence analysis.

DSSParser compiles .dss files with OpenDSS and extracts data via API.

psforge JSON format details (.psfg.json)

psforge JSON

Human/LLM-friendly native format with explicit metadata, distinct from pglib-uc JSON.

  • Extension: .psfg.json
  • Metadata: "format": "psforge-grid", "version": "1.0"
  • Field names: snake_case with unit suffixes (_pu, _mw, _kv)
  • Compact output: None fields omitted by default
# Export / Import
system.to_json("ieee14.psfg.json")
system = System.from_json("ieee14.psfg.json")

# Include all fields (with null values)
system.to_json("full.psfg.json", omit_none=False)

Scenario loading (base case + modifications)

Define N-1 contingencies or parametric studies with minimal data:

from psforge_grid.io import load_scenarios, write_scenario

# Define scenarios
write_scenario(
    "contingencies.psfg.json",
    base_case="ieee14.psfg.json",
    scenarios=[
        {
            "name": "N-1_Line_1-5",
            "modifications": [
                {"target": "branches", "match": {"from_bus": 1, "to_bus": 5},
                 "set": {"status": 0}}
            ]
        },
    ],
)

# Load: returns {"base": System, "N-1_Line_1-5": System, ...}
scenarios = load_scenarios("contingencies.psfg.json")

LLM Affinity Design

"Pickaxe in the Gold Rush" - psforge is designed for seamless LLM integration.

Feature Description
Explicit Units Field names include units (voltage_pu, power_mw)
Semantic Status Enum-based status annotations (VoltageStatus.LOW)
Self-Documenting Rich docstrings explaining physical meaning
to_description() Human/LLM-readable output methods
bus = system.get_bus(14)
print(bus.to_description())
# Output: "Bus 14 (LOAD_BUS): 13.8 kV, PQ type"

CLI for LLM Integration

psforge-grid info ieee14.raw              # Table format
psforge-grid info ieee14.raw -f json      # JSON for API/LLM
psforge-grid info ieee14.raw -f summary   # Compact for tokens
psforge-grid show ieee14.raw buses -f json
psforge-grid validate ieee14.raw --strict

Output Formats: table (default), json, summary, csv

See CLAUDE.md for detailed AI development guidelines.

Installation

pip install psforge-grid

# Or install from source
pip install -e .

Development

See docs/development.md for full setup instructions (pre-commit hooks, editor config, etc.).

pip install -e ".[dev]"     # Install dev dependencies
pytest tests/ -v            # Run tests
ruff check src/ tests/      # Lint
mypy src/                   # Type check

psforge Ecosystem (Hub & Spoke Architecture)

                    ┌──────────────────────┐
                    │    psforge-grid      │
                    │   (Hub: Data & I/O)  │
                    └──────────┬───────────┘
                               │
     ┌─────────────┬───────────┼───────────┬─────────────┐
     │             │           │           │             │
┌────▼────┐  ┌────▼────┐ ┌────▼─────┐ ┌───▼────┐  ┌────▼────┐
│ psforge │  │ psforge │ │ psforge- │ │psforge-│  │ psforge │
│  -flow  │  │ -fault  │ │stability │ │schedule│  │ -turbo  │
│ (Power  │  │ (Fault  │ │(Transient│ │ (Unit  │  │  (C++   │
│  Flow)  │  │Analysis)│ │Stability)│ │Commit.)│  │ Engine) │
└─────────┘  └─────────┘ └──────────┘ └────────┘  └─────────┘
Package Description Status
psforge-grid (this) Core data models, parsers, and CLI Active
psforge-flow AC power flow (Newton-Raphson) Active
psforge-fault Short-circuit fault analysis Active
psforge-stability Transient stability analysis Planned
psforge-schedule Unit commitment optimization Planned
psforge-turbo High-performance C++ engine (Phase 2) Frozen

All packages are developed and maintained by Manabe Lab LLC.

Contributing

To maintain the ability to offer commercial licenses and ensure the long-term sustainability of this project, we do not accept external code contributions (Pull Requests) at this time.

We still highly value your feedback — please feel free to open Issues for bug reports and feature suggestions.

License

This software is provided under a dual-licensing model:

  • Individual & Educational Use: MIT License (students, researchers, non-commercial educational purposes)
  • Commercial & Business Use: Requires a Commercial License

This covers the software — src/, the test code, and this documentation — which is what the published package contains. It does not cover the third-party test data in tests/fixtures/, which is other people's copyright and carries its own terms (CC BY 4.0, BSD 3-Clause, and the Texas A&M repository's terms). Those licences already permit commercial use and each requires its attribution to stay with the file; the terms are recorded file by file in tests/fixtures/NOTICE.md.

See LICENSE for details.


Developed by Manabe Lab LLC

Release files for psforge-grid 0.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for psforge-grid 0.10.0
File Size Uploaded
psforge_grid-0.10.0.tar.gz 133.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for psforge-grid 0.10.0
File Interpreter ABI Platform
psforge_grid-0.10.0-py3-none-any.whl Python 3 none any Details

Total release size: 246.5 kB

Release files / psforge_grid-0.10.0.tar.gz

Download URL psforge_grid-0.10.0.tar.gz
Size 133.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b1d37b88c872b5061c9416d5a057bb3b4c8987a938885d862a166040eb3796d7
BLAKE2b-256 checksum
How to use checksums
e16d33dec51a3f15ddfe3c0f71b568b14d9f66e8df4b20c9cf5b17b124aca47d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 16, 2026.

Transparency log

Release files / psforge_grid-0.10.0-py3-none-any.whl

Download URL psforge_grid-0.10.0-py3-none-any.whl
Size 112.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
231e343cc723040423ddd22b1b0a5b9d6f57f11b9aebe74c41c0bc5fd37947af
BLAKE2b-256 checksum
How to use checksums
2098c7e8cd6cd2a7ba8253ee58401f664c7ec234aeaaf3a32e04e63e1c76a83d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.10.0 This release

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release 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