code: def gramschmidt(vin, uin):
      
  
      vin_uin = np.inner(vin, uin)
      uin_uin = np.inner(uin, uin)
      if uin_uin <= 0.0:
          raise ValueError("Zero or negative inner product!")
      return vin - (vin_uin / uin_uin) * uin
docs: Returns that part of the first input vector
      that is orthogonal to the second input vector.
      The output vector is not normalized.
  
      Args:
          vin (numpy array):
              first input vector
          uin (numpy array):
              second input vector