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