Skip to content

Vehicle Sub-Module

t3co.input_data.vehicle

Vehicle dataclass

Source code in src/t3co/input_data/vehicle.py
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
@dataclass
class Vehicle:
    selection: Union[int, str] = None
    veh_pt_type: str = ""
    fc_eff_type: str = ""
    fc_max_kw: float = 0.0
    fs_kwh: float = 0.0
    mc_max_kw: float = 0.0
    ess_max_kwh: float = 0.0
    chg_eff: float = 0.0
    glider_kg: float = 0.0
    trans_kg: float = 0.0
    cargo_kg: float = 0.0
    fc_base_kg: float = 0.0
    fs_kwh_per_kg: float = 0.0
    fc_kw_per_kg: float = 0.0
    mc_pe_kg_per_kw: float = 0.0
    mc_pe_base_kg: float = 0.0
    ess_kg_per_kwh: float = 0.0
    ess_base_kg: float = 0.0
    veh_override_kg: float = 0.0
    max_soc: float = 0.0
    min_soc: float = 0.0

    def __new__(cls, *args, **kwargs):
        """
        Creates a new instance of the OpportunityCosts class.
        """
        instance = super(Vehicle, cls).__new__(cls)
        return instance

    @classmethod
    def from_config(cls, selection: int, config: Config) -> Self:
        """
        Creates a Vehicle instance from the configuration.

        Args:
            selection (int): The selection index.
            config (Config): The configuration instance.

        Returns:
            Self: An instance of the Vehicle class.
        """

        if config.vehicle_df is not None:
            return cls.from_df(selection=selection, vehicle_df=config.vehicle_df)
        else:
            return cls.from_csv(
                selection=selection, vehicle_db_file=config.vehicle_file, config=config
            )

    @classmethod
    def from_df(cls, selection: int, vehicle_df: pd.DataFrame) -> Self:
        """
        Creates a Vehicle instance from the vehicle dataframe.

        Args:
            selection (int): The selection index.
            vehicle_df (pd.DataFrame): The vehicle dataframe

        Returns:
            Self: An instance of the Vehicle class.
        """

        vehicle_dict = vehicle_df.loc[
            vehicle_df["selection"] == selection, list(cls.__annotations__.keys())
        ].to_dict("records")[0]
        return cls(**handle_nan(vehicle_dict))

    @classmethod
    def from_csv(
        cls, selection: int, vehicle_db_file: Union[str, Path], config: Config = None
    ) -> Self:
        """
        Creates a Vehicle instance from the vehicle database csv file.

        Args:
            selection (int): The selection index.
            vehicle_db_file (Union[str, Path]): The vehicle database file path.

        Returns:
            Self: An instance of the Vehicle class.
        """
        if not Path(vehicle_db_file).is_absolute() and config is not None:
            vehicle_db_file = Path(config.config_filename).parent / vehicle_db_file

        vehicle_db_df = pd.read_csv(
            get_path_object(vehicle_db_file),
            usecols=lambda x: x in cls.__annotations__.keys(),
        )

        vehicle_dict = vehicle_db_df.loc[
            vehicle_db_df["selection"] == selection
        ].to_dict("records")[0]
        return cls(**handle_nan(vehicle_dict))

    def set_veh_kg(self) -> None:
        """
        Sets the vehicle weight in kilograms.
        """
        if self.veh_override_kg:
            self.veh_kg = self.veh_override_kg
        else:
            self.veh_kg = (
                self.glider_kg
                + self.trans_kg
                + self.cargo_kg
                + (self.fs_kwh / self.fs_kwh_per_kg if self.fs_kwh_per_kg != 0 else 0)
                + (
                    self.fc_base_kg + self.fc_kw_per_kg / self.fc_max_kw
                    if self.fc_max_kw != 0
                    else 0
                )
                + (
                    self.mc_pe_base_kg + self.mc_pe_kg_per_kw / self.mc_max_kw
                    if self.mc_max_kw != 0
                    else 0
                )
                + (
                    self.ess_base_kg + self.ess_kg_per_kwh / self.ess_max_kwh
                    if self.ess_max_kwh != 0
                    else 0
                )
            )

    def delete_dataframes(self) -> None:
        """
        Deletes DataFrame attributes from the Vehicle instance.
        """
        remove_df_attrs(self)

__new__(*args, **kwargs)

Creates a new instance of the OpportunityCosts class.

