Pipeline Elements
The basic building block is a pipeline element. Any pipeline element accepts a set of parameter values (possibly empty) and returns another set of parameter values. The full pipeline is built by calling each element in series to yield the complete parameter set. There are five types of pipeline element:The pipeline element types and built-in calculations listed here are not exhaustive. See the API reference for full details.
- Takes input parameters from the parameter dictionary
- Performs computation
- Returns output parameters that become available to subsequent elements
To assemble and submit a pipeline programmatically, see Pipelines → Overview in the Documentation tab.
Naming conventions
Clear Naming
Use descriptive parameter names with units:
"Electrode capacity [A.h]" not "cap"Unit Consistency
Be explicit about unit conversions; use SI units internally
Built-in Calculations
Geometry & Capacity
Electrode geometry, mass, capacity, cyclable lithium, and microstructure
Thermal Properties
Heat capacity, Arrhenius temperature dependence, and thermal modeling
Piecewise Interpolants
Smooth piecewise functions for SOC and temperature-dependent parameters
Handling pipeline failures
Pipeline elements run sequentially. When an element fails, the pipeline reports an error and any downstream elements stop. The cause is recorded on the element as anerror_code:
Resubmitting a failed pipeline
If the first failed element haserror_code = SUBMISSION_FAILED, you can resubmit the pipeline. Resubmission resets that element and continues execution from where the pipeline stopped — completed elements are not re-run.
- Studio
- REST API
Open the pipeline detail page. When the lead failure is a submission error, a Resubmit button appears on the failed-element alert at the top of the page. Click it to retry the pipeline in place.
Data Fitting
The pipeline abstraction also powers data fitting—estimating unknown parameters by comparing model predictions to experimental data. ADataFit element wraps a pipeline with an optimization loop:
- The optimizer proposes parameter values
- The pipeline runs the model with those values
- The objective computes how well predictions match data
- This repeats until the best-fit parameters are found
Data Fitting (theory)
Cost functions, identifiability, regularization, and other theory.
Data Fitting (how-to)
Configure and submit data fits with
ionworks-schema + ionworks-api.Pipeline errors
When a pipeline element fails, Studio shows the element in a Failed state with an error message and a machine-readable error code. Hover the status chip in any pipeline list to see the code, and expand the failed element to read the full message. The same fields are returned by the API on failed jobs and pipeline elements:Error codes
Use theerror_code field to branch on failure type without parsing error strings:
Catching configuration errors in Python
Theionworkspipeline package exposes ParameterNotFoundError so you can catch missing-parameter failures without inspecting tracebacks or message strings. It subclasses KeyError, so existing except KeyError handlers continue to work.
ParameterNotFoundError subclasses KeyError and carries no custom attributes. The message — available via str(err) or err.args[0] — is the full text produced by pybamm’s parameter lookup, e.g. "'Negative electrode loading [A.h.cm-2]' not found. Best matches are [...]". It names the missing key and suggests close matches, which is useful when building diagnostic UIs or auto-correcting parameter sets.
The other configuration error raised by pipeline/data-fit parsing, UserConfigurationError, is not re-exported at the package root — only ParameterNotFoundError is. Import it from the submodule when you need to catch it directly: from ionworkspipeline.exceptions import UserConfigurationError. It subclasses ValueError, so an except ValueError handler also catches it.
When a UCP protocol can’t be simulated as written — for example, a drive cycle referenced by name that wasn’t supplied, a goto target that doesn’t resolve, an end-condition string that doesn’t parse, an initial SOC outside [0, 100], or an expression that references an uninitialised variable — the failed pipeline element is tagged with the CONFIGURATION_ERROR code and its message is surfaced verbatim through the API. This distinguishes a user-correctable protocol issue (fix the protocol, drive cycles, or inputs and retry) from an unexpected internal failure, which is reported as INTERNAL_ERROR.