Source code for bca_tool_code.general_modules.estimated_age_at_event

[docs]class EstimatedAge:
[docs] def __init__(self): self.estimated_ages_dict = dict() self.identifiers = ['Warranty', 'UsefulLife'] self.warranty_basis = None
[docs] def calc_estimated_age(self, settings, vehicle): """ Parameters: settings: object; the SetInputs class object.\n vehicle: object; an object of the Vehicle class.\n Returns: Updates the estimated ages dictionary with the ages at which an event (e.g., warranty, useful life) will be reached for the given vehicle. """ miles_and_ages_dict = {'Warranty': settings.warranty, 'UsefulLife': settings.useful_life, } if self.warranty_basis: pass else: self.warranty_basis = settings.general_inputs.get_attribute_value('warranty_cost_basis') typical_vmt = settings.fleet.get_typical_vmt_per_year(settings, vehicle) avg_speed \ = settings.average_speed.get_attribute_value(vehicle.sourcetype_id) operating_hours_per_year = typical_vmt / avg_speed share = 0 if (vehicle.vehicle_id, vehicle.option_id, vehicle.modelyear_id, 'Warranty') not in self.estimated_ages_dict: for identifier in self.identifiers: miles_and_ages = miles_and_ages_dict[identifier] estimated_ages_dict_key = vehicle.vehicle_id, vehicle.option_id, vehicle.modelyear_id, identifier required_hours = calculated_age_hours = None required_age = required_miles = 0 extended_miles = share = 0 calculated_age_miles = estimated_age = estimated_miles = 0 engine_id, option_id, modelyear_id = vehicle.engine_id, vehicle.option_id, vehicle.modelyear_id required_age \ = miles_and_ages.get_attribute_value((engine_id, option_id, modelyear_id, 'Age'), 'period_value') required_miles \ = miles_and_ages.get_attribute_value((engine_id, option_id, modelyear_id, 'Miles'), 'period_value') required_hours \ = miles_and_ages.get_attribute_value((engine_id, option_id, modelyear_id, 'Hours'), 'period_value') if identifier == 'Warranty' \ and vehicle.engine_id in settings.warranty_extended._dict \ and option_id == settings.no_action_alt: extended_miles, share \ = settings.warranty_extended.get_required_miles_with_share(vehicle.engine_id) extended_miles = required_miles * (1 - share) + extended_miles * share required_miles = max(required_miles, extended_miles) calculated_age_miles = required_miles / typical_vmt estimated_age = min(required_age, calculated_age_miles) if required_hours: calculated_age_hours = required_hours / operating_hours_per_year estimated_age = min(required_age, calculated_age_miles, calculated_age_hours) estimated_miles = typical_vmt * estimated_age estimated_hours = operating_hours_per_year * estimated_age self.estimated_ages_dict[estimated_ages_dict_key] = ({ 'optionID': vehicle.option_id, 'sourceTypeID': vehicle.sourcetype_id, 'regClassID': vehicle.regclass_id, 'fuelTypeID': vehicle.fueltype_id, 'modelYearID': vehicle.modelyear_id, 'optionName': vehicle.option_name, 'sourceTypeName': vehicle.sourcetype_name, 'regClassName': vehicle.regclass_name, 'fuelTypeName': vehicle.fueltype_name, 'identifier': identifier, 'typical_vmt': typical_vmt, 'average_mph': avg_speed, 'typical_operating_hours': operating_hours_per_year, 'required_age': required_age, 'required_miles': required_miles, 'required_hours': required_hours, 'calculated_age_miles': calculated_age_miles, 'calculated_age_hours': calculated_age_hours, 'estimated_age': estimated_age, 'estimated_miles': estimated_miles, 'estimated_hours': estimated_hours, 'share_with_extended_warranty': share, })
[docs] def get_attribute_value(self, key, attribute_name): """ Parameters: key: tuple; the object dictionary key (i.e., vehicle_id, option_id, modelyear_id, identifier) where identifier would be 'Warranty' or 'UsefulLife'. attribute_name: str; The name of the attribute for which a value is sought. Returns: The value associated with attribute_name. """ return self.estimated_ages_dict[key][attribute_name]