📦 PV Circuit Model – Overview
Solar cells are often arranged in a hierarchical network of series and parallel connections. Here's is an example representation of a solar cell modeled using this structure:
To simulate the I–V curve of any photovoltaic (PV) system—whether it is a single cell or a utility-scale array consisting of over 100,000 cells—one simply adds the voltages of components connected in series and the currents of components connected in parallel. This direct hierarchical composition approach is orders of magnitude faster than SPICE-based simulations, which rely on iterative Newton solvers. Moreover, the performance gap grows rapidly as circuit size increases.
PV Circuit Model is a Python library that implements this approach, and we refer to this hierarchical I–V composition method as CurveStack. CurveStack includes several useful numerical tools, such as:
- Adaptive remeshing near a desired operating point (e.g., maximum power point)
- Computation of tight upper and lower bounds on the I–V curve
- High-precision error estimation of derived I–V parameters—often reaching 10 parts-per-million accuracy, even for very large systems
In addition to CurveStack, PV Circuit Model also provides tools to simulate and analyze standard PV measurements (e.g., I–V curves, Suns-Voc), along with workflows for fitting circuit models to experimental data. It also provides built-in functionalities like the dark current due to intrinsic silicon recombination, and luminescence coupling in tandem cells, which make it convenient to do various calculations related to solar cells.
🛠️ Getting Started
-
Install the package in development mode:
pip install -e . -
Run example code You can test the package functionality by executing the example script inside the examples/ directory:
⚙️ Platform Support & Build Requirements
Current Support Status
✅ Windows: Supported (CI-tested on GitHub Actions)
✅ Linux: Supported (CI-tested on GitHub Actions)
✅ macOS (Apple Silicon): Supported (CI-tested on GitHub Actions; OpenMP disabled by default)
Python versions: Tested on Python 3.11, 3.12, 3.13
Build Requirements (Mandatory)
PV Circuit Model includes compiled C++/Cython extensions A native build toolchain must be available at installation time.
- Windows: Microsoft Visual C++ Build Tools (MSVC)
- Linux: A C/C++ compiler toolchain (e.g.
gcc,g++,make) with OpenMP support - macOS: A C/C++ compiler toolchain (e.g. Xcode Command Line Tools) will be required once macOS support is validated Precompiled wheels are not yet provided for all platforms; building from source is currently required.
Validation / Benchmarking
Since v0.2.0, PV Circuit Model calculation outputs are compared to LTspice Version (x64): 24.0.12 as part of the test plan. See test/a05-a10 cases. All I-V curves points agree to within 0.01% (1e-4) and the Pmax agree to within 0.001% (1e-5).
Metadata
Release files for PV-Circuit-Model 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 16.8 MB
Release files / pv_circuit_model-0.6.0-cp313-cp313-win_amd64.whl
| Download URL | pv_circuit_model-0.6.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 592.1 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
758d69f9504ceedb826ba452fd4f0187f3f657b9c80ae0a4408f96dcddf6434b
|
|
BLAKE2b-256 checksum How to use checksums |
05a8a995c796f4218a2c70299b29e77c831c52ca1127fd8e6ae1a20a88adcaee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | pv_circuit_model-0.6.0-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
29ea15734095d83be929ca0bde32a1a6aa39556c911bea8e83ef6b724b9e5563
|
|
BLAKE2b-256 checksum How to use checksums |
58aea03a37cc9d97f077059ce0fddecc5077eadf9fdc66ad90ba11fdc0df50dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pv_circuit_model-0.6.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.13 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
5ca23ea18ea96593f73975a2786dadf54566f59bb42ccda6a14011c1b2c46de4
|
|
BLAKE2b-256 checksum How to use checksums |
6339f255b2bdbbb0c0dc219c523203fb331ac39b9b286029bd9899953bd9f2c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | pv_circuit_model-0.6.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 593.4 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ce97aa66db3fbf25486b52f4eb6d8c0e119b8a686c5ee96ed8759c831cec1a11
|
|
BLAKE2b-256 checksum How to use checksums |
fe89c29506fca172100d9ba48cb6bd14e480fa270dd090ac493363a9625d9ff3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp312-cp312-win_amd64.whl
| Download URL | pv_circuit_model-0.6.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 592.1 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
61693b600a9fd76efe9c1f14115e202ff8fb58019942ecea1f0e47c776bc8390
|
|
BLAKE2b-256 checksum How to use checksums |
70223f8865dfe0415e2cafa48f1d622f6ff7538968c3a2fa23dd8353e40da583
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | pv_circuit_model-0.6.0-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
8ac5abfc1bb3e535d5de37ac9e98af463f449eebf362e38a53b0484a83c4a0ba
|
|
BLAKE2b-256 checksum How to use checksums |
f1095edf6f3a66835599e5c654b7c8852038dd1950ef1634c3dc2ba2964f8650
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pv_circuit_model-0.6.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.12 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
529ac21d7c8f8a4601debd6311baf3b680e7738b0a06831e654f48c06134c819
|
|
BLAKE2b-256 checksum How to use checksums |
ca33e39cd942fd7ebfc09e029bf93a2e71e876bf75a557039fdb23c9184d830a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | pv_circuit_model-0.6.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 594.7 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
54cabb81308ab348224552cbf42b3e42eca8191ff7f306762a00aae13f4ef101
|
|
BLAKE2b-256 checksum How to use checksums |
012523bf3fff27cd5081a6010ad4d7144854dc01020f6352a4295f9590efe244
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp311-cp311-win_amd64.whl
| Download URL | pv_circuit_model-0.6.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 594.3 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
04d5803736e835cbf5f341e2e26b9820ec4cbd281af512b235e35f53fb7cb8a5
|
|
BLAKE2b-256 checksum How to use checksums |
fce67e83abff8f9faef2dfe69e7eb075917fb57be534f8030880af42fd7d8926
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | pv_circuit_model-0.6.0-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
94f36df0d088a85d10dc3cf0389ace3149166c8b344b2d0b5d1691ec738748a8
|
|
BLAKE2b-256 checksum How to use checksums |
b970ea41dfcaff87c31747acf540819070aeae9d434f12e6b87268d9512997fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pv_circuit_model-0.6.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.11 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
19e5dc805b7c2dd87e564f3ba655c01296ccdf6d8be4006ff53d962fe53f15dd
|
|
BLAKE2b-256 checksum How to use checksums |
564a39d8288483fb6c32f8c2773a1a0933e59207ce068bb2ff3372b017b5e655
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logRelease files / pv_circuit_model-0.6.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | pv_circuit_model-0.6.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 597.7 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8d9e0dbfa1d1c71cc27a46e58887433283404a8f92e120d7b0ab5831c6e4a22c
|
|
BLAKE2b-256 checksum How to use checksums |
9ed638d7d742fafe2737d19f2ae0a28487e8d459f12d2ca853552fe045b86077
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Dec 28, 2025.
Transparency logSecurity for PV-Circuit-Model 0.6.0
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 12 files in this release have been uploaded with provenance metadata.
Attestation for pv_circuit_model-0.6.0-cp313-cp313-win_amd64.whl
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 Dec 28, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.