docstr: Test the expected result with curvature.
  
  (Approximate) curvature for meshes is defined as
  $$\kappa_{v_i} = \frac{1}{|\mathcal{N}(v_i)|}
    \sum_{v_j \in \mathcal{N}(v_i)}
    \frac{(\vec{v_i} - \vec{v_j})^T (\vec{n_{v_i}} -
    \vec{n_{v_j}})} {\left|\vec{v_i}-\vec{v_j}\right|^2}
  $$
  
  This can be computed using `edge_convolution_template` with
    $$f(x, y) = (n_x - n_y)^T (x - y) / ||x - y||^2.$$
  where $$n_x$$ and $$n_y$$ are the normals at points $$x$$ and $$y$$
  respectively.
code: def test_edge_convolution_template_curvature(self):
      r"""Test the expected result with curvature.
  
      (Approximate) curvature for meshes is defined as
      $$\kappa_{v_i} = \frac{1}{|\mathcal{N}(v_i)|}
        \sum_{v_j \in \mathcal{N}(v_i)}
        \frac{(\vec{v_i} - \vec{v_j})^T (\vec{n_{v_i}} -
        \vec{n_{v_j}})} {\left|\vec{v_i}-\vec{v_j}\right|^2}
      $$
  
      This can be computed using `edge_convolution_template` with
        $$f(x, y) = (n_x - n_y)^T (x - y) / ||x - y||^2.$$
      where $$n_x$$ and $$n_y$$ are the normals at points $$x$$ and $$y$$
      respectively.
      """
      # We can reuse `self._edge_curvature_2d` as the curvature functional.
      num_vertices = 500
      data, neighbors = self._circular_2d_data(
          num_vertices, include_normals=True
      )
  
      data_curvature = gc.edge_convolution_template(
          data=data,
          neighbors=neighbors,
          sizes=None,
          edge_function=self._edge_curvature_2d,
          reduction="weighted",
          edge_function_kwargs=dict(),
      )
  
      # The curvature at each point on a circle of radius 1 should be 1.
      self.assertAllClose(
          data_curvature, np.ones(shape=(num_vertices, 1))
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import itertools
  from absl.testing import parameterized
  import numpy
  from six.moves import range
  import tensorflow
  import tensorflow_graphics.geometry.convolution.graph_convolution
  from tensorflow_graphics.util import test_case
label_desc: Use image node_id 15 for calling the EdgeConvolutionTemplateTests obj's underlying member method code with example usage: obj.test_edge_convolution_template_curvature() without return types