Skip to content
Get started

Rust API

Open the Rust API documentation to browse types, functions, examples, and signatures with rustdoc navigation and search.

The reference includes all optional features. Enable the features and install the native dependencies needed by your application; see the Rust setup guide.

View source

Add eqiora to a Cargo project as described in the setup guide above, then put this in src/main.rs and run cargo run:

rust
use eqiora::api::ModelDocument;
use eqiora::kernel::KernelNode;
use eqiora::language::NotationProfile;
fn main() {
let model = ModelDocument::compile("decay.eqi", r#"
model decay(parameter rate: 1 / s = 1) {
state x: 1;
initial { x = 1; }
relation flow { derivative(x) + rate * x = 0; }
}
"#).expect("model must compile");
for node in model.program().nodes() {
if let KernelNode::Relation(relation) = node {
let equations = model.render_equations(
relation.id().into(), NotationProfile::Plain,
).expect("equations must render");
for equation in equations {
println!("{}", equation.text());
}
}
}
}

Compilation checks names and dimensions and produces an immutable Model; the program then prints its equations. Nothing is simulated here. To resolve and run a model, see the Python workflow.

rust
use eqiora::aliases::Velocity;
let inlet = Velocity::new(3.0);
let correction = Velocity::new(0.5);
println!("{} m/s", (inlet + correction).value());

The result is 3.5 m/s. Quantities carry their dimension in the Rust type; adding a velocity to a length is a type error. Values use SI units.

Continue with the compiled model from the first example:

rust
let bytes = model.canonical_json().expect("model must serialize");
std::fs::write("decay.model.json", &bytes).expect("file must be writable");
let restored = ModelDocument::replay(&bytes).expect("model must reload");
assert!(model.structurally_equivalent(&restored).unwrap());

Replay restores the model’s mathematical content but not its source text, so keep the original .eqi file if you want to edit or display the source.

Choose a module below, then use rustdoc’s search to find a type or method.

Module
eqiora::api
eqiora::artifact
eqiora::assembly
eqiora::backends
eqiora::compiler
eqiora::control
eqiora::device
eqiora::differentiation
eqiora::distributed
eqiora::geometry
eqiora::graph
eqiora::io
eqiora::ir
eqiora::kernel
eqiora::language
eqiora::meshing
eqiora::numerics
eqiora::ontology
eqiora::package
eqiora::realization
eqiora::runtime
eqiora::sem
eqiora::solver
eqiora::time
Item
eqiora::Code
eqiora::Diagnostic
eqiora::DimExponents
eqiora::Dimension
eqiora::DynQuantity
eqiora::Entity
eqiora::EntityKind
eqiora::FiniteBasis
eqiora::GraphClass
eqiora::GraphKind
eqiora::GraphPath
eqiora::Id
eqiora::InvalidValueLiteral
eqiora::InvalidValueShape
eqiora::InvalidValueType
eqiora::Patch
eqiora::Quantity
eqiora::RawId
eqiora::Scalar
eqiora::ScalarDomain
eqiora::ScalarType
eqiora::Severity
eqiora::Span
eqiora::TimeStateCoordinate
eqiora::VERSION
eqiora::ValueFrame
eqiora::ValueLiteral
eqiora::ValueShape
eqiora::ValueType
eqiora::aliases
eqiora::api::CadBoxIntentV1
eqiora::api::CadBoxPlanV1
eqiora::api::CadRegenerationPlanV1
eqiora::api::CadRenderProjectionV1
eqiora::api::CadRenderTriangleV1
eqiora::api::CadSelectionRequestV1
eqiora::api::CadSemanticEntityKindV1
eqiora::api::CadSemanticEntityV1
eqiora::api::CadSemanticSelectionV1
eqiora::api::CartesianDomainEditPlan
eqiora::api::CartesianDomainEditResult
eqiora::api::CompleteEvaluationMap
eqiora::api::DerivativeImplementation
eqiora::api::DiagnosticRecord
eqiora::api::DiagnosticSource
eqiora::api::DifferentiableCotangent
eqiora::api::DifferentiableEvaluation
eqiora::api::DifferentiableProgram
eqiora::api::DifferentiableProgramIdentity
eqiora::api::DifferentiableResult
eqiora::api::DifferentiableTangent
eqiora::api::DifferentiableValue
eqiora::api::DifferentiableValueSignature
eqiora::api::DifferentiableValues
eqiora::api::DifferentiationEvidence
eqiora::api::DifferentiationMode
eqiora::api::EditorDefinition
eqiora::api::EditorPosition
eqiora::api::EditorReference
eqiora::api::EditorService
eqiora::api::EditorSnapshot
eqiora::api::EditorSymbol
eqiora::api::EditorSymbolKind
eqiora::api::EditorWorkspaceService
eqiora::api::EditorWorkspaceSnapshot
eqiora::api::EvaluationCollection
eqiora::api::EvaluationCollectionGroup
eqiora::api::EvaluationMapExecutionPolicy
eqiora::api::EvaluationMapOccurrence
eqiora::api::EvaluationMapOccurrenceId
eqiora::api::EvaluationMapPlan
eqiora::api::EvaluationMapProducts
eqiora::api::EvaluationMapResult
eqiora::api::EvaluationMapRetention
eqiora::api::EvaluationMapTerminalReport
eqiora::api::GradientEstimator
eqiora::api::LinearizationState
eqiora::api::MathReference
eqiora::api::MathRendering
eqiora::api::MlDatasetArtifactsV1
eqiora::api::MlDatasetBlockArrayV1
eqiora::api::MlDatasetDerivationPlanV1
eqiora::api::MlDatasetFieldSelectionV1
eqiora::api::MlDatasetMaterializationLimitsV1
eqiora::api::MlDatasetMaterializationV1
eqiora::api::MlDatasetSampleArraysV1
eqiora::api::MlDatasetSampleSelectionV1
eqiora::api::ModelDocument
eqiora::api::ModelEntityRef
eqiora::api::MomentEstimator
eqiora::api::MomentReduction
eqiora::api::ParameterGeometryRegenerationPlan
eqiora::api::ParameterGeometryRegenerationResult
eqiora::api::ParameterSampler
eqiora::api::RecordedDifferentiableEvaluation
eqiora::api::RecordedEvaluationOutcome
eqiora::api::RecordedMomentEstimator
eqiora::api::RemeshingTrajectoryReplayInput
eqiora::api::RunRequest
eqiora::api::SampledParameterPoint
eqiora::api::SamplingIdentity
eqiora::api::ValueEditPlan
eqiora::api::ValueEditResult
eqiora::api::VerifiedMlDatasetV1
eqiora::api::VerifiedVtuImportV1
eqiora::api::VerifiedXdmfHdf5TrajectoryExportV1
eqiora::api::VerifiedXdmfImportV1
eqiora::api::VtuImportArtifactsV1
eqiora::api::XdmfHdf5ExportLimits
eqiora::api::XdmfHdf5TrajectoryExportArtifactsV1
eqiora::api::XdmfImportArtifactsV1
eqiora::api::derive_ml_dataset_v1
eqiora::api::export_common_result_xdmf_hdf5
eqiora::api::export_common_trajectory_xdmf_hdf5
eqiora::api::import_vtu_v1
eqiora::api::import_xdmf_hdf5_v1
eqiora::api::import_xdmf_v1
eqiora::api::verify_ml_dataset_v1
eqiora::api::verify_vtu_import_v1
eqiora::api::verify_xdmf_hdf5_import_v1
eqiora::api::verify_xdmf_import_v1
eqiora::control::COMPILE_COMMAND_V1
eqiora::control::COMPILE_V2_SCHEMA_JSON
eqiora::control::CONTROL_PROTOCOL_V2
eqiora::control::CompileControlExecutionV2
eqiora::control::CompileModelDescriptorV2
eqiora::control::CompileOutcomeV2
eqiora::control::CompileRequestV2
eqiora::control::CompileResponseV2
eqiora::control::MAX_COMPILE_FILENAME_BYTES_V2
eqiora::control::MAX_COMPILE_REQUEST_BYTES_V2
eqiora::control::MAX_COMPILE_RESPONSE_BYTES_V2
eqiora::control::MAX_COMPILE_SOURCE_BYTES_V2
eqiora::control::MAX_CONTROL_REQUEST_ID_BYTES_V2
eqiora::control::execute_compile_v2
eqiora::diagnostic
eqiora::dim
eqiora::entity
eqiora::kinds
eqiora::numerics::AleFsiCartesianModel
eqiora::numerics::CartesianLinearElasticity2dSolution
eqiora::numerics::FinalizedIsotropicElasticityCartesian2dProblem
eqiora::numerics::FinalizedResolvedFixedTopologyAleFsi
eqiora::numerics::FinalizedScalarEllipticCartesianProblem
eqiora::numerics::FinalizedSteadyStokesMini2dProblem
eqiora::numerics::IncompressibleFlowScaleProfile2d
eqiora::numerics::IsotropicElasticityContinuum
eqiora::numerics::ResolvedScalarEllipticCartesianSolution
eqiora::numerics::ScalarEllipticCartesianModel
eqiora::numerics::SteadyIncompressibleStokesModel2d
eqiora::numerics::SteadyStokesMiniSolution2d
eqiora::numerics::finalize_resolved_fixed_topology_ale_fsi_2d
eqiora::numerics::finalize_resolved_isotropic_elasticity_cartesian_2d
eqiora::numerics::finalize_resolved_steady_stokes_mini_2d
eqiora::numerics::finalize_scalar_elliptic_cartesian
eqiora::numerics::lower_ale_fsi_cartesian
eqiora::numerics::lower_isotropic_elasticity_cartesian_2d
eqiora::numerics::lower_scalar_elliptic_cartesian
eqiora::numerics::lower_steady_incompressible_stokes_cartesian_2d
eqiora::numerics::solve_resolved_isotropic_elasticity_cartesian_2d
eqiora::numerics::solve_resolved_scalar_elliptic_cartesian
eqiora::numerics::solve_resolved_steady_stokes_mini_2d
eqiora::quantity