def METHOD_NAME(self):
    inputs = self.inputs
    outputs = self.outputs
    try:
        verts_in = inputs['Verts_in'].sv_get(deepcopy=False)
        edges_in = inputs['Edges_in'].sv_get(deepcopy=False)
        linked = outputs['Verts_out'].is_linked
    except (IndexError, KeyError) as e:
        return
    if self.mode == "2D" and self.alg_mode_2d == "Blender" and not bl_intersect:
        return
    verts_out, edges_out = [], []
    for vs, eds in zip(verts_in, edges_in):
        if self.mode == "3D":
            v_out, ed_out = intersect_edges_3d_np(vs, eds, 1 / 10 ** self.epsilon, only_touching=self.only_touching)
        elif self.alg_mode_2d == "Alg_1":
            v_out, ed_out = intersect_edges_2d(copy(vs), eds, 1 / 10 ** self.epsilon)
        elif self.alg_mode_2d == "Np":
            if len(eds) > self.big_data_limit:
                v_out, ed_out = intersect_edges_2d_np_big(vs, eds, 1 / 10 ** self.epsilon, only_touching=self.only_touching)
            else:
                v_out, ed_out = intersect_edges_2d_np(vs, eds, 1 / 10 ** self.epsilon, only_touching=self.only_touching)
        elif self.alg_mode_2d == "Sweep_line":
            v_out, ed_out = intersect_sv_edges(vs, eds, self.epsilon)
        else:
            v_out, ed_out, _, _, _, _ = bl_intersect([Vector(co[:2]) for co in vs], eds, [], 2,
                                                     1 / 10 ** self.epsilon)
            v_out = [v.to_3d()[:] for v in v_out]
        # post processing step to remove doubles
        if self.rm_switch and (self.mode == "3D" or self.alg_mode_2d in ['Alg_1', 'Np']):
            v_out, ed_out = remove_doubles_from_edgenet(v_out, ed_out, self.rm_doubles)
        verts_out.append(v_out)
        edges_out.append(ed_out)
    outputs['Verts_out'].sv_set(verts_out)
    outputs['Edges_out'].sv_set(edges_out)