Skip to content

Add unified Traits module for control-toolbox ecosystem #430

@ocots

Description

@ocots

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

  1. Create src/Traits/ directory with the structure above
  2. Implement all trait types and query functions
  3. Add comprehensive docstrings
  4. Export all public traits and query functions
  5. 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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions