first commit
This commit is contained in:
42
helix/Repositories/graph_repository.py
Normal file
42
helix/Repositories/graph_repository.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import copy
|
||||
from helix.calculators.subarray_graph import SubarrayGraph, Direction
|
||||
from helix.calculators.subarray_helper import extract_subarray
|
||||
from helix.constants.panel_type import PanelType
|
||||
|
||||
|
||||
class GraphRepository(object):
|
||||
def __init__(self, panels, subarrays, system_type):
|
||||
self.graphs = {}
|
||||
for subarray in subarrays:
|
||||
subarray_panels = extract_subarray(panels, subarray.subarray_number)
|
||||
self.graphs[subarray.subarray_number] = SubarrayGraph(panels=subarray_panels, system_type=system_type)
|
||||
|
||||
def walk_callback(_, next_direction, direction_to_get_here):
|
||||
if next_direction == Direction.North:
|
||||
self.rows_perimeter += 1
|
||||
elif next_direction == Direction.East:
|
||||
self.columns_perimeter += 1
|
||||
|
||||
for subarray in subarrays:
|
||||
graph = self.graphs[subarray.subarray_number]
|
||||
|
||||
subarray_panels = extract_subarray(panels, subarray.subarray_number)
|
||||
rows_fallback = sum(1 for panel in subarray_panels if panel.panel_type == PanelType.Corner or panel.panel_type == PanelType.EastWest) / 2
|
||||
columns_fallback = sum(1 for panel in subarray_panels if panel.panel_type == PanelType.Corner or panel.panel_type == PanelType.NorthSouth) / 2
|
||||
|
||||
if len(graph.nodes) == 0:
|
||||
subarray.row_count = rows_fallback
|
||||
subarray.column_count = columns_fallback
|
||||
subarray.row_counted_geometrically = False
|
||||
subarray.column_counted_geometrically = False
|
||||
continue
|
||||
self.rows_perimeter = 1
|
||||
self.columns_perimeter = 1
|
||||
graph.walk_graph_perimeter(graph.lower_left_node(graph.nodes), walk_callback, repeat_steps=False)
|
||||
subarray.row_count = max(self.rows_perimeter, rows_fallback)
|
||||
subarray.row_counted_geometrically = self.rows_perimeter >= rows_fallback
|
||||
subarray.column_count = max(self.columns_perimeter, columns_fallback)
|
||||
subarray.column_counted_geometrically = self.columns_perimeter >= columns_fallback
|
||||
|
||||
def subarray_graph(self, subarray_number):
|
||||
return copy.deepcopy(self.graphs[subarray_number])
|
||||
Reference in New Issue
Block a user