Example 7: Network Color Depiction (WORK IN PROGRESS: Loop over multiple SIR 3S calculations)
This example demonstrates how to …
SIR 3S Installation
[1]:
SIR3S_SIRGRAF_DIR = r"C:\3S\SIR 3S\SirGraf-90-15-00-20x64_Quebec-Upd1" #change to local path
Imports
[2]:
from sir3stoolkit.core import wrapper
[3]:
from sir3stoolkit.mantle import mantle
The wrapper package has to be initialized with reference to a SIR 3S (SirGraf) installation.
[4]:
wrapper.Initialize_Toolkit(SIR3S_SIRGRAF_DIR)
Additional imports
[5]:
import os
…
Initialization
[6]:
s3s = mantle.Mantle_SIR3S_Model()
Initialization complete
Open Model
[7]:
dbFilePath=r"C:\Users\aUsername\3S\PT3S\PT3S\Examples\Example5.db3"
[8]:
s3s.OpenModel(dbName=dbFilePath,
providerType=s3s.ProviderTypes.SQLite,
Mid="M-1-0-1",
saveCurrentlyOpenModel=False,
namedInstance="",
userID="",
password="")
Model is open for further operation
View network graph
[9]:
import networkx as nx
[10]:
import matplotlib.pyplot as plt
[11]:
G = s3s.SIR_3S_to_nx_graph()
[2025-12-04 15:22:18,098] INFO in sir3stoolkit.mantle.alternative_models: [graph] Building nx graph...
[2025-12-04 15:22:18,099] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.Node
[2025-12-04 15:22:18,108] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 1559 element(s) of element type ObjectTypes.Node.
[2025-12-04 15:22:18,112] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 1559 element(s) of element type ObjectTypes.Node.
[2025-12-04 15:22:18,129] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 1 metadata properties.
[2025-12-04 15:22:18,130] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving metadata properties ['Fkcont'], geometry...
[2025-12-04 15:22:18,337] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:18,339] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (1559, 3)
[2025-12-04 15:22:18,340] INFO in sir3stoolkit.mantle.alternative_models: [graph] Retrieved 1559 nodes.
[2025-12-04 15:22:18,343] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.Pipe
[2025-12-04 15:22:18,348] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 1672 element(s) of element type ObjectTypes.Pipe.
[2025-12-04 15:22:18,352] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 1672 element(s) of element type ObjectTypes.Pipe.
[2025-12-04 15:22:18,353] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 1 metadata properties.
[2025-12-04 15:22:18,354] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving metadata properties ['Fkcont'], geometry, end nodes...
[2025-12-04 15:22:18,917] INFO in sir3stoolkit.mantle.dataframes: [metadata] 2 non-empty end node columns were created.
[2025-12-04 15:22:18,954] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:18,955] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (1672, 6)
[2025-12-04 15:22:18,958] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.Valve
[2025-12-04 15:22:18,960] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 119 element(s) of element type ObjectTypes.Valve.
[2025-12-04 15:22:18,961] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 119 element(s) of element type ObjectTypes.Valve.
[2025-12-04 15:22:18,964] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 1 metadata properties.
[2025-12-04 15:22:18,965] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving metadata properties ['Fkcont'], geometry, end nodes...
[2025-12-04 15:22:19,400] INFO in sir3stoolkit.mantle.dataframes: [metadata] 2 non-empty end node columns were created.
[2025-12-04 15:22:19,407] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:19,407] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (119, 6)
[2025-12-04 15:22:19,410] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.FlapValve
[2025-12-04 15:22:19,412] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 5 element(s) of element type ObjectTypes.FlapValve.
[2025-12-04 15:22:19,413] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 5 element(s) of element type ObjectTypes.FlapValve.
[2025-12-04 15:22:19,413] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 1 metadata properties.
[2025-12-04 15:22:19,417] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving metadata properties ['Fkcont'], geometry, end nodes...
[2025-12-04 15:22:19,427] INFO in sir3stoolkit.mantle.dataframes: [metadata] 2 non-empty end node columns were created.
[2025-12-04 15:22:19,436] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:19,439] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (5, 6)
[2025-12-04 15:22:19,442] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.ControlValve
[2025-12-04 15:22:19,444] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 1 element(s) of element type ObjectTypes.ControlValve.
[2025-12-04 15:22:19,451] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 1 element(s) of element type ObjectTypes.ControlValve.
[2025-12-04 15:22:19,451] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 1 metadata properties.
[2025-12-04 15:22:19,475] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving metadata properties ['Fkcont'], geometry, end nodes...
[2025-12-04 15:22:19,500] INFO in sir3stoolkit.mantle.dataframes: [metadata] 2 non-empty end node columns were created.
[2025-12-04 15:22:19,505] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:19,507] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (1, 6)
[2025-12-04 15:22:19,511] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.Pump
[2025-12-04 15:22:19,513] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 3 element(s) of element type ObjectTypes.Pump.
[2025-12-04 15:22:19,514] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 3 element(s) of element type ObjectTypes.Pump.
[2025-12-04 15:22:19,517] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 1 metadata properties.
[2025-12-04 15:22:19,520] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving metadata properties ['Fkcont'], geometry, end nodes...
[2025-12-04 15:22:19,717] INFO in sir3stoolkit.mantle.dataframes: [metadata] 2 non-empty end node columns were created.
[2025-12-04 15:22:19,723] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:19,725] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (3, 6)
[2025-12-04 15:22:19,728] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.DistrictHeatingConsumer
[2025-12-04 15:22:19,729] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 656 element(s) of element type ObjectTypes.DistrictHeatingConsumer.
[2025-12-04 15:22:19,732] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 656 element(s) of element type ObjectTypes.DistrictHeatingConsumer.
[2025-12-04 15:22:19,735] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 1 metadata properties.
[2025-12-04 15:22:19,735] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving metadata properties ['Fkcont'], geometry, end nodes...
[2025-12-04 15:22:19,859] INFO in sir3stoolkit.mantle.dataframes: [metadata] 2 non-empty end node columns were created.
[2025-12-04 15:22:19,867] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:19,867] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (656, 6)
[2025-12-04 15:22:19,875] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.DistrictHeatingFeeder
[2025-12-04 15:22:19,876] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 2 element(s) of element type ObjectTypes.DistrictHeatingFeeder.
[2025-12-04 15:22:19,877] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 2 element(s) of element type ObjectTypes.DistrictHeatingFeeder.
[2025-12-04 15:22:19,880] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 1 metadata properties.
[2025-12-04 15:22:19,880] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving metadata properties ['Fkcont'], geometry, end nodes...
[2025-12-04 15:22:19,901] INFO in sir3stoolkit.mantle.dataframes: [metadata] 2 non-empty end node columns were created.
[2025-12-04 15:22:19,905] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:19,906] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (2, 6)
[2025-12-04 15:22:19,910] INFO in sir3stoolkit.mantle.dataframes: [hydraulic edges dataframe] Retrieved 2458 edges from 17 element types.
[2025-12-04 15:22:19,912] INFO in sir3stoolkit.mantle.alternative_models: [graph] Adding nodes to graph...
[2025-12-04 15:22:20,042] INFO in sir3stoolkit.mantle.alternative_models: [graph] Adding edges to graph...
[2025-12-04 15:22:20,272] INFO in sir3stoolkit.mantle.alternative_models: [graph] Graph construction complete. Nodes: 1559, Edges: 2457
[12]:
def plot_nx_graph(G, main_container):
# Extract node positions from geometry and filter by Fkcont
pos = {
node_id: (data['geometry'].x, data['geometry'].y)
for node_id, data in G.nodes(data=True)
if 'geometry' in data and hasattr(data['geometry'], 'x') and hasattr(data['geometry'], 'y')
and data.get('Fkcont') == main_container
}
# Extract edges with valid geometry and both nodes in pos
edges = [
(u, v, data) for u, v, data in G.edges(data=True)
if u in pos and v in pos and 'geometry' in data and data['geometry'].geom_type != 'Point'
]
# Plot
plt.figure(figsize=(20, 14))
for _, _, data in edges:
geom = data['geometry']
x, y = geom.xy
plt.plot(x, y, color='black', linewidth=1)
# Only draw nodes that have positions
nx.draw_networkx_nodes(G, pos=pos, nodelist=list(pos.keys()), node_color='black', node_size=10)
plt.title(f"nx-Graph")
plt.axis('equal')
plt.show()
[13]:
plot_nx_graph(G, s3s.GetMainContainer()[0])
Prep Data
District Heating consumers
[14]:
gdf_district_heating_consumer_metadata = s3s.generate_element_metadata_dataframe(s3s.ObjectTypes.DistrictHeatingConsumer
,properties=[]
,geometry=True)
[2025-12-04 15:22:21,931] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.DistrictHeatingConsumer
[2025-12-04 15:22:21,935] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 656 element(s) of element type ObjectTypes.DistrictHeatingConsumer.
[2025-12-04 15:22:21,937] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 656 element(s) of element type ObjectTypes.DistrictHeatingConsumer.
[2025-12-04 15:22:21,939] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 0 metadata properties.
[2025-12-04 15:22:21,941] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving geometry...
[2025-12-04 15:22:21,989] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:21,989] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (656, 2)
[15]:
gdf_district_heating_consumer_results=s3s.generate_element_results_dataframe(element_type=s3s.ObjectTypes.DistrictHeatingConsumer
,properties=["QM"]
,timestamps=[0])
[2025-12-04 15:22:22,005] INFO in sir3stoolkit.mantle.dataframes: [results] Generating results dataframe for element type: ObjectTypes.DistrictHeatingConsumer
[2025-12-04 15:22:22,251] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] Only static timestamp 2025-09-24 00:00:00.000 +02:00 is used
[2025-12-04 15:22:22,252] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] 1 valid timestamp(s) will be used.
[2025-12-04 15:22:22,255] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 656 element(s) of element type ObjectTypes.DistrictHeatingConsumer.
[2025-12-04 15:22:22,257] INFO in sir3stoolkit.mantle.dataframes: [results] Using 1 result properties.
[2025-12-04 15:22:22,285] INFO in sir3stoolkit.mantle.dataframes: [results] Retrieving result properties...
[2025-12-04 15:22:22,403] INFO in sir3stoolkit.mantle.dataframes: [results] Done. Shape: (1, 656)
[16]:
gdf_district_heating_consumer_results.columns = gdf_district_heating_consumer_results.columns.droplevel([1, 2])
gdf_district_heating_consumer_results = gdf_district_heating_consumer_results.T.unstack(level=0).T
gdf_district_heating_consumer_results = gdf_district_heating_consumer_results.droplevel(0, axis=0)
gdf_district_heating_consumer = gdf_district_heating_consumer_metadata.merge(on="tk",
how="outer",
right=gdf_district_heating_consumer_results)
[17]:
gdf_district_heating_consumer.head(3)
[17]:
| tk | geometry | QM | |
|---|---|---|---|
| 0 | 4615167946623235098 | POINT (48964.78656816362 97889.18677734208) | 9.808820 |
| 1 | 4615393182465694100 | POINT (46651.60694166463 97713.81722454002) | 8.018323 |
| 2 | 4616022158288753538 | POINT (54845.39768749467 97480.83261120686) | 3.134198 |
Pipes
[18]:
df_pipes_metadata=s3s.generate_element_metadata_dataframe(s3s.ObjectTypes.Pipe
,properties=["DN"]
,geometry=True)
[2025-12-04 15:22:22,455] INFO in sir3stoolkit.mantle.dataframes: [metadata] Generating metadata dataframe for element type: ObjectTypes.Pipe
[2025-12-04 15:22:22,458] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieved 1672 element(s) of element type ObjectTypes.Pipe.
[2025-12-04 15:22:22,462] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 1672 element(s) of element type ObjectTypes.Pipe.
[2025-12-04 15:22:22,462] INFO in sir3stoolkit.mantle.dataframes: [Resolving Metadata Properties] Using 1 metadata properties.
[2025-12-04 15:22:22,462] INFO in sir3stoolkit.mantle.dataframes: [metadata] Retrieving metadata properties ['DN'], geometry...
[2025-12-04 15:22:22,723] WARNING in sir3stoolkit.mantle.dataframes: [metadata] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.
[2025-12-04 15:22:22,723] INFO in sir3stoolkit.mantle.dataframes: [metadata] Done. Shape: (1672, 3)
[19]:
df_pipes_results=s3s.generate_element_results_dataframe(element_type=s3s.ObjectTypes.Pipe
,properties=["QMAV"]
,timestamps=[0])
[2025-12-04 15:22:22,737] INFO in sir3stoolkit.mantle.dataframes: [results] Generating results dataframe for element type: ObjectTypes.Pipe
[2025-12-04 15:22:22,959] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] Only static timestamp 2025-09-24 00:00:00.000 +02:00 is used
[2025-12-04 15:22:22,961] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] 1 valid timestamp(s) will be used.
[2025-12-04 15:22:22,963] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 1672 element(s) of element type ObjectTypes.Pipe.
[2025-12-04 15:22:22,963] INFO in sir3stoolkit.mantle.dataframes: [results] Using 1 result properties.
[2025-12-04 15:22:23,006] INFO in sir3stoolkit.mantle.dataframes: [results] Retrieving result properties...
[2025-12-04 15:22:23,400] INFO in sir3stoolkit.mantle.dataframes: [results] Done. Shape: (1, 1672)
[20]:
df_pipes_results.columns = df_pipes_results.columns.droplevel([1, 2])
df_pipes_results = df_pipes_results.T.unstack(level=0).T
df_pipes_results = df_pipes_results.droplevel(0, axis=0)
df_pipes = df_pipes_metadata.merge(on="tk",
how="outer",
right=df_pipes_results)
[21]:
df_pipes['QMAVAbs'] = df_pipes['QMAV'].abs()
[22]:
df_pipes.head(3)
[22]:
| tk | DN | geometry | QMAV | QMAVAbs | |
|---|---|---|---|---|---|
| 0 | 4613765641349500151 | 150 | LINESTRING (47478.00263683735 97484.9974701480... | -10.61157 | 10.61157 |
| 1 | 4614040293856762696 | 200 | LINESTRING (49756.350183295086 97621.546860662... | -135.87620 | 135.87620 |
| 2 | 4614199490723616754 | 150 | LINESTRING (50941.63085419123 97450.3987353445... | 19.20712 | 19.20712 |
Plotting
[23]:
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import contextily as cx
[24]:
def plot_Result_ncd(gdf_ROHR, gdf_FWVB, axTitle='initial condition'):
fig, ax = plt.subplots(figsize=(16.54, 11.69))
# Nodes (size+color by QM)
nodes_patches_1 = s3s.plot_node_layer(
ax=ax,
gdf=gdf_FWVB,
attribute='QM',
colors=['cyan', 'teal'],
marker_style='p',
marker_size_factor=3000,
legend_fmt='{:4.0f} t/h',
legend_values=[0, 25, 50, 75, 100],
zorder=1
)
# Pipes layer 1 (size+color by DN)
pipes_patches_2 = s3s.plot_pipe_layer(
ax=ax,
gdf=gdf_ROHR,
attribute='DN',
colors=['lightgray', 'dimgray'],
legend_fmt='{:4.0f} mm',
line_width_factor=25,
legend_values=[0, 250, 500, 750],
zorder=2
)
# Pipes layer 2 (size+color by QMAVAbs)
pipes_patches_3 = s3s.plot_pipe_layer(
ax=ax,
gdf=gdf_ROHR,
attribute='QMAVAbs',
colors=['darkgreen', 'magenta'],
legend_fmt='{:4.0f} t/h',
line_width_factor=20,
legend_values=[0, 500, 1000, 1500, 2000],
zorder=3
)
# Combine handles
handles = []
for h in (nodes_patches_1, pipes_patches_2, pipes_patches_3):
if h:
handles.extend(h)
# Deduplicate legend by label
if handles:
seen = set()
unique = []
for h in handles:
if h.get_label() not in seen:
unique.append(h)
seen.add(h.get_label())
ax.legend(handles=unique, loc='best')
ax.set_title(axTitle)
plt.tight_layout()
[25]:
plot_Result_ncd(df_pipes, gdf_district_heating_consumer)
[2025-12-04 15:22:24,890] INFO in sir3stoolkit.mantle.plotting: [plot] Plotting nodes (size='None', color='None', attr='QM')
[2025-12-04 15:22:24,922] INFO in sir3stoolkit.mantle.plotting: [plot] Nodes: plotted 656 points.
[2025-12-04 15:22:24,923] INFO in sir3stoolkit.mantle.plotting: [plot] Plotting pipes (width='None', color='None', attr='DN')
[2025-12-04 15:22:25,023] INFO in sir3stoolkit.mantle.plotting: [plot] Pipes: plotted 1672 segments.
[2025-12-04 15:22:25,023] INFO in sir3stoolkit.mantle.plotting: [plot] Plotting pipes (width='None', color='None', attr='QMAVAbs')
[2025-12-04 15:22:25,122] INFO in sir3stoolkit.mantle.plotting: [plot] Pipes: plotted 1672 segments.
[ ]: