def METHOD_NAME(inputs, edge_type=_DataNode):
    """
    Group inputs into three groups:
       * edges of type ``edge_type`` - those are actual inputs like DataNode,
       * integer constants,
       * real constants.
    Generate `categories_idxs` mapping, that is a list that for an input `i` contains a tuple:
       (category of ith input, index of ith input in appropriate category)
    Parameters
    ----------
    inputs :
        All arguments that were passed to the arithmetic operators
    edge_type :
        What should be considered an input, _DataNode or a TensorList (used for debug and eager
        modes), by default _DataNode
    Returns
    -------
    (`categories_idxs`, input edge category, integer constants category, real constants category)
        Mapping of inputs into the categories and the three possible categories.
    """
    categories_idxs = []
    edges = []
    integers = []
    reals = []
    for input in inputs:
        if not isinstance(input, (edge_type, _ScalarConstant, int, float)):
            input = _Constant(input)
        if isinstance(input, edge_type):
            categories_idxs.append(("edge", len(edges)))
            edges.append(input)
        elif _is_integer_like(input):
            categories_idxs.append(("integer", len(integers)))
            integers.append(input)
        elif _is_real_like(input):
            categories_idxs.append(("real", len(reals)))
            reals.append(input)
        else:
            raise TypeError(f"Argument to arithmetic operation not supported."
                            f"Got {str(type(input))}, expected a return value from other"
                            f"DALI Operator  or a constant value of type 'bool', 'int', "
                            f"'float' or 'nvidia.dali.types.Constant'.")
    if len(integers) == 0:
        integers = None
    if len(reals) == 0:
        reals = None
    return (categories_idxs, edges, integers, reals)