code: def left_compose(self, other):
      # If other is not an Affine, use the generic compose method
      if not hasattr(other, "as_affine"):
          return Transform(other.apply).compose(self)
  
      # Affine case: the result is a polyaffine transform with same
      # global affine
      other_affine = other.as_affine()
      affines = [
          np.dot(other_affine, self.affine(i))
          for i in range(len(self.centers))
      ]
      return self.__class__(
          self.centers,
          affines,
          self.sigma,
          glob_affine=self.glob_affine,
      )
  
file_path: nipy/nipy/algorithms/registration/polyaffine.py
imports: import numpy
  from ._registration import _apply_polyaffine
  from .affine import apply_affine
  from .transform import Transform
label_desc: Use image node_id 6 for calling the PolyAffine obj's underlying member method code with example usage: obj.left_compose(other) and returns: self, Transform