pyfebiopt.optimize.engine ========================= .. py:module:: pyfebiopt.optimize.engine .. autoapi-nested-parse:: Unified optimization engine for FEBio parameter fitting. Attributes ---------- .. autoapisummary:: pyfebiopt.optimize.engine.Array Classes ------- .. autoapisummary:: pyfebiopt.optimize.engine.OptimizeResult pyfebiopt.optimize.engine.IterationState pyfebiopt.optimize.engine.JacobianHelper pyfebiopt.optimize.engine.Engine Module Contents --------------- .. py:data:: Array .. py:class:: OptimizeResult Final state of an optimization run. .. py:attribute:: phi :type: Array .. py:attribute:: theta :type: dict[str, float] .. py:attribute:: metadata :type: dict[str, Any] .. py:class:: IterationState Track iteration bookkeeping and cached evaluations. .. py:attribute:: progress_index :type: int :value: 0 .. py:attribute:: pending_initial_log :type: bool :value: True .. py:attribute:: log_progress :type: bool :value: True .. py:attribute:: last_phi :type: Array | None :value: None .. py:attribute:: last_theta_vec :type: Array | None :value: None .. py:attribute:: last_residual :type: Array | None :value: None .. py:attribute:: last_iter_dir :type: pathlib.Path | None :value: None .. py:attribute:: last_cost :type: float | None :value: None .. py:attribute:: last_metrics :type: dict[str, Any] .. py:attribute:: series_latest :type: dict[str, dict[str, Any]] .. py:attribute:: cached_jac_phi :type: Array | None :value: None .. py:attribute:: cached_jacobian :type: Array | None :value: None .. py:method:: reset(*, log_progress: bool) -> None Clear state between optimization runs. .. py:method:: cache_evaluation(phi_vec: Array, theta_vec: Array, residual: Array, iter_dir: pathlib.Path, metrics: collections.abc.Mapping[str, Any], series: collections.abc.Mapping[str, dict[str, Any]]) -> None Persist the latest evaluation payload. .. py:method:: next_index() -> int Return and increment the iteration index. .. py:method:: cache_jacobian(phi_vec: Array, J: Array) -> None Store a Jacobian associated with a specific phi vector. .. py:method:: cached_jac(phi_vec: Array) -> Array | None Return a cached Jacobian matching ``phi_vec`` if available. .. py:class:: JacobianHelper(jacobian: pyfebiopt.optimize.jacobian.JacobianComputer, case_evaluator: pyfebiopt.optimize.cases.CaseEvaluator, mapper: pyfebiopt.optimize.parameters.ParameterMapper, workspace: pyfebiopt.optimize.storage.StorageWorkspace, param_names: collections.abc.Sequence[str]) Handle Jacobian scheduling/finalisation to keep Engine slim. Coordinate Jacobian evaluations, optionally in parallel. .. py:attribute:: jacobian .. py:attribute:: case_evaluator .. py:attribute:: mapper .. py:attribute:: workspace .. py:attribute:: param_names .. py:method:: compute(phi_vec: Array, state: IterationState) -> Array Return a forward-difference Jacobian for ``phi_vec``. .. py:class:: Engine(parameter_space: pyfebiopt.optimize.parameters.ParameterSpace, cases: collections.abc.Sequence[pyfebiopt.optimize.cases.SimulationCase], *, options: pyfebiopt.optimize.options.EngineOptions | None = None) Coordinate FEBio simulations and optimization loops. Initialize the engine, wiring runner, reporter, mapper, and helpers. .. py:attribute:: parameter_space .. py:attribute:: workspace .. py:attribute:: workdir :value: None .. py:attribute:: persist_root .. py:attribute:: jacobian :type: pyfebiopt.optimize.jacobian.JacobianComputer | None .. py:attribute:: case_evaluator .. py:attribute:: artifact_exporter .. py:attribute:: interrupts .. py:attribute:: parameter_mapper .. py:attribute:: optimizer_adapter .. py:attribute:: reporter :type: pyfebiopt.optimize.reporting.Reporter .. py:attribute:: state .. py:attribute:: jac_helper .. py:method:: run(*, phi0: collections.abc.Sequence[float] | None = None, bounds: collections.abc.Sequence[tuple[float, float]] | None = None, verbose: bool = True, callbacks: collections.abc.Iterable[collections.abc.Callable[[Array, float], None]] | None = None) -> OptimizeResult Execute the optimization loop and return the optimizer's final solution. :returns: OptimizeResult with optimal φ/θ and optimizer metadata. .. py:method:: close() -> None Cleanly stop the runner.