| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | """ |
| | 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") |
| |
|