code: def integration_product(
      harmonics1: TensorLike,
      harmonics2: TensorLike,
      keepdims: bool = True,
      name: str = "spherical_harmonics_convolution",
  ) -> TensorLike:
      """Computes the integral of harmonics1.harmonics2 over the sphere.
  
      Note:
        In the following, A1 to An are optional batch dimensions.
  
      Args:
        harmonics1: A tensor of shape `[A1, ..., An, C]`, where the last dimension
          represents spherical harmonics coefficients.
        harmonics2: A tensor of shape `[A1, ..., An, C]`, where the last dimension
          represents spherical harmonics coefficients.
        keepdims: If True, retains reduced dimensions with length 1.
        name: A name for this op. Defaults to "spherical_harmonics_convolution".
  
      Returns:
        A tensor of shape `[A1, ..., An]` containing scalar values resulting from
        integrating the product of the spherical harmonics `harmonics1` and
        `harmonics2`.
  
      Raises:
        ValueError: if the last dimension of `harmonics1` is different from the last
        dimension of `harmonics2`.
      """
      with tf.name_scope(name):
          harmonics1 = tf.convert_to_tensor(value=harmonics1)
          harmonics2 = tf.convert_to_tensor(value=harmonics2)
  
          shape.compare_dimensions(
              tensors=(harmonics1, harmonics2),
              axes=-1,
              tensor_names=("harmonics1", "harmonics2"),
          )
          shape.compare_batch_dimensions(
              tensors=(harmonics1, harmonics2),
              last_axes=-2,
              tensor_names=("harmonics1", "harmonics2"),
              broadcast_compatible=True,
          )
  
          return vector.dot(harmonics1, harmonics2, keepdims=keepdims)
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from typing import Tuple
  import numpy
  from six.moves import range
  import tensorflow
  from tensorflow_graphics.math import math_helpers
  from tensorflow_graphics.math import vector
  from tensorflow_graphics.util import asserts
  from tensorflow_graphics.util import export_api
  from tensorflow_graphics.util import shape
  from tensorflow_graphics.util.type_alias import TensorLike
label_desc: Use image node_id 1 for calling a global function with example usage: integration_product(harmonics1, harmonics2, keepdims, name) and returns: vector