code: def inv(self, q_data, max_iterations=100, tollerance=1e-5):
          
          q_data = numpy.asfarray(q_data)
          assert numpy.all((q_data >= 0) & (q_data <= 1)), "sanitize your inputs!"
          shape = q_data.shape
          q_data = q_data.reshape(len(self), -1)
          x_data = evaluation.evaluate_inverse(self, q_data)
          lower, upper = evaluation.evaluate_bound(self, x_data)
          x_data = numpy.clip(x_data, a_min=lower, a_max=upper)
          x_data = x_data.reshape(shape)
          return x_data
docs: Inverse Rosenblatt transformation.
  
          If possible the transformation is done analytically. If not possible,
          transformation is approximated using an algorithm that alternates
          between Newton-Raphson and binary search.
  
          Args:
              q_data (numpy.ndarray):
                  Probabilities to be inverse. If any values are outside ``[0,
                  1]``, error will be raised. ``q_data.shape`` must be compatible
                  with distribution shape.
              max_iterations (int):
                  If approximation is used, this sets the maximum number of
                  allowed iterations in the Newton-Raphson algorithm.
              tollerance (float):
                  If approximation is used, this set the error tolerance level
                  required to define a sample as converged.
  
          Returns:
              (numpy.ndarray):
                  Inverted probability values where
                  ``out.shape == q_data.shape``.