class_docstr: Plain convolutional kernel as described in :cite:t:`vdw2017convgp`. Defines
  a GP :math:`f()` that is constructed from a sum of responses of individual patches
  in an image:
  
  .. math::
     f(x) = \sum_p x^{[p]}
  
  where :math:`x^{[p]}` is the :math:`p`'th patch in the image.
  
  The key reference is :cite:t:`vdw2017convgp`.
class_docstr_tok: ["Plain","convolutional","kernel","as","described","in",":","cite",":","t",":","`","vdw2017convgp","`",".","Defines","a","GP",":","math",":","`","f","(",")","`","that","is","constructed","from","a","sum","of","responses","of","individual","patches","in","an","image",":","..","math",":",":","f","(","x",")","=","\\sum_p","x^","{","[","p","]","}","where",":","math",":","`","x^","{","[","p","]","}","`","is","the",":","math",":","`","p","`","'th","patch","in","the","image",".","The","key","reference","is",":","cite",":","t",":","`","vdw2017convgp","`","."]
code: def num_patches(self) -> int:
      return (
          (self.image_shape[0] - self.patch_shape[0] + 1)
          * (self.image_shape[1] - self.patch_shape[1] + 1)
          * self.colour_channels
      )
  
file_path: GPflow/gpflow/kernels/convolutional.py
imports: from typing import Optional, Sequence, cast
  import numpy
  import tensorflow
  from check_shapes import check_shape
  from check_shapes import check_shapes, inherit_check_shapes
  from ..base import Parameter, TensorType
  from ..config import default_float
  from ..utilities import to_default_float
  from .base import Kernel
label_desc: Use image node_id 6 for calling the Convolutional obj's underlying member method code with example usage: obj.num_patches() and returns: unknown