code: def multiple_values(num_values: int = 0,
                      greater_or_equal: Optional[float] = None,
                      data_type: Callable = int) -> Callable:
      
  
      def parse(value_to_check):
          if ':' in value_to_check:
              expected_num_separators = num_values - 1 if num_values else 0
              if expected_num_separators > 0 and (value_to_check.count(':') != expected_num_separators):
                  raise argparse.ArgumentTypeError("Expected either a single value or %d values separated by %s" %
                                                   (num_values, C.ARG_SEPARATOR))
              values = tuple(map(data_type, value_to_check.split(C.ARG_SEPARATOR, num_values - 1)))
          else:
              values = tuple([data_type(value_to_check)] * num_values)
          if greater_or_equal is not None:
              if any((value < greater_or_equal for value in values)):
                  raise argparse.ArgumentTypeError("Must provide value greater or equal to %d" % greater_or_equal)
          return values
  
      return parse
docs: Returns a method to be used in argument parsing to parse a string of the form "<val>:<val>[:<val>...]" into
      a tuple of values of type data_type.
  
      :param num_values: Optional number of ints required.
      :param greater_or_equal: Optional constraint that all values should be greater or equal to this value.
      :param data_type: Type of values. Default: int.
      :return: Method for parsing.