diff --git a/meshmode/array_context.py b/meshmode/array_context.py index 6118e9d5530c1ee46aff3ff75ed4d0413698420b..81461b71aa9008e52fcb379532cfc51ea5de4b2c 100644 --- a/meshmode/array_context.py +++ b/meshmode/array_context.py @@ -153,6 +153,14 @@ class ArrayContext: @memoize_method def _get_scalar_func_loopy_program(self, name, nargs, naxes): + if name == "arctan2": + name = "atan2" + elif name == "atan2": + from warnings import warn + warn("'atan2' in ArrayContext.np is deprecated. Use 'arctan2', " + "as in numpy2. This will be disallowed in 2021.", + DeprecationWarning, stacklevel=3) + from pymbolic import var var_names = ["i%d" % i for i in range(naxes)] diff --git a/test/test_meshmode.py b/test/test_meshmode.py index a888beff918cc0ef1ccc002fa2f9878123999911..e6312f55cc7a8e88c62988ebb98f28edab5fb98e 100644 --- a/test/test_meshmode.py +++ b/test/test_meshmode.py @@ -39,7 +39,7 @@ from meshmode.discretization.poly_element import ( ) from meshmode.mesh import Mesh, BTAG_ALL from meshmode.array_context import PyOpenCLArrayContext -from meshmode.dof_array import thaw, flat_norm, flatten +from meshmode.dof_array import thaw, flat_norm, flatten, unflatten from meshmode.discretization.connection import \ FACE_RESTR_ALL, FACE_RESTR_INTERIOR import meshmode.mesh.generation as mgen @@ -1447,6 +1447,38 @@ def test_mesh_multiple_groups(ctx_factory, ambient_dim, visualize=False): assert error < 1.0e-11, error +def test_array_context_np_workalike(ctx_factory): + ctx = ctx_factory() + queue = cl.CommandQueue(ctx) + actx = PyOpenCLArrayContext(queue) + + from meshmode.mesh.generation import generate_regular_rect_mesh + mesh = generate_regular_rect_mesh( + a=(-0.5,)*2, b=(0.5,)*2, n=(8,)*2, order=3) + + from meshmode.discretization import Discretization + from meshmode.discretization.poly_element import \ + PolynomialWarpAndBlendGroupFactory as GroupFactory + discr = Discretization(actx, mesh, GroupFactory(3)) + + for sym_name, n_args in [ + ("sin", 1), + ("exp", 1), + ("arctan2", 2), + ("minimum", 2), + ("maximum", 2), + ]: + args = [np.random.randn(discr.ndofs) for i in range(n_args)] + ref_result = getattr(np, sym_name)(*args) + + actx_args = [unflatten(actx, discr, actx.from_numpy(arg)) for arg in args] + + actx_result = actx.to_numpy( + flatten(getattr(actx.np, sym_name)(*actx_args))) + + assert np.allclose(actx_result, ref_result) + + if __name__ == "__main__": import sys if len(sys.argv) > 1: