import os import shutil import sys from datetime import datetime from pathlib import Path sys.path.insert(0, os.path.abspath("../..")) __version__ = "0.0.1" project = "slime" copyright = f"2025-{datetime.now().year}, slime" author = "slime Team" version = __version__ release = __version__ extensions = [ "sphinx.ext.autodoc", "sphinx.ext.autosummary", "sphinx.ext.napoleon", "sphinx.ext.viewcode", "sphinx.ext.autosectionlabel", "sphinx.ext.intersphinx", "sphinx_tabs.tabs", "myst_parser", "sphinx_copybutton", "sphinxcontrib.mermaid", "nbsphinx", "sphinx.ext.mathjax", ] nbsphinx_allow_errors = True nbsphinx_execute = "never" autosectionlabel_prefix_document = True nbsphinx_allow_directives = True myst_enable_extensions = [ "dollarmath", "amsmath", "deflist", "colon_fence", "html_image", "linkify", "substitution", ] myst_heading_anchors = 3 nbsphinx_kernel_name = "python3" nbsphinx_execute_arguments = [ "--InlineBackend.figure_formats={'svg', 'pdf'}", "--InlineBackend.rc={'figure.dpi': 96}", ] nb_render_priority = { "html": ( "application/vnd.jupyter.widget-view+json", "application/javascript", "text/html", "image/svg+xml", "image/png", "image/jpeg", "text/markdown", "text/latex", "text/plain", ) } myst_enable_extensions = [ "dollarmath", "amsmath", "deflist", "colon_fence", "html_image", "linkify", "substitution", ] myst_heading_anchors = 3 myst_ref_domains = ["std", "py"] templates_path = ["_templates"] source_suffix = { ".rst": "restructuredtext", ".md": "markdown", } master_doc = "index" language = os.environ.get("SLIME_DOC_LANG", "en") exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] pygments_style = "sphinx" html_theme = "sphinx_book_theme" html_logo = "_static/image/logo.jpg" html_favicon = "_static/image/logo.ico" html_title = project html_copy_source = True html_last_updated_fmt = "" html_theme_options = { "repository_url": "https://github.com/THUDM/slime", "repository_branch": "main", "show_navbar_depth": 3, "max_navbar_depth": 4, "collapse_navbar": True, "use_edit_page_button": True, "use_source_button": True, "use_issues_button": True, "use_repository_button": True, "use_download_button": True, "use_sidenotes": True, "show_toc_level": 2, } html_context = { "display_github": True, "github_user": "sgl-project", "github_repo": "sgl-project.github.io", "github_version": "main", "conf_py_path": "/docs/", } html_static_path = ["_static"] html_css_files = ["css/custom_log.css"] # Add custom javascript for language toggle (en <-> zh) html_js_files = [ "js/lang-toggle.js", ] def _sync_examples(app): """Sync top-level examples into language-specific doc trees. Policy: - README.md -> English docs/en/_examples_synced//README.md - README_zh.md -> Chinese docs/zh/_examples_synced//README_zh.md - If a language-specific README missing, that example is simply skipped for that language. """ docs_root = Path(__file__).resolve().parent src_dir = docs_root.parent / "examples" if not src_dir.exists(): return lang_cfgs = { "en": { "dir": docs_root / "en", "readme_name": "README.md", }, "zh": { "dir": docs_root / "zh", # primary preferred name; will fallback to README.md "readme_name": "README_zh.md", }, } for lang, cfg in lang_cfgs.items(): lang_dir = cfg["dir"] if not lang_dir.exists(): continue out_dir = lang_dir / "_examples_synced" if out_dir.exists(): shutil.rmtree(out_dir) out_dir.mkdir(parents=True, exist_ok=True) entries = [] # (example_name, readme_rel_path) for d in sorted(src_dir.iterdir()): if not d.is_dir(): continue # language-specific selection with fallback for zh if lang == "zh": primary = d / cfg["readme_name"] # README_zh.md fallback = d / "README.md" candidate = primary if primary.exists() else fallback else: candidate = d / cfg["readme_name"] if not candidate.exists(): continue # skip entirely if nothing suitable target_dir = out_dir / d.name target_dir.mkdir(parents=True, exist_ok=True) shutil.copy2(candidate, target_dir / "README.md") entries.append((d.name, f"_examples_synced/{d.name}/README.md")) def setup(app): # ensure examples are synced before reading source files app.connect("builder-inited", _sync_examples) myst_enable_extensions = [ "dollarmath", "amsmath", "deflist", "colon_fence", ] myst_heading_anchors = 5 htmlhelp_basename = "slimedoc" latex_elements = {} latex_documents = [ (master_doc, "slime.tex", "slime Documentation", "slime Team", "manual"), ] man_pages = [(master_doc, "slime", "slime Documentation", [author], 1)] texinfo_documents = [ ( master_doc, "slime", "slime Documentation", author, "slime", "One line description of project.", "Miscellaneous", ), ] epub_title = project epub_exclude_files = ["search.html"] copybutton_prompt_text = r">>> |\.\.\. " copybutton_prompt_is_regexp = True autodoc_preserve_defaults = True navigation_with_keys = False autodoc_mock_imports = [ "torch", "transformers", "triton", ] intersphinx_mapping = { "python": ("https://docs.python.org/3.12", None), "typing_extensions": ("https://typing-extensions.readthedocs.io/en/latest", None), "pillow": ("https://pillow.readthedocs.io/en/stable", None), "numpy": ("https://numpy.org/doc/stable", None), "torch": ("https://pytorch.org/docs/stable", None), } html_theme = "sphinx_book_theme" nbsphinx_prolog = """ .. raw:: html """