Source code for ensemble.handler.vissim.scenario

"""
**Scenario Module**

    This module contains descriptions that establish a traffic scenario.
    A traffic scenario for Vissim  is regularly described by a an network files(.inpx) and a layoutfile(.layx).
"""

# ============================================================================
# STANDARD  IMPORTS
# ============================================================================


# ============================================================================
# INTERNAL IMPORTS
# ============================================================================
import click
from pathlib import Path
from ensemble.input.scenario import Scenario
from ensemble.tools.exceptions import (
    EnsembleAPIWarning,
    EnsembleAPILoadFileError,
    EnsembleAPILoadLibraryError,
)


# ============================================================================
# CLASS AND DEFINITIONS
# ============================================================================


"""
    This module contains objects for modeling a simplified connector to handle vissim
"""


[docs]class VissimScenario(Scenario): """ Scenario class for Vissim """ def __init__(self, *args): self.bread_additional = False super().__init__(*args)
[docs] @classmethod def create_input(cls, *args): """ Looks for indicated vissim scenario paths and performs validation create the scenario""" existing_files = [file for file in args if Path(file).exists()] # Filter find_inpx = lambda files: [x for x in files if Path(x).suffix == ".inpx"] find_layx = lambda files: [x for x in files if Path(x).suffix == ".layx"] find_csv = lambda files: [x for x in files if Path(x).suffix == ".csv"] if existing_files: # Takes first element by default try: inpx_path = find_inpx(existing_files)[0] except IndexError: raise EnsembleAPILoadFileError( f"\tProvided files do not match expected input. Provide an INPX file" ) try: layx_path = find_layx(existing_files)[0] except IndexError: raise EnsembleAPILoadFileError( f"\tProvided files do not match expected input. Provide an LAYX file" ) try: platooncsv_path = find_csv(existing_files)[0] except IndexError: EnsembleAPIWarning(f"\tNo Platoon information provided.") platooncsv_path = None return cls(inpx_path, layx_path, platooncsv_path) raise EnsembleAPILoadFileError(f"Provided files are not found", args)
@property def filename(self): """ Vissim property shortcut""" return self.scn_file @property def filename_layx(self): """ Vissim property shortcut""" return self.layout_file