"""gradgen package."""

from .ad import derivative, gradient, hessian, jacobian, jvp, vjp
from .cse import CSEAssignment, CSEPlan, cse
from .custom_elementary import (
    clear_registered_elementary_functions,
    get_registered_elementary_function,
    register_elementary_function,
)
from .composed_function import ComposedFunction, ComposedGradientFunction
from .function import Function
from .map_zip import (
    ZippedFunction,
    ZippedJacobianFunction,
    ReducedFunction,
    map_function,
    zip_function,
    reduce_function,
)
from .single_shooting import (
    SingleShootingBundle,
    SingleShootingGradientFunction,
    SingleShootingHvpFunction,
    SingleShootingJointFunction,
    SingleShootingPrimalFunction,
    SingleShootingProblem,
)
from .rust_codegen import (
    CodeGenerationBuilder,
    FunctionBundle,
    RustBackendMode,
    RustBackendConfig,
    RustCodegenResult,
    RustDerivativeBundleResult,
    RustMultiFunctionProjectResult,
    RustProjectResult,
    RustScalarType,
    create_rust_derivative_bundle,
    create_multi_function_rust_project,
    create_rust_project,
    generate_rust,
)
from .simplify import simplify
from .sx import (
    SX,
    SXNode,
    SXVector,
    acosh,
    acos,
    asinh,
    asin,
    atan2,
    atan,
    atanh,
    bilinear_form,
    cbrt,
    ceil,
    const,
    cos,
    cosh,
    erf,
    erfc,
    exp,
    expm1,
    floor,
    fract,
    hypot,
    log,
    log1p,
    matvec,
    maximum,
    minimum,
    quadform,
    round,
    signum,
    sin,
    sinh,
    sqrt,
    tan,
    tanh,
    trunc,
    vector,
)

__all__ = [
    "CSEAssignment",
    "CSEPlan",
    "CodeGenerationBuilder",
    "ComposedFunction",
    "ComposedGradientFunction",
    "Function",
    "FunctionBundle",
    "RustBackendMode",
    "RustBackendConfig",
    "RustCodegenResult",
    "RustDerivativeBundleResult",
    "RustMultiFunctionProjectResult",
    "RustProjectResult",
    "RustScalarType",
    "SX",
    "SXNode",
    "SXVector",
    "SingleShootingBundle",
    "SingleShootingGradientFunction",
    "SingleShootingHvpFunction",
    "SingleShootingJointFunction",
    "SingleShootingPrimalFunction",
    "SingleShootingProblem",
    "acosh",
    "acos",
    "asinh",
    "asin",
    "atan2",
    "atan",
    "atanh",
    "bilinear_form",
    "cbrt",
    "ceil",
    "const",
    "cos",
    "cosh",
    "cse",
    "create_rust_project",
    "create_rust_derivative_bundle",
    "create_multi_function_rust_project",
    "derivative",
    "clear_registered_elementary_functions",
    "erf",
    "erfc",
    "exp",
    "expm1",
    "floor",
    "fract",
    "gradient",
    "get_registered_elementary_function",
    "hessian",
    "hypot",
    "jacobian",
    "jvp",
    "log",
    "log1p",
    "map_function",
    "reduce_function",
    "matvec",
    "maximum",
    "minimum",
    "quadform",
    "round",
    "register_elementary_function",
    "generate_rust",
    "signum",
    "simplify",
    "sin",
    "sinh",
    "sqrt",
    "tan",
    "tanh",
    "trunc",
    "vector",
    "vjp",
    "zip_function",
    "ZippedFunction",
    "ZippedJacobianFunction",
    "ReducedFunction",
]
