Skip to content

Commit 84d4bba

Browse files
committed
Add scenarios and periods to repr and str of FlowSystem
1 parent 377eff1 commit 84d4bba

1 file changed

Lines changed: 34 additions & 13 deletions

File tree

flixopt/flow_system.py

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -643,11 +643,15 @@ def _connect_network(self):
643643
def __repr__(self) -> str:
644644
"""Compact representation for debugging."""
645645
status = '✓' if self.connected_and_transformed else '⚠'
646-
return (
647-
f'FlowSystem({len(self.timesteps)} timesteps '
648-
f'[{self.timesteps[0].strftime("%Y-%m-%d")} to {self.timesteps[-1].strftime("%Y-%m-%d")}], '
649-
f'{len(self.components)} Components, {len(self.buses)} Buses, {len(self.effects)} Effects, {status})'
650-
)
646+
647+
# Build dimension info
648+
dims = f'{len(self.timesteps)} timesteps [{self.timesteps[0].strftime("%Y-%m-%d")} to {self.timesteps[-1].strftime("%Y-%m-%d")}]'
649+
if self.periods is not None:
650+
dims += f', {len(self.periods)} periods'
651+
if self.scenarios is not None:
652+
dims += f', {len(self.scenarios)} scenarios'
653+
654+
return f'FlowSystem({dims}, {len(self.components)} Components, {len(self.buses)} Buses, {len(self.effects)} Effects, {status})'
651655

652656
def __str__(self) -> str:
653657
"""Structured summary for users."""
@@ -665,16 +669,33 @@ def format_elements(element_names: list, label: str, alignment: int = 12):
665669
freq_str = str(self.timesteps.freq).replace('<', '').replace('>', '') if self.timesteps.freq else 'irregular'
666670

667671
lines = [
668-
'FlowSystem Overview:',
669-
f'{"─" * 50}',
670-
time_period,
671-
f'Timesteps: {len(self.timesteps)} ({freq_str})',
672-
format_elements(list(self.components.keys()), 'Components'),
673-
format_elements(list(self.buses.keys()), 'Buses'),
674-
format_elements(list(self.effects.effects.keys()), 'Effects'),
675-
f'Status: {"Connected & Transformed" if self.connected_and_transformed else "Not connected"}',
672+
f'Timesteps: {len(self.timesteps)} ({freq_str}) [{time_period}]',
676673
]
677674

675+
# Add periods if present
676+
if self.periods is not None:
677+
period_names = ', '.join(str(p) for p in self.periods[:3])
678+
if len(self.periods) > 3:
679+
period_names += f' ... (+{len(self.periods) - 3} more)'
680+
lines.append(f'Periods: {len(self.periods)} ({period_names})')
681+
682+
# Add scenarios if present
683+
if self.scenarios is not None:
684+
scenario_names = ', '.join(str(s) for s in self.scenarios[:3])
685+
if len(self.scenarios) > 3:
686+
scenario_names += f' ... (+{len(self.scenarios) - 3} more)'
687+
lines.append(f'Scenarios: {len(self.scenarios)} ({scenario_names})')
688+
689+
lines.extend(
690+
[
691+
format_elements(list(self.components.keys()), 'Components'),
692+
format_elements(list(self.buses.keys()), 'Buses'),
693+
format_elements(list(self.effects.effects.keys()), 'Effects'),
694+
f'Status: {"Connected & Transformed" if self.connected_and_transformed else "Not connected"}',
695+
]
696+
)
697+
lines = ['FlowSystem:', f'{"─" * max(len(line) for line in lines)}'] + lines
698+
678699
return '\n'.join(lines)
679700

680701
def __eq__(self, other: FlowSystem):

0 commit comments

Comments
 (0)