Unable to assemble scalar using div() operator acting on function

Problem Description

As the title states, I encounter an error when using the div() operator for the 2D Poisson problem. The issue does not occur if I instead use (uh.dx(0).dx(0) + uh.dx(1).dx(1)).

I was wondering if someone could explain why this might be. I have some experience sorting out issues related to the dimensions of objects (dot vs inner, etc), but this one has me stumped.

Code

from mpi4py import MPI     # Parallel communication
from dolfinx import mesh   # Mesh tools

from dolfinx import fem
from dolfinx.fem import FunctionSpace

import ufl

from petsc4py.PETSc import ScalarType




#%% Problem Definition

# Domain
nx = 10
ny = 10
domain = mesh.create_unit_square(MPI.COMM_WORLD, nx, ny, mesh.CellType.triangle)
func_space = ("CG", 2)
V = FunctionSpace(domain, func_space)


#% Define BC
uD = fem.Function(V)
bound_func = lambda x: 1 + x[0]**2 + 2 * x[1]**2
uD.interpolate(bound_func)

# Define Boundary
# Create facet to cell connectivity required to determine boundary facets
tdim = domain.topology.dim # Topology dimension
fdim = tdim - 1            # Facet dimension
domain.topology.create_connectivity(fdim, tdim)
boundary_facets = mesh.exterior_facet_indices(domain.topology)

# Construct BC
boundary_dofs = fem.locate_dofs_topological(V, fdim, boundary_facets)
bc = fem.dirichletbc(uD, boundary_dofs)


#% Define Solution/Basis functions
u = ufl.TrialFunction(V)
v = ufl.TestFunction(V)

#% Define Source Terms
f = fem.Constant(domain, ScalarType(-6)) 


#% Define variational problem
dot = ufl.dot
dx = ufl.dx
grad = ufl.grad
div = ufl.div
inner = ufl.inner

a = -dot(grad(u), grad(v)) * dx + u*v*dx
L = f * v * dx


# Use solver
problem = fem.petsc.LinearProblem(a, L, bcs=[bc], petsc_options={"ksp_type": "preonly", "pc_type": "lu"})
uh = problem.solve()


# Calculate Residual
R = (  inner(div(uh), div(uh))  )*dx # *** This is where the error occurs 
R_val = fem.assemble_scalar( fem.form(R) )




Error Message

Component and shape length don't match.
ERROR:UFL:Component and shape length don't match.
Traceback (most recent call last):

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/spyder_kernels/py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File ~/Grad School/Research/Software/FENICS/Tests/untitled0.py:133
    R_val = fem.assemble_scalar( fem.form(R) )

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/dolfinx/fem/forms.py:176 in form
    return _create_form(form)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/dolfinx/fem/forms.py:171 in _create_form
    return _form(form)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/dolfinx/fem/forms.py:145 in _form
    ufcx_form, module, code = jit.ffcx_jit(mesh.comm, form,

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/dolfinx/jit.py:56 in mpi_jit
    return local_jit(*args, **kwargs)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/dolfinx/jit.py:204 in ffcx_jit
    r = ffcx.codegeneration.jit.compile_forms([ufl_object], options=p_ffcx, **p_jit)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ffcx/codegeneration/jit.py:186 in compile_forms
    impl = _compile_objects(decl, forms, form_names, module_name, p, cache_dir,

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ffcx/codegeneration/jit.py:250 in _compile_objects
    _, code_body = ffcx.compiler.compile_ufl_objects(ufl_objects, prefix=module_name, options=options)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ffcx/compiler.py:97 in compile_ufl_objects
    analysis = analyze_ufl_objects(ufl_objects, options)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ffcx/analysis.py:86 in analyze_ufl_objects
    form_data = tuple(_analyze_form(form, options) for form in forms)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ffcx/analysis.py:86 in <genexpr>
    form_data = tuple(_analyze_form(form, options) for form in forms)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ffcx/analysis.py:164 in _analyze_form
    form_data = ufl.algorithms.compute_form_data(

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/algorithms/compute_form_data.py:253 in compute_form_data
    form = apply_algebra_lowering(form)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/algorithms/apply_algebra_lowering.py:175 in apply_algebra_lowering
    return map_integrand_dags(LowerCompoundAlgebra(), expr)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/algorithms/map_integrands.py:66 in map_integrand_dags
    return map_integrands(lambda expr: map_expr_dag(function, expr, compress),

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/algorithms/map_integrands.py:29 in map_integrands
    mapped_integrals = [map_integrands(function, itg, only_integral_type)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/algorithms/map_integrands.py:29 in <listcomp>
    mapped_integrals = [map_integrands(function, itg, only_integral_type)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/algorithms/map_integrands.py:37 in map_integrands
    return itg.reconstruct(function(itg.integrand()))

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/algorithms/map_integrands.py:66 in <lambda>
    return map_integrands(lambda expr: map_expr_dag(function, expr, compress),

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/corealg/map_dag.py:36 in map_expr_dag
    result, = map_expr_dags(function, [expression], compress=compress,

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/corealg/map_dag.py:99 in map_expr_dags
    r = handlers[v._ufl_typecode_](v, *[vcache[u] for u in v.ufl_operands])

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/algorithms/apply_algebra_lowering.py:141 in div
    return a[..., i].dx(i)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/exproperators.py:438 in _getitem
    all_indices, slice_indices, repeated_indices = create_slice_indices(component, shape, self.ufl_free_indices)

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/index_combination_utils.py:169 in create_slice_indices
    error("Component and shape length don't match.")

  File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/ufl/log.py:135 in error
    raise self._exception_type(self._format_raw(*message))

UFLException: Component and shape length don't match.

Nevermind, this was a silly mistake.

I meant to write div(grad(u)), not div(u).