"""FhY compiler core utilities."""

__version__ = "0.0.5"

__all__ = [
    "Constraint",
    "EquationConstraint",
    "InSetConstraint",
    "NotInSetConstraint",
    "FhYCoreTypeError",
    "SymbolTableError",
    "register_error",
    "CompilerPass",
    "DiagnosticLevel",
    "PassInfo",
    "PassDiagnostic",
    "PassExecutionError",
    "PassRegistrationError",
    "PassResult",
    "PreservedAnalyses",
    "PassValidationError",
    "Analysis",
    "AnalysisManager",
    "PassManager",
    "PassManagerResult",
    "PassRunRecord",
    "FixpointPassGroup",
    "FixpointIterationRecord",
    "FixpointGroupRecord",
    "VisitablePass",
    "register_pass",
    "BinaryExpression",
    "BinaryOperation",
    "Expression",
    "IdentifierExpression",
    "LiteralExpression",
    "SymbolType",
    "UnaryExpression",
    "UnaryOperation",
    "collect_identifiers",
    "is_satisfiable",
    "parse_expression",
    "pformat_expression",
    "replace_identifiers",
    "simplify_expression",
    "substitute_identifiers",
    "Identifier",
    "Position",
    "Span",
    "NoteKind",
    "Note",
    "Provenance",
    "HasIdentifier",
    "HasIdentifierMixin",
    "Frozen",
    "FrozenMixin",
    "FrozenMutationError",
    "FrozenValidationError",
    "HasType",
    "HasTypeMixin",
    "HasOperands",
    "HasOperandsMixin",
    "HasResults",
    "HasResultsMixin",
    "PartialEqual",
    "PartialEqualMixin",
    "Equal",
    "EqualMixin",
    "StructuralEquivalence",
    "StructuralEquivalenceMixin",
    "Canonicalizable",
    "CanonicalizableMixin",
    "PartialOrderable",
    "PartialOrderableMixin",
    "Orderable",
    "OrderableMixin",
    "Verifiable",
    "VerifiableMixin",
    "Visitable",
    "VisitableMixin",
    "VerificationError",
    "Foldable",
    "FoldableMixin",
    "HasProvenance",
    "HasProvenanceMixin",
    "CategoricalParam",
    "IntParam",
    "BoundIntParam",
    "NatParam",
    "BoundNatParam",
    "OrdinalParam",
    "Param",
    "ParamAssignment",
    "PermParam",
    "RealParam",
    "FunctionKeyword",
    "FunctionSymbolTableFrame",
    "ImportSymbolTableFrame",
    "SymbolTable",
    "SymbolTableFrame",
    "VariableSymbolTableFrame",
    "CoreDataType",
    "DataType",
    "IndexType",
    "NumericalType",
    "PrimitiveDataType",
    "TemplateDataType",
    "TupleType",
    "Type",
    "TypeQualifier",
    "get_core_data_type_bit_width",
    "promote_core_data_types",
    "promote_primitive_data_types",
    "promote_type_qualifiers",
    "IntEnum",
    "Lattice",
    "PartiallyOrderedSet",
    "Stack",
    "StrEnum",
    "format_comma_separated_list",
    "get_array_size_in_bits",
    "invert_dict",
    "invert_frozen_dict",
    "register_serializable",
    "Serializable",
    "WrappedFamilySerializable",
    "SerializedObject",
    "SerializedDict",
    "SerializedValue",
    "is_serialized_value",
    "is_serialized_dict",
    "SerializationFormat",
    "DeserializationDictStructureError",
    "DeserializationValueError",
    "SerializationTypeError",
    "SerializationValueError",
    "SerializationPayloadTypeError",
    "serialize_registry_wrapped_value",
    "deserialize_registry_wrapped_value",
    "add_file_handler",
    "configure_logging",
    "get_logger",
    "install_null_handler",
]


from .constraint import (
    Constraint,
    EquationConstraint,
    InSetConstraint,
    NotInSetConstraint,
)
from .error import register_error
from .expression import (
    BinaryExpression,
    BinaryOperation,
    Expression,
    IdentifierExpression,
    LiteralExpression,
    SymbolType,
    UnaryExpression,
    UnaryOperation,
    collect_identifiers,
    is_satisfiable,
    parse_expression,
    pformat_expression,
    replace_identifiers,
    simplify_expression,
    substitute_identifiers,
)
from .identifier import Identifier
from .logger import (
    add_file_handler,
    configure_logging,
    get_logger,
    install_null_handler,
)
from .param import (
    BoundIntParam,
    BoundNatParam,
    CategoricalParam,
    IntParam,
    NatParam,
    OrdinalParam,
    Param,
    ParamAssignment,
    PermParam,
    RealParam,
)
from .pass_infrastructure import (
    Analysis,
    AnalysisManager,
    CompilerPass,
    DiagnosticLevel,
    FixpointGroupRecord,
    FixpointIterationRecord,
    FixpointPassGroup,
    PassDiagnostic,
    PassExecutionError,
    PassInfo,
    PassManager,
    PassManagerResult,
    PassRegistrationError,
    PassResult,
    PassRunRecord,
    PassValidationError,
    PreservedAnalyses,
    VisitablePass,
    register_pass,
)
from .provenance import Note, NoteKind, Position, Provenance, Span
from .serialization import (
    DeserializationDictStructureError,
    DeserializationValueError,
    Serializable,
    SerializationFormat,
    SerializationPayloadTypeError,
    SerializationTypeError,
    SerializationValueError,
    SerializedDict,
    SerializedObject,
    SerializedValue,
    WrappedFamilySerializable,
    deserialize_registry_wrapped_value,
    is_serialized_dict,
    is_serialized_value,
    register_serializable,
    serialize_registry_wrapped_value,
)
from .symbol_table import (
    FunctionKeyword,
    FunctionSymbolTableFrame,
    ImportSymbolTableFrame,
    SymbolTable,
    SymbolTableError,
    SymbolTableFrame,
    VariableSymbolTableFrame,
)
from .trait import (
    Canonicalizable,
    CanonicalizableMixin,
    Equal,
    EqualMixin,
    Foldable,
    FoldableMixin,
    Frozen,
    FrozenMixin,
    FrozenMutationError,
    FrozenValidationError,
    HasIdentifier,
    HasIdentifierMixin,
    HasOperands,
    HasOperandsMixin,
    HasProvenance,
    HasProvenanceMixin,
    HasResults,
    HasResultsMixin,
    HasType,
    HasTypeMixin,
    Orderable,
    OrderableMixin,
    PartialEqual,
    PartialEqualMixin,
    PartialOrderable,
    PartialOrderableMixin,
    StructuralEquivalence,
    StructuralEquivalenceMixin,
    Verifiable,
    VerifiableMixin,
    VerificationError,
    Visitable,
    VisitableMixin,
)
from .types import (
    CoreDataType,
    DataType,
    FhYCoreTypeError,
    IndexType,
    NumericalType,
    PrimitiveDataType,
    TemplateDataType,
    TupleType,
    Type,
    TypeQualifier,
    get_core_data_type_bit_width,
    promote_core_data_types,
    promote_primitive_data_types,
    promote_type_qualifiers,
)
from .utils import (
    IntEnum,
    Lattice,
    PartiallyOrderedSet,
    Stack,
    StrEnum,
    format_comma_separated_list,
    get_array_size_in_bits,
    invert_dict,
    invert_frozen_dict,
)
