Esempio n. 1
0
def test_forced_cycle_two_ramps():
    V = datamodel.get_class_v_cycle("class1").rename("foo")
    forced = pd.DataFrame({"V": np.hstack((np.r_[0:100:2], np.r_[98:0:-2]))})
    forced["A"] = 0

    cycle = cycler.init_cycle_velocity(V, forced)

    assert (cycle["V"].dropna() == forced.V).all()
Esempio n. 2
0
def test_identify_checksums_works_with_all_CRCs(full):
    wltc_class = 0
    V = datamodel.get_class_v_cycle(wltc_class)
    crc = cycles.crc_velocity(V, full=full)
    exp = ("class1", None, "V")

    assert cycles.identify_cycle_v_crc(crc) == exp
    assert cycles.identify_cycle_v_crc(crc.lower()) == exp
    assert cycles.identify_cycle_v_crc(crc.upper()) == exp
    assert cycles.identify_cycle_v_crc(int(crc, 16)) == exp
Esempio n. 3
0
def test_stopdecel(wltc_class):
    V = datamodel.get_class_v_cycle(wltc_class)
    cb = CycleBuilder(V)
    cycle = cycler.PhaseMarker().add_phase_markers(cb.cycle, cb.V, cb.A)
    n_stops = (cycle["stop"].astype(int).diff() < 0).sum(None)
    n_decels = (cycle["decel"].astype(int).diff() < 0).sum(None)
    n_stopdecels = (cycle["stopdecel"].astype(int).diff() < 0).sum(None)
    assert n_stopdecels < n_decels
    ##  The initial stop has no deceleration before it BUT no diff >0 either!
    assert n_stopdecels == n_stops
Esempio n. 4
0
def test_identify_conjecutive_truths_repeat_threshold_1_is_identical():
    V = datamodel.get_class_v_cycle(0)
    A = -V.diff(-1)
    pm = PhaseMarker(phase_repeat_threshold=1)

    col1 = (V > 1) & (A < 0)
    col2 = pm._identify_conjecutive_truths((V > 1) & (A < 0), right_edge=False)
    assert col2.equals(col1)

    col2 = pm._identify_conjecutive_truths((V > 1) & (A < 0), right_edge=True)
    assert col2.equals(col1 | col1.shift())
Esempio n. 5
0
def test_validate_t_start(wltc_class, t_cold_end, err):
    """
    .. TODO:: move `t_cold_end` check in validations pipeline.
    """
    V = datamodel.get_class_v_cycle(wltc_class)
    wltc_parts = datamodel.get_class_parts_limits(wltc_class)

    cb = CycleBuilder(V)
    cb.cycle = cycler.PhaseMarker().add_phase_markers(cb.cycle, cb.V, cb.A)
    with pytest.raises(type(err), match=str(err)):
        for err in cb.validate_nims_t_cold_end(t_cold_end, wltc_parts):
            raise err
Esempio n. 6
0
    def calc_class_sums(cl):
        V = datamodel.get_class_v_cycle(cl)
        cycle_parts = datamodel.get_class_parts_limits(cl, edges=True)

        prev = (0, 0)
        for partno, (start,
                     end) in enumerate(itz.sliding_window(2, cycle_parts), 1):
            start += start_offset
            end += end_offset
            sums = calc_v_sums(V.loc[start:end])
            cums = calc_v_sums(V.loc[start:end], prev)
            results.append((cl, f"part-{partno}", *sums, *cums))
            prev = cums

        return results
Esempio n. 7
0
    def test_wltc_validate_checksums(self):
        for cl in datamodel.get_class_names():
            ## Test below the helper api in datamodel.
            #
            cycle = datamodel.get_class_v_cycle(cl)
            cd = datamodel.get_class(cl)

            numsum = cycle.sum()
            checksum = cd["checksum"]
            self.assertAlmostEqual(numsum, checksum)

            parts = datamodel.get_class_parts_limits(cl)
            cycle_parts = np.split(cycle, parts)
            for partnum, (pchk, cpart) in enumerate(
                    zip(cd["part_checksums"], cycle_parts)):
                self.assertAlmostEqual(pchk,
                                       cpart.sum(),
                                       msg=f"class={cl}, partnum={partnum}")
