def rule_terminator_series(): # Series(X(F,R), Terminator(R)) => Terminator(F) F0 = Rcomp() from mocdp.dp.dp_flatten import Mux dp1 = Mux(F0, ()) dp2 = Terminator(F0) # make sure we can obtain it s0 = Series(dp1, dp2) s1 = make_series(dp1, dp2) check_same_spaces(s0, s1) assert isinstance(s1, Terminator), s1
def battery_complete(): assert R_Time != R_Energy assert R_Time != R_Power assert R_Energy != R_Power assert PosetProduct((R_Time, R_Time)) != PosetProduct((R_Time, R_Energy)) N = Single('navigate') F = PosetProduct((PosetProduct((R_Weight_g, N)), R_Weight_g)) dpB = Mux(F, [[(0, 0), 1], (0, 1)]) assert dpB.get_fun_space() == F dpA = Parallel(Sum(R_Weight_g), Identity(N)) series([dpB, dpA]) dp1 = Parallel(Mobility(), TimeEnergyTradeoff()) series([dpA, dp1]) dp2 = Mux(F=dp1.get_res_space(), coords=[[0, (1, 0)], (1, 1)]) series([dp1, dp2]) dp4 = Parallel(Sum(R_Power), Identity(R_Time)) series([dp2, dp4]) dp4b = Mux(dp4.get_res_space(), [1, [1, 0]]) series([dp4, dp4b]) e_from_tp = Product(R_Time, R_Power, R_Energy) from .dp_bat import BatteryDP battery = BatteryDP(energy_density=100.0) dp7 = Parallel(Identity(R_Time), make_series(e_from_tp, battery)) series([dp4b, dp7]) dps = series([dpB, dpA, dp1, dp2, dp4, dp4b, dp7]) # dp = DPLoop(dps) return dps
def series(l): if len(l) == 1: return l[0] else: return make_series(l[0], series(l[1:]))