Source code for symupy.plugins.reader.symumaster

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

import pandas as pd
import os

# ============================================================================
# INTERNAL IMPORTS
# ============================================================================

from symupy.tsc.journey import Path, State, Trip
from symupy.utils.exceptions import SymupyWarning
from symupy.utils.time import Date
from symupy.abstractions.reader import AbstractTrafficDataReader

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


[docs]class SymuMasterPPathsReader(AbstractTrafficDataReader): _ext = "csv" def __init__(self, ppaths, final_ppaths, distribution): self._file_ppaths = ppaths self.ppaths = pd.read_csv( self._file_ppaths, sep=";", index_col=False, header=None, engine="python" )
[docs] def get_OD( self, origin, destination, period=None, outer_loop=None, inner_loop=None ): paths = list() for row in self.ppaths.iterrows(): try: path = row[1][7].split("\\") readLine = True if "Area Pattern" in path: readLine &= path[2] == origin and path[-3] == destination path = path[3:-3][::2] else: readLine &= path[0] == origin and path[-1] == destination path = path[1:-1][::2] if period is not None: readLine &= int(row[1][0]) == period if outer_loop is not None and inner_loop is not None: readLine &= int(row[1][1]) == int(outer_loop) and int( row[1][2] ) == int(inner_loop) if readLine: p = Path(path) paths.append(p) except AttributeError: pass return paths
[docs]class SymuMasterFinalPPathsReader(AbstractTrafficDataReader): _ext = "csv" def __init__(self, final_ppaths): self._file_final_ppaths = final_ppaths self.final_ppaths = pd.read_csv( self._file_final_ppaths, sep=";", index_col=False, engine="python", header=None, )
[docs] def get_path(self, userid): row = self.final_ppaths[self.final_ppaths.iloc[:, 3] == float(userid)] path = row[7].to_list()[0].split("\\") path = [p for p in path[1:-1][::2] if p != "Area Pattern" and p != "Walk"] return Path(path)
[docs] def get_trip(self, userid): row = self.final_ppaths[self.final_ppaths.iloc[:, 3] == float(userid)] path = row[7].to_list()[0].split("\\") origin = path[0] dest = path[-1] departure_time = Date(row[4].to_list()[0]) if row[5].to_list()[0] == "Undefined": arrival_time = "Undefined" else: arrival_time = Date(row[5].to_list()[0]) return Trip( path=Path(path[1:-1][::2]), departure_time=departure_time, arrival_time=arrival_time, origin=origin, destination=dest, vehicle=userid, )
[docs]class SymuMasterDistributionReader(AbstractTrafficDataReader): _ext = "csv" def __init__(self, distribution): self._file_distribution = distribution self.distribution = pd.read_csv( self._file_distribution, sep=";", index_col=False, engine="python", header=None, skiprows=1, )
[docs] def get_OD( self, origin, destination, period=None, outer_loop=None, inner_loop=None ): paths = list() mask = ( (self.distribution.iloc[:, 4] == origin) & (self.distribution.iloc[:, 5] == destination) & ( self.distribution.iloc[:, 8] != "Sum of user and minimum travel time for the OD" ) ) if period is not None: mask &= self.distribution.iloc[:, 0].astype(int) == int(period) if outer_loop is not None and inner_loop is not None: mask &= (self.distribution.iloc[:, 1].astype(int) == int(outer_loop)) & ( self.distribution.iloc[:, 2].astype(int) == int(inner_loop) ) rows = self.distribution[mask] for row in rows.iterrows(): path = row[1][8].split("\\")[4:-4][::2] path = [p for p in path[1:-1][::2] if p != "Walk"] p = Path(row[1][8].split("\\")[4:-4][::2]) paths.append(p) return paths
if __name__ == "__main__": fileppaths = "/Users/florian.gacon/Work/data/LYON63V/default_PPaths.csv" filefinal = "/Users/florian.gacon/Work/data/LYON63V/default_final_PPaths.csv" filedistrib = "/Users/florian.gacon/Work/data/LYON63V/default_distribution.csv" reader = SymuMasterTrafficDataReader(fileppaths, filefinal, filedistrib) # reader.load_distribution() reader.load_ppaths() # t = reader.get_OD(('690340602', '692660103')) t = reader.get_OD(("C_702719926", "C_82613196"), 0, file="ppaths")