|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
This script makes the stubs for implicitron in docs/modules. |
|
""" |
|
|
|
from pathlib import Path |
|
|
|
ROOT_DIR = Path(__file__).resolve().parent.parent |
|
|
|
|
|
def paths_to_modules(paths): |
|
""" |
|
Given an iterable of paths, return equivalent list of modules. |
|
""" |
|
return [ |
|
str(i.relative_to(ROOT_DIR))[:-3].replace("/", ".") |
|
for i in paths |
|
if "__pycache__" not in str(i) |
|
] |
|
|
|
|
|
def create_one_file(title, description, sources, dest_file): |
|
with open(dest_file, "w") as f: |
|
print(title, file=f) |
|
print("=" * len(title), file=f) |
|
print(file=f) |
|
print(description, file=f) |
|
for source in sources: |
|
if source.find("._") != -1: |
|
|
|
continue |
|
print(f"\n.. automodule:: {source}", file=f) |
|
print(" :members:", file=f) |
|
print(" :undoc-members:", file=f) |
|
print(" :show-inheritance:", file=f) |
|
|
|
|
|
def iterate_directory(directory_path, dest): |
|
""" |
|
Create a file for each module in the given path |
|
""" |
|
toc = [] |
|
if not dest.exists(): |
|
dest.mkdir() |
|
for file in sorted(directory_path.glob("*.py")): |
|
if file.stem.startswith("_"): |
|
continue |
|
module = paths_to_modules([file]) |
|
create_one_file(module[0], file.stem, module, dest / f"{file.stem}.rst") |
|
toc.append(file.stem) |
|
|
|
for subdir in directory_path.iterdir(): |
|
if not subdir.is_dir(): |
|
continue |
|
if subdir.name == "fb": |
|
continue |
|
if subdir.name.startswith("_"): |
|
continue |
|
iterate_directory(subdir, dest / (subdir.name)) |
|
toc.append(f"{subdir.name}/index") |
|
|
|
paths_to_modules_ = paths_to_modules([directory_path.with_suffix(".XX")]) |
|
if len(paths_to_modules_) == 0: |
|
return |
|
title = paths_to_modules_[0] |
|
|
|
with open(dest / "index.rst", "w") as f: |
|
print(title, file=f) |
|
print("=" * len(title), file=f) |
|
print("\n.. toctree::\n", file=f) |
|
for item in toc: |
|
print(f" {item}", file=f) |
|
|
|
|
|
def make_directory_index(title: str, directory_path: Path): |
|
index_file = directory_path / "index.rst" |
|
directory_rsts = sorted(directory_path.glob("*.rst")) |
|
subdirs = sorted([f for f in directory_path.iterdir() if f.is_dir()]) |
|
with open(index_file, "w") as f: |
|
print(title, file=f) |
|
print("=" * len(title), file=f) |
|
print("\n.. toctree::\n", file=f) |
|
for subdir in subdirs: |
|
print(f" {subdir.stem}/index.rst", file=f) |
|
for rst in directory_rsts: |
|
if rst.stem == "index": |
|
continue |
|
print(f" {rst.stem}", file=f) |
|
|
|
|
|
def do_implicitron(): |
|
DEST_DIR = Path(__file__).resolve().parent / "modules/implicitron" |
|
|
|
iterate_directory(ROOT_DIR / "pytorch3d/implicitron/models", DEST_DIR / "models") |
|
|
|
unwanted_tools = ["configurable", "depth_cleanup", "utils"] |
|
tools_sources = sorted(ROOT_DIR.glob("pytorch3d/implicitron/tools/*.py")) |
|
tools_modules = [ |
|
str(i.relative_to(ROOT_DIR))[:-3].replace("/", ".") |
|
for i in tools_sources |
|
if i.stem not in unwanted_tools |
|
] |
|
create_one_file( |
|
"pytorch3d.implicitron.tools", |
|
"Tools for implicitron", |
|
tools_modules, |
|
DEST_DIR / "tools.rst", |
|
) |
|
|
|
dataset_files = sorted(ROOT_DIR.glob("pytorch3d/implicitron/dataset/*.py")) |
|
basic_dataset = [ |
|
"dataset_base", |
|
"dataset_map_provider", |
|
"data_loader_map_provider", |
|
"data_source", |
|
"scene_batch_sampler", |
|
] |
|
basic_dataset_modules = [ |
|
f"pytorch3d.implicitron.dataset.{i}" for i in basic_dataset |
|
] |
|
create_one_file( |
|
"pytorch3d.implicitron.dataset in general", |
|
"Basics of data for implicitron", |
|
basic_dataset_modules, |
|
DEST_DIR / "data_basics.rst", |
|
) |
|
|
|
specific_dataset_files = [ |
|
i for i in dataset_files if i.stem.find("_dataset_map_provider") != -1 |
|
] |
|
create_one_file( |
|
"pytorch3d.implicitron.dataset specific datasets", |
|
"specific datasets", |
|
paths_to_modules(specific_dataset_files), |
|
DEST_DIR / "datasets.rst", |
|
) |
|
|
|
evaluation_files = sorted(ROOT_DIR.glob("pytorch3d/implicitron/evaluation/*.py")) |
|
create_one_file( |
|
"pytorch3d.implicitron.evaluation", |
|
"evaluation", |
|
paths_to_modules(evaluation_files), |
|
DEST_DIR / "evaluation.rst", |
|
) |
|
|
|
make_directory_index("pytorch3d.implicitron", DEST_DIR) |
|
|
|
|
|
def iterate_toplevel_module(name: str) -> None: |
|
dest_dir = Path(__file__).resolve().parent / "modules" / name |
|
iterate_directory(ROOT_DIR / "pytorch3d" / name, dest_dir) |
|
|
|
|
|
do_implicitron() |
|
iterate_toplevel_module("renderer") |
|
iterate_toplevel_module("vis") |
|
|