Skip to main content

cande-wrapper

Pipeline Coverage PyPI - Python Version ![PyPI - License](https://img.shields.io/pypi/l/cande-wrapper) [![PyPI Downloads](https://static.pepy.tech/badge/cande-wrapper/month)](https://pepy.tech/projects/cande-wrapper)

Python wrapper for the CANDE (Culvert ANalysis and DEsign) finite element engine.

The CANDE-2025 Fortran source is compiled via f2py into a native Python extension module, allowing direct calls from Python without subprocess overhead or DLL wrappers.

Source · PyPI


Installation

Install from PyPI (includes pre-built wheels for Windows and Linux):

pip install cande-wrapper

For development (requires gfortran):

pip install -e ".[dev]"

Build prerequisites (development only)

Dependency Version Purpose
Python >= 3.10 Runtime
gfortran any recent Compiles the CANDE Fortran engine
NumPy >= 1.26 f2py extension building and runtime
Meson >= 1.1 Build system
Ninja any recent Build backend for Meson
Installing gfortran on Windows

Via MSYS2:

# In MSYS2 terminal
pacman -S mingw-w64-x86_64-gcc-fortran

# Add to PATH (PowerShell)
$env:PATH += ";C:\msys64\mingw64\bin"

Or via conda:

conda install -c conda-forge gfortran

Quick Start

from cande_wrapper import CandeEngine

engine = CandeEngine(work_dir="path/to/my/models")
result = engine.run("EX1")  # reads EX1.cid, writes EX1.out
print(result.output_text)

Vehicle definitions

Standard AASHTO design vehicles are available for live-load analysis:

from cande_wrapper import Vehicle

hs20 = Vehicle.hs20()       # AASHTO HS-20 (72 kip)
hs25 = Vehicle.hs25()       # AASHTO HS-25 (90 kip)
tandem = Vehicle.tandem()   # AASHTO design tandem (50 kip)
cooper = Vehicle.cooper_e80()  # Cooper E-80 railroad (160 kip)

Custom vehicles can be defined with arbitrary axle configurations:

from cande_wrapper import Vehicle, WheelFootprint, Axle

truck = Vehicle(
    name="Custom Truck",
    footprint=WheelFootprint(length=12.0, width=24.0, spacing=84.0),
    axles=[
        Axle(weight=12000, spacing=0),
        Axle(weight=40000, spacing=180),
        Axle(weight=40000, spacing=54),
    ],
)
print(f"{truck.name}: {truck.total_weight/1000:.0f} kip")

CANDE Input Files

CANDE reads .cid input files (CANDE Input Data). These are fixed-format text files with sections:

  • A-1: Master control line (analysis/design mode, solution level, title)
  • A-2: Pipe type and element counts
  • B-*: Pipe material properties
  • C-*: Mesh, node, and element definitions
  • D-*: Soil properties and load steps
  • STOP: End-of-problem marker

Multiple problems can be run back-to-back in a single .cid file, each terminated by STOP.

An example input file is included at tests/example_data/MGK-IO.cid.

Output Files

After running engine.run("prefix"), these files are created in the working directory:

File Description
prefix.out Main analysis output report
prefix.log Engine log messages
prefix.ctc Table of contents for the output
prefix_MeshGeom.xml Mesh geometry (for visualization)
prefix_MeshResults.xml Mesh results (for visualization)
prefix_BeamResults.xml Beam element results
prefix_PLOT1.dat Plot data file 1
prefix_PLOT2.dat Plot data file 2

The CandeResult object returned by engine.run() gives convenient access to the main output files:

result = engine.run("EX1")
print(result.output_file)   # Path to EX1.out
print(result.log_file)      # Path to EX1.log
print(result.output_text)   # Full contents of EX1.out

Testing

pytest -v                    # unit tests (no build required)
pytest -m integration -v     # integration tests (requires build)
pytest -m "" -v              # all tests

Troubleshooting

gfortran: command not found

gfortran is not on your PATH. Verify with gfortran --version. On Windows, ensure the MSYS2/MinGW or conda bin directory is in your PATH.

Linker errors about missing symbols

The meson.build file lists Engine source files explicitly. If you see unresolved symbols like plasti_ or prhero_, the corresponding .f file needs to be added to the engine_sources list in meson.build.

ImportError: CANDE Fortran extension not found

The package was imported but the compiled extension (_cande.pyd / _cande.so) was not found. Rebuild with:

pip install -e . --no-build-isolation

Large memory usage

The CANDE engine statically allocates ~320 MB for the stiffness matrix (REAL*8 A(20000,2000) in system.fi). This is normal for FEA solvers and is mapped as virtual memory.

Release files for cande-wrapper 0.2.1

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

Source distribution (sdist)

Source distribution for cande-wrapper 0.2.1
File Size Uploaded
cande_wrapper-0.2.1.tar.gz 402.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for cande-wrapper 0.2.1
File
cande_wrapper-0.2.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
cande_wrapper-0.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
cande_wrapper-0.2.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
cande_wrapper-0.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
cande_wrapper-0.2.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
cande_wrapper-0.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
cande_wrapper-0.2.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
cande_wrapper-0.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details

Total release size: 13.3 MB

Release files / cande_wrapper-0.2.1.tar.gz

Download URL cande_wrapper-0.2.1.tar.gz
Size 402.2 kB
Tags Source
SHA-256 checksum
How to use checksums
f1dddab672aab2f9cd8bbd7f2e854d3853ea74953bf1e1a7ad9652ff6babb4d0
BLAKE2b-256 checksum
How to use checksums
9de2f673e1df1321827d7d0951500199309bdf3b7b86fc7283a3d6520f40f470
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / cande_wrapper-0.2.1-cp313-cp313-win_amd64.whl

Download URL cande_wrapper-0.2.1-cp313-cp313-win_amd64.whl
Size 1.9 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
a48716028929ffe546ea5e1737eb79cfc2766d9f1f256785622749dd6c75957f
BLAKE2b-256 checksum
How to use checksums
4acbbbc2e4a97e6d467b3d164a9c28478265466e78c48ac09cca6d92d4c115c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / cande_wrapper-0.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cande_wrapper-0.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.3 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
083da47191ba329685367fd79aa95340f7ab1d3dac1e71ed2149bfb424d6ac1c
BLAKE2b-256 checksum
How to use checksums
34f6c63ee6eb2e655073b52002e66df6a1eeaff40097cee1cb9a835b8184341e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / cande_wrapper-0.2.1-cp312-cp312-win_amd64.whl

Download URL cande_wrapper-0.2.1-cp312-cp312-win_amd64.whl
Size 1.9 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
19020402a98bcffb0e7933516756995d10fafa9eee0d0c78e1aa785d54078bb7
BLAKE2b-256 checksum
How to use checksums
cb951dd91c0603875946b11f1054e1ac67141ca13b3ca888dc6c8026623452b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / cande_wrapper-0.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cande_wrapper-0.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.3 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d0f278430d2d5e3b00a4af87400d92290ff5042c661a67c9c1abb290b3c4ba0f
BLAKE2b-256 checksum
How to use checksums
6be46a588ae6a1e9f39da0618a4409c9e8e2fd5788d7c9c6c159e08811d8d54c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / cande_wrapper-0.2.1-cp311-cp311-win_amd64.whl

Download URL cande_wrapper-0.2.1-cp311-cp311-win_amd64.whl
Size 1.9 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
49931bb322ebf4e4febdf991fb1c07a03f68cb84e9bd56f9203b773c5c74afc8
BLAKE2b-256 checksum
How to use checksums
22025d3f0ceebfbb0e5f912287bf26c8cca522478b7c1e4319a2942cd6546b4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / cande_wrapper-0.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cande_wrapper-0.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.3 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
2433970bd64057a1dcf7f0b94b3a598eff24784df776b77e383808fb83a88df3
BLAKE2b-256 checksum
How to use checksums
d97ebcf254d4c818b4740ec607393cdbf99885dd2313a26c3cbd72f116b6ba71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / cande_wrapper-0.2.1-cp310-cp310-win_amd64.whl

Download URL cande_wrapper-0.2.1-cp310-cp310-win_amd64.whl
Size 1.9 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
34c8fc4469263a25d90c176be545bfb2c2a3f2b24a8b8112edd87c00b28de47b
BLAKE2b-256 checksum
How to use checksums
86efffc5c2acb3579cca2d887f4061747cca8ea54401467639e1946ef3c575de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / cande_wrapper-0.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cande_wrapper-0.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.3 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
1c8468f943e147b02763305bc28623d4c37d5d25115fe394d78143d6910b8890
BLAKE2b-256 checksum
How to use checksums
85dafa49934206b35b2148c954f0039a07f6f7a06d7bd7281827d8cbaa5d48c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release history Release notifications | RSS feed

This release

0.2.1 This release

9 release files

0.2.0

9 release files

0.1.6

6 release files

0.0.3

2 release files

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