Skip to content

Visualization: breaks into wypp code #143

@skogsbaer

Description

@skogsbaer

The following code visualizes in 6 steps, breaking into wypp code at the line

@record
class Confluence:

Here's the code:

from __future__ import annotations
from wypp import *

# Ein Flussabschnitt ist entweder
# - ein Bach mit Namen und Quelle, oder
# - ein Zusammenfluss eines Haupt- und Nebenflussabschnitts an einem bestimmten Ort.
type RiverSection = Union[Creek, Confluence]

# Ein Bach hat folgende Eigenschaften:
# - Quelle (Typ: str)
# - Name (Typ: str)
@record
class Creek:
    origin: str
    name: str

# Ein Zusammenfluss hat folgende Eigenschaften:
# - Ort des Zusammentreffens (Typ: str)
# - Hauptflussabschnitt (Typ: RiverSection)
# - Nebenflussabschnitt (Typ: RiverSection)
@record
class Confluence:
    location: str
    mainStem: RiverSection
    tributary: RiverSection

kinzig1 = Creek('Loßburg', 'Kinzig')
gutach1 = Creek('Schönwald', 'Gutach')
kinzig2 = Confluence('Hausach', kinzig1, gutach1)
schutter1 = Creek('Schweighausen', 'Schutter')
heidengraben1 = Creek('Lahr', 'Heidengraben')
schutter2 = Confluence('Lahr', schutter1, heidengraben1)
kinzig3 = Confluence('Kehl', kinzig2, schutter2)

# Name eines Flussabschnitts bestimmen
# Eingabe: ein Flussabschnitt (Typ: RiverSection)
# Ergebnis: Name des Flussabschnitts (Typ: str)
def riverName(section: RiverSection) -> str:
    if isinstance(section, Creek): # es handelt sich um einen Bach
        return section.name
    else:  # es handelt sich um einen Zusammenfluss
        return riverName(section.mainStem)

check(riverName(kinzig1), 'Kinzig')
check(riverName(kinzig2), 'Kinzig')
check(riverName(kinzig3), 'Kinzig')
check(riverName(schutter1), 'Schutter')
check(riverName(schutter2), 'Schutter')

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions