Zum Inhalt

zuggraph

Classes:

  • ZugGraph

    Der Zuggraph enthält alle Züge aus der Zugliste der Plugin-Schnittstelle als Knoten.

  • ZugGraphUngerichtet

    Ungerichtete Variante von ZugGraph

ZugGraph

ZugGraph(incoming_graph_data=None, **attr)

              flowchart TD
              stskit.model.zuggraph.ZugGraph[ZugGraph]

              

              click stskit.model.zuggraph.ZugGraph href "" "stskit.model.zuggraph.ZugGraph"
            

Der Zuggraph enthält alle Züge aus der Zugliste der Plugin-Schnittstelle als Knoten. Kanten werden aus den Ersatz-, Kuppeln- und Flügeln-Flags gebildet.

Der Zuggraph verändert sich im Laufe eines Spiels. Neue Züge werden hinzugefügt.

Der Zuggraph ist gerichtet.

Attributes:

  • aenderungen (Dict[int, ZugGraphNode | None]) –

    Dictionary Zug-ID zu ZugGraphNode. Der ZugGraphNode enthält die alten Werte der Attribute, die bei der letzten Aktualisierung geändert worden sind. Unveränderte Attribute sind nicht verzeichnet. Wenn der Zug neu ist, ist der Wert None.

    Der Besitzer darf Einträge des Dictionary löschen, z.B. via reset_aenderungen, sollte aber die Objekte nicht verändern.

    Die ZugGraphNode-Objekte sind unvollständig und sollten daher nicht direkt in den Graphen übernommen werden.

Methods:

Source code in stskit/model/zuggraph.py
def __init__(self, incoming_graph_data=None, **attr):
    super().__init__(incoming_graph_data, **attr)
    self.aenderungen: Dict[int, ZugGraphNode | None] = {}

vollstaendige_zuege

vollstaendige_zuege() -> ZugGraph

View des ZugGraph nur mit vollständigen Zügen

Vollständige Züge haben alle deklarierten ZugGraphNode-Attribute gesetzt. Züge, von denen z.B. nur der Knoten aber keine Zugdetails bekannt sind, werden gefiltert.

Source code in stskit/model/zuggraph.py
def vollstaendige_zuege(self) -> 'ZugGraph':
    """
    View des ZugGraph nur mit vollständigen Zügen

    Vollständige Züge haben alle deklarierten ZugGraphNode-Attribute gesetzt.
    Züge, von denen z.B. nur der Knoten aber keine Zugdetails bekannt sind, werden gefiltert.
    """

    def filter_vollstaendige_zuege(node: ZugGraphNode):
        zug_data = self.nodes[node]
        return 'ausgefahren' in zug_data

    return nx.subgraph_view(self, filter_node=filter_vollstaendige_zuege)

zug_ausfahren

zug_ausfahren(zid: int)

Markiert einen Zug als ausgefahren.

Das ausgefahren-Attribut wird True, das sichtbar-Attribut False. Die Änderung wird im aenderungen-Dictionary eingetragen.

Source code in stskit/model/zuggraph.py
def zug_ausfahren(self, zid: int):
    """
    Markiert einen Zug als ausgefahren.

    Das ausgefahren-Attribut wird True, das sichtbar-Attribut False.
    Die Änderung wird im aenderungen-Dictionary eingetragen.
    """

    zug_data = ZugGraphNode(sichtbar=False, ausgefahren=True, amgleis=False, gleis="", plangleis="")

    changed = False
    if self.has_node(zid):
        old_data = self.nodes[zid]
        for key, data in zug_data.items():
            if key != "obj" and key in old_data:
                if data != old_data[key]:
                    changed = True

        if changed:
            self.nodes[zid].update(**zug_data)
            self.aenderungen[zid] = zug_data

zug_details_importieren

zug_details_importieren(zug: ZugDetails) -> Optional[ZugGraphNode]

Einzelnen Zug im Zuggraph aktualisieren.

Wenn der Zugknoten existiert, wird er aktualisiert, sonst neu erstellt.

Die Änderungen werden in aenderungen verzeichnet und als Resultat zurückgegeben.

Parameters:

  • zug

    (ZugDetails) –

    Zugdetails von der Pluginschnittstelle.

Returns:

  • Optional[ZugGraphNode]

    Wenn der Knoten bereits existiert hat, gibt die Methode ein ZugGraphNode-Objekt zurück,

  • Optional[ZugGraphNode]

    das nur die geänderten Attribute mit ihren vorherigen Werten enthält.

  • Optional[ZugGraphNode]

    Wenn der Knoten neu ist, wird None zurückgegeben.

  • Optional[ZugGraphNode]

    Das Objekt wird ausserdem in das aenderungen-Dictionary übernommen.

Source code in stskit/model/zuggraph.py
def zug_details_importieren(self, zug: ZugDetails) -> Optional[ZugGraphNode]:
    """
    Einzelnen Zug im Zuggraph aktualisieren.

    Wenn der Zugknoten existiert, wird er aktualisiert, sonst neu erstellt.

    Die Änderungen werden in `aenderungen` verzeichnet und als Resultat zurückgegeben.

    Args:
        zug: Zugdetails von der Pluginschnittstelle.

    Returns:
        Wenn der Knoten bereits existiert hat, gibt die Methode ein ZugGraphNode-Objekt zurück,
        das nur die geänderten Attribute mit ihren vorherigen Werten enthält.
        Wenn der Knoten neu ist, wird None zurückgegeben.
        Das Objekt wird ausserdem in das `aenderungen`-Dictionary übernommen.
    """

    changes = {}
    zug_data = ZugGraphNode.from_zug_details(zug)
    if self.has_node(zug.zid):
        old_data = self.nodes[zug.zid]
        for key, data in zug_data.items():
            if key != "obj" and key in old_data:
                if data != old_data[key]:
                    changes[key] = old_data[key]

    self.add_node(zug.zid, **zug_data)

    changed = ZugGraphNode(**changes) if changes else None
    self.aenderungen[zug.zid] = changed

    return changed

ZugGraphUngerichtet


              flowchart TD
              stskit.model.zuggraph.ZugGraphUngerichtet[ZugGraphUngerichtet]

              

              click stskit.model.zuggraph.ZugGraphUngerichtet href "" "stskit.model.zuggraph.ZugGraphUngerichtet"
            

Ungerichtete Variante von ZugGraph