Skip to content

Commit 9da1715

Browse files
Merge pull request #63 from laugengebaeck/signal-fixes
Add missing signal states and additional signals
2 parents 11c4d09 + f1eee0b commit 9da1715

File tree

2 files changed

+71
-10
lines changed

2 files changed

+71
-10
lines changed

yaramo/additional_signal.py

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,18 @@ def __init__(self, symbols: List["AdditionalSignalSymbolZs2v"], **kwargs) -> Non
8181
def __str__(self):
8282
return "AdditionalSignalZs2v(kind=Zs2v" + ", symbols=" + str(self.symbols) + ")"
8383

84+
class AdditionalSignalZs3Type(Enum):
85+
LIGHT_SIGNAL = 0
86+
FORM_SIGNAL = 1
8487

8588
class AdditionalSignalZs3(AdditionalSignal):
86-
def __init__(self, symbols: List["AdditionalSignalSymbolZs3"], **kwargs) -> None:
89+
def __init__(self, symbols: List["AdditionalSignalSymbolZs3"], type: AdditionalSignalZs3Type = AdditionalSignalZs3Type.LIGHT_SIGNAL, **kwargs) -> None:
8790
super().__init__(**kwargs)
8891
self.symbols = symbols
92+
self.type = type
8993

9094
def __str__(self):
91-
return "AdditionalSignalZs3(kind=Zs3" + ", symbols=" + str(self.symbols) + ")"
95+
return "AdditionalSignalZs3(kind=Zs3" + ", symbols=" + str(self.symbols) + ", type=" + str(self.type) + ")"
9296

9397
class AdditionalSignalSymbolZs3(Enum):
9498
OFF = 0
@@ -116,10 +120,45 @@ def from_number(number: int) -> "AdditionalSignalZs3":
116120

117121
class AdditionalSignalZs3v(AdditionalSignal):
118122
AdditionalSignalSymbolZs3v = AdditionalSignalZs3.AdditionalSignalSymbolZs3
123+
AdditionalSignalZs3vType = AdditionalSignalZs3Type
119124

120-
def __init__(self, symbols: List["AdditionalSignalSymbolZs3v"], **kwargs) -> None:
125+
def __init__(self, symbols: List["AdditionalSignalSymbolZs3v"], type: AdditionalSignalZs3vType = AdditionalSignalZs3vType.LIGHT_SIGNAL, **kwargs) -> None:
121126
super().__init__(**kwargs)
122127
self.symbols = symbols
128+
self.type = type
123129

124130
def __str__(self):
125-
return "AdditionalSignalZs3v(kind=Zs3v" + ", symbols=" + str(self.symbols) + ")"
131+
return "AdditionalSignalZs3v(kind=Zs3v" + ", symbols=" + str(self.symbols) + ", type=" + str(self.type) + ")"
132+
133+
class AdditionalSignalZs6(AdditionalSignal):
134+
def __init__(self, symbols: List["AdditionalSignalSymbolZs6"], **kwargs) -> None:
135+
super().__init__(**kwargs)
136+
self.symbols = symbols
137+
138+
def __str__(self):
139+
return "AdditionalSignalZs6(kind=Zs6" + ", symbols=" + str(self.symbols) + ")"
140+
141+
class AdditionalSignalSymbolZs6(Enum):
142+
Zs6 = 0
143+
144+
class AdditionalSignalZs7(AdditionalSignal):
145+
def __init__(self, symbols: List["AdditionalSignalSymbolZs7"], **kwargs) -> None:
146+
super().__init__(**kwargs)
147+
self.symbols = symbols
148+
149+
def __str__(self):
150+
return "AdditionalSignalZs7(kind=Zs7" + ", symbols=" + str(self.symbols) + ")"
151+
152+
class AdditionalSignalSymbolZs7(Enum):
153+
Zs7 = 0
154+
155+
class AdditionalSignalZs13(AdditionalSignal):
156+
def __init__(self, symbols: List["AdditionalSignalSymbolZs13"], **kwargs) -> None:
157+
super().__init__(**kwargs)
158+
self.symbols = symbols
159+
160+
def __str__(self):
161+
return "AdditionalSignalZs13(kind=Zs13" + ", symbols=" + str(self.symbols) + ")"
162+
163+
class AdditionalSignalSymbolZs13(Enum):
164+
Zs13 = 0

