@sh.add_function(dsp, outputs=['engine_speeds_out_hot'], weight=1)
def predict_engine_speeds_out_hot(
ems_data, hybrid_modes, after_treatment_warm_up_phases,
idle_engine_speed):
"""
Predicts the engine speed at hot condition [RPM].
:param ems_data:
EMS decision data.
:type ems_data: dict
:param hybrid_modes:
Hybrid mode status (0: EV, 1: Parallel, 2: Serial).
:type hybrid_modes: numpy.array
:param after_treatment_warm_up_phases:
Phases when engine is affected by the after treatment warm up [-].
:type after_treatment_warm_up_phases: numpy.array
:param idle_engine_speed:
Engine speed idle median and std [RPM].
:type idle_engine_speed: (float, float)
:return:
Engine speed at hot condition [RPM].
:rtype: numpy.array
"""
it = ems_data['electric'], ems_data['parallel'], ems_data['serial']
speeds = np.choose(hybrid_modes, [d['speed_ice'].ravel() for d in it])
phases = after_treatment_warm_up_phases
speeds[phases & (hybrid_modes == 2)] = idle_engine_speed[0]
return speeds