Type hierarchy
The type hierarchy is implemented in "src/types.jl".
AbstractSem: the most abstract type in our package
- AbstractSemSingle{O, I, L} <: AbstractSemis an abstract parametric type that is a supertype of all single models- Sem: models that do not need automatic differentiation or finite difference approximation
- SemFiniteDiff: models whose gradients and/or hessians should be computed via finite difference approximation
 
- AbstractSemCollection <: AbstractSemis an abstract supertype of all models that contain multiple- AbstractSemsubmodels
Every AbstractSemSingle has to have SemObserved, SemImplied, and SemLoss fields (and can have additional fields).
SemLoss is a container for multiple SemLossFunctions.