load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")

oncall("executorch")

runtime.python_library(
    name = "tracer",
    srcs = [
        "tracer.py",
    ],
    deps = [
        "fbsource//third-party/pypi/typing-extensions:typing-extensions",
        ":common",
        ":error",
        ":graph_module",
        ":types",
        "//caffe2:torch",
        "//executorch/exir/operator:convert",
        "//executorch/exir/operator:util",
        "//executorch/extension/pytree:pylib",
    ],
)

runtime.python_library(
    name = "graph",
    srcs = [
        "graph.py",
    ],
    deps = [
        ":tensor",
        "//caffe2:torch",
    ],
)

runtime.python_library(
    name = "graph_module",
    srcs = [
        "graph_module.py",
    ],
    deps = [
        "//caffe2:torch",
    ],
)

runtime.python_library(
    name = "scalar_type",
    srcs = [
        "scalar_type.py",
    ],
)

runtime.python_library(
    name = "schema",
    srcs = [
        "schema.py",
    ],
    deps = [
        ":scalar_type",
        "//executorch/exir/backend:compile_spec_schema",
    ],
)

runtime.python_library(
    name = "version",
    srcs = [
        "version.py",
    ],
)

runtime.python_library(
    name = "tensor",
    srcs = [
        "tensor.py",
    ],
    deps = [
        ":error",
        ":schema",
        "//caffe2:torch",
        "//executorch/exir:sym_util",
    ],
)

runtime.python_library(
    name = "tensor_layout",
    srcs = [
        "tensor_layout.py",
    ],
    deps = [
        ":scalar_type",
    ]
)

runtime.python_library(
    name = "memory",
    srcs = [
        "memory.py",
    ],
    deps = [
        "fbsource//third-party/pypi/typing-extensions:typing-extensions",
        ":tensor",
        "//caffe2:torch",
        "//executorch/exir:sym_util",
    ],
)

runtime.python_library(
    name = "control_flow",
    srcs = [
        "control_flow.py",
    ],
    deps = [
        ":error",
        ":tracer",
        ":wrap",
        "//caffe2:torch",
    ],
)

runtime.python_library(
    name = "delegate",
    srcs = [
        "delegate.py",
        "delegate.pyi",
    ],
    deps = [
        "//caffe2:torch",
    ],
)

runtime.python_library(
    name = "lowered_backend_module",
    srcs = [
        "lowered_backend_module.py",
    ],
    deps = [
        ":delegate",
        ":graph_module",
        ":schema",
        ":tracer",
        "//caffe2:torch",
        "//executorch/exir/_serialize:lib",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/emit:lib",
        "//executorch/exir/passes:memory_planning_pass",
        "//executorch/exir/passes:spec_prop_pass",
    ],
)

runtime.python_library(
    name = "lib",
    srcs = [
        "__init__.py",
    ],
    deps = [
        ":tracer",
        "//caffe2:torch",
        "//executorch/exir/capture:lib",
        "//executorch/exir/emit:lib",
        "//executorch/exir/program:lib",
        "//executorch/exir/serde:serialize",
    ],
)

runtime.python_library(
    name = "memory_planning",
    srcs = [
        "memory_planning.py",
    ],
    deps = [
        ":control_flow",
        ":delegate",
        ":error",
        ":memory",
        ":schema",
        ":tensor",
        "//caffe2:torch",
        "//executorch/exir/operator:convert",
    ],
)

runtime.python_library(
    name = "common",
    srcs = [
        "common.py",
    ],
    deps = [
        "//caffe2:torch",
    ],
)

runtime.python_library(
    name = "error",
    srcs = [
        "error.py",
    ],
    deps = [],
)

runtime.python_library(
    name = "types",
    srcs = [
        "types.py",
    ],
    deps = [
        "fbsource//third-party/pypi/typing-extensions:typing-extensions",
        ":tensor",
    ],
)

runtime.python_library(
    name = "wrap",
    srcs = [
        "wrap.py",
    ],
    deps = [
        ":tracer",
        "//caffe2:torch",
        "//caffe2/functorch:functorch",  # @manual
    ],
)

runtime.python_library(
    name = "print_program",
    srcs = [
        "print_program.py",
    ],
    deps = [
        ":error",
        ":schema",
        "//caffe2:torch",
    ],
)

runtime.python_library(
    name = "dynamic_shape",
    srcs = [
        "dynamic_shape.py",
    ],
)

runtime.python_library(
    name = "pass_base",
    srcs = [
        "pass_base.py",
    ],
    deps = [
        ":delegate",
        ":error",
        ":memory",
        "//caffe2:torch",
        "//executorch/exir/dialects/edge:lib",
    ],
)

runtime.python_library(
    name = "pass_manager",
    srcs = [
        "pass_manager.py",
    ],
    deps = [
        "fbsource//third-party/pypi/typing-extensions:typing-extensions",
        ":error",
        "//caffe2:torch",
    ],
)

runtime.python_library(
    name = "sym_util",
    srcs = ["sym_util.py"],
    deps = [
        "fbsource//third-party/pypi/sympy:sympy",
        "//caffe2:torch",
    ],
)

runtime.python_library(
    name = "dim_order_utils",
    srcs = ["dim_order_utils.py"],
    deps = [
        "//caffe2:torch",
    ],
)

runtime.python_library(
    name = "_warnings",
    srcs = ["_warnings.py"],
    deps = [
        "fbsource//third-party/pypi/typing-extensions:typing-extensions",
    ],
)

runtime.python_library(
    name = "debug_handle_utils",
    srcs = ["debug_handle_utils.py"],
    deps = [
        "//caffe2:torch",
    ],
)
