diff --git a/experiments/stokes-2d-interior.py b/experiments/stokes-2d-interior.py
index 977ae8329991e5f5acabdb1bbec3024fa55ac39e..bcb15fde819208bc7b8ceeef28333eb5ebea7330 100644
--- a/experiments/stokes-2d-interior.py
+++ b/experiments/stokes-2d-interior.py
@@ -65,7 +65,7 @@ def main(nelements):
 
     # Get normal vectors for the density discretization -- used in integration with stresslet
     mv_normal = bind(density_discr, sym.normal(2))(queue)
-    normal = mv_normal.as_vector(np.object)
+    normal = mv_normal.as_vector(object)
 
 
     # {{{ describe bvp
diff --git a/experiments/two-domain-helmholtz.py b/experiments/two-domain-helmholtz.py
index 21a5fa2c953e3b3084106262d5d55d3b2769ef6e..ba8de66149d3b883a990de7fa45eddb0fabf3e93 100644
--- a/experiments/two-domain-helmholtz.py
+++ b/experiments/two-domain-helmholtz.py
@@ -118,7 +118,7 @@ def main():
 
     sqrt_w = bind(density_discr, sym.sqrt_jac_q_weight())(queue)
 
-    bvp_rhs = np.zeros(len(pde_op.bcs), dtype=np.object)
+    bvp_rhs = np.zeros(len(pde_op.bcs), dtype=object)
     for i_bc, terms in enumerate(pde_op.bcs):
         for term in terms:
             assert term.i_interface == 0
diff --git a/pytential/__init__.py b/pytential/__init__.py
index 9d0e91ccd00c59aaea857bb0eb3c77a244518778..9f48234612474ba74d610b5906eda073422b3064 100644
--- a/pytential/__init__.py
+++ b/pytential/__init__.py
@@ -98,7 +98,7 @@ def _norm_inf_op(discr, num_components):
 def norm(discr, x, p=2):
     from pymbolic.geometric_algebra import MultiVector
     if isinstance(x, MultiVector):
-        x = x.as_vector(np.object)
+        x = x.as_vector(object)
 
     from meshmode.dof_array import DOFArray
     num_components = None
diff --git a/pytential/linalg/proxy.py b/pytential/linalg/proxy.py
index 8ff76bb9e0f0f3f9b7a47d27b91d14210c68cd9c..057a4dda239e0d28dd0484db6218f9d6a099dbaa 100644
--- a/pytential/linalg/proxy.py
+++ b/pytential/linalg/proxy.py
@@ -79,7 +79,7 @@ def partition_by_nodes(actx, discr,
         leaf_boxes, = (tree.box_flags
                        & box_flags_enum.HAS_CHILDREN == 0).nonzero()
 
-        indices = np.empty(len(leaf_boxes), dtype=np.object)
+        indices = np.empty(len(leaf_boxes), dtype=object)
         for i, ibox in enumerate(leaf_boxes):
             box_start = tree.box_source_starts[ibox]
             box_end = box_start + tree.box_source_counts_cumul[ibox]
@@ -90,11 +90,11 @@ def partition_by_nodes(actx, discr,
                 )
         indices = actx.from_numpy(np.hstack(indices))
     else:
-        indices = actx.from_numpy(np.arange(0, discr.ndofs, dtype=np.int))
+        indices = actx.from_numpy(np.arange(0, discr.ndofs, dtype=np.int64))
         ranges = actx.from_numpy(np.arange(
             0,
             discr.ndofs + 1,
-            max_nodes_in_box, dtype=np.int))
+            max_nodes_in_box, dtype=np.int64))
 
     assert ranges[-1] == discr.ndofs
 
@@ -261,7 +261,7 @@ class ProxyGenerator:
                     shape=(self.ambient_dim, "nranges")),
                 lp.GlobalArg("proxy_radius", None,
                     shape="nranges"),