Source code in src/t3co/input_data/vehicle.py
40
41
42
43
44
45
def __new__(cls, *args, **kwargs):
    """
    Creates a new instance of the OpportunityCosts class.
    """
    instance = super(Vehicle, cls).__new__(cls)
    return instance

from_config(selection, config) classmethod

Creates a Vehicle instance from the configuration.

Parameters:

Name Type Description Default
selection int

The selection index.

required
config Config

The configuration instance.

required

Returns:

Name Type Description
Self Self

An instance of the Vehicle class.

Source code in src/t3co/input_data/vehicle.py
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@classmethod
def from_config(cls, selection: int, config: Config) -> Self:
    """
    Creates a Vehicle instance from the configuration.

    Args:
        selection (int): The selection index.
        config (Config): The configuration instance.

    Returns:
        Self: An instance of the Vehicle class.
    """

    if config.vehicle_df is not None:
        return cls.from_df(selection=selection, vehicle_df=config.vehicle_df)
    else:
        return cls.from_csv(
            selection=selection, vehicle_db_file=config.vehicle_file, config=config
        )

from_df(selection, vehicle_df) classmethod

Creates a Vehicle instance from the vehicle dataframe.

Parameters:

Name Type Description Default
selection int

The selection index.

required
vehicle_df DataFrame

The vehicle dataframe

required

Returns:

Name Type Description
Self Self

An instance of the Vehicle class.

Source code in src/t3co/input_data/vehicle.py
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
@classmethod
def from_df(cls, selection: int, vehicle_df: pd.DataFrame) -> Self:
    """
    Creates a Vehicle instance from the vehicle dataframe.

    Args:
        selection (int): The selection index.
        vehicle_df (pd.DataFrame): The vehicle dataframe

    Returns:
        Self: An instance of the Vehicle class.
    """

    vehicle_dict = vehicle_df.loc[
        vehicle_df["selection"] == selection, list(cls.__annotations__.keys())
    ].to_dict("records")[0]
    return cls(**handle_nan(vehicle_dict))

from_csv(selection, vehicle_db_file, config=None) classmethod

Creates a Vehicle instance from the vehicle database csv file.

Parameters:

Name Type Description Default
selection int

The selection index.

required
vehicle_db_file Union[str, Path]

The vehicle database file path.

required

Returns:

Name Type Description
Self Self

An instance of the Vehicle class.

Source code in src/t3co/input_data/vehicle.py
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
@classmethod
def from_csv(
    cls, selection: int, vehicle_db_file: Union[str, Path], config: Config = None
) -> Self:
    """
    Creates a Vehicle instance from the vehicle database csv file.

    Args:
        selection (int): The selection index.
        vehicle_db_file (Union[str, Path]): The vehicle database file path.

    Returns:
        Self: An instance of the Vehicle class.
    """
    if not Path(vehicle_db_file).is_absolute() and config is not None:
        vehicle_db_file = Path(config.config_filename).parent / vehicle_db_file

    vehicle_db_df = pd.read_csv(
        get_path_object(vehicle_db_file),
        usecols=lambda x: x in cls.__annotations__.keys(),
    )

    vehicle_dict = vehicle_db_df.loc[
        vehicle_db_df["selection"] == selection
    ].to_dict("records")[0]
    return cls(**handle_nan(vehicle_dict))

set_veh_kg()

Sets the vehicle weight in kilograms.

Source code in src/t3co/input_data/vehicle.py
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
def set_veh_kg(self) -> None:
    """
    Sets the vehicle weight in kilograms.
    """
    if self.veh_override_kg:
        self.veh_kg = self.veh_override_kg
    else:
        self.veh_kg = (
            self.glider_kg
            + self.trans_kg
            + self.cargo_kg
            + (self.fs_kwh / self.fs_kwh_per_kg if self.fs_kwh_per_kg != 0 else 0)
            + (
                self.fc_base_kg + self.fc_kw_per_kg / self.fc_max_kw
                if self.fc_max_kw != 0
                else 0
            )
            + (
                self.mc_pe_base_kg + self.mc_pe_kg_per_kw / self.mc_max_kw
                if self.mc_max_kw != 0
                else 0
            )
            + (
                self.ess_base_kg + self.ess_kg_per_kwh / self.ess_max_kwh
                if self.ess_max_kwh != 0
                else 0
            )
        )

delete_dataframes()

Deletes DataFrame attributes from the Vehicle instance.

Source code in src/t3co/input_data/vehicle.py
141
142
143
144
145
def delete_dataframes(self) -> None:
    """
    Deletes DataFrame attributes from the Vehicle instance.
    """
    remove_df_attrs(self)