from __future__ import annotations
from dataclasses import dataclass, field
from .access_space import AccessSpace
from .access_zone import AccessZone
from .addressable_place import AddressablePlace
from .administrative_zones_rel_structure import (
    AdministrativeZone,
    TransportAdministrativeZone,
)
from .boarding_position import BoardingPosition
from .containment_aggregation_structure import ContainmentAggregationStructure
from .country import Country
from .crew_base import CrewBase
from .deck import Deck
from .deck_vehicle_entrance import DeckVehicleEntrance
from .deck_window import DeckWindow
from .entrance import Entrance
from .equipment_place import EquipmentPlace
from .fare_zone import FareZone
from .flexible_area import FlexibleArea
from .flexible_quay import FlexibleQuay
from .flexible_stop_place import FlexibleStopPlace
from .garage import Garage
from .general_group_of_entities import GeneralGroupOfEntities
from .general_zone import GeneralZone
from .group_of_distance_matrix_elements import GroupOfDistanceMatrixElements
from .group_of_distribution_channels import GroupOfDistributionChannels
from .group_of_lines import GroupOfLines
from .group_of_link_sequences import GroupOfLinkSequences
from .group_of_links import GroupOfLinks
from .group_of_operators import GroupOfOperators
from .group_of_places import GroupOfPlaces
from .group_of_points import GroupOfPoints
from .group_of_services import GroupOfServices
from .group_of_single_journeys import GroupOfSingleJourneys
from .group_of_sites import GroupOfSites
from .group_of_tariff_zones import GroupOfTariffZones
from .group_of_timing_links import GroupOfTimingLinks
from .hail_and_ride_area import HailAndRideArea
from .headway_journey_group import HeadwayJourneyGroup
from .layer import Layer
from .luggage_spot import LuggageSpot
from .mobility_service_constraint_zone import MobilityServiceConstraintZone
from .monitored_vehicle_sharing_parking_bay import MonitoredVehicleSharingParkingBay
from .network import Network
from .other_deck_entrance import OtherDeckEntrance
from .other_deck_space import OtherDeckSpace
from .parking import Parking
from .parking_area import ParkingArea
from .parking_bay import ParkingBay
from .parking_component import ParkingComponent
from .parking_entrance_for_vehicles import ParkingEntranceForVehicles
from .parking_passenger_entrance import ParkingPassengerEntrance
from .passenger_entrance import PassengerEntrance
from .passenger_space import PassengerSpace
from .passenger_spot import PassengerSpot
from .passenger_vehicle_spot import PassengerVehicleSpot
from .point_of_interest import PointOfInterest
from .point_of_interest_entrance import PointOfInterestEntrance
from .point_of_interest_space import PointOfInterestSpace
from .point_of_interest_vehicle_entrance import PointOfInterestVehicleEntrance
from .pool_of_vehicles import PoolOfVehicles
from .postal_address import PostalAddress
from .priceable_object_version_structure import (
    FareTable,
    FareTableInContext,
    PriceGroup,
)
from .quay import Quay
from .recharging_bay import RechargingBay
from .recharging_station import RechargingStation
from .rhythmical_journey_group import RhythmicalJourneyGroup
from .road_address import RoadAddress
from .routing_constraint_zone import RoutingConstraintZone
from .service_site import ServiceSite
from .standard_fare_table import StandardFareTable
from .stop_area import StopArea
from .stop_place import StopPlace
from .stop_place_entrance import StopPlaceEntrance
from .stop_place_vehicle_entrance import StopPlaceVehicleEntrance
from .tariff_zone import TariffZone
from .taxi_parking_area import TaxiParkingArea
from .taxi_rank import TaxiRank
from .taxi_stand import TaxiStand
from .topographic_place import TopographicPlace
from .vehicle_meeting_place import VehicleMeetingPlace
from .vehicle_pooling_meeting_place import VehiclePoolingMeetingPlace
from .vehicle_pooling_parking_area import VehiclePoolingParkingArea
from .vehicle_pooling_parking_bay import VehiclePoolingParkingBay
from .vehicle_sharing_parking_area import VehicleSharingParkingArea
from .vehicle_sharing_parking_bay import VehicleSharingParkingBay
from .vehicle_stopping_place import VehicleStoppingPlace
from .vehicle_stopping_position import VehicleStoppingPosition
from .zone import Zone

