# Synthetic library for generating virtual cell data using ODE models
# based on biochemical laws common in cancer cell signalling networks.

# High-level API
from .api import Builder, VirtualCell, make_dataset_drug_response

# Core model building
from .ModelBuilder import ModelBuilder
from .Reaction import Reaction
from .ReactionArchtype import ReactionArchtype

# Specifications
from .Specs.BaseSpec import BaseSpec
from .Specs.MichaelisNetworkSpec import MichaelisNetworkSpec
from .Specs.DegreeInteractionSpec import DegreeInteractionSpec
from .Specs.Drug import Drug
from .Specs.Regulation import Regulation

# Solvers
from .Solver.Solver import Solver
from .Solver.ScipySolver import ScipySolver
try:
    from .Solver.RoadrunnerSolver import RoadrunnerSolver
except ImportError:
    RoadrunnerSolver = None

# Utilities
from .utils.make_feature_data import make_feature_data
from .utils.make_target_data import (
    make_target_data_with_params,
    make_target_data_with_params_robust,
    calculate_targets_from_timecourse,
)
from .utils.kinetic_tuner import KineticParameterTuner

__all__ = [
    # High-level API
    'Builder',
    'VirtualCell',
    'make_dataset_drug_response',

    # Core model building
    'ModelBuilder',
    'Reaction',
    'ReactionArchtype',

    # Specifications
    'BaseSpec',
    'MichaelisNetworkSpec',
    'DegreeInteractionSpec',
    'Drug',
    'Regulation',

    # Solvers
    'Solver',
    'ScipySolver',
    'RoadrunnerSolver',

    # Utilities
    'make_feature_data',
    'make_target_data_with_params',
    'make_target_data_with_params_robust',
    'calculate_targets_from_timecourse',
    'KineticParameterTuner',
]
