def test_overwrite(): q = StablePriorityQueue() q.add_task(0, priority=5) q.add_task(1, priority=1) q.add_task(0, priority=0) assert q.pop_task() == 0 assert len(q.tasks_currently_in_queue()) == 1
def test_no_reroute(): mg = RasterModelGrid((5, 5), xy_spacing=2.0) z = mg.add_zeros("topographic__elevation", at="node", dtype=float) z[1] = -1.0 z[6] = -2.0 z[19] = -2.0 z[18] = -1.0 z[17] = -3.0 fd = FlowDirectorSteepest(mg) fa = FlowAccumulator(mg) lmb = LakeMapperBarnes( mg, method="Steepest", fill_flat=True, redirect_flow_steepest_descent=True, track_lakes=True, ) openq = StablePriorityQueue() lake_dict = {1: deque([6]), 18: deque([17])} fd.run_one_step() # fill the director fields fa.run_one_step() # get a drainage_area orig_surf = lmb._track_original_surface() lmb._redirect_flowdirs(orig_surf, lake_dict, openq) assert mg.at_node["flow__receiver_node"][6] == 1 assert mg.at_node["flow__receiver_node"][17] == 18 assert mg.at_node["flow__receiver_node"][18] == 19
def test_permitted_overfill(): mg = RasterModelGrid((3, 7)) for edge in ("top", "right", "bottom"): mg.status_at_node[mg.nodes_at_edge(edge)] = mg.BC_NODE_IS_CLOSED z = mg.add_zeros("topographic__elevation", at="node", dtype=float) z.reshape(mg.shape)[1, 1:-1] = [1.0, 0.2, 0.1, 1.0000000000000004, 1.5] _ = FlowAccumulator(mg) lmb = LakeMapperBarnes(mg, method="Steepest") lmb._closed = mg.zeros("node", dtype=bool) lmb._closed[mg.status_at_node == mg.BC_NODE_IS_CLOSED] = True open = StablePriorityQueue() edges = np.array([7]) for edgenode in edges: open.add_task(edgenode, priority=z[edgenode]) lmb._closed[edges] = True while True: try: lmb._fill_one_node_to_slant(z, mg.adjacent_nodes_at_node, lmb._pit, open, lmb._closed, True) except KeyError: break
def test_add_subtract_examine(): q = StablePriorityQueue() q.add_task("b", priority=2) q.add_task("a", priority=1) q.add_task(0, priority=0) q.add_task("c", priority=2) q.remove_task(0) assert q.pop_task() == "a" assert q.peek_at_task() == "b" assert np.all(q.tasks_currently_in_queue() == np.array(["b", "c"])) assert q.pop_task() == "b" assert np.all(q.tasks_ever_in_queue() == np.array(["b", "a", "0", "c"]))
def test_inf_load_error(): q = StablePriorityQueue() with pytest.raises(ValueError): q.add_task(float("inf"))
def test_empty_peek(): q = StablePriorityQueue() with pytest.raises(KeyError): q.peek_at_task()
def test_type_return_2(): q = StablePriorityQueue() q.add_task(np.pi) assert np.issubdtype(q.tasks_currently_in_queue().dtype, np.floating)
def test_type_return_1(): q = StablePriorityQueue() q.add_task(2, priority=2) q.add_task(1, priority=1) assert np.issubdtype(q.tasks_currently_in_queue().dtype, np.integer)
def test_add_subtract_examine(): q = StablePriorityQueue() q.add_task('b', priority=2) q.add_task('a', priority=1) q.add_task(0, priority=0) q.add_task('c', priority=2) q.remove_task(0) assert q.pop_task() == 'a' assert q.peek_at_task() == 'b' assert np.all(q.tasks_currently_in_queue() == np.array(['b', 'c'])) assert q.pop_task() == 'b' assert np.all(q.tasks_ever_in_queue() == np.array(['b', 'a', '0', 'c']))