Context
The control-toolbox ecosystem currently has trait definitions scattered across packages:
- CTFlows: Has a
Traits submodule with mutability, AD, variable costate, time dependence, etc.
- CTModels: Has trait-like types (TimeDependence, ObjectiveForm, TimeBoundaryType, TimeGridType) that should be traits
These traits describe structural properties of optimal control problems and flows, and should be shared across the ecosystem at the base layer.
Task
Create a unified Traits module in CTBase that will contain all trait definitions for the control-toolbox ecosystem.
Traits to include
From CTFlows (existing):
AbstractTrait, AbstractModeTrait, AbstractContentTrait
AbstractMutabilityTrait, InPlace, OutOfPlace
AbstractADTrait, WithAD, WithoutAD
AbstractVariableCostateCapability, SupportsVariableCostate, NoVariableCostate
PointTrait, TrajectoryTrait
StateTrait, HamiltonianTrait, AugmentedHamiltonianTrait
VariableDependence, Fixed, NonFixed
- Time dependence traits (currently re-exported from CTModels)
- Query functions:
is_inplace, is_outofplace, ad_trait, variable_costate_trait, etc.
From CTModels (to migrate):
TimeDependence, Autonomous, NonAutonomous
ObjectiveForm, MayerForm, LagrangeForm, BolzaForm
TimeBoundary, FixedTime, FreeTime
TimeGridStrategy, UnifiedGrid, MultipleGrid
Module structure
src/Traits/
├── Traits.jl # Module manifest
├── abstract.jl # Base trait abstractions
├── mutability.jl # InPlace/OutOfPlace
├── ad.jl # WithAD/WithoutAD
├── variable_costate.jl # Variable costate capability
├── mode.jl # Point/Trajectory
├── content.jl # State/Hamiltonian/AugmentedHamiltonian
├── time_dependence.jl # Autonomous/NonAutonomous
├── objective_form.jl # Mayer/Lagrange/Bolza
├── time_boundary.jl # FixedTime/FreeTime
├── time_grid.jl # UnifiedGrid/MultipleGrid
├── variable_dependence.jl # Fixed/NonFixed
└── helpers.jl # Query functions
Required actions
- Create
src/Traits/ directory with the structure above
- Implement all trait types and query functions
- Add comprehensive docstrings
- Export all public traits and query functions
- Ensure no dependencies on CTModels or CTFlows (CTBase is the base layer)
Related issues
Priority
High — This is a foundational refactoring that will improve code organization and enable better type-based dispatch across the ecosystem.
Context
The control-toolbox ecosystem currently has trait definitions scattered across packages:
Traitssubmodule with mutability, AD, variable costate, time dependence, etc.These traits describe structural properties of optimal control problems and flows, and should be shared across the ecosystem at the base layer.
Task
Create a unified
Traitsmodule in CTBase that will contain all trait definitions for the control-toolbox ecosystem.Traits to include
From CTFlows (existing):
AbstractTrait,AbstractModeTrait,AbstractContentTraitAbstractMutabilityTrait,InPlace,OutOfPlaceAbstractADTrait,WithAD,WithoutADAbstractVariableCostateCapability,SupportsVariableCostate,NoVariableCostatePointTrait,TrajectoryTraitStateTrait,HamiltonianTrait,AugmentedHamiltonianTraitVariableDependence,Fixed,NonFixedis_inplace,is_outofplace,ad_trait,variable_costate_trait, etc.From CTModels (to migrate):
TimeDependence,Autonomous,NonAutonomousObjectiveForm,MayerForm,LagrangeForm,BolzaFormTimeBoundary,FixedTime,FreeTimeTimeGridStrategy,UnifiedGrid,MultipleGridModule structure
Required actions
src/Traits/directory with the structure aboveRelated issues
Priority
High — This is a foundational refactoring that will improve code organization and enable better type-based dispatch across the ecosystem.