-                lp.ValueArg("nsources", np.int),
+                lp.ValueArg("nsources", np.int64),
                 "..."
             ],
             name="find_proxy_radii_knl",
@@ -328,7 +328,7 @@ class ProxyGenerator:
         from pytential.utils import flatten_to_numpy
         centers = flatten_to_numpy(actx, centers_dev)
         radii = flatten_to_numpy(actx, radii_dev)
-        proxies = np.empty(indices.nblocks, dtype=np.object)
+        proxies = np.empty(indices.nblocks, dtype=object)
         for i in range(indices.nblocks):
             proxies[i] = _affine_map(self.ref_points,
                     A=(radii[i] * np.eye(self.ambient_dim)),
@@ -406,7 +406,7 @@ def gather_block_neighbor_points(actx, discr, indices, pxycenters, pxyradii,
         ])
     pxyradii = actx.to_numpy(pxyradii)
 
-    nbrindices = np.empty(indices.nblocks, dtype=np.object)
+    nbrindices = np.empty(indices.nblocks, dtype=object)
     for iproxy in range(indices.nblocks):
         # get list of boxes intersecting the current ball
         istart = query.leaves_near_ball_starts[iproxy]
@@ -504,9 +504,9 @@ def gather_block_interaction_points(actx, places, source_dd, indices,
                     shape="nnbrindices"),
                 lp.GlobalArg("nodes", None,
                     shape=(lpot_source.ambient_dim, "nproxies + nnbrindices")),
-                lp.ValueArg("nsources", np.int),
-                lp.ValueArg("nproxies", np.int),
-                lp.ValueArg("nnbrindices", np.int),
+                lp.ValueArg("nsources", np.int64),
+                lp.ValueArg("nproxies", np.int64),
+                lp.ValueArg("nnbrindices", np.int64),
                 "..."
             ],
             name="concat_proxy_and_neighbors",
@@ -533,7 +533,7 @@ def gather_block_interaction_points(actx, places, source_dd, indices,
             max_nodes_in_box=max_nodes_in_box)
 
     from meshmode.dof_array import flatten, thaw
