docs: def iquant(val, u=Ellipsis):
      '''
      iquant(...) is equivalent to quant(...) except that the magnitude of the return value is always
        a read-only numpy array object.
      '''
      if u is not Ellipsis and u is not None: u = unit(u)
      if is_quantity(val):
          uu = unit(val)
          if u is Ellipsis or u == uu:
              # no conversion necessary; might be able to reuse old array
              m  = mag(val)
              mm = imm_array(m)
              if m is not mm or isinstance(val, tuple) or val._REGISTRY is not units:
                  val = units.Quantity(mm, uu)
              return val
          else:
              # we convert to another type first, then make an imm array
              if isinstance(val, tuple) or val._REGISTRY is not units:
                  val = units.Quantity(mag(val), uu)
              v = val.to(u)
              return units.Quantity(imm_array(v.m), v.u)
      else:
          return units.Quantity(imm_array(val), units.dimensionless if u is Ellipsis else unit(u))