__NAMESPACE__ = "http://www.netex.org.uk/netex"


@dataclass(slots=True, kw_only=True)
class GroupOfEntitiesInFrameRelStructure(ContainmentAggregationStructure):
    class Meta:
        name = "groupOfEntitiesInFrame_RelStructure"

    choice: list[PoolOfVehicles | GroupOfSingleJourneys | GroupOfDistributionChannels | GroupOfDistanceMatrixElements | PriceGroup | StandardFareTable | FareTableInContext | FareTable | GroupOfServices | RhythmicalJourneyGroup | HeadwayJourneyGroup | CrewBase | GroupOfTimingLinks | GroupOfSites | Network | GroupOfLines | GroupOfOperators | GroupOfPlaces | GroupOfLinkSequences | Layer | GroupOfTariffZones | MobilityServiceConstraintZone | RoutingConstraintZone | StopArea | Deck | DeckWindow | OtherDeckEntrance | DeckVehicleEntrance | PassengerEntrance | OtherDeckSpace | PassengerSpace | LuggageSpot | PassengerVehicleSpot | PassengerSpot | AccessZone | VehicleMeetingPlace | VehiclePoolingMeetingPlace | HailAndRideArea | FlexibleArea | FlexibleQuay | FlexibleStopPlace | Garage | EquipmentPlace | TaxiStand | VehicleStoppingPlace | BoardingPosition | AccessSpace | Quay | PointOfInterestSpace | ParkingComponent | VehicleStoppingPosition | VehiclePoolingParkingArea | VehicleSharingParkingArea | TaxiParkingArea | ParkingArea | MonitoredVehicleSharingParkingBay | VehiclePoolingParkingBay | VehicleSharingParkingBay | RechargingBay | ParkingBay | PointOfInterestVehicleEntrance | PointOfInterestEntrance | ParkingPassengerEntrance | ParkingEntranceForVehicles | StopPlaceVehicleEntrance | StopPlaceEntrance | Entrance | PointOfInterest | RechargingStation | Parking | TaxiRank | StopPlace | ServiceSite | TopographicPlace | Country | AddressablePlace | PostalAddress | RoadAddress | TransportAdministrativeZone | AdministrativeZone | FareZone | TariffZone | GeneralZone | Zone | GroupOfLinks | GroupOfPoints | GeneralGroupOfEntities] = field(
        default_factory=list,
        metadata={
            "type": "Elements",
            "choices": (
                {
                    "name": "PoolOfVehicles",
                    "type": PoolOfVehicles,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfSingleJourneys",
                    "type": GroupOfSingleJourneys,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfDistributionChannels",
                    "type": GroupOfDistributionChannels,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfDistanceMatrixElements",
                    "type": GroupOfDistanceMatrixElements,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PriceGroup",
                    "type": PriceGroup,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "StandardFareTable",
                    "type": StandardFareTable,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "FareTableInContext",
                    "type": FareTableInContext,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "FareTable",
                    "type": FareTable,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfServices",
                    "type": GroupOfServices,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "RhythmicalJourneyGroup",
                    "type": RhythmicalJourneyGroup,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "HeadwayJourneyGroup",
                    "type": HeadwayJourneyGroup,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "CrewBase",
                    "type": CrewBase,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfTimingLinks",
                    "type": GroupOfTimingLinks,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfSites",
                    "type": GroupOfSites,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Network",
                    "type": Network,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfLines",
                    "type": GroupOfLines,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfOperators",
                    "type": GroupOfOperators,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfPlaces",
                    "type": GroupOfPlaces,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfLinkSequences",
                    "type": GroupOfLinkSequences,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Layer",
                    "type": Layer,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfTariffZones",
                    "type": GroupOfTariffZones,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "MobilityServiceConstraintZone",
                    "type": MobilityServiceConstraintZone,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "RoutingConstraintZone",
                    "type": RoutingConstraintZone,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "StopArea",
                    "type": StopArea,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Deck",
                    "type": Deck,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "DeckWindow",
                    "type": DeckWindow,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "OtherDeckEntrance",
                    "type": OtherDeckEntrance,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "DeckVehicleEntrance",
                    "type": DeckVehicleEntrance,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PassengerEntrance",
                    "type": PassengerEntrance,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "OtherDeckSpace",
                    "type": OtherDeckSpace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PassengerSpace",
                    "type": PassengerSpace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "LuggageSpot",
                    "type": LuggageSpot,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PassengerVehicleSpot",
                    "type": PassengerVehicleSpot,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PassengerSpot",
                    "type": PassengerSpot,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "AccessZone",
                    "type": AccessZone,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "VehicleMeetingPlace",
                    "type": VehicleMeetingPlace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "VehiclePoolingMeetingPlace",
                    "type": VehiclePoolingMeetingPlace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "HailAndRideArea",
                    "type": HailAndRideArea,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "FlexibleArea",
                    "type": FlexibleArea,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "FlexibleQuay",
                    "type": FlexibleQuay,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "FlexibleStopPlace",
                    "type": FlexibleStopPlace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Garage",
                    "type": Garage,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "EquipmentPlace",
                    "type": EquipmentPlace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "TaxiStand",
                    "type": TaxiStand,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "VehicleStoppingPlace",
                    "type": VehicleStoppingPlace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "BoardingPosition",
                    "type": BoardingPosition,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "AccessSpace",
                    "type": AccessSpace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Quay",
                    "type": Quay,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PointOfInterestSpace",
                    "type": PointOfInterestSpace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "ParkingComponent",
                    "type": ParkingComponent,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "VehicleStoppingPosition",
                    "type": VehicleStoppingPosition,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "VehiclePoolingParkingArea",
                    "type": VehiclePoolingParkingArea,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "VehicleSharingParkingArea",
                    "type": VehicleSharingParkingArea,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "TaxiParkingArea",
                    "type": TaxiParkingArea,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "ParkingArea",
                    "type": ParkingArea,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "MonitoredVehicleSharingParkingBay",
                    "type": MonitoredVehicleSharingParkingBay,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "VehiclePoolingParkingBay",
                    "type": VehiclePoolingParkingBay,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "VehicleSharingParkingBay",
                    "type": VehicleSharingParkingBay,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "RechargingBay",
                    "type": RechargingBay,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "ParkingBay",
                    "type": ParkingBay,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PointOfInterestVehicleEntrance",
                    "type": PointOfInterestVehicleEntrance,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PointOfInterestEntrance",
                    "type": PointOfInterestEntrance,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "ParkingPassengerEntrance",
                    "type": ParkingPassengerEntrance,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "ParkingEntranceForVehicles",
                    "type": ParkingEntranceForVehicles,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "StopPlaceVehicleEntrance",
                    "type": StopPlaceVehicleEntrance,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "StopPlaceEntrance",
                    "type": StopPlaceEntrance,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Entrance",
                    "type": Entrance,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PointOfInterest",
                    "type": PointOfInterest,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "RechargingStation",
                    "type": RechargingStation,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Parking",
                    "type": Parking,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "TaxiRank",
                    "type": TaxiRank,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "StopPlace",
                    "type": StopPlace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "ServiceSite",
                    "type": ServiceSite,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "TopographicPlace",
                    "type": TopographicPlace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Country",
                    "type": Country,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "AddressablePlace",
                    "type": AddressablePlace,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PostalAddress",
                    "type": PostalAddress,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "RoadAddress",
                    "type": RoadAddress,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "TransportAdministrativeZone",
                    "type": TransportAdministrativeZone,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "AdministrativeZone",
                    "type": AdministrativeZone,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "FareZone",
                    "type": FareZone,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "TariffZone",
                    "type": TariffZone,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GeneralZone",
                    "type": GeneralZone,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Zone",
                    "type": Zone,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfLinks",
                    "type": GroupOfLinks,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GroupOfPoints",
                    "type": GroupOfPoints,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "GeneralGroupOfEntities",
                    "type": GeneralGroupOfEntities,
                    "namespace": "http://www.netex.org.uk/netex",
                },
            ),
        }
    )