use std::collections::{BTreeMap, BTreeSet};
use crate::scalar_value::TruthCondition;
use crate::{Guard, ProviderSchemaUse, ValueKind, contract::ContractUse};
use helm_schema_core::{
ApproximationRole, ConditionalGuard, ConditionalOverlayEvidence, ConditionalOverlayFlavor,
ConditionalPathOverlay, ContractPathSchemaEvidence, ContractRequirednessEvidence,
ContractRequirementImplication, ContractRequirementTarget, ContractSchemaSignals,
ContractValuePathFacts, FailValueRequirement, GuardDnf, GuardValue, MetadataFieldKind,
Predicate,
};
mod conditional_overlays;
mod contract_rows;
mod final_signals;
mod input_channels;
mod requirements;
use conditional_overlays::{
collapse_layered_truthy_gates, collect_paths_with_descendants, extend_lowerable_predicate,
hard_negation_paths, lowerable_conditional_guard_set, lowerable_conditional_guard_subset,
member_local_truthy_selector, path_contains_wildcard, predicate_is_structural_ancestor_guard,
predicate_tests_source_type, predicate_to_guard, provider_schema_use,
range_guard_is_iteration_ancestor, ranged_member_parent, record_member_range_requirement,
terminal_clause_guard,
};
use contract_rows::{
ContractPathAccumulator, MemberAccessConditions, PathSchemaFactsAccumulator,
lowerable_range_outer_guards, predicate_is_truthy_disjunction_over, record_contract_use,
record_range_input_capture, remove_redundant_approximate_conditions,
};
use final_signals::{SourceUseFactSplit, finish_schema_signals, path_accumulator};
pub(crate) use input_channels::derive_schema_signals_from_contract_parts;
use requirements::{record_fail_conjunction, record_member_access_implications};