code: def to_euler(self):
          '''find Euler angles (321 convention) for the matrix'''
          if self.c.x >= 1.0:
              pitch = pi
          elif self.c.x <= -1.0:
              pitch = -pi
          else:
              pitch = -asin(self.c.x)
          roll = atan2(self.c.y, self.c.z)
          yaw  = atan2(self.b.x, self.a.x)
          return (roll, pitch, yawf to_euler(self):
          '''find Euler angles (321 convention) for the matrix'''
          if self.c.x >= 1.0:
              pitch = pi
          elif self.c.x <= -1.0:
              pitch = -pi
          else:
              pitch = -asin(self.c.x)
          roll = atan2(self.c.y, self.c.z)
          yaw  = atan2(self.b.x, self.a.x)
          return (roll, pitch, yaw)
docs: find Euler angles (321 convention) for the matrix