zjb.main.simulation.solver 源代码
from abc import abstractmethod
from pathlib import Path
from typing import Any
from mako.template import Template
from traits.api import ABCMetaHasTraits, Dict, Float, HasPrivateTraits, Str
from ..dtb.dynamics_model import DynamicsModel
TEMPLATE = Template(filename=str(Path(__file__).parent / "_templates" / "solvers.mako"))
[文档]
class Solver(HasPrivateTraits, metaclass=ABCMetaHasTraits):
dt = Float(0.1)
noises = Dict(Str, Float)
[文档]
@abstractmethod
def render(self, model: DynamicsModel, env: dict[str, Any]) -> str:
...
[文档]
class EulerSolver(Solver):
[文档]
def render(self, model: DynamicsModel, env: dict[str, Any]) -> str:
return TEMPLATE.get_def("euler").render(solver=self, model=model, env=env) # type: ignore
[文档]
class HenuSolver(Solver):
[文档]
def render(self, model: DynamicsModel, env: dict[str, Any]) -> str:
return TEMPLATE.get_def("henu").render(solver=self, model=model, env=env) # type: ignore
SOLVER_DICT = {
"Euler": EulerSolver,
"Henu": HenuSolver,
}