Living one step above compartments in the NGC-Learn dynamical systems hierachy rests the component.
A component (ngcsimlib.Component) holds a collection of both temporally constant values as well as dynamic (time-evolving)
compartments. In addition, they are the core place where logic governing the dynamics of a system are
defined. Generally, components serve as the building blocks that are to be reused multiple times
when constructing a complete model of a dynmical system.
One important distinction that needs to be highlighted within a component is the
difference between a temporally constant value and a dynamic (time-varying) compartment.
Compartments themselves house values that change over time and, generally, they will have the
type ngcsimlib.Compartment; note that compartments are to be used to track the internal values
of a component. These internal values can be ones such inputs, decaying values, counters, etc.
The second kind of values found within a component are known as temporally constant values; these
are values (e.g., hyper-parameters, structural parameters, etc.) that will remain fixed
within constructed model dynamical system. These types of values tend to include common configuration
and meta-parameter settings, such as matrix shapes and coefficients.
Inside of a component, it is expected that there will be methods defined that govern the
temporal dynamics of the system component. These compilable methods are decorated
with @compilable and are defined like any other regular (Python) method. Within a compilable
method, there will be access to self, which means that, to reference a compartment's
value, one must write out such a call as: self.myCompartment.get(). The only requirement is
that any method that is decorated cannot have a return value; values should be stored
inside their respective compartments (by making an appeal to their respective set routine, i.e.,
self.myCompartment.set(value)). In an external (compilation) step, outside of the developer's
definition of a component, an NGC-Sim-Lib transformer will change/convert all of these (decorated)
methods into ones that function with the rest of the NGC-Sim-Lib back-end.