Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 27 additions & 17 deletions src/component_category.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use std::fmt::Display;
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum InverterType {
Unspecified,
Solar,
Pv,
Battery,
Hybrid,
}
Expand All @@ -21,7 +21,7 @@ impl Display for InverterType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
InverterType::Unspecified => write!(f, "Unspecified"),
InverterType::Solar => write!(f, "Solar"),
InverterType::Pv => write!(f, "Pv"),
InverterType::Battery => write!(f, "Battery"),
InverterType::Hybrid => write!(f, "Hybrid"),
}
Expand Down Expand Up @@ -74,27 +74,31 @@ impl Display for EvChargerType {
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ComponentCategory {
Unspecified,
Grid,
GridConnectionPoint,
Meter,
Battery(BatteryType),
Inverter(InverterType),
EvCharger(EvChargerType),
Converter,
CryptoMiner,
Electrolyzer,
Chp,
Battery(BatteryType),
EvCharger(EvChargerType),
Breaker,
Precharger,
Fuse,
VoltageTransformer,
Chp,
Electrolyzer,
PowerTransformer,
Hvac,
Relay,
Plc,
CryptoMiner,
StaticTransferSwitch,
UninterruptiblePowerSupply,
CapacitorBank,
WindTurbine,
}

impl Display for ComponentCategory {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ComponentCategory::Unspecified => write!(f, "Unspecified"),
ComponentCategory::Grid => write!(f, "Grid"),
ComponentCategory::GridConnectionPoint => write!(f, "GridConnectionPoint"),
ComponentCategory::Meter => write!(f, "Meter"),
ComponentCategory::Battery(battery_type) => write!(f, "Battery({battery_type})"),
ComponentCategory::Inverter(inverter_type) => write!(f, "{inverter_type}Inverter"),
Expand All @@ -106,10 +110,16 @@ impl Display for ComponentCategory {
ComponentCategory::Electrolyzer => write!(f, "Electrolyzer"),
ComponentCategory::Chp => write!(f, "CHP"),
ComponentCategory::Precharger => write!(f, "Precharger"),
ComponentCategory::Fuse => write!(f, "Fuse"),
ComponentCategory::VoltageTransformer => write!(f, "VoltageTransformer"),
ComponentCategory::Hvac => write!(f, "HVAC"),
ComponentCategory::Relay => write!(f, "Relay"),
ComponentCategory::Breaker => write!(f, "Breaker"),
ComponentCategory::PowerTransformer => write!(f, "PowerTransformer"),
ComponentCategory::Plc => write!(f, "PLC"),
ComponentCategory::StaticTransferSwitch => write!(f, "StaticTransferSwitch"),
ComponentCategory::UninterruptiblePowerSupply => {
write!(f, "UninterruptiblePowerSupply")
}
ComponentCategory::CapacitorBank => write!(f, "CapacitorBank"),
ComponentCategory::WindTurbine => write!(f, "WindTurbine"),
}
}
}
Expand All @@ -121,7 +131,7 @@ pub(crate) trait CategoryPredicates: Node {
}

fn is_grid(&self) -> bool {
self.category() == ComponentCategory::Grid
self.category() == ComponentCategory::GridConnectionPoint
}