Esempio n. 8
0
def test_full_build_smoketest(h5_accdb):
    vehnum = 8
    veh_class = 3  # v008's class
    t_cold_end = 470  # stop in all classes
    prop, wot, n2vs = vehdb.load_vehicle_accdb(h5_accdb, vehnum)
    renames = vehdb.accdb_renames()
    prop = prop.rename(renames)
    wot = wot.rename(renames, axis=1)
    wot["n"] = wot.index

    V = datamodel.get_class_v_cycle(veh_class)
    wltc_parts = datamodel.get_class_parts_limits(veh_class)

    pm = cycler.PhaseMarker()
    cb = cycler.CycleBuilder(V)
    cb.cycle = pm.add_phase_markers(cb.cycle, cb.V, cb.A)
    for err in cb.validate_nims_t_cold_end(t_cold_end, wltc_parts):
        raise err
    cb.cycle = pm.add_class_phase_markers(cb.cycle, wltc_parts)

    SM = 0.1
    gwots = engine.interpolate_wot_on_v_grid(wot, n2vs)
    gwots = engine.calc_p_avail_in_gwots(gwots, SM=SM)
    gwots["p_resist"] = vehicle.calc_road_load_power(gwots.index, prop.f0,
                                                     prop.f1, prop.f2)

    kr = 1.03
    cb.add_wots(gwots)

    cb.cycle["p_inert"] = vehicle.calc_inertial_power(cb.V, cb.A,
                                                      prop.test_mass, kr)
    cb.cycle["p_req"] = vehicle.calc_required_power(cb.cycle["p_inert"],
                                                    cb.cycle["p_resist"])

    acc_cycle = vehdb.load_vehicle_nodes(h5_accdb, vehnum, "cycle")

    diffs = {}

    def cmpr_cols(c1, c2):
        diffs[c1.name] = (c1 - c2).abs()

    acc_cycle["P_tot"], "p_required"
Esempio n. 9
0
def test_identify_wltc_checksums(indexer, exp):
    V = datamodel.get_class_v_cycle(0)
    assert cycles.identify_cycle_v(V.loc[indexer]) == exp
Esempio n. 10
0
def test_full_cycles_in_wltc_checksums(wltc_class, exp):
    V = datamodel.get_class_v_cycle(wltc_class)
    assert cycles.identify_cycle_v(V) == exp
Esempio n. 11
0
# prop = prop.rename(renames)
mdl = vehdb.mdl_from_accdb(prop, wot, n2vs)
datamodel.validate_model(mdl, additional_properties="true")
wot = mdl["wot"]

# %%
print(list(acc_cycle.columns))
print(list(mdl.keys()))

# %%
gwots = engine.interpolate_wot_on_v_grid(wot, n2vs)
gwots = engine.attach_p_avail_in_gwots(gwots, f_safety_margin=0.1)
gwots["p_resist"] = vehicle.calc_p_resist(gwots.index, mdl["f0"], mdl["f1"], mdl["f2"])

# %%
V = datamodel.get_class_v_cycle(3)

# %%
cb = cycler.CycleBuilder(V)
pm = cycler.PhaseMarker()

# %%
wltc_parts = datamodel.get_class_parts_limits(3, edges=True)
cb.cycle = pm.add_class_phase_markers(cb.cycle, wltc_parts)

# %%
cb.cycle = pm.add_phase_markers(cb.cycle, cb.V, cb.A)
cb.cycle.select_dtypes(bool).sum()

# %%
t_cold_end = 470  # gap for all classes
Esempio n. 12
0
def test_cycle_initaccel(wltc_class, exp, gwots):
    V = datamodel.get_class_v_cycle(wltc_class)
    cb = CycleBuilder(V)
    PhaseMarker().add_phase_markers(cb.cycle, cb.V, cb.A)
    print(cb.cycle.initaccel.sum())
    assert cb.cycle.initaccel.sum() == exp