def test_multi_threading_stress_nthreads(self): coords = podpac.Coordinates([np.linspace(0, 1, 4)], ["lat"]) A = Arithmetic(A=Arange(), eqn="A**0") B = Arithmetic(A=Arange(), eqn="A**1") C = Arithmetic(A=Arange(), eqn="A**2") D = Arithmetic(A=Arange(), eqn="A**3") E = Arithmetic(A=Arange(), eqn="A**4") F = Arithmetic(A=Arange(), eqn="A**5") node2 = Arithmetic(A=A, B=B, C=C, D=D, E=E, F=F, eqn="A+B+C+D+E+F") node3 = Arithmetic(A=A, B=B, C=C, D=D, E=E, F=F, G=node2, eqn="A+B+C+D+E+F+G") with podpac.settings: podpac.settings["MULTITHREADING"] = True podpac.settings["N_THREADS"] = 8 podpac.settings["CACHE_NODE_OUTPUT_DEFAULT"] = False podpac.settings["DEFAULT_CACHE"] = [] podpac.settings["RAM_CACHE_ENABLED"] = False podpac.settings.set_unsafe_eval(True) omt = node3.eval(coords) assert node3._multi_threaded assert not node2._multi_threaded with podpac.settings: podpac.settings["MULTITHREADING"] = True podpac.settings[ "N_THREADS"] = 9 # 2 threads available after first 7 podpac.settings["CACHE_NODE_OUTPUT_DEFAULT"] = False podpac.settings["DEFAULT_CACHE"] = [] podpac.settings["RAM_CACHE_ENABLED"] = False podpac.settings.set_unsafe_eval(True) omt = node3.eval(coords) assert node3._multi_threaded assert node2._multi_threaded
def test_evaluate_not_allowed(self): with podpac.settings: podpac.settings.set_unsafe_eval(False) coords = podpac.Coordinates( [podpac.crange(-90, 90, 1.0), podpac.crange(-180, 180, 1.0)], dims=["lat", "lon"]) sine_node = SinCoords() with pytest.warns(UserWarning, match="Insecure evaluation"): node = Arithmetic(A=sine_node, B=sine_node, eqn="2*abs(A) - B + {offset}", params={"offset": 1}) with pytest.raises(PermissionError): node.eval(coords)
def test_multi_threading(self): coords = podpac.Coordinates([[1, 2, 3]], ["lat"]) with podpac.settings: podpac.settings.set_unsafe_eval(True) podpac.settings["CACHE_NODE_OUTPUT_DEFAULT"] = False podpac.settings["DEFAULT_CACHE"] = [] podpac.settings["RAM_CACHE_ENABLED"] = False node1 = Arithmetic(A=Arange(), B=Arange(), eqn="A+B") node2 = Arithmetic(A=node1, B=Arange(), eqn="A+B") # multithreaded podpac.settings["MULTITHREADING"] = True podpac.settings["N_THREADS"] = 8 omt = node2.eval(coords) # single threaded podpac.settings["MULTITHREADING"] = False ost = node2.eval(coords) np.testing.assert_array_equal(omt, ost)
def test_evaluate(self): with podpac.settings: podpac.settings.set_unsafe_eval(True) coords = podpac.Coordinates( [podpac.crange(-90, 90, 1.0), podpac.crange(-180, 180, 1.0)], dims=["lat", "lon"]) sine_node = SinCoords() node = Arithmetic(A=sine_node, B=sine_node, eqn="2*abs(A) - B + {offset}", params={"offset": 1}) output = node.eval(coords) a = sine_node.eval(coords) b = sine_node.eval(coords) np.testing.assert_allclose(output, 2 * abs(a) - b + 1)
def test_multi_threading_cache_race(self): coords = podpac.Coordinates([np.linspace(0, 1, 1024)], ["lat"]) with podpac.settings: podpac.settings["MULTITHREADING"] = True podpac.settings["N_THREADS"] = 3 podpac.settings["CACHE_NODE_OUTPUT_DEFAULT"] = True podpac.settings["DEFAULT_CACHE"] = ["ram"] podpac.settings["RAM_CACHE_ENABLED"] = True podpac.settings.set_unsafe_eval(True) A = Arithmetic(A=Arange(), eqn="A**2") B = Arithmetic(A=Arange(), eqn="A**2") C = Arithmetic(A=Arange(), eqn="A**2") D = Arithmetic(A=Arange(), eqn="A**2") E = Arithmetic(A=Arange(), eqn="A**2") F = Arithmetic(A=Arange(), eqn="A**2") node2 = Arithmetic(A=A, B=B, C=C, D=D, E=E, F=F, eqn="A+B+C+D+E+F") om = node2.eval(coords) from_cache = [n._from_cache for n in node2.inputs.values()] assert sum(from_cache) > 0