fn is_meter(&self) -> bool {
Expand All @@ -147,7 +157,7 @@ pub(crate) trait CategoryPredicates: Node {
}

fn is_pv_inverter(&self) -> bool {
self.category() == ComponentCategory::Inverter(InverterType::Solar)
self.category() == ComponentCategory::Inverter(InverterType::Pv)
}

fn is_hybrid_inverter(&self) -> bool {
Expand Down
2 changes: 1 addition & 1 deletion src/graph/creation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ mod tests {
.unwrap()
.is_battery_inverter(&unspec_inv_config));
builder.pop_connection();
builder.add_component(ComponentCategory::Grid);
builder.add_component(ComponentCategory::GridConnectionPoint);
assert!(builder
.build(None)
.is_err_and(|e| e == Error::invalid_graph("Multiple grid components found.")));
Expand Down
10 changes: 5 additions & 5 deletions src/graph/meter_roles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ mod tests {

fn nodes_and_edges() -> (Vec<TestComponent>, Vec<TestConnection>) {
let components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
TestComponent::new(3, ComponentCategory::Meter),
TestComponent::new(4, ComponentCategory::Inverter(InverterType::Battery)),
Expand All @@ -108,13 +108,13 @@ mod tests {
TestComponent::new(7, ComponentCategory::Inverter(InverterType::Battery)),
TestComponent::new(8, ComponentCategory::Battery(BatteryType::Unspecified)),
TestComponent::new(9, ComponentCategory::Meter),
TestComponent::new(10, ComponentCategory::Inverter(InverterType::Solar)),
TestComponent::new(11, ComponentCategory::Inverter(InverterType::Solar)),
TestComponent::new(10, ComponentCategory::Inverter(InverterType::Pv)),
TestComponent::new(11, ComponentCategory::Inverter(InverterType::Pv)),
TestComponent::new(12, ComponentCategory::Meter),
TestComponent::new(13, ComponentCategory::Chp),
TestComponent::new(14, ComponentCategory::Meter),
TestComponent::new(15, ComponentCategory::Chp),
TestComponent::new(16, ComponentCategory::Inverter(InverterType::Solar)),
TestComponent::new(16, ComponentCategory::Inverter(InverterType::Pv)),
TestComponent::new(17, ComponentCategory::Inverter(InverterType::Battery)),
TestComponent::new(18, ComponentCategory::Battery(BatteryType::LiIon)),
];
Expand Down Expand Up @@ -177,7 +177,7 @@ mod tests {
components.push(TestComponent::new(24, ComponentCategory::Meter));
components.push(TestComponent::new(
25,
ComponentCategory::Inverter(InverterType::Solar),
ComponentCategory::Inverter(InverterType::Pv),
));
connections.push(TestConnection::new(20, 24));
connections.push(TestConnection::new(24, 25));
Expand Down
7 changes: 5 additions & 2 deletions src/graph/retrieval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ mod tests {
fn nodes_and_edges() -> (Vec<TestComponent>, Vec<TestConnection>) {
let components = vec![
TestComponent::new(6, ComponentCategory::Meter),
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(7, ComponentCategory::Inverter(InverterType::Battery)),
TestComponent::new(3, ComponentCategory::Meter),
TestComponent::new(5, ComponentCategory::Battery(BatteryType::Unspecified)),
Expand Down Expand Up @@ -186,7 +186,10 @@ mod tests {

assert_eq!(
graph.component(1),
Ok(&TestComponent::new(1, ComponentCategory::Grid))
Ok(&TestComponent::new(
1,
ComponentCategory::GridConnectionPoint
))
);
assert_eq!(
graph.component(5),
Expand Down
4 changes: 2 additions & 2 deletions src/graph/test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ impl ComponentGraphBuilder {

/// Adds a grid component to the graph and returns its handle.
pub(super) fn grid(&mut self) -> ComponentHandle {
self.add_component(ComponentCategory::Grid)
self.add_component(ComponentCategory::GridConnectionPoint)
}

/// Adds a meter to the graph and returns its handle.
Expand All @@ -137,7 +137,7 @@ impl ComponentGraphBuilder {

/// Adds a solar inverter to the graph and returns its handle.
pub(super) fn solar_inverter(&mut self) -> ComponentHandle {
self.add_component(ComponentCategory::Inverter(InverterType::Solar))
self.add_component(ComponentCategory::Inverter(InverterType::Pv))
}

/// Adds an EV charger to the graph and returns its handle.
Expand Down
4 changes: 2 additions & 2 deletions src/graph/validation/validate_graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ mod tests {
fn nodes_and_edges() -> (Vec<TestComponent>, Vec<TestConnection>) {
let components = vec![
TestComponent::new(6, ComponentCategory::Meter),
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(7, ComponentCategory::Inverter(InverterType::Battery)),
TestComponent::new(10, ComponentCategory::Inverter(InverterType::Solar)),
TestComponent::new(10, ComponentCategory::Inverter(InverterType::Pv)),
TestComponent::new(3, ComponentCategory::Meter),
TestComponent::new(5, ComponentCategory::Battery(BatteryType::Unspecified)),
TestComponent::new(8, ComponentCategory::Battery(BatteryType::Unspecified)),
Expand Down
42 changes: 23 additions & 19 deletions src/graph/validation/validate_neighbors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ where
self.ensure_not_leaf(inverter)?;
self.ensure_on_successors(inverter, |n| n.is_battery(), "Batteries")?;
}
InverterType::Solar => {
InverterType::Pv => {
self.ensure_leaf(inverter)?;
}
InverterType::Hybrid => {
Expand Down Expand Up @@ -161,22 +161,25 @@ mod tests {
fn test_validate_root() {
let config = ComponentGraphConfig::default();
let components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
];
let connections = vec![TestConnection::new(1, 2)];
assert!(ComponentGraph::try_new(components, connections, config.clone()).is_ok());

let components = vec![TestComponent::new(1, ComponentCategory::Grid)];
let components = vec![TestComponent::new(
1,
ComponentCategory::GridConnectionPoint,
)];
let connections: Vec<TestConnection> = vec![];
assert!(
ComponentGraph::try_new(components, connections, config.clone()).is_err_and(|e| {
e == Error::invalid_graph("Grid:1 must have at least one successor.")
e == Error::invalid_graph("GridConnectionPoint:1 must have at least one successor.")
}),
);

let components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
TestComponent::new(3, ComponentCategory::Meter),
];
Expand All @@ -188,9 +191,10 @@ mod tests {

assert!(
ComponentGraph::try_new(components, connections, config.clone()).is_err_and(|e| {
e == Error::invalid_graph(
"Grid:1 can't have successors with multiple predecessors. Found Meter:3.",
)
e == Error::invalid_graph(concat!(
"GridConnectionPoint:1 can't have successors with ",
"multiple predecessors. Found Meter:3."
))
}),
);
}
Expand All @@ -199,7 +203,7 @@ mod tests {
fn test_validate_meter() {
let config = ComponentGraphConfig::default();
let components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
TestComponent::new(3, ComponentCategory::Battery(BatteryType::LiIon)),
];
Expand All @@ -217,7 +221,7 @@ r#"InvalidGraph: Multiple validation failures:
fn test_validate_battery_inverter() {
let config = ComponentGraphConfig::default();
let mut components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
TestComponent::new(3, ComponentCategory::Inverter(InverterType::Battery)),
TestComponent::new(4, ComponentCategory::Electrolyzer),
Expand Down Expand Up @@ -265,9 +269,9 @@ r#"InvalidGraph: Multiple validation failures:
fn test_validate_pv_inverter() {
let config = ComponentGraphConfig::default();
let mut components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
TestComponent::new(3, ComponentCategory::Inverter(InverterType::Solar)),
TestComponent::new(3, ComponentCategory::Inverter(InverterType::Pv)),
TestComponent::new(4, ComponentCategory::Electrolyzer),
];
let mut connections = vec![
Expand All @@ -280,7 +284,7 @@ r#"InvalidGraph: Multiple validation failures:
ComponentGraph::try_new(components.clone(), connections.clone(), config.clone())
.is_err_and(|e| {
e == Error::invalid_graph(
"SolarInverter:3 can't have any successors. Found Electrolyzer:4.",
"PvInverter:3 can't have any successors. Found Electrolyzer:4.",
)
}),
);
Expand All @@ -305,7 +309,7 @@ r#"InvalidGraph: Multiple validation failures:
fn test_validate_hybrid_inverter() {
let config = ComponentGraphConfig::default();
let mut components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
TestComponent::new(3, ComponentCategory::Inverter(InverterType::Hybrid)),
TestComponent::new(4, ComponentCategory::Electrolyzer),
Expand Down Expand Up @@ -346,7 +350,7 @@ r#"InvalidGraph: Multiple validation failures:
fn test_validate_batteries() {
let config = ComponentGraphConfig::default();
let mut components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
TestComponent::new(3, ComponentCategory::Inverter(InverterType::Battery)),
TestComponent::new(4, ComponentCategory::Battery(BatteryType::NaIon)),
Expand Down Expand Up @@ -393,7 +397,7 @@ r#"InvalidGraph: Multiple validation failures:
);

let components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Battery(BatteryType::LiIon)),
];
let connections = vec![TestConnection::new(1, 2)];
Expand All @@ -402,7 +406,7 @@ r#"InvalidGraph: Multiple validation failures:
ComponentGraph::try_new(components, connections, config.clone()).is_err_and(|e| {
e == Error::invalid_graph(concat!(
"Battery(LiIon):2 can only have predecessors that are ",
"BatteryInverters or HybridInverters. Found Grid:1."
"BatteryInverters or HybridInverters. Found GridConnectionPoint:1."
))
}),
);
Expand All @@ -412,7 +416,7 @@ r#"InvalidGraph: Multiple validation failures:
fn test_validate_ev_chargers() {
let config = ComponentGraphConfig::default();
let mut components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
TestComponent::new(3, ComponentCategory::EvCharger(EvChargerType::Dc)),
TestComponent::new(4, ComponentCategory::Electrolyzer),
Expand Down Expand Up @@ -441,7 +445,7 @@ r#"InvalidGraph: Multiple validation failures:
fn test_validate_chps() {
let config = ComponentGraphConfig::default();
let mut components = vec![
TestComponent::new(1, ComponentCategory::Grid),
TestComponent::new(1, ComponentCategory::GridConnectionPoint),
TestComponent::new(2, ComponentCategory::Meter),
TestComponent::new(3, ComponentCategory::Chp),
TestComponent::new(4, ComponentCategory::Electrolyzer),
Expand Down