code: def dtyping(*args):
      
      args = list(args)
  
      for idx, arg in enumerate(args):
  
          if isinstance(arg, Poly):
              args[idx] = Poly
  
          elif isinstance(arg, numpy.generic):
              args[idx] = numpy.asarray(arg).dtype
  
          elif isinstance(arg, (float, int)):
              args[idx] = type(arg)
  
      for type_ in DATATYPES:
          if type_ in args:
              return type_
  
      raise ValueError(
          "dtypes not recognised " + str([str(_) for _ in args]))
docs: Find least common denominator dtype.
  
      Examples:
          >>> str(dtyping(int, float)) in ("<class 'float'>", "<type 'float'>")
          True
          >>> print(dtyping(int, Poly))
          <class 'chaospy.poly.base.Poly'>