#![allow(rustdoc::private_intra_doc_links)]
#[cfg(feature = "schema")]
pub mod schema;
pub mod broadcast;
pub mod config;
pub mod constraints;
pub mod error;
pub mod extensions;
pub mod initial_conditions;
pub mod output;
pub(crate) mod parquet_helpers;
pub mod penalties;
pub(crate) mod pipeline;
pub mod post_study_stages;
pub mod report;
pub mod resolution;
pub mod scenarios;
pub mod stage_resolve;
pub mod stages;
pub mod system;
pub mod validation;
pub(crate) mod windowed_history;
pub use broadcast::{
BroadcastComputedParameter, BroadcastParameterKind, BroadcastScalarParameter,
deserialize_parameters, deserialize_system, serialize_parameters, serialize_system,
};
pub use config::{
BoundaryPolicy, Config, EstimationConfig, OrderSelectionMethod, PolicyMode, parse_config,
};
pub use constraints::{
BusPenaltyOverrideRow, ContractBoundsRow, GenericConstraintBoundsRow, HydroBoundsRow,
HydroPenaltyOverrideRow, LineBoundsRow, LineBusPairIndex, LinePenaltyOverrideRow,
NcsPenaltyOverrideRow, PumpingBoundsRow, ThermalBoundsRow, build_line_bus_pair_index,
load_contract_bounds, load_generic_constraint_bounds, load_generic_constraints,
load_hydro_bounds, load_line_bounds, load_penalty_overrides_bus, load_penalty_overrides_hydro,
load_penalty_overrides_line, load_penalty_overrides_ncs, load_pumping_bounds,
load_thermal_bounds, parse_contract_bounds, parse_generic_constraint_bounds,
parse_generic_constraints, parse_hydro_bounds, parse_line_bounds, parse_penalty_overrides_bus,
parse_penalty_overrides_hydro, parse_penalty_overrides_line, parse_penalty_overrides_ncs,
parse_pumping_bounds, parse_thermal_bounds,
};
pub use error::LoadError;
pub use extensions::{
EvaporationModelRow, FittingWindow, FphaColumnLayout, FphaDeviationPointRow, FphaHyperplaneRow,
HydroEnergyProductivityRow, HydroGeometryRow, HydroReferenceVolumeFractions,
PlaneReductionConfig, ProductionModelConfig, ProductionModelFile, SeasonConfig, SelectionMode,
StageRange, build_hydro_reference_volumes_resolved, load_fpha_hyperplanes,
load_hydro_energy_productivity, load_hydro_geometry, load_production_models,
load_scalar_parameters_json, parse_evaporation_models, parse_fpha_deviation_points,
parse_fpha_hyperplanes, parse_hydro_energy_productivity, parse_hydro_geometry,
parse_production_models, parse_scalar_parameters_json,
};
pub use initial_conditions::parse_initial_conditions;
pub use output::policy::{
ENTITY_SLOT_DELIVERY_DATE_SENTINEL, EntitySlot, FORMAT_VERSION, GraphManifest, ManifestEdge,
ManifestNode, OwnedPolicyBasisRecord, OwnedPolicyCutRecord, PolicyBasisRecord,
PolicyCheckpoint, PolicyCheckpointMetadata, PolicyCutRecord, ProducerBlock,
STAGE_STATES_NODE_ID_SENTINEL, StageCutsPayload, StageCutsReadResult, StageStatesPayload,
StageStatesReadResult, deserialize_stage_basis, deserialize_stage_cuts,
deserialize_stage_states, read_policy_checkpoint, serialize_stage_basis, serialize_stage_cuts,
serialize_stage_states, write_policy_checkpoint,
};
pub use output::{
ConvergenceSummary, DeviationSummary, DeviationWorstEntry, DistributionInfo,
GenericConstraintEchoRow, HostLayout, IterationRecord, MetadataBounds, MetadataConfiguration,
MetadataConvergence, MetadataCost, MetadataIterations, MetadataProblemDimensions,
MetadataRowPool, MetadataScenarios, MetadataSimulationSolveStats, MetadataTrainingSolveStats,
OutputContext, OutputError, ParquetWriterConfig, RowPoolStatistics, RowSelectionRecord,
SetupTimings, SimulationMetadata, SimulationOutput, SolverStatsRow, TrainingMetadata,
TrainingOutput, TrainingParquetWriter, WorkerTimingRecord, get_hostname, now_iso8601,
read_convergence_summary, read_hydro_model_summary, read_provenance_report,
read_simulation_metadata, read_training_metadata, write_dictionaries, write_evaporation_models,
write_fpha_deviation_points, write_fpha_hyperplanes, write_generic_constraint_echo,
write_hydro_model_summary, write_provenance_report, write_results, write_row_selection_records,
write_scaling_report, write_simulation_metadata, write_simulation_results,
write_simulation_solver_stats, write_solver_stats, write_training_metadata,
write_training_results,
};
pub use penalties::parse_penalties;
pub use post_study_stages::parse_post_study_stages;
pub use report::{ReportEntry, ValidationReport, generate_report};
pub use resolution::{resolve_bounds, resolve_penalties};
pub use scenarios::{
BlockFactor, ExternalLoadRow, ExternalNcsRow, ExternalScenarioRow, InflowArCoefficientRow,
InflowHistoryRow, InflowSeasonalStatsRow, LoadFactorEntry, LoadSeasonalStatsRow,
NoiseOpeningRow, ScenarioData, assemble_inflow_models, assemble_load_models, load_correlation,
load_external_inflow_scenarios, load_external_load_scenarios, load_external_ncs_scenarios,
load_inflow_ar_coefficients, load_inflow_history, load_inflow_seasonal_stats,
load_load_factors, load_load_seasonal_stats, load_noise_openings, load_scenarios,
parse_correlation, parse_external_inflow_scenarios, parse_external_load_scenarios,
parse_external_ncs_scenarios, parse_inflow_ar_coefficients, parse_inflow_history,
parse_inflow_seasonal_stats, parse_load_factors, parse_load_seasonal_stats,
};
pub use stage_resolve::StageIdResolver;
pub use stages::{StagesData, build_season_stage_map, parse_stages};
pub use system::{
load_energy_contracts, load_non_controllable_sources, load_pumping_stations, parse_buses,
parse_energy_contracts, parse_hydros, parse_lines, parse_non_controllable_sources,
parse_pumping_stations, parse_thermals,
};
pub use validation::scalar_parameters::validate_scalar_parameters;
pub use validation::semantic::seed_lag_state_depth;
pub use validation::structural::{FileManifest, validate_structure};
pub use validation::{ErrorKind, Severity, ValidationContext, ValidationEntry};
use cobre_core::{ScalarParameter, System};
use std::path::Path;
#[derive(Debug, Clone, Default)]
pub struct CaseArtifacts {
pub file_manifest: FileManifest,
pub hydro_geometry: Vec<extensions::HydroGeometryRow>,
pub production_models: Vec<extensions::ProductionModelConfig>,
pub plane_reduction: Option<extensions::PlaneReductionConfig>,
pub hydro_energy_productivity: Vec<extensions::HydroEnergyProductivityRow>,
pub fpha_hyperplanes: Vec<extensions::FphaHyperplaneRow>,
pub scalar_parameters: Vec<ScalarParameter>,
pub tailrace_curves: Vec<extensions::TailraceCurveRow>,
}
#[derive(Debug)]
pub struct LoadedCase {
pub system: System,
pub artifacts: CaseArtifacts,
}
pub fn load_case(path: &Path) -> Result<System, LoadError> {
pipeline::run_pipeline(path)
}
pub fn load_case_with_artifacts(path: &Path) -> Result<LoadedCase, LoadError> {
pipeline::run_pipeline_with_artifacts(path).map(|(loaded, _report)| loaded)
}
pub fn validate_case(path: &Path) -> Result<(System, ValidationReport), LoadError> {
pipeline::run_pipeline_with_report(path)
}
pub fn validate_case_with_artifacts(
path: &Path,
) -> Result<(LoadedCase, ValidationReport), LoadError> {
pipeline::run_pipeline_with_artifacts(path)
}
#[cfg(test)]
mod tests {
use crate::CaseArtifacts;
#[test]
fn case_artifacts_plane_reduction_defaults_to_none() {
let artifacts = CaseArtifacts::default();
assert!(artifacts.plane_reduction.is_none());
}
}