Skip to content

Latest commit

 

History

History
50 lines (40 loc) · 1.45 KB

File metadata and controls

50 lines (40 loc) · 1.45 KB

Example: Integration

This example demonstrates how strategies might be integrated into a larger system (like a solve function).

using CTModels.Strategies

# Mock Registry and Family from previous examples
abstract type IntegrationSolver <: AbstractStrategy end

struct BasicSolver <: IntegrationSolver
    options::StrategyOptions
end
Strategies.id(::Type{BasicSolver}) = :basic
Strategies.metadata(::Type{BasicSolver}) = StrategyMetadata(
    OptionDefinition(name=:verbose, type=Bool, default=false)
)
BasicSolver(;kw...) = BasicSolver(Strategies.build_strategy_options(BasicSolver; kw...))

const REGISTRY = Strategies.create_registry(
    IntegrationSolver => (BasicSolver,)
)

# Mock Solve Function
function solve(problem; method=:basic, kwargs...)
    # 1. Identify the strategy type from the method ID
    # In a real app, 'method' might need disambiguation if multiple families exist
    strategy_id = method
    
    # 2. Build the strategy instance using the registry
    # We pass 'kwargs' down to the strategy constructor
    strategy = Strategies.build_strategy(
        strategy_id, 
        IntegrationSolver, 
        REGISTRY; 
        kwargs...
    )
    
    # 3. Use the strategy
    println("Solving with ", Strategies.id(strategy))
    if Strategies.option_value(strategy, :verbose)
        println("... verbose output ...")
    end
    
    return "Solution"
end

# User calls solve
solve("my_problem", method=:basic, verbose=true)