mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-07-31 10:52:50 +08:00
Summary: Update all FB license strings to the new format. Reviewed By: patricklabatut Differential Revision: D33403538 fbshipit-source-id: 97a4596c5c888f3c54f44456dc07e718a387a02c
118 lines
3.6 KiB
Python
Executable File
118 lines
3.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under the BSD-style license found in the
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
|
|
import nbformat
|
|
from bs4 import BeautifulSoup
|
|
from nbconvert import HTMLExporter, ScriptExporter
|
|
|
|
|
|
TEMPLATE = """const CWD = process.cwd();
|
|
|
|
const React = require('react');
|
|
const Tutorial = require(`${{CWD}}/core/Tutorial.js`);
|
|
|
|
class TutorialPage extends React.Component {{
|
|
render() {{
|
|
const {{config: siteConfig}} = this.props;
|
|
const {{baseUrl}} = siteConfig;
|
|
return <Tutorial baseUrl={{baseUrl}} tutorialID="{}"/>;
|
|
}}
|
|
}}
|
|
|
|
module.exports = TutorialPage;
|
|
|
|
"""
|
|
|
|
JS_SCRIPTS = """
|
|
<script
|
|
src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js">
|
|
</script>
|
|
<script
|
|
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js">
|
|
</script>
|
|
""" # noqa: E501
|
|
|
|
|
|
def gen_tutorials(repo_dir: str) -> None:
|
|
"""Generate HTML tutorials for PyTorch3D Docusaurus site from Jupyter notebooks.
|
|
|
|
Also create ipynb and py versions of tutorial in Docusaurus site for
|
|
download.
|
|
"""
|
|
with open(os.path.join(repo_dir, "website", "tutorials.json"), "r") as infile:
|
|
tutorial_config = json.loads(infile.read())
|
|
|
|
tutorial_ids = {x["id"] for v in tutorial_config.values() for x in v}
|
|
|
|
for tid in tutorial_ids:
|
|
print("Generating {} tutorial".format(tid))
|
|
|
|
# convert notebook to HTML
|
|
ipynb_in_path = os.path.join(
|
|
repo_dir, "docs", "tutorials", "{}.ipynb".format(tid)
|
|
)
|
|
with open(ipynb_in_path, "r") as infile:
|
|
nb_str = infile.read()
|
|
nb = nbformat.reads(nb_str, nbformat.NO_CONVERT)
|
|
|
|
# displayname is absent from notebook metadata
|
|
nb["metadata"]["kernelspec"]["display_name"] = "python3"
|
|
|
|
exporter = HTMLExporter()
|
|
html, meta = exporter.from_notebook_node(nb)
|
|
|
|
# pull out html div for notebook
|
|
soup = BeautifulSoup(html, "html.parser")
|
|
nb_meat = soup.find("div", {"id": "notebook-container"})
|
|
del nb_meat.attrs["id"]
|
|
nb_meat.attrs["class"] = ["notebook"]
|
|
html_out = JS_SCRIPTS + str(nb_meat)
|
|
|
|
# generate html file
|
|
html_out_path = os.path.join(
|
|
repo_dir, "website", "_tutorials", "{}.html".format(tid)
|
|
)
|
|
with open(html_out_path, "w") as html_outfile:
|
|
html_outfile.write(html_out)
|
|
|
|
# generate JS file
|
|
script = TEMPLATE.format(tid)
|
|
js_out_path = os.path.join(
|
|
repo_dir, "website", "pages", "tutorials", "{}.js".format(tid)
|
|
)
|
|
with open(js_out_path, "w") as js_outfile:
|
|
js_outfile.write(script)
|
|
|
|
# output tutorial in both ipynb & py form
|
|
ipynb_out_path = os.path.join(
|
|
repo_dir, "website", "static", "files", "{}.ipynb".format(tid)
|
|
)
|
|
with open(ipynb_out_path, "w") as ipynb_outfile:
|
|
ipynb_outfile.write(nb_str)
|
|
exporter = ScriptExporter()
|
|
script, meta = exporter.from_notebook_node(nb)
|
|
py_out_path = os.path.join(
|
|
repo_dir, "website", "static", "files", "{}.py".format(tid)
|
|
)
|
|
with open(py_out_path, "w") as py_outfile:
|
|
py_outfile.write(script)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(
|
|
description="Generate JS, HTML, ipynb, and py files for tutorials."
|
|
)
|
|
parser.add_argument(
|
|
"--repo_dir", metavar="path", required=True, help="PyTorch3D repo directory."
|
|
)
|
|
args = parser.parse_args()
|
|
gen_tutorials(args.repo_dir)
|