def METHOD_NAME(points, elements, rtol=1e-3, atol=1e-5):
    """
    Gets the normal groups for a cart3d model
    Parameters
    ----------
    points : ndarray
        the points from Cart3d()
    elements : ndarray
        the elements from Cart3d()
    Returns
    -------
    normal_groups : list[int, int, ...]
        the list of list of ints of the element IDs
        with the same normal that are touching
    Notes
    -----
    modifies elements
    """
    elements -= 1
    #npoints = points.shape[0]
    nelements = elements.shape[0]
    #print(points)
    #print(elements)
    n1 = elements[:, 0]
    #print(len(unique(n1)))
    #print(list(n1), max(n1), min(n1))
    p1 = points[n1, :]
    p2 = points[elements[:, 1]]
    p3 = points[elements[:, 2]]
    a = p2 - p1
    b = p3 - p1
    n = cross(a, b)
    ni = norm(n, axis=1)
    #print(n.shape)
    #print(ni.shape)
    normals = (n.T / ni).T
    #normals = n / norm(n, axis=1)  # this should work...but it doesn't
    #connectivity = zeros((n, 3), 'int32')
    cdict = defaultdict(list)
    # get edge mapping
    eid = 0
    for element in elements:
        c1 = tuple(sorted([element[0], element[1]]))
        c2 = tuple(sorted([element[1], element[2]]))
        c3 = tuple(sorted([element[0], element[2]]))
        #if eid == 0:
            #print(c1, c2, c3)
        cdict[c1].append(eid)
        cdict[c2].append(eid)
        cdict[c3].append(eid)
        eid += 1
    # sort it
    unique_normals = set()
    for normal in normals:
        unique_normals.add(tuple(normal))
    #for normal
    # group elements by normal
    #normal_groups = defaultdict(list)
    #igroup = 0
    # group elements with same normal and connectivity
    #for normali in unique_normals:
        #i = where(normal == normali)[0]
    # ???
    groups = []
    set_elements = set()
    for eid in range(nelements):
        #normali = normal[eid, :]
        if eid not in set_elements:
            same_normals = [eid]
            check_normals(eid, elements, normals, cdict, same_normals,
                          rtol=1e-4, atol=1e-3)  # same_normals is modified
            #print(same_normals, '\n')
            groups.append(same_normals)
            set_elements.update(same_normals)
        #break
    #for group in groups:
        #if len(group) > 1:
            #print(group)
    return normals, groups