yaramo/signal.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class SignalFunction(Enum):
3636
Block_Signal = auto()
3737
Vorsignal_Vorsignalwiederholer = auto()
3838
Zwischen_Signal = auto()
39-
# Not real signals: signal.kind == SignalKind.FikitivesSignal
39+
# Not real signals: signal.kind == SignalKind.FiktivesSignal
4040
Zug_Ziel_Strecke = auto()
4141
Rangier_Start_Ziel_ohne_Signal = auto()
4242
Nicht_Definiert = auto()
@@ -89,11 +89,20 @@ class SignalState(Enum):
8989
ZS2V = auto()
9090
ZS3 = auto()
9191
ZS3V = auto()
92+
ZS6 = auto()
93+
ZS7 = auto()
94+
ZS13 = auto()
9295
ZLO = auto()
96+
ZLU = auto()
97+
KL = auto()
9398
LF7 = auto()
9499
RA10 = auto()
95100
RA12 = auto()
96101
MS_WS_RT_WS = auto()
102+
MS_WS_GE_WS = auto()
103+
MS_WS_SW_WS = auto()
104+
MS_RT = auto()
105+
MS_WS_2SWP = auto()
97106
MS_GE_D = auto()
98107

99108
@classmethod
@@ -107,12 +116,24 @@ def get_state_by_string(cls, state_string: str):
107116
return SignalState.__members__[state_string_trimmed]
108117
if state_string == "Mastschild weiß-rot-weiß":
109118
return SignalState.MS_WS_RT_WS
119+
if state_string == "Mastschild weiß-gelb-weiß-gelb-weiß":
120+
return SignalState.MS_WS_GE_WS
121+
if state_string == "Mastschild weiß-schwarz-weiß-schwarz-weiß":
122+
return SignalState.MS_WS_SW_WS
123+
if state_string == "Mastschild rot":
124+
return SignalState.MS_RT
125+
if state_string == "Mastschild weiß mit zwei schwarzen Punkten":
126+
return SignalState.MS_WS_2SWP
110127
if state_string == "gelbes Dreieck mit Spitze nach unten":
111128
return SignalState.MS_GE_D
112129
if state_string == "verkuerzter Abstand des Bremswegs, weißes Zusatzlicht über Signallicht":
113130
return SignalState.ZLO
131+
if state_string == "Vorsignalwiederholer, weißes Zusatzlicht unter Signallicht":
132+
return SignalState.ZLU
133+
if state_string == "ein weißes Licht anstelle der sonst vorgesehenen Signalbilder":
134+
return SignalState.KL
114135
logging.warning(
115-
f"The Signal State with the string {state_string} does not exists. Return None instead"
136+
f"The Signal State with the string {state_string} does not exist. Returning None instead"
116137
)
117138
return None
118139

@@ -132,9 +153,10 @@ def __init__(
132153
function: SignalFunction | str,
133154
kind: SignalKind | str,
134155
system: SignalSystem | str = SignalSystem.andere,
135-
side_distance: float = None,
136-
supported_states: Set[SignalState] = None,
156+
side_distance: float | None = None,
157+
supported_states: Set[SignalState] | None = None,
137158
classification_number: str = "60",
159+
additional_signals: list[AdditionalSignal] = [],
138160
**kwargs,
139161
):
140162
"""
@@ -155,12 +177,12 @@ def __init__(
155177
"""
156178

157179
super().__init__(**kwargs)
158-
self.trip: Trip = None
180+
self.trip: Trip | None = None
159181
self.edge = edge
160182
self.distance_edge = float(distance_edge)
161183
self.classification_number = classification_number
162184
self.control_member_uuid = str(uuid4())
163-
self.additional_signals: list[AdditionalSignal] = []
185+
self.additional_signals = additional_signals
164186
self.supported_states: Set[SignalState] = supported_states if supported_states else set()
165187

166188
if isinstance(direction, str):

0 commit comments

Comments
 (0)