code: def ready_argument_list(self, arguments):
          
          ctype_args = [ None for _ in arguments]
  
          for i, arg in enumerate(arguments):
              if not isinstance(arg, (numpy.ndarray, numpy.number)):
                  raise TypeError("Argument is not numpy ndarray or numpy scalar %s" % type(arg))
              dtype_str = str(arg.dtype)
              data = arg.copy()
              if isinstance(arg, numpy.ndarray):
                  if dtype_str in dtype_map.keys():
                      # In numpy <= 1.15, ndarray.ctypes.data_as does not itself keep a reference
                      # to its underlying array, so we need to store a reference to arg.copy()
                      # in the Argument object manually to avoid it being deleted.
                      # (This changed in numpy > 1.15.)
                      data_ctypes = data.ctypes.data_as(C.POINTER(dtype_map[dtype_str]))
                  else:
                      raise TypeError("unknown dtype for ndarray")
              elif isinstance(arg, numpy.generic):
                  data_ctypes = dtype_map[dtype_str](arg)
              ctype_args[i] = Argument(numpy=data, ctypes=data_ctypes)
          return ctype_args
docs: ready argument list to be passed to the C function
  
          :param arguments: List of arguments to be passed to the C function.
              The order should match the argument list on the C function.
              Allowed values are numpy.ndarray, and/or numpy.int32, numpy.float32, and so on.
          :type arguments: list(numpy objects)
  
          :returns: A list of arguments that can be passed to the C function.
          :rtype: list(Argument)