From be7528e473c41fb2e2526b1869f5ee0d71ee63aa Mon Sep 17 00:00:00 2001 From: star-dust-ctrl <64853102+star-dust-ctrl@users.noreply.github.com> Date: Sat, 9 Dec 2023 06:52:00 +0800 Subject: [PATCH 1/5] docs --- .readthedocs.yaml | 15 +- .../causal_model.png | Bin 26739 -> 48766 bytes docs/_static/js/copybutton.js | 66 --------- docs/_static/switcher.json | 12 ++ docs/_templates/autoapi/index.rst | 15 ++ docs/_templates/autoapi/python/attribute.rst | 1 + docs/_templates/autoapi/python/class.rst | 50 +++++++ docs/_templates/autoapi/python/data.rst | 32 +++++ docs/_templates/autoapi/python/exception.rst | 1 + docs/_templates/autoapi/python/function.rst | 18 +++ docs/_templates/autoapi/python/method.rst | 27 ++++ docs/_templates/autoapi/python/module.rst | 114 ++++++++++++++++ docs/_templates/autoapi/python/package.rst | 1 + docs/_templates/custom-template.html | 6 + docs/_templates/edit-this-page.html | 16 +++ docs/_templates/navbar-version.html | 2 + docs/_templates/test.html | 2 + docs/conf.py | 129 +++++++++++++++--- docs/record | Bin 0 -> 46454 bytes docs/requirements.txt | 20 ++- docs/sg_execution_times.rst | 106 ++++++++++++++ 21 files changed, 537 insertions(+), 96 deletions(-) delete mode 100644 docs/_static/js/copybutton.js create mode 100644 docs/_static/switcher.json create mode 100644 docs/_templates/autoapi/index.rst create mode 100644 docs/_templates/autoapi/python/attribute.rst create mode 100644 docs/_templates/autoapi/python/class.rst create mode 100644 docs/_templates/autoapi/python/data.rst create mode 100644 docs/_templates/autoapi/python/exception.rst create mode 100644 docs/_templates/autoapi/python/function.rst create mode 100644 docs/_templates/autoapi/python/method.rst create mode 100644 docs/_templates/autoapi/python/module.rst create mode 100644 docs/_templates/autoapi/python/package.rst create mode 100644 docs/_templates/custom-template.html create mode 100644 docs/_templates/edit-this-page.html create mode 100644 docs/_templates/navbar-version.html create mode 100644 docs/_templates/test.html create mode 100644 docs/record create mode 100644 docs/sg_execution_times.rst diff --git a/.readthedocs.yaml b/.readthedocs.yaml index bd11fd93c..e16f2da1e 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -4,20 +4,13 @@ build: os: "ubuntu-22.04" tools: python: "3.9" - jobs: - pre_install: - - pip install --no-cache-dir pip --upgrade - - pip install --no-cache-dir pybind11[global] - pre_build: - - pip install --no-cache-dir -r docs/requirements.txt - apt_packages: - - graphviz + +sphinx: + configuration: docs/conf.py python: install: - - requirements: docs/requirements.txt - - method: pip - path: python + - requirements: docs/requirements.txt # Build PDF formats: diff --git a/docs/Tutorial/5-scikit-learn-connection/causal_model.png b/docs/Tutorial/5-scikit-learn-connection/causal_model.png index 505bfbfa3a280bec0c88638b4c01b7412f019002..b4fb459cac207c955f077912b321ed7a6aa7fda3 100644 GIT binary patch literal 48766 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ó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] button on the top-right corner of code samples to hide - * the >>> and ... prompts and the output and thus make the code - * copyable. */ - var div = $('.highlight-python .highlight,' + - '.highlight-python3 .highlight,' + - '.highlight-pycon .highlight,' + - '.highlight-default .highlight') - var pre = div.find('pre'); - - // get the styles from the current theme - pre.parent().parent().css('position', 'relative'); - var hide_text = 'Hide the prompts and output'; - var show_text = 'Show the prompts and output'; - var border_width = pre.css('border-top-width'); - var border_style = pre.css('border-top-style'); - var border_color = pre.css('border-top-color'); - var button_styles = { - 'cursor':'pointer', 'position': 'absolute', 'top': '0', 'right': '0', - 'border-color': border_color, 'border-style': border_style, - 'border-width': border_width, 'color': border_color, 'text-size': '75%', - 'font-family': 'monospace', 'padding-left': '0.2em', 'padding-right': '0.2em', - 'border-radius': '0 3px 0 0' - } - - // create and add the button to all the code blocks that contain >>> - div.each(function(index) { - var jthis = $(this); - if (jthis.find('.gp').length > 0) { - var button = $('>>>'); - button.css(button_styles) - button.attr('title', hide_text); - button.data('hidden', 'false'); - jthis.prepend(button); - } - // tracebacks (.gt) contain bare text elements that need to be - // wrapped in a span to work with .nextUntil() (see later) - jthis.find('pre:has(.gt)').contents().filter(function() { - return ((this.nodeType == 3) && (this.data.trim().length > 0)); - }).wrap(''); - }); - - // define the behavior of the button when it's clicked - $('.copybutton').click(function(e){ - e.preventDefault(); - var button = $(this); - if (button.data('hidden') === 'false') { - // hide the code output - button.parent().find('.go, .gp, .gt').hide(); - button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'hidden'); - button.css('text-decoration', 'line-through'); - button.attr('title', show_text); - button.data('hidden', 'true'); - } else { - // show the code output - button.parent().find('.go, .gp, .gt').show(); - button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'visible'); - button.css('text-decoration', 'none'); - button.attr('title', hide_text); - button.data('hidden', 'false'); - } - }); -}); diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json new file mode 100644 index 000000000..931160942 --- /dev/null +++ b/docs/_static/switcher.json @@ -0,0 +1,12 @@ +[ + { + "name": "latest", + "version": "latest", + "url": "https://abess.readthedocs.io/en/latest/" + }, + { + "name": "0.4.7 (stable)", + "version": "0.4.7", + "url": "https://abess.readthedocs.io/en/latest/" + } +] diff --git a/docs/_templates/autoapi/index.rst b/docs/_templates/autoapi/index.rst new file mode 100644 index 000000000..5f476502c --- /dev/null +++ b/docs/_templates/autoapi/index.rst @@ -0,0 +1,15 @@ +API References +============== + +This page contains auto-generated API reference documentation [#f1]_. + +.. toctree:: + :titlesonly: + + {% for page in pages %} + {% if page.top_level_object and page.display %} + {{ page.include_path }} + {% endif %} + {% endfor %} + +.. [#f1] Created with `sphinx-autoapi `_ diff --git a/docs/_templates/autoapi/python/attribute.rst b/docs/_templates/autoapi/python/attribute.rst new file mode 100644 index 000000000..ebaba555a --- /dev/null +++ b/docs/_templates/autoapi/python/attribute.rst @@ -0,0 +1 @@ +{% extends "python/data.rst" %} diff --git a/docs/_templates/autoapi/python/class.rst b/docs/_templates/autoapi/python/class.rst new file mode 100644 index 000000000..a791e3d61 --- /dev/null +++ b/docs/_templates/autoapi/python/class.rst @@ -0,0 +1,50 @@ +{% if obj.display %} +.. py:{{ obj.type }}:: {{ obj.short_name }}{% if obj.args %}({{ obj.args }}){% endif %} +{% for (args, return_annotation) in obj.overloads %} + {{ " " * (obj.type | length) }} {{ obj.short_name }}{% if args %}({{ args }}){% endif %} +{% endfor %} + + + {% if obj.bases %} + {% if "show-inheritance" in autoapi_options %} + Bases: {% for base in obj.bases %}{{ base|link_objs }}{% if not loop.last %}, {% endif %}{% endfor %} + {% endif %} + + + {% if "show-inheritance-diagram" in autoapi_options and obj.bases != ["object"] %} + .. autoapi-inheritance-diagram:: {{ obj.obj["full_name"] }} + :parts: 1 + {% if "private-members" in autoapi_options %} + :private-bases: + {% endif %} + + {% endif %} + {% endif %} + {% if obj.docstring %} + {{ obj.docstring|indent(3) }} + {% endif %} + {% if "inherited-members" in autoapi_options %} + {% set visible_classes = obj.classes|selectattr("display")|list %} + {% else %} + {% set visible_classes = obj.classes|rejectattr("inherited")|selectattr("display")|list %} + {% endif %} + {% for klass in visible_classes %} + {{ klass.render()|indent(3) }} + {% endfor %} + {% if "inherited-members" in autoapi_options %} + {% set visible_attributes = obj.attributes|selectattr("display")|list %} + {% else %} + {% set visible_attributes = obj.attributes|rejectattr("inherited")|selectattr("display")|list %} + {% endif %} + {% for attribute in visible_attributes %} + {{ attribute.render()|indent(3) }} + {% endfor %} + {% if "inherited-members" in autoapi_options %} + {% set visible_methods = obj.methods|selectattr("display")|list %} + {% else %} + {% set visible_methods = obj.methods|rejectattr("inherited")|selectattr("display")|list %} + {% endif %} + {% for method in visible_methods %} + {{ method.render()|indent(3) }} + {% endfor %} +{% endif %} diff --git a/docs/_templates/autoapi/python/data.rst b/docs/_templates/autoapi/python/data.rst new file mode 100644 index 000000000..89417f1e1 --- /dev/null +++ b/docs/_templates/autoapi/python/data.rst @@ -0,0 +1,32 @@ +{% if obj.display %} +.. py:{{ obj.type }}:: {{ obj.name }} + {%+ if obj.value is not none or obj.annotation is not none -%} + :annotation: + {%- if obj.annotation %} :{{ obj.annotation }} + {%- endif %} + {%- if obj.value is not none %} = {% + if obj.value is string and obj.value.splitlines()|count > 1 -%} + Multiline-String + + .. raw:: html + +
Show Value + + .. code-block:: text + :linenos: + + {{ obj.value|indent(width=8) }} + + .. raw:: html + +
+ + {%- else -%} + {{ obj.value|string|truncate(100) }} + {%- endif %} + {%- endif %} + {% endif %} + + + {{ obj.docstring|indent(3) }} +{% endif %} diff --git a/docs/_templates/autoapi/python/exception.rst b/docs/_templates/autoapi/python/exception.rst new file mode 100644 index 000000000..92f3d38fd --- /dev/null +++ b/docs/_templates/autoapi/python/exception.rst @@ -0,0 +1 @@ +{% extends "python/class.rst" %} diff --git a/docs/_templates/autoapi/python/function.rst b/docs/_templates/autoapi/python/function.rst new file mode 100644 index 000000000..6db8515c4 --- /dev/null +++ b/docs/_templates/autoapi/python/function.rst @@ -0,0 +1,18 @@ +{% if obj.display %} +.. py:function:: {{ obj.short_name }}({{ obj.args }}){% if obj.return_annotation is not none %} -> {{ obj.return_annotation }}{% endif %} + +{% for (args, return_annotation) in obj.overloads %} + {{ obj.short_name }}({{ args }}){% if return_annotation is not none %} -> {{ return_annotation }}{% endif %} + +{% endfor %} + {% if sphinx_version >= (2, 1) %} + {% for property in obj.properties %} + :{{ property }}: + {% endfor %} + {% endif %} + + {% if obj.docstring %} + {{ obj.docstring|indent(3) }} + {% else %} + {% endif %} +{% endif %} diff --git a/docs/_templates/autoapi/python/method.rst b/docs/_templates/autoapi/python/method.rst new file mode 100644 index 000000000..ff1b7767c --- /dev/null +++ b/docs/_templates/autoapi/python/method.rst @@ -0,0 +1,27 @@ +{%- if obj.display %} +{% if sphinx_version >= (2, 1) %} +.. py:method:: {{ obj.short_name }}({{ obj.args }}){% if obj.return_annotation is not none %} -> {{ obj.return_annotation }}{% endif %} + +{% for (args, return_annotation) in obj.overloads %} + {{ obj.short_name }}({{ args }}){% if return_annotation is not none %} -> {{ return_annotation }}{% endif %} + +{% endfor %} + {% if obj.properties %} + {% for property in obj.properties %} + :{{ property }}: + {% endfor %} + + {% else %} + + {% endif %} +{% else %} +.. py:{{ obj.method_type }}:: {{ obj.short_name }}({{ obj.args }}) +{% for (args, return_annotation) in obj.overloads %} + {{ " " * (obj.method_type | length) }} {{ obj.short_name }}({{ args }}) +{% endfor %} + +{% endif %} + {% if obj.docstring %} + {{ obj.docstring|indent(3) }} + {% endif %} +{% endif %} diff --git a/docs/_templates/autoapi/python/module.rst b/docs/_templates/autoapi/python/module.rst new file mode 100644 index 000000000..d2714f6c9 --- /dev/null +++ b/docs/_templates/autoapi/python/module.rst @@ -0,0 +1,114 @@ +{% if not obj.display %} +:orphan: + +{% endif %} +:py:mod:`{{ obj.name }}` +=========={{ "=" * obj.name|length }} + +.. py:module:: {{ obj.name }} + +{% if obj.docstring %} +.. autoapi-nested-parse:: + + {{ obj.docstring|indent(3) }} + +{% endif %} + +{% block subpackages %} +{% set visible_subpackages = obj.subpackages|selectattr("display")|list %} +{% if visible_subpackages %} +Subpackages +----------- +.. toctree:: + :titlesonly: + :maxdepth: 3 + +{% for subpackage in visible_subpackages %} + {{ subpackage.short_name }}/index.rst +{% endfor %} + + +{% endif %} +{% endblock %} +{% block submodules %} +{% set visible_submodules = obj.submodules|selectattr("display")|list %} +{% if visible_submodules %} +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + +{% for submodule in visible_submodules %} + {{ submodule.short_name }}/index.rst +{% endfor %} + + +{% endif %} +{% endblock %} +{% block content %} +{% if obj.all is not none %} +{% set visible_children = obj.children|selectattr("short_name", "in", obj.all)|list %} +{% elif obj.type is equalto("package") %} +{% set visible_children = obj.children|selectattr("display")|list %} +{% else %} +{% set visible_children = obj.children|selectattr("display")|rejectattr("imported")|list %} +{% endif %} +{% if visible_children %} +{{ obj.type|title }} Contents +{{ "-" * obj.type|length }}--------- + +{% set visible_classes = visible_children|selectattr("type", "equalto", "class")|list %} +{% set visible_functions = visible_children|selectattr("type", "equalto", "function")|list %} +{% set visible_attributes = visible_children|selectattr("type", "equalto", "data")|list %} +{% if "show-module-summary" in autoapi_options and (visible_classes or visible_functions) %} +{% block classes scoped %} +{% if visible_classes %} +Classes +~~~~~~~ + +.. autoapisummary:: + +{% for klass in visible_classes %} + {{ klass.id }} +{% endfor %} + + +{% endif %} +{% endblock %} + +{% block functions scoped %} +{% if visible_functions %} +Functions +~~~~~~~~~ + +.. autoapisummary:: + +{% for function in visible_functions %} + {{ function.id }} +{% endfor %} + + +{% endif %} +{% endblock %} + +{% block attributes scoped %} +{% if visible_attributes %} +Attributes +~~~~~~~~~~ + +.. autoapisummary:: + +{% for attribute in visible_attributes %} + {{ attribute.id }} +{% endfor %} + + +{% endif %} +{% endblock %} +{% endif %} +{% for obj_item in visible_children %} +{{ obj_item.render()|indent(0) }} +{% endfor %} +{% endif %} +{% endblock %} diff --git a/docs/_templates/autoapi/python/package.rst b/docs/_templates/autoapi/python/package.rst new file mode 100644 index 000000000..fb9a64965 --- /dev/null +++ b/docs/_templates/autoapi/python/package.rst @@ -0,0 +1 @@ +{% extends "python/module.rst" %} diff --git a/docs/_templates/custom-template.html b/docs/_templates/custom-template.html new file mode 100644 index 000000000..0ed45ec1c --- /dev/null +++ b/docs/_templates/custom-template.html @@ -0,0 +1,6 @@ + diff --git a/docs/_templates/edit-this-page.html b/docs/_templates/edit-this-page.html new file mode 100644 index 000000000..0254d1a2a --- /dev/null +++ b/docs/_templates/edit-this-page.html @@ -0,0 +1,16 @@ +{% if sourcename is defined and theme_use_edit_page_button and page_source_suffix %} + {% set src = sourcename.split('.') %} + +{% endif %} diff --git a/docs/_templates/navbar-version.html b/docs/_templates/navbar-version.html new file mode 100644 index 000000000..b23c1ca17 --- /dev/null +++ b/docs/_templates/navbar-version.html @@ -0,0 +1,2 @@ + +TEST: v{{ version }} diff --git a/docs/_templates/test.html b/docs/_templates/test.html new file mode 100644 index 000000000..341b0d292 --- /dev/null +++ b/docs/_templates/test.html @@ -0,0 +1,2 @@ +{# This is just used for testing in our documentation #} + diff --git a/docs/conf.py b/docs/conf.py index d28a00515..a072ccc6c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -10,14 +10,17 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # +from sphinx.application import Sphinx +from typing import Any, Dict import sphinx_gallery -import sphinx_rtd_theme +import pydata_sphinx_theme import sphinx_gallery.sorting -# import os +import os # import sys import sys # import abess import matplotlib +# sys.path.append("../python/") # sys.path.insert(0, os.path.join(os.path.abspath('..'), "python")) # import SampleModule # from sphinx_gallery.sorting import FileNameSortKey @@ -29,9 +32,15 @@ project = 'ABESS' copyright = '2020, abess-team' author = 'abess-team' +json_url = "https://abess.readthedocs.io/en/latest/_static/switcher.json" # The full version, including alpha/beta/rc tags -release = '0.4.5' +version = os.environ.get("READTHEDOCS_VERSION") +rd = os.environ.get("READTHEDOCS") + +if not rd: + version = "dev" + json_url = "_static/switcher.json" # -- General configuration --------------------------------------------------- @@ -49,11 +58,23 @@ "sphinx.ext.ifconfig", "sphinx.ext.githubpages", 'sphinx.ext.intersphinx', - 'sphinx_gallery.gen_gallery' + 'sphinx_gallery.gen_gallery', + "sphinx_design", + "sphinx_copybutton", + "numpydoc", + "sphinx_favicon", + "sphinx_togglebutton", # , # 'sphinx_toggleprompt' ] +if not os.environ.get("READTHEDOCS"): + extensions += ["sphinx_sitemap"] + + html_baseurl = os.environ.get("SITEMAP_URL_BASE", "http://127.0.0.1:8000/") + sitemap_locales = [None] + sitemap_url_scheme = "{link}" + matplotlib.use('agg') # -- numpydoc @@ -67,6 +88,8 @@ autoclass_content = "both" autodoc_default_flags = ["members", "inherited-members"] autodoc_member_order = "bysource" # default is alphabetical +autodoc_typehints = "description" +autodoc_class_signature = "separated" # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -84,7 +107,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'sphinx_rtd_theme' +html_theme = 'pydata_sphinx_theme' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, @@ -94,13 +117,55 @@ pygments_style = "sphinx" smartquotes = False -html_theme = "sphinx_rtd_theme" -html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] html_theme_options = { - # 'includehidden': False, - "collapse_navigation": False, - "navigation_depth": 3, - "logo_only": True, + "header_links_before_dropdown": 5, + "icon_links": [ + { + "name": "GitHub", + "url": "https://github.com/abess-team/abess", + "icon": "fa-brands fa-github", + }, + { + "name": "PyPI", + "url": "https://pypi.org/project/abess/", + "icon": "fa-brands fa-python", + }, + { + "name": "CRAN", + "url": "https://cran.rstudio.com/web/packages/abess/index.html", + "icon": "fa-solid fa-r", + }, + ], + # alternative way to set twitter and github header icons + # "github_url": "https://github.com/pydata/pydata-sphinx-theme", + # "twitter_url": "https://twitter.com/PyData", + "logo": { + "text": "abess", + "image_dark": ".image/apple-touch-icon.png", + "alt_text": "abess", + }, + "use_edit_page_button": True, + "show_toc_level": 2, + "navbar_align": "left", # [left, content, right] For testing that the navbar items align properly + "navbar_center": ["version-switcher", "navbar-nav"], + # "announcement": """""", + # "show_nav_level": 2, + # "navbar_start": ["navbar-logo"], + # "navbar_end": ["theme-switcher", "navbar-icon-links"], + # "navbar_persistent": ["search-button"], + # "primary_sidebar_end": ["custom-template.html", "sidebar-ethical-ads.html"], + # "article_footer_items": ["test.html", "test.html"], + # "content_footer_items": ["test.html", "test.html"], + # "footer_start": ["test.html", "test.html"], + # "secondary_sidebar_items": ["page-toc.html"], # Remove the source buttons + "switcher": { + "json_url": json_url, + "version_match": version, + }, + # "search_bar_position": "navbar", # TODO: Deprecated - remove in future version } html_logo = "./image/apple-touch-icon.png" html_favicon = "./image/favicon-32x32.png" @@ -118,11 +183,6 @@ htmlhelp_basename = "abessdoc" -def setup(app): - # to hide/show the prompt in code examples: - app.add_js_file("js/copybutton.js") - - # sphinx-gallery configuration sphinx_gallery_conf = { 'doc_module': 'abess', @@ -155,3 +215,40 @@ def setup(app): "sklearn": ("https://scikit-learn.org/dev/", None), 'pandas': ('https://pandas.pydata.org/pandas-docs/stable/', None) } + +def setup_to_main( + app: Sphinx, pagename: str, templatename: str, context, doctree +) -> None: + """Add a function that jinja can access for returning an "edit this page" link pointing to `main`.""" + + def to_main(link: str) -> str: + """Transform "edit on github" links and make sure they always point to the main branch. + + Args: + link: the link to the github edit interface + + Returns: + the link to the tip of the main branch for the same file + """ + links = link.split("/") + idx = links.index("docs") + return "/".join(links[: idx + 1]) + "/source/" + "/".join(links[idx + 1 :]) + + context["to_main"] = to_main + + +def setup(app: Sphinx) -> Dict[str, Any]: + """Add custom configuration to sphinx app. + + Args: + app: the Sphinx application + Returns: + the 2 parralel parameters set to ``True``. + """ + app.connect("html-page-context", setup_to_main) + + return { + "parallel_read_safe": True, + "parallel_write_safe": True, + } + diff --git a/docs/record b/docs/record new file mode 100644 index 0000000000000000000000000000000000000000..73175e11e23cafc46ee65c5230d85ec5e38c3b9e GIT binary patch literal 46454 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.5.2 +docutils<0.17 +matplotlib==3.8.0 +seaborn==0.13.0 +ipython==8.15.0 sphinx-gallery sphinxcontrib-phpdomain -sphinx-autoapi +statsmodels==0.14.0 +cvxpy==1.3.2 +lifelines==0.27.8 +sphinx-design==0.5.0 +numpydoc==1.6.0 +sphinx-togglebutton==0.3.2 +sphinx-favicon==1.0.1 +sphinx-sitemap==2.5.1 +networkx==3.1 geomstats DoubleML pyts dowhy numpy<1.23 imbalanced-learn +abess \ No newline at end of file diff --git a/docs/sg_execution_times.rst b/docs/sg_execution_times.rst new file mode 100644 index 000000000..fb5d1c901 --- /dev/null +++ b/docs/sg_execution_times.rst @@ -0,0 +1,106 @@ + +:orphan: + +.. _sphx_glr_sg_execution_times: + + +Computation times +================= +**09:39.272** total execution time for 24 files **from all galleries**: + +.. container:: + + .. raw:: html + + + + + + + + .. list-table:: + :header-rows: 1 + :class: table table-striped sg-datatable + + * - Example + - Time + - Mem (MB) + * - :ref:`sphx_glr_auto_gallery_4-computation-tips_plot_large_dimension.py` (``Tutorial\4-computation-tips\plot_large_dimension.py``) + - 05:26.577 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_3_double_machine_learning.py` (``Tutorial\5-scikit-learn-connection\plot_3_double_machine_learning.py``) + - 01:50.847 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_1_scikit_learn.py` (``Tutorial\5-scikit-learn-connection\plot_1_scikit_learn.py``) + - 00:46.766 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_4_pyts.py` (``Tutorial\5-scikit-learn-connection\plot_4_pyts.py``) + - 00:23.624 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_5_dowhy.py` (``Tutorial\5-scikit-learn-connection\plot_5_dowhy.py``) + - 00:21.466 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_4-computation-tips_plot_specific_models.py` (``Tutorial\4-computation-tips\plot_specific_models.py``) + - 00:20.575 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_2-pca_plot_6_PCA.py` (``Tutorial\2-pca\plot_6_PCA.py``) + - 00:17.112 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_6_imbalanced_learn.py` (``Tutorial\5-scikit-learn-connection\plot_6_imbalanced_learn.py``) + - 00:06.544 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_2-pca_plot_7_RPCA.py` (``Tutorial\2-pca\plot_7_RPCA.py``) + - 00:01.412 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_2_geomstats.py` (``Tutorial\5-scikit-learn-connection\plot_2_geomstats.py``) + - 00:01.218 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_1-glm_plot_1_LinearRegression.py` (``Tutorial\1-glm\plot_1_LinearRegression.py``) + - 00:01.180 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_4-computation-tips_plot_sparse_inputs.py` (``Tutorial\4-computation-tips\plot_sparse_inputs.py``) + - 00:00.513 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_cross_validation.py` (``Tutorial\3-advanced-features\plot_cross_validation.py``) + - 00:00.375 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_1-glm_plot_4_CoxRegression.py` (``Tutorial\1-glm\plot_4_CoxRegression.py``) + - 00:00.330 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_best_regularized.py` (``Tutorial\3-advanced-features\plot_best_regularized.py``) + - 00:00.160 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_1-glm_plot_5_PossionGammaRegression.py` (``Tutorial\1-glm\plot_5_PossionGammaRegression.py``) + - 00:00.156 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_1-glm_plot_3_MultiTaskLearning.py` (``Tutorial\1-glm\plot_3_MultiTaskLearning.py``) + - 00:00.132 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_best_nuisance.py` (``Tutorial\3-advanced-features\plot_best_nuisance.py``) + - 00:00.113 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_1-glm_plot_2_LogisticRegression.py` (``Tutorial\1-glm\plot_2_LogisticRegression.py``) + - 00:00.097 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_4-computation-tips_plot_large_sample.py` (``Tutorial\4-computation-tips\plot_large_sample.py``) + - 00:00.064 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_best_group.py` (``Tutorial\3-advanced-features\plot_best_group.py``) + - 00:00.007 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_initial_active_set.py` (``Tutorial\3-advanced-features\plot_initial_active_set.py``) + - 00:00.002 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_1-glm_plot_a1_power_of_abess.py` (``Tutorial\1-glm\plot_a1_power_of_abess.py``) + - 00:00.000 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_1-glm_plot_a2_abess_algorithm_details.py` (``Tutorial\1-glm\plot_a2_abess_algorithm_details.py``) + - 00:00.000 + - 0.0 From 90505dff10ac69384f23095536ee50219657d982 Mon Sep 17 00:00:00 2001 From: star-dust-ctrl <64853102+star-dust-ctrl@users.noreply.github.com> Date: Sat, 9 Dec 2023 07:43:23 +0800 Subject: [PATCH 2/5] js --- docs/_static/custom-icon.js | 16 ++++++++++ docs/_static/custom.css | 57 +++++++++++++++++++++++++++++++++ docs/conf.py | 35 ++++++++++++++++++++ docs/sg_execution_times.rst | 64 ++++++++++++++++++------------------- 4 files changed, 140 insertions(+), 32 deletions(-) create mode 100644 docs/_static/custom-icon.js create mode 100644 docs/_static/custom.css diff --git a/docs/_static/custom-icon.js b/docs/_static/custom-icon.js new file mode 100644 index 000000000..cd949b3b7 --- /dev/null +++ b/docs/_static/custom-icon.js @@ -0,0 +1,16 @@ +/******************************************************************************* + * Set a custom icon for pypi as it's not available in the fa built-in brands + */ +FontAwesome.library.add( + (faListOldStyle = { + prefix: "fa-custom", + iconName: "pypi", + icon: [ + 17.313, // viewBox width + 19.807, // viewBox height + [], // ligature + "e001", // unicode codepoint - private use area + "m10.383 0.2-3.239 1.1769 3.1883 1.1614 3.239-1.1798zm-3.4152 1.2411-3.2362 1.1769 3.1855 1.1614 3.2369-1.1769zm6.7177 0.00281-3.2947 1.2009v3.8254l3.2947-1.1988zm-3.4145 1.2439-3.2926 1.1981v3.8254l0.17548-0.064132 3.1171-1.1347zm-6.6564 0.018325v3.8247l3.244 1.1805v-3.8254zm10.191 0.20931v2.3137l3.1777-1.1558zm3.2947 1.2425-3.2947 1.1988v3.8254l3.2947-1.1988zm-8.7058 0.45739c0.00929-1.931e-4 0.018327-2.977e-4 0.027485 0 0.25633 0.00851 0.4263 0.20713 0.42638 0.49826 1.953e-4 0.38532-0.29327 0.80469-0.65542 0.93662-0.36226 0.13215-0.65608-0.073306-0.65613-0.4588-6.28e-5 -0.38556 0.2938-0.80504 0.65613-0.93662 0.068422-0.024919 0.13655-0.038114 0.20156-0.039466zm5.2913 0.78369-3.2947 1.1988v3.8247l3.2947-1.1981zm-10.132 1.239-3.2362 1.1769 3.1883 1.1614 3.2362-1.1769zm6.7177 0.00213-3.2926 1.2016v3.8247l3.2926-1.2009zm-3.4124 1.2439-3.2947 1.1988v3.8254l3.2947-1.1988zm-6.6585 0.016195v3.8275l3.244 1.1805v-3.8254zm16.9 0.21143-3.2947 1.1988v3.8247l3.2947-1.1981zm-3.4145 1.2411-3.2926 1.2016v3.8247l3.2926-1.2009zm-3.4145 1.2411-3.2926 1.2016v3.8247l3.2926-1.2009zm-3.4124 1.2432-3.2947 1.1988v3.8254l3.2947-1.1988zm-6.6585 0.019027v3.8247l3.244 1.1805v-3.8254zm13.485 1.4497-3.2947 1.1988v3.8247l3.2947-1.1981zm-3.4145 1.2411-3.2926 1.2016v3.8247l3.2926-1.2009zm2.4018 0.38127c0.0093-1.83e-4 0.01833-3.16e-4 0.02749 0 0.25633 0.0085 0.4263 0.20713 0.42638 0.49826 1.97e-4 0.38532-0.29327 0.80469-0.65542 0.93662-0.36188 0.1316-0.65525-0.07375-0.65542-0.4588-1.95e-4 -0.38532 0.29328-0.80469 0.65542-0.93662 0.06842-0.02494 0.13655-0.03819 0.20156-0.03947zm-5.8142 0.86403-3.244 1.1805v1.4201l3.244 1.1805z", // svg path (https://simpleicons.org/icons/pypi.svg) + ], + }) +); diff --git a/docs/_static/custom.css b/docs/_static/custom.css new file mode 100644 index 000000000..10feae3a2 --- /dev/null +++ b/docs/_static/custom.css @@ -0,0 +1,57 @@ +/* Background of stable should be green */ +.version-switcher__container a[data-version-name*="stable"] { + position: relative; +} + +.version-switcher__container a[data-version-name*="stable"] span { + color: var(--pst-color-success); +} + +.version-switcher__container a[data-version-name*="stable"] span:before { + content: ""; + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + background-color: var(--pst-color-success); + opacity: 0.1; +} + +/* custom CSS classes (used in docs/user_guide/extending.rst) NOTE: the begin + * and end markers are necessary for partial file includes! don't remove them. + */ + +/* begin-custom-color/* /custom.css */ + +div.admonition.admonition-olive { + border-color: olive; +} +div.admonition.admonition-olive > .admonition-title:before { + background-color: olive; +} +div.admonition.admonition-olive > .admonition-title:after { + color: olive; +} +/* end-custom-color */ + +/* begin-custom-icon/* /custom.css */ + +div.admonition.admonition-icon > .admonition-title:after { + content: "\f24e"; /* the fa-scale icon */ +} +/* end-custom-icon */ + +/* begin-custom-youtube/* /custom.css */ + +div.admonition.admonition-youtube { + border-color: #ff0000; /* YouTube red */ +} +div.admonition.admonition-youtube > .admonition-title:before { + background-color: #ff0000; +} +div.admonition.admonition-youtube > .admonition-title:after { + color: #ff0000; + content: "\f26c"; /* fa-solid fa-tv */ +} +/* end-custom-youtube */ diff --git a/docs/conf.py b/docs/conf.py index a072ccc6c..8d1698ea2 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -64,6 +64,9 @@ "numpydoc", "sphinx_favicon", "sphinx_togglebutton", + "IPython.sphinxext.ipython_console_highlighting", + "IPython.sphinxext.ipython_directive", + "matplotlib.sphinxext.plot_directive", # , # 'sphinx_toggleprompt' ] @@ -167,6 +170,35 @@ }, # "search_bar_position": "navbar", # TODO: Deprecated - remove in future version } + +html_sidebars = { + "auto_gallery/**": [ + "search-field", + "sidebar-nav-bs", + ], + "Python-package/**": [ + "search-field", + "sidebar-nav-bs", + ], # This ensures we test for custom sidebars + "Contributing/**": [ + "search-field", + "sidebar-nav-bs", + ], + # "examples/no-sidebar": [], # Test what page looks like with no sidebar items + # "examples/persistent-search-field": ["search-field"], + # Blog sidebars + # ref: https://ablog.readthedocs.io/manual/ablog-configuration-options/#blog-sidebars + # "examples/blog/*": [ + # "ablog/postcard.html", + # "ablog/recentposts.html", + # "ablog/tagcloud.html", + # "ablog/categories.html", + # "ablog/authors.html", + # "ablog/languages.html", + # "ablog/locations.html", + # "ablog/archives.html", + # ], +} html_logo = "./image/apple-touch-icon.png" html_favicon = "./image/favicon-32x32.png" html_context = { @@ -207,6 +239,9 @@ } +html_css_files = ["custom.css"] +html_js_files = ["custom-icon.js"] + # configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { "numpy": ("https://numpy.org/doc/stable/", None), diff --git a/docs/sg_execution_times.rst b/docs/sg_execution_times.rst index fb5d1c901..52442bc32 100644 --- a/docs/sg_execution_times.rst +++ b/docs/sg_execution_times.rst @@ -6,7 +6,7 @@ Computation times ================= -**09:39.272** total execution time for 24 files **from all galleries**: +**07:51.729** total execution time for 24 files **from all galleries**: .. container:: @@ -33,74 +33,74 @@ Computation times - Time - Mem (MB) * - :ref:`sphx_glr_auto_gallery_4-computation-tips_plot_large_dimension.py` (``Tutorial\4-computation-tips\plot_large_dimension.py``) - - 05:26.577 + - 04:25.227 - 0.0 * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_3_double_machine_learning.py` (``Tutorial\5-scikit-learn-connection\plot_3_double_machine_learning.py``) - - 01:50.847 + - 01:31.070 - 0.0 * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_1_scikit_learn.py` (``Tutorial\5-scikit-learn-connection\plot_1_scikit_learn.py``) - - 00:46.766 - - 0.0 - * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_4_pyts.py` (``Tutorial\5-scikit-learn-connection\plot_4_pyts.py``) - - 00:23.624 - - 0.0 - * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_5_dowhy.py` (``Tutorial\5-scikit-learn-connection\plot_5_dowhy.py``) - - 00:21.466 + - 00:36.578 - 0.0 * - :ref:`sphx_glr_auto_gallery_4-computation-tips_plot_specific_models.py` (``Tutorial\4-computation-tips\plot_specific_models.py``) - - 00:20.575 + - 00:18.240 - 0.0 * - :ref:`sphx_glr_auto_gallery_2-pca_plot_6_PCA.py` (``Tutorial\2-pca\plot_6_PCA.py``) - - 00:17.112 + - 00:17.751 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_4_pyts.py` (``Tutorial\5-scikit-learn-connection\plot_4_pyts.py``) + - 00:17.642 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_5_dowhy.py` (``Tutorial\5-scikit-learn-connection\plot_5_dowhy.py``) + - 00:15.515 - 0.0 * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_6_imbalanced_learn.py` (``Tutorial\5-scikit-learn-connection\plot_6_imbalanced_learn.py``) - - 00:06.544 + - 00:04.440 - 0.0 * - :ref:`sphx_glr_auto_gallery_2-pca_plot_7_RPCA.py` (``Tutorial\2-pca\plot_7_RPCA.py``) - - 00:01.412 - - 0.0 - * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_2_geomstats.py` (``Tutorial\5-scikit-learn-connection\plot_2_geomstats.py``) - - 00:01.218 + - 00:01.384 - 0.0 * - :ref:`sphx_glr_auto_gallery_1-glm_plot_1_LinearRegression.py` (``Tutorial\1-glm\plot_1_LinearRegression.py``) - - 00:01.180 + - 00:01.197 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_5-scikit-learn-connection_plot_2_geomstats.py` (``Tutorial\5-scikit-learn-connection\plot_2_geomstats.py``) + - 00:00.905 - 0.0 * - :ref:`sphx_glr_auto_gallery_4-computation-tips_plot_sparse_inputs.py` (``Tutorial\4-computation-tips\plot_sparse_inputs.py``) - - 00:00.513 + - 00:00.411 - 0.0 * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_cross_validation.py` (``Tutorial\3-advanced-features\plot_cross_validation.py``) - - 00:00.375 + - 00:00.376 - 0.0 * - :ref:`sphx_glr_auto_gallery_1-glm_plot_4_CoxRegression.py` (``Tutorial\1-glm\plot_4_CoxRegression.py``) - - 00:00.330 + - 00:00.316 - 0.0 * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_best_regularized.py` (``Tutorial\3-advanced-features\plot_best_regularized.py``) - - 00:00.160 + - 00:00.156 - 0.0 * - :ref:`sphx_glr_auto_gallery_1-glm_plot_5_PossionGammaRegression.py` (``Tutorial\1-glm\plot_5_PossionGammaRegression.py``) - - 00:00.156 + - 00:00.145 - 0.0 * - :ref:`sphx_glr_auto_gallery_1-glm_plot_3_MultiTaskLearning.py` (``Tutorial\1-glm\plot_3_MultiTaskLearning.py``) - - 00:00.132 + - 00:00.117 - 0.0 * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_best_nuisance.py` (``Tutorial\3-advanced-features\plot_best_nuisance.py``) - - 00:00.113 + - 00:00.111 - 0.0 * - :ref:`sphx_glr_auto_gallery_1-glm_plot_2_LogisticRegression.py` (``Tutorial\1-glm\plot_2_LogisticRegression.py``) - - 00:00.097 + - 00:00.093 - 0.0 * - :ref:`sphx_glr_auto_gallery_4-computation-tips_plot_large_sample.py` (``Tutorial\4-computation-tips\plot_large_sample.py``) - - 00:00.064 + - 00:00.050 - 0.0 * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_best_group.py` (``Tutorial\3-advanced-features\plot_best_group.py``) - - 00:00.007 + - 00:00.004 - 0.0 * - :ref:`sphx_glr_auto_gallery_3-advanced-features_plot_initial_active_set.py` (``Tutorial\3-advanced-features\plot_initial_active_set.py``) - - 00:00.002 - - 0.0 - * - :ref:`sphx_glr_auto_gallery_1-glm_plot_a1_power_of_abess.py` (``Tutorial\1-glm\plot_a1_power_of_abess.py``) - - 00:00.000 + - 00:00.001 - 0.0 * - :ref:`sphx_glr_auto_gallery_1-glm_plot_a2_abess_algorithm_details.py` (``Tutorial\1-glm\plot_a2_abess_algorithm_details.py``) + - 00:00.001 + - 0.0 + * - :ref:`sphx_glr_auto_gallery_1-glm_plot_a1_power_of_abess.py` (``Tutorial\1-glm\plot_a1_power_of_abess.py``) - 00:00.000 - 0.0 From 8a138a0974f326a3b4c111090b6c8f2213f83958 Mon Sep 17 00:00:00 2001 From: star-dust-ctrl <64853102+star-dust-ctrl@users.noreply.github.com> Date: Sat, 24 Feb 2024 11:04:08 +0800 Subject: [PATCH 3/5] doc --- docs/_static/custom.css | 9 +++++++++ docs/_static/switcher.json | 4 ++-- docs/conf.py | 15 ++++++++------- docs/index.rst | 8 -------- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/docs/_static/custom.css b/docs/_static/custom.css index 10feae3a2..2d8f54cfa 100644 --- a/docs/_static/custom.css +++ b/docs/_static/custom.css @@ -55,3 +55,12 @@ div.admonition.admonition-youtube > .admonition-title:after { content: "\f26c"; /* fa-solid fa-tv */ } /* end-custom-youtube */ + +.sphx-glr-thumbcontainer[tooltip]:hover::before, +.sphx-glr-thumbcontainer[tooltip]:hover::after { + display: none; +} +:root, html[data-theme="light"], body[data-theme="light"]{ + --sg-download-a-background-image: linear-gradient(to bottom, #20B2AA, #ADD8E6); + --sg-download-a-hover-background-color: #ADD8E6; +} \ No newline at end of file diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json index 931160942..6b532bada 100644 --- a/docs/_static/switcher.json +++ b/docs/_static/switcher.json @@ -2,11 +2,11 @@ { "name": "latest", "version": "latest", - "url": "https://abess.readthedocs.io/en/latest/" + "url": "https://abess2.readthedocs.io/en/latest/" }, { "name": "0.4.7 (stable)", "version": "0.4.7", - "url": "https://abess.readthedocs.io/en/latest/" + "url": "https://abess2.readthedocs.io/en/latest/" } ] diff --git a/docs/conf.py b/docs/conf.py index 8d1698ea2..01593bc24 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -121,7 +121,7 @@ smartquotes = False html_theme_options = { - "header_links_before_dropdown": 5, + "header_links_before_dropdown": 4, "icon_links": [ { "name": "GitHub", @@ -158,7 +158,7 @@ # "show_nav_level": 2, # "navbar_start": ["navbar-logo"], # "navbar_end": ["theme-switcher", "navbar-icon-links"], - # "navbar_persistent": ["search-button"], + "navbar_persistent": [], # "primary_sidebar_end": ["custom-template.html", "sidebar-ethical-ads.html"], # "article_footer_items": ["test.html", "test.html"], # "content_footer_items": ["test.html", "test.html"], @@ -168,20 +168,21 @@ "json_url": json_url, "version_match": version, }, + "navbar_end": ["search-field.html","theme-switcher","navbar-icon-links.html"], # "search_bar_position": "navbar", # TODO: Deprecated - remove in future version } html_sidebars = { "auto_gallery/**": [ - "search-field", + # "search-field", "sidebar-nav-bs", ], "Python-package/**": [ - "search-field", + # "search-field", "sidebar-nav-bs", ], # This ensures we test for custom sidebars "Contributing/**": [ - "search-field", + # "search-field", "sidebar-nav-bs", ], # "examples/no-sidebar": [], # Test what page looks like with no sidebar items @@ -243,13 +244,13 @@ html_js_files = ["custom-icon.js"] # configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = { +""" intersphinx_mapping = { "numpy": ("https://numpy.org/doc/stable/", None), 'python': ('https://docs.python.org/{.major}'.format(sys.version_info), None), 'matplotlib': ('https://matplotlib.org/stable/', None), "sklearn": ("https://scikit-learn.org/dev/", None), 'pandas': ('https://pandas.pydata.org/pandas-docs/stable/', None) -} +} """ def setup_to_main( app: Sphinx, pagename: str, templatename: str, context, doctree diff --git a/docs/index.rst b/docs/index.rst index ce292d0bc..b39a250df 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -22,14 +22,6 @@ FAQ Changelog <./Changelog> -.. toctree:: - :hidden: - :caption: USEFUL LINK - - abess @GitHub - abess @PyPI - abess @CRAN - Indices and tables ================== From 755979e207819a47c65719c1172d9f435b83a06e Mon Sep 17 00:00:00 2001 From: star-dust-ctrl <64853102+star-dust-ctrl@users.noreply.github.com> Date: Sat, 24 Feb 2024 12:07:06 +0800 Subject: [PATCH 4/5] Update conf.py --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 01593bc24..5a3ed9a2a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -32,7 +32,7 @@ project = 'ABESS' copyright = '2020, abess-team' author = 'abess-team' -json_url = "https://abess.readthedocs.io/en/latest/_static/switcher.json" +json_url = "https://abess2.readthedocs.io/en/latest/_static/switcher.json" # The full version, including alpha/beta/rc tags version = os.environ.get("READTHEDOCS_VERSION") From a0441a55061e2d202d472bafb8908e90839cd1a9 Mon Sep 17 00:00:00 2001 From: star-dust-ctrl <64853102+star-dust-ctrl@users.noreply.github.com> Date: Sat, 24 Feb 2024 20:39:07 +0800 Subject: [PATCH 5/5] abess2 to abess --- docs/_static/switcher.json | 4 ++-- docs/conf.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json index 6b532bada..931160942 100644 --- a/docs/_static/switcher.json +++ b/docs/_static/switcher.json @@ -2,11 +2,11 @@ { "name": "latest", "version": "latest", - "url": "https://abess2.readthedocs.io/en/latest/" + "url": "https://abess.readthedocs.io/en/latest/" }, { "name": "0.4.7 (stable)", "version": "0.4.7", - "url": "https://abess2.readthedocs.io/en/latest/" + "url": "https://abess.readthedocs.io/en/latest/" } ] diff --git a/docs/conf.py b/docs/conf.py index 5a3ed9a2a..bec80f423 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -32,7 +32,7 @@ project = 'ABESS' copyright = '2020, abess-team' author = 'abess-team' -json_url = "https://abess2.readthedocs.io/en/latest/_static/switcher.json" +json_url = "https://abess.readthedocs.io/en/latest/_static/switcher.json" # The full version, including alpha/beta/rc tags version = os.environ.get("READTHEDOCS_VERSION") @@ -244,13 +244,13 @@ html_js_files = ["custom-icon.js"] # configuration for intersphinx: refer to the Python standard library. -""" intersphinx_mapping = { +intersphinx_mapping = { "numpy": ("https://numpy.org/doc/stable/", None), 'python': ('https://docs.python.org/{.major}'.format(sys.version_info), None), 'matplotlib': ('https://matplotlib.org/stable/', None), "sklearn": ("https://scikit-learn.org/dev/", None), 'pandas': ('https://pandas.pydata.org/pandas-docs/stable/', None) -} """ +} def setup_to_main( app: Sphinx, pagename: str, templatename: str, context, doctree