"""Therismos: A library for modeling generic queries/filters as object structures."""

from therismos._shared import OptimizationRecord
from therismos.expr import (
    DEFAULT_TRANSFORM_REGISTRY,
    FALSE,
    TRUE,
    AllExpr,
    AnyExpr,
    AtomicExpr,
    AtomicExprType,
    Between,
    BooleanLogicExpr,
    ComparisonExpr,
    ComparisonExprUnion,
    CompositeExpr,
    CompositeExprType,
    ConstantExpr,
    DecoratorExpr,
    DecoratorExprType,
    Eq,
    Expr,
    ExprTemplate,
    ExprVisitor,
    F,
    FalseExpr,
    Field,
    FieldBasedAtomicExprUnion,
    FieldBasedExpr,
    FieldSelection,
    Ge,
    Gt,
    In,
    IsNull,
    Le,
    LogicalExpr,
    Lt,
    MissingParamError,
    MultiValuedAtomicExprUnion,
    MultiValuedFieldExpr,
    Ne,
    NotExpr,
    ParamRule,
    PruneMode,
    Regex,
    Serializer,
    SingleValuedAtomicExprUnion,
    SingleValuedFieldExpr,
    TemplateParam,
    TemplateParamSpec,
    TransformRegistry,
    TransformStep,
    TrueExpr,
    UnboundTemplateParamError,
    UnwoundValue,
    bind,
    collect_params,
    prune_fields,
    unwind_data,
)
from therismos.expr.optimizer import optimize
from therismos.expr.visitors import (
    CountVisitor,
    DictVisitor,
    FieldGathererVisitor,
    StringVisitor,
)
from therismos.grouping import Aggregation, AggregationFunction, GroupSpec
from therismos.sorting import SortCriterion, SortOrder, SortSpec

__version__ = "1.0.0"

__all__ = [
    "Expr",
    "AtomicExpr",
    "FieldBasedExpr",
    "SingleValuedFieldExpr",
    "ComparisonExpr",
    "MultiValuedFieldExpr",
    "CompositeExpr",
    "DecoratorExpr",
    "Field",
    "F",
    "ExprVisitor",
    "UnwoundValue",
    "unwind_data",
    "Eq",
    "Ne",
    "Lt",
    "Le",
    "Gt",
    "Ge",
    "Between",
    "Regex",
    "In",
    "IsNull",
    "TrueExpr",
    "FalseExpr",
    "TRUE",
    "FALSE",
    "AllExpr",
    "AnyExpr",
    "NotExpr",
    "ComparisonExprUnion",
    "SingleValuedAtomicExprUnion",
    "MultiValuedAtomicExprUnion",
    "FieldBasedAtomicExprUnion",
    "ConstantExpr",
    "AtomicExprType",
    "CompositeExprType",
    "DecoratorExprType",
    "LogicalExpr",
    "BooleanLogicExpr",
    "OptimizationRecord",
    "optimize",
    "Serializer",
    "StringVisitor",
    "CountVisitor",
    "DictVisitor",
    "FieldGathererVisitor",
    "SortOrder",
    "SortCriterion",
    "SortSpec",
    "AggregationFunction",
    "Aggregation",
    "GroupSpec",
    "TemplateParam",
    "UnboundTemplateParamError",
    "MissingParamError",
    "TemplateParamSpec",
    "TransformStep",
    "ParamRule",
    "ExprTemplate",
    "bind",
    "collect_params",
    "TransformRegistry",
    "DEFAULT_TRANSFORM_REGISTRY",
    "FieldSelection",
    "PruneMode",
    "prune_fields",
]
