Skip to content
Snippets Groups Projects
Commit f9bc3f80 authored by Hock, Martin's avatar Hock, Martin
Browse files

Merge branch 'development' into 'main'

Merge for new WS2223 release

See merge request fst-tuda/projects/lehre/praktikum_digitalisierung/quality-kpi!6
parents 8ce85863 871b6374
No related branches found
No related tags found
No related merge requests found
......@@ -43,11 +43,17 @@ test:
- flake8-nb --max-line-length 88 ausarbeitung.ipynb
#run:
#tags:
#- env:docker
#script:
run:
tags:
- env:docker
script:
#- pip install -r requirements.txt
- pip install pytest nbmake
- pytest --nbmake ./
# Test our notebooks, the included example will also result in errors
# if plain errors like imports or typos appear
# Does not replace unit tests
#- python trial_json.py
# an alternative approach is to install and run:
# - pip install dist/*
......
......@@ -8,6 +8,7 @@ import json
import operator
from enum import Enum, auto
from typing import List, Dict, Optional
from copy import deepcopy
class AggregationLayer(Enum):
......@@ -83,14 +84,14 @@ class LegoComponent:
if label is not None:
self.properties["label"] = label
if datasheet is not None:
self.properties.update(datasheet)
self.properties.update(deepcopy(datasheet))
for prop in more_properties:
if isinstance(prop, dict):
self.properties.update(prop)
self.properties.update(deepcopy(prop))
else:
raise ValueError(f"Unexpected argument type: {type(more_properties)}")
for key, value in kwargs.items():
self.properties[key] = value
self.properties[key] = deepcopy(value)
def clone(self, new_label: Optional[str] = None) -> LegoComponent:
"""
......@@ -113,7 +114,7 @@ class LegoComponent:
"""
if new_label is None:
new_label = self.properties["label"]
clone = LegoComponent(None, None, self.properties)
clone = LegoComponent(None, None, deepcopy(self.properties))
clone.properties["label"] = new_label
return clone
......@@ -207,11 +208,11 @@ class LegoAssembly:
self.properties["label"] = label
for prop in properties:
if isinstance(prop, dict):
self.properties.update(prop)
self.properties.update(deepcopy(prop))
else:
raise ValueError(f"Unexpected argument type: {type(properties)}")
for key, value in kwargs.items():
self.properties[key] = value
self.properties[key] = deepcopy(value)
self.components: List[LegoComponent] = []
self.assemblies: List[LegoAssembly] = []
......@@ -419,7 +420,7 @@ class LegoAssembly:
"""
if label is None:
label = self.properties["label"]
clone = LegoAssembly(self.layer, None, self.properties)
clone = LegoAssembly(self.layer, None, deepcopy(self.properties))
clone.properties["label"] = label
for component in self.components:
clone.add_component(component.clone())
......@@ -428,40 +429,36 @@ class LegoAssembly:
return clone
def print_assembly_tree(root, level=0, is_last=False):
def print_assembly_tree(root, levels=None):
"""
Prints the assembly tree starting from root with a visualization
implemented with text characters.
Args:
root (LegoAssembly): The root of the assembly tree to print.
level (int): The indentation level. Defaults to 0.
is_last (bool): Determines whether the current node is the last in level.
Defaults to False.
levels (List[bool]): Internally used by recursion to know where
to print vertical connection. Defaults to an empty list.
"""
if not isinstance(root, LegoAssembly):
raise TypeError(
f"Argument should be of type {LegoAssembly.__name__}, "
f"got {type(root).__name__} instead."
)
""" Print the items. """
if levels is None:
levels = []
connection_padding = "".join(map(lambda draw: "" if draw else " ", levels))
assembly_padding = ""
if level > 0:
assembly_padding += "" * (level - 1)
if is_last:
assembly_padding += "└── "
else:
assembly_padding += "├── "
print(f"{assembly_padding}{root}")
if len(levels) > 0:
assembly_padding = "├── " if levels[-1] else "└── "
print(f"{connection_padding[:-4]}{assembly_padding}{root}")
""" Recursively print child components. """
for i, assembly in enumerate(root.assemblies):
is_last_ = i == len(root.assemblies) - 1 and len(root.components) == 0
print_assembly_tree(assembly, level + 1, is_last_)
is_last = i == len(root.assemblies) - 1 and len(root.components) == 0
print_assembly_tree(assembly, [*levels, not is_last])
""" Print the components. """
for i, item in enumerate(root.components):
component_padding = "" * level if not is_last else " "
component_padding += "├── " if i < len(root.components) - 1 else "└── "
print(f"{component_padding}{item}")
for i, component in enumerate(root.components):
component_padding = "├── " if i < len(root.components) - 1 else "└── "
print(f"{connection_padding}{component_padding}{component}")
def correct_aggregation_hierarchy(root: LegoAssembly, strict: bool = False):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment