def METHOD_NAME(*args, **kw):
    inputs = (args, kw)
    config_key = str(dfs_config(inputs))
    inputs_parsed = dfs(inputs)
    inputs_key = str([ key for key, _ in inputs_parsed ])
    inputs_var = [ v for _, v in inputs_parsed ]
    jt.sync(inputs_var)
    all_key = config_key + inputs_key
    if all_key not in cache:
        print(f"create graph with key '{all_key[:30]}'...")
        cache[all_key] = CachedGraph(func, args, kw)
    graph = cache[all_key]
    if not mod.prob_sgraph(graph.sgraph, inputs_var):
        print(f"merge graph with key '{all_key[:30]}'...")
        graph2 = CachedGraph(func, args, kw)
        mod.merge_sgraph(graph.sgraph, graph2.sgraph)
    outputs = mod.exec_sgraph(graph.sgraph, inputs_var)
    if debug:
        graph2 = CachedGraph(func, args, kw)
        outputs2 = mod.exec_sgraph(graph2.sgraph, inputs_var)
        for v1, v2 in zip(outputs, outputs2):
            np.testing.assert_allclose(v1.data, v2.data, rtol=0.01, atol=0.05)
    return dfs_fill(graph.outputs, outputs)