code: def __call__(self, _image, nb_channels, random_state):
      # avoid cyclic import between blur and geometric
      from . import geometric as iaa_geometric
  
      # force discrete for k_sample via int() in case of stochastic
      # parameter
      k_sample = int(self.k.draw_sample(random_state=random_state))
      angle_sample = self.angle.draw_sample(random_state=random_state)
      direction_sample = self.direction.draw_sample(
          random_state=random_state
      )
  
      k_sample = k_sample if k_sample % 2 != 0 else k_sample + 1
      direction_sample = np.clip(direction_sample, -1.0, 1.0)
      direction_sample = (direction_sample + 1.0) / 2.0
  
      matrix = np.zeros((k_sample, k_sample), dtype=np.float32)
      matrix[:, k_sample // 2] = np.linspace(
          float(direction_sample),
          1.0 - float(direction_sample),
          num=k_sample,
      )
      rot = iaa_geometric.Affine(rotate=angle_sample, order=self.order)
  
      matrix = (
          rot.augment_image((matrix * 255).astype(np.uint8)).astype(
              np.float32
          )
          / 255.0
      )
  
      return [matrix / np.sum(matrix)] * nb_channels
  
imports: from __future__ import print_function, division, absolute_import
  import numpy
  from scipy import ndimage
  import cv2
  import six.moves
  import imgaug
  from imgaug.imgaug import _normalize_cv2_input_arr_
  from .None import meta
  from .None import convolutional
  from ..None import parameters
  from ..None import dtypes
label_desc: Use image node_id 2 for calling the _MotionBlurMatrixGenerator obj's underlying member method code with example usage: obj.__call__(_image, nb_channels, random_state) and returns: unknown