def intersec_ts_ph_itvs_slots(slots, sid_left, sid_right, job): sid = sid_left itvs_acc = [] while True: slot = slots[sid] itvs = slot.itvs if job.ts: if "*" in slot.ts_itvs: # slot.ts_itvs[user][name] if "*" in slot.ts_itvs["*"]: itvs = add_intervals(itvs, slot.ts_itvs["*"]["*"]) elif job.name in slot.ts_itvs["*"]: itvs = add_intervals(itvs, slot.ts_itvs["*"][job.name]) elif job.user in slot.ts_itvs: if "*" in slot.ts_itvs[job.user]: itvs = add_intervals(itvs, slot.ts_itvs[job.user]["*"]) elif job.name in slot.ts_itvs[job.user]: itvs = add_intervals( itvs, slot.ts_itvs[job.user][job.name]) if job.ph == ALLOW: if job.ph_name in slot.ph_itvs: itvs = add_intervals(itvs, slot.ph_itvs[job.ph_name]) if not itvs_acc: itvs_acc = itvs else: itvs_acc = intersec(itvs_acc, itvs) if sid == sid_right: break sid = slots[sid].next return itvs_acc
def add_slot_during_job(self, slot, job): slot.b = max(slot.b, job.start_time) slot.e = min(slot.e, job.start_time + job.walltime - 1) if (not job.ts) and (job.ph == NO_PLACEHOLDER): slot.itvs = add_intervals(slot.itvs, job.res_set[:]) if job.ts: if job.ts_user not in slot.ts_itvs: slot.ts_itvs[job.ts_user] = {} if job.ts_name not in slot.ts_itvs[job.ts_user]: slot.ts_itvs[job.ts_user][job.ts_name] = job.res_set[:] else: itvs = slot.ts_itvs[job.ts_user][job.ts_name] slot.ts_itvs[job.ts_user][job.ts_name] = add_intervals(itvs, job.res_set[:]) if job.ph == PLACEHOLDER: if job.ph_name in slot.ph_itvs: slot.ph_itvs[job.ph_name] = \ add_intervals(slot.ph_itvs[job.ph_name], job.res_set) else: slot.ph_itvs[job.ph_name] = job.res_set[:]
def test_add_intervals5(): r = [(1, 30)] assert add_intervals([], r) == r
def test_add_intervals4(): r = [(1, 30)] assert add_intervals(r, []) == r
def test_add_intervals3(): r = [(1, 30)] x = [(3, 4), (6, 7), (9, 17), (19, 30)] y = [(1, 10), (15, 20), (22, 24)] a = add_intervals(x, y) assert a == r
def test_add_intervals2(): r = [(1, 9)] x = [(1, 4), (6, 9)] y = [(2, 7)] a = add_intervals(x, y) assert a == r