Architecture Overview¶
The Origen framework exists in two parts within a single package: a Python-based frontend
, which
users will build their applications upon, and a compiled backend
, which maintains the device,
tester, and other models. This is reminiscent of the Model-View-Controller Design Pattern
where the Rust-based backend functions as the model
, the user-facing Origen API API as the view
,
and the hidden _origen API module as the controller
, bridging the two.
Development APIs¶
Not disclosed to the end users is the _origen API which functions as a controller connecting the frontend Origen API to the Rust-powered backend and includes the actual device modeling and generation.
This API should not be used by end users directly and is entirely derived from the Rust backend.
Rather, functions are exposed to them through the origen
module and should encapsulate all calls
to _origen
. This includes simple getters
, such as origen.application.Base.output_dir
,
whose implementation is merely a call to _origen.output_directory()
.
The backend is split into two Rust libraries: PyAPI
and Origen
. PyAPI
utilizes
PyO3 which creates the Python module _origen
.