-    ranges = actx.zeros(indices.nblocks + 1, dtype=np.int)
+    ranges = actx.zeros(indices.nblocks + 1, dtype=np.int64)
     _, (nodes, ranges) = knl()(actx.queue,
             sources=flatten(thaw(actx, discr.nodes())),
             proxies=proxies,
diff --git a/pytential/qbx/direct.py b/pytential/qbx/direct.py
index 50e051db579dcb1b2d4bd5bf590a292d2471dced..461f3cb341f51a5f1c6b4db5796a32ac8a3bb945 100644
--- a/pytential/qbx/direct.py
+++ b/pytential/qbx/direct.py
@@ -78,8 +78,7 @@ class LayerPotentialOnTargetAndCenterSubset(LayerPotentialBase):
                 <> icenter = qbx_center_numbers[itgt]
                 <> itgt_overall = qbx_tgt_numbers[itgt]
 
-                <> a[idim] = center[idim, icenter] - src[idim, isrc] \
-                        {dup=idim}
+                <> a[idim] = center[idim, icenter] - src[idim, isrc]
                 <> b[idim] = tgt[idim, itgt_overall] - center[idim, icenter] \
                         {dup=idim}
                 <> rscale = expansion_radii[icenter]
diff --git a/pytential/qbx/fmmlib.py b/pytential/qbx/fmmlib.py
index 0075af11c7eb1eabe198297a8c6971ea1e8d556e..bee8b24f2bfc040942cf63733b516792219cc159 100644
--- a/pytential/qbx/fmmlib.py
+++ b/pytential/qbx/fmmlib.py
@@ -473,7 +473,7 @@ class QBXFMMLibExpansionWrangler(FMMLibExpansionWrangler):
 
         nlevels = geo_data.tree().nlevels
 
-        box_to_rscale = np.empty(geo_data.tree().nboxes, dtype=np.float)
+        box_to_rscale = np.empty(geo_data.tree().nboxes, dtype=np.float64)
         for isrc_level in range(nlevels):
             lev_box_start, lev_box_stop = self.tree.level_start_box_nrs[
                     isrc_level:isrc_level+2]
@@ -598,9 +598,9 @@ class QBXFMMLibExpansionWrangler(FMMLibExpansionWrangler):
         ifgrad = self.ifgrad
 
         # Create temporary output arrays for potential / gradient.
-        pot = np.zeros(self.tree.ntargets, np.complex) if ifpot else None
+        pot = np.zeros(self.tree.ntargets, np.complex128) if ifpot else None
         grad = (
-                np.zeros((self.dim, self.tree.ntargets), np.complex)
+                np.zeros((self.dim, self.tree.ntargets), np.complex128)
                 if ifgrad else None)
 
         ts.eval_target_specific_qbx_locals(
diff --git a/pytential/qbx/interactions.py b/pytential/qbx/interactions.py
index e8a13f51b313f2d4aff6e44cefe35794c54580bc..dc8eea9c42be33bf9eb958a40bd4325459d0ff32 100644
--- a/pytential/qbx/interactions.py
+++ b/pytential/qbx/interactions.py
@@ -77,7 +77,7 @@ class P2QBXLFromCSR(P2EBase):
                 for itgt_center
                     <> tgt_icenter = global_qbx_centers[itgt_center]
 
-                    <> center[idim] = qbx_centers[idim, tgt_icenter] {dup=idim}
+                    <> center[idim] = qbx_centers[idim, tgt_icenter]
                     <> rscale = qbx_expansion_radii[tgt_icenter]
 
                     <> itgt_box = qbx_center_to_target_box[tgt_icenter]
diff --git a/pytential/qbx/refinement.py b/pytential/qbx/refinement.py
index ab431e9c31b80fd5bcb10d2e05b877c77c0e809d..b0481e98b7b536e3917b76aa5c394ab87577866e 100644
--- a/pytential/qbx/refinement.py
+++ b/pytential/qbx/refinement.py
@@ -438,7 +438,7 @@ class RefinerWrangler(TreeWranglerBase):
         """
         if isinstance(refine_flags, cl.array.Array):
             refine_flags = refine_flags.get(self.queue)
-        refine_flags = refine_flags.astype(np.bool)
+        refine_flags = refine_flags.astype(bool)
 
         with ProcessLogger(logger, "refine mesh"):
             refiner.refine(refine_flags)
@@ -510,7 +510,7 @@ def _visualize_refinement(actx: PyOpenCLArrayContext, discr,
 
     assert len(flags) == discr.mesh.nelements
 
-    flags = flags.astype(np.bool)
+    flags = flags.astype(bool)
     nodes_flags = np.zeros(discr.ndofs)
     for grp in discr.groups:
         meg = grp.mesh_el_group
@@ -760,7 +760,7 @@ def _refine_qbx_stage2(lpot_source, stage1_density_discr,
         conn = wrangler.refine(
                 stage2_density_discr,
                 refiner,
-                np.ones(stage2_density_discr.mesh.nelements, dtype=np.bool),
+                np.ones(stage2_density_discr.mesh.nelements, dtype=bool),
                 group_factory, debug)
         stage2_density_discr = conn.to_discr
         connections.append(conn)
diff --git a/pytential/qbx/target_specific/impl.pyx b/pytential/qbx/target_specific/impl.pyx
index 60e9bbadfa0b9c60563f4ab128886746ca2120c5..88d6052f86d5ccee084ad5ca1656bae46bb3525b 100644
--- a/pytential/qbx/target_specific/impl.pyx
+++ b/pytential/qbx/target_specific/impl.pyx
@@ -106,8 +106,8 @@ def h3dall_wrapper(nterms, z, scale, hs, hders):
         int nterms_, ifder
         double scale_
         double complex z_
-        double complex[:] hvec = np.empty(1 + nterms, np.complex)
-        double complex[:] hdervec = np.empty(1 + nterms, np.complex)
+        double complex[:] hvec = np.empty(1 + nterms, np.complex128)
+        double complex[:] hdervec = np.empty(1 + nterms, np.complex128)
 
     ifder = hders is not None
 
@@ -677,9 +677,9 @@ def eval_target_specific_qbx_locals(
     target = np.zeros((maxthreads, PADDING))
     center = np.zeros((maxthreads, PADDING))
     dipole = np.zeros((maxthreads, PADDING))
-    result_grad = np.zeros((maxthreads, PADDING), dtype=np.complex)
-    jvals = np.zeros((maxthreads, BUFSIZE + PADDING), dtype=np.complex)
-    jderivs = np.zeros((maxthreads, BUFSIZE + PADDING), dtype=np.complex)
+    result_grad = np.zeros((maxthreads, PADDING), dtype=np.complex128)
+    jvals = np.zeros((maxthreads, BUFSIZE + PADDING), dtype=np.complex128)
+    jderivs = np.zeros((maxthreads, BUFSIZE + PADDING), dtype=np.complex128)
 
     # TODO: Check that the order is not too high, since temporary
     # arrays in this module that are limited by BUFSIZE may overflow
diff --git a/pytential/symbolic/dof_connection.py b/pytential/symbolic/dof_connection.py
index 19afdf009e859cf9641226a65186770acb079a7d..c788d1db8679221532394dd55a7157963e8293a8 100644
--- a/pytential/symbolic/dof_connection.py
+++ b/pytential/symbolic/dof_connection.py
@@ -117,7 +117,7 @@ class CenterGranularityConnection(GranularityConnection):
                     prg(), src1=src1, src2=src2, dst=result,
                     nelements=grp.nelements, nunit_dofs=grp.nunit_dofs)
             results.append(result)
-        return DOFArray.from_list(self.array_context, results)
+        return DOFArray(self.array_context, tuple(results))
 
     def __call__(self, arys):
         r"""
diff --git a/pytential/symbolic/execution.py b/pytential/symbolic/execution.py
index b18893480c3a644d7b6fc4d23a1005e678c1632e..fea1336cbfa465bbbed37902ed45e8bb6c1092a6 100644
--- a/pytential/symbolic/execution.py
+++ b/pytential/symbolic/execution.py
@@ -176,9 +176,10 @@ class EvaluationMapperBase(PymbolicEvaluationMapper):
             return _reduce(node_knl(),
                     discr.empty(self.array_context, dtype=dtype))
         elif granularity is sym.GRANULARITY_ELEMENT:
-            result = DOFArray.from_list(self.array_context, [
-                    self.array_context.empty((grp.nelements, 1), dtype=dtype)
-                    for grp in discr.groups])
+            result = DOFArray(self.array_context, tuple([
+                self.array_context.empty((grp.nelements, 1), dtype=dtype)
+                for grp in discr.groups
+                ]))
             return _reduce(element_knl(), result)
         else:
             raise ValueError(f"unsupported granularity: {granularity}")
@@ -1162,7 +1163,7 @@ def build_matrix(actx, places, exprs, input_exprs, domains=None,
     from pytential.symbolic.matrix import MatrixBuilder, is_zero
     nblock_rows = len(exprs)
     nblock_columns = len(input_exprs)
-    blocks = np.zeros((nblock_rows, nblock_columns), dtype=np.object)
+    blocks = np.zeros((nblock_rows, nblock_columns), dtype=object)
 
     dtypes = []
     for ibcol in range(nblock_columns):
diff --git a/pytential/symbolic/matrix.py b/pytential/symbolic/matrix.py
index 3a89914583f66b9fdc0e41dfa76556dc9f64cbbd..17fb38a7a6a62c731cb4f100d0206c551d106d68 100644
--- a/pytential/symbolic/matrix.py
+++ b/pytential/symbolic/matrix.py
@@ -444,7 +444,7 @@ class P2PMatrixBuilder(MatrixBuilderBase):
                 expr, include_args=kernel_args)
         if self.exclude_self:
             kernel_args["target_to_source"] = actx.from_numpy(
-                    np.arange(0, target_discr.ndofs, dtype=np.int)
+                    np.arange(0, target_discr.ndofs, dtype=np.int64)
                     )
 
         from sumpy.p2p import P2PMatrixGenerator
@@ -576,7 +576,7 @@ class FarFieldBlockBuilder(MatrixBlockBuilderBase):
                 expr, include_args=kernel_args)
         if self.exclude_self:
             kernel_args["target_to_source"] = actx.from_numpy(
-                    np.arange(0, target_discr.ndofs, dtype=np.int)
+                    np.arange(0, target_discr.ndofs, dtype=np.int64)
                     )
 
         from sumpy.p2p import P2PMatrixBlockGenerator
diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py
index a8f48df7ef52b7166bc18931355bbfcb36892ead..38d10d4abc12a968f2edf0362405f244ca264dc7 100644
--- a/pytential/symbolic/primitives.py
+++ b/pytential/symbolic/primitives.py
@@ -667,7 +667,7 @@ def reference_jacobian(func, output_dim, dim, dofdesc=None):
     """Return a :class:`numpy.ndarray` representing the Jacobian of a vector function
     with respect to the reference coordinates.
     """
-    jac = np.zeros((output_dim, dim), np.object)
+    jac = np.zeros((output_dim, dim), object)
 
     for i in range(output_dim):
         func_component = func[i]
@@ -1594,7 +1594,7 @@ def _get_dir_vec(dsource, ambient_dim):
 
     coeffs = _DSourceCoefficientFinder()(dsource)
 
-    dir_vec = np.zeros(ambient_dim, np.object)
+    dir_vec = np.zeros(ambient_dim, object)
     for i in range(ambient_dim):
         dir_vec[i] = coeffs.pop(NablaComponent(i, None), 0)
 
diff --git a/pytential/symbolic/stokes.py b/pytential/symbolic/stokes.py
index 49dcf83abd2834940f8bb1fa521d8f4c0ffb1b64..a04435e98f20b45d26bb5fdb8d2cddb47094cd25 100644
--- a/pytential/symbolic/stokes.py
+++ b/pytential/symbolic/stokes.py
@@ -114,7 +114,7 @@ class StokesletWrapper:
 
             # Start variable count for kernel with 1 for the requested result
             #  component
-            base_count = np.zeros(self.dim, dtype=np.int)
+            base_count = np.zeros(self.dim, dtype=np.int32)
             base_count[comp] += 1
 
             for i in range(self.dim):
@@ -176,7 +176,7 @@ class StokesletWrapper:
 
             # Start variable count for kernel with 1 for the requested result
             #  component
-            base_count = np.zeros(self.dim, dtype=np.int)
+            base_count = np.zeros(self.dim, dtype=np.int32)
             base_count[comp] += 1
 
             for i in range(self.dim):
@@ -236,7 +236,7 @@ class StokesletWrapper:
 
             # Start variable count for kernel with 1 for the requested result
             #   component
-            base_count = np.zeros(self.dim, dtype=np.int)
+            base_count = np.zeros(self.dim, dtype=np.int32)
             base_count[comp] += 1
 
             for i, j in itertools.product(range(self.dim), range(self.dim)):
@@ -349,7 +349,7 @@ class StressletWrapper:
 
             # Start variable count for kernel with 1 for the requested result
             #   component
-            base_count = np.zeros(self.dim, dtype=np.int)
+            base_count = np.zeros(self.dim, dtype=np.int32)
             base_count[comp] += 1
 
             for i, j in itertools.product(range(self.dim), range(self.dim)):
@@ -425,7 +425,7 @@ class StressletWrapper:
 
             # Start variable count for kernel with 1 for the requested result
             #   component
-            base_count = np.zeros(self.dim, dtype=np.int)
+            base_count = np.zeros(self.dim, dtype=np.int32)
             base_count[comp] += 1
 
             for i, j in itertools.product(range(self.dim), range(self.dim)):
diff --git a/test/extra_matrix_data.py b/test/extra_matrix_data.py
index 7401d13860e81229e735b7e571ff95f9ce5b6fa2..d7ed88fa59e578c85323f0fa0444f8dd2b074d03 100644
--- a/test/extra_matrix_data.py
+++ b/test/extra_matrix_data.py
@@ -57,7 +57,7 @@ class MatrixTestCaseMixin:
         # randomly pick a subset of points
         indices = indices.get(actx.queue)
 
-        subset = np.empty(indices.nblocks, dtype=np.object)
+        subset = np.empty(indices.nblocks, dtype=object)
         for i in range(indices.nblocks):
             iidx = indices.block_indices(i)
             isize = int(self.index_sparsity_factor * len(iidx))
diff --git a/test/test_cost_model.py b/test/test_cost_model.py
index 1d9a2746a948ba4d0dc9d33318135aa389c2f0b6..e090364052975857fffe02b3979cc9091235708c 100644
--- a/test/test_cost_model.py
+++ b/test/test_cost_model.py
@@ -718,7 +718,7 @@ def test_cost_model_correctness(ctx_factory, dim, off_surface,
         from boxtree.tools import make_uniform_particle_array
         ntargets = 10 ** 3
         targets = PointsTarget(
-                make_uniform_particle_array(queue, ntargets, dim, np.float))
+                make_uniform_particle_array(queue, ntargets, dim, np.float64))
         target_discrs_and_qbx_sides = ((targets, 0),)
         qbx_forced_limit = None
     else:
diff --git a/test/test_global_qbx.py b/test/test_global_qbx.py
index ec2a11a8833d231bcf925c4b6adc0cfdd1b94e52..df4b9b8d008ace9047b271ca93fe28c7cd525e00 100644
--- a/test/test_global_qbx.py
+++ b/test/test_global_qbx.py
@@ -294,7 +294,7 @@ def test_target_association(ctx_factory, curve_name, curve_f, nelements,
     density_discr = places.get_discretization(dd.geometry)
 
     noise = actx.to_numpy(
-            rng.uniform(queue, density_discr.ndofs, dtype=np.float, a=0.01, b=1.0))
+            rng.uniform(queue, density_discr.ndofs, dtype=np.float64, a=0.01, b=1.0))
 
     tunnel_radius = dof_array_to_numpy(actx,
             bind(places, sym._close_target_tunnel_radii(
@@ -302,9 +302,9 @@ def test_target_association(ctx_factory, curve_name, curve_f, nelements,
 
     def targets_from_sources(sign, dist, dim=2):
         nodes = dof_array_to_numpy(actx,
-                bind(places, sym.nodes(dim, dofdesc=dd))(actx).as_vector(np.object))
+                bind(places, sym.nodes(dim, dofdesc=dd))(actx).as_vector(object))
         normals = dof_array_to_numpy(actx,
-                bind(places, sym.normal(dim, dofdesc=dd))(actx).as_vector(np.object))
+                bind(places, sym.normal(dim, dofdesc=dd))(actx).as_vector(object))
         return actx.from_numpy(nodes + normals * sign * dist)
 
     from pytential.target import PointsTarget
diff --git a/test/test_layer_pot_eigenvalues.py b/test/test_layer_pot_eigenvalues.py
index 36d30b7423e849ab348c0d5504aec8572e88e540..5c84ef535fce3ec9d6b9a1cd81a8370f5a9a527e 100644
--- a/test/test_layer_pot_eigenvalues.py
+++ b/test/test_layer_pot_eigenvalues.py
@@ -124,7 +124,7 @@ def test_ellipse_eigenvalues(ctx_factory, ellipse_aspect, mode_nr, qbx_order,
             centers = bind(places,
                     sym.expansion_centers(qbx.ambient_dim, +1))(actx)
             normals = bind(places,
-                    sym.normal(qbx.ambient_dim))(actx).as_vector(np.object)
+                    sym.normal(qbx.ambient_dim))(actx).as_vector(object)
 
             nodes_h = np.array([actx.to_numpy(axis) for axis in flatten(nodes)])
             centers_h = np.array([actx.to_numpy(axis) for axis in flatten(centers)])
diff --git a/test/test_layer_pot_identity.py b/test/test_layer_pot_identity.py
index 85ce14fa7c60d5f8df87ccb22f079a3b6d44848b..141da21060ba80bfce65c8a09aa06db1f246a0c5 100644
--- a/test/test_layer_pot_identity.py
+++ b/test/test_layer_pot_identity.py
@@ -341,7 +341,7 @@ def test_identity_convergence(ctx_factory,  case, visualize=False):
         from meshmode.dof_array import thaw, flatten, unflatten
         nodes_host = [actx.to_numpy(axis)
                 for axis in flatten(thaw(actx, density_discr.nodes()))]
-        normal = bind(places, sym.normal(d))(actx).as_vector(np.object)
+        normal = bind(places, sym.normal(d))(actx).as_vector(object)
         normal_host = [actx.to_numpy(axis)for axis in flatten(normal)]
 
         if k != 0:
@@ -405,7 +405,7 @@ def test_identity_convergence(ctx_factory,  case, visualize=False):
             bdry_vis = make_visualizer(actx, density_discr, target_order)
 
             bdry_normals = bind(places, sym.normal(mesh.ambient_dim))(actx)\
-                    .as_vector(dtype=np.object)
+                    .as_vector(dtype=object)
 
             bdry_vis.write_vtk_file("source-%s.vtu" % resolution, [
                 ("u", u_dev),
diff --git a/test/test_symbolic.py b/test/test_symbolic.py
index 682af7aad5669fdc8876014b5910197e7ad3defa..5c5410abde58580bbf3dbcb3157f62cd7e56793e 100644
--- a/test/test_symbolic.py
+++ b/test/test_symbolic.py
@@ -329,7 +329,7 @@ def test_node_reduction(ctx_factory):
         el_nr_base += grp.nelements
 
     from meshmode.dof_array import DOFArray
-    ary = DOFArray.from_list(actx, ary)
+    ary = DOFArray(actx, tuple(ary))
 
     for func, expected in [
             (sym.NodeSum, nelements * (nelements + 1) // 2),
diff --git a/test/test_target_specific_qbx.py b/test/test_target_specific_qbx.py
index b7c977c547b33c35b0a92820a22c77596df5a0ed..2f2d1c7ea4367d1cb73ec1a0bd3b790c12c55fd2 100644
--- a/test/test_target_specific_qbx.py
+++ b/test/test_target_specific_qbx.py
@@ -50,8 +50,8 @@ def test_spherical_bessel_functions():
     nterms = 9
     z = 3j
     scale = 1
-    j = np.zeros(1 + nterms, dtype=np.complex)
-    jder = np.zeros(1 + nterms, dtype=np.complex)
+    j = np.zeros(1 + nterms, dtype=np.complex128)
+    jder = np.zeros(1 + nterms, dtype=np.complex128)
     ts.jfuns3d_wrapper(nterms, z, scale, j, jder)
 
     # Reference solution computed using scipy.special.spherical_jn
@@ -93,8 +93,8 @@ def test_spherical_hankel_functions():
     nterms = 9
     z = 2 + 3j
     scale = 1
-    h = np.zeros(1 + nterms, dtype=np.complex)
-    hder = np.zeros(1 + nterms, dtype=np.complex)
+    h = np.zeros(1 + nterms, dtype=np.complex128)
+    hder = np.zeros(1 + nterms, dtype=np.complex128)
     ts.h3dall_wrapper(nterms, z, scale, h, hder)
 
     # Reference solution computed using