"""Definition of the variables for the Swissmetro case study

Michel Bierlaire
Thu Aug 07 2025, 08:52:24
"""

import pandas as pd
from biogeme.database import Database
from biogeme.expressions import Variable

df = pd.read_table('swissmetro.dat')
database = Database('swissmetro', df)

PURPOSE = Variable('PURPOSE')
CHOICE = Variable('CHOICE')

SM_CO = Variable('SM_CO')
GA = Variable('GA')
TRAIN_CO = Variable('TRAIN_CO')
SM_AV = Variable('SM_AV')
CAR_AV = Variable('CAR_AV')
TRAIN_AV = Variable('TRAIN_AV')
SP = Variable('SP')
TRAIN_TT = Variable('TRAIN_TT')
SM_TT = Variable('SM_TT')
CAR_TT = Variable('CAR_TT')
CAR_CO = Variable('CAR_CO')
TRAIN_HE = Variable('TRAIN_HE')
SM_HE = Variable('SM_HE')
INCOME = Variable('INCOME')
MALE = Variable('MALE')
FIRST = Variable('FIRST')

exclude = ((PURPOSE != 1) * (PURPOSE != 3) + (CHOICE == 0)) > 0
database.remove(exclude)

SM_COST = SM_CO * (GA == 0)
TRAIN_COST = TRAIN_CO * (GA == 0)
CAR_AV_SP = CAR_AV * (SP != 0)
TRAIN_AV_SP = TRAIN_AV * (SP != 0)
TRAIN_TT_SCALED = TRAIN_TT / 100
TRAIN_COST_SCALED = TRAIN_COST / 100
SM_TT_SCALED = SM_TT / 100
SM_COST_SCALED = SM_COST / 100
CAR_TT_SCALED = CAR_TT / 100
CAR_CO_SCALED = CAR_CO / 100
TRAIN_HE_SCALED = TRAIN_HE / 1000
SM_HE_SCALED = SM_HE / 1000
LOW_INC = INCOME <= 1
BUSINESS = PURPOSE == 3
