##// END OF EJS Templates
Use and depend on intersphinx_registry for doc building....
M Bussonnier -
Show More
@@ -1,12 +1,12 b''
1 1 -e .[doc]
2 2 sphinx>7
3 3 setuptools
4 4 sphinx_rtd_theme>=1.2.0
5 5 numpy
6 6 exceptiongroup
7 7 testpath
8 8 matplotlib
9 9 docrepr
10 10 prompt_toolkit
11 11 ipykernel
12 stack_data
12 intersphinx_registry
@@ -1,249 +1,273 b''
1 1 # -*- coding: utf-8 -*-
2 2 #
3 3 # IPython documentation build configuration file.
4 4
5 5 # NOTE: This file has been edited manually from the auto-generated one from
6 6 # sphinx. Do NOT delete and re-generate. If any changes from sphinx are
7 7 # needed, generate a scratch one and merge by hand any new fields needed.
8 8
9 9 #
10 10 # This file is execfile()d with the current directory set to its containing dir.
11 11 #
12 12 # The contents of this file are pickled, so don't put values in the namespace
13 13 # that aren't pickleable (module imports are okay, they're removed automatically).
14 14 #
15 15 # All configuration values have a default value; values that are commented out
16 16 # serve to show the default value.
17 17
18 18
19 19 import sys, os
20 20 from pathlib import Path
21 21
22 22 if sys.version_info > (3, 11):
23 23 import tomllib
24 24 else:
25 25 import tomli as tomllib
26 26
27 27 with open("./sphinx.toml", "rb") as f:
28 28 config = tomllib.load(f)
29 29
30 30 # https://read-the-docs.readthedocs.io/en/latest/faq.html
31 31 ON_RTD = os.environ.get("READTHEDOCS", None) == "True"
32 32
33 33 if ON_RTD:
34 34 tags.add("rtd")
35 35
36 36 # RTD doesn't use the Makefile, so re-run autogen_{things}.py here.
37 37 for name in ("config", "api", "magics", "shortcuts"):
38 38 fname = Path("autogen_{}.py".format(name))
39 39 fpath = (Path(__file__).parent).joinpath("..", fname)
40 40 with open(fpath, encoding="utf-8") as f:
41 41 exec(
42 42 compile(f.read(), fname, "exec"),
43 43 {
44 44 "__file__": fpath,
45 45 "__name__": "__main__",
46 46 },
47 47 )
48 48 import sphinx_rtd_theme
49 49
50 50 # Allow Python scripts to change behaviour during sphinx run
51 51 os.environ["IN_SPHINX_RUN"] = "True"
52 52
53 53 autodoc_type_aliases = {
54 54 "Matcher": " IPython.core.completer.Matcher",
55 55 "MatcherAPIv1": " IPython.core.completer.MatcherAPIv1",
56 56 }
57 57
58 58 # If your extensions are in another directory, add it here. If the directory
59 59 # is relative to the documentation root, use os.path.abspath to make it
60 60 # absolute, like shown here.
61 61 sys.path.insert(0, os.path.abspath("../sphinxext"))
62 62
63 63 # We load the ipython release info into a dict by explicit execution
64 64 iprelease = {}
65 65 exec(
66 66 compile(
67 67 open("../../IPython/core/release.py", encoding="utf-8").read(),
68 68 "../../IPython/core/release.py",
69 69 "exec",
70 70 ),
71 71 iprelease,
72 72 )
73 73
74 74 # General configuration
75 75 # ---------------------
76 76
77 77 # - template_path: Add any paths that contain templates here, relative to this directory.
78 78 # - master_doc: The master toctree document.
79 79 # - project
80 80 # - copyright
81 81 # - github_project_url
82 82 # - source_suffix = config["sphinx"]["source_suffix"]
83 83 # - exclude_patterns:
84 84 # Exclude these glob-style patterns when looking for source files.
85 85 # They are relative to the source/ directory.
86 86 # - pygments_style: The name of the Pygments (syntax highlighting) style to use.
87 87 # - extensions:
88 88 # Add any Sphinx extension module names here, as strings. They can be extensions
89 89 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
90 90 # - default_role
91 91 # - modindex_common_prefix
92 92
93 93 locals().update(config["sphinx"])
94 94
95 intersphinx_mapping = config["intersphinx_mapping"]
96 for k, v in intersphinx_mapping.items():
97 intersphinx_mapping[k] = tuple(
98 [intersphinx_mapping[k]["url"], intersphinx_mapping[k]["fallback"]]
95 try:
96 from intersphinx_registry import get_intersphinx_mapping
97
98 intersphinx_mapping = get_intersphinx_mapping(
99 packages={
100 "python",
101 "rpy2",
102 "jupyterclient",
103 "jupyter",
104 "jedi",
105 "traitlets",
106 "ipykernel",
107 "prompt_toolkit",
108 "ipywidgets",
109 "ipyparallel",
110 "pip",
111 }
99 112 )
100 113
114 except ModuleNotFoundError:
115 # In case intersphinx_registry is not yet packages on current plaform
116 # as it is quite recent.
117 print("/!\\ intersphinx_registry not installed, relying on local mapping.")
118 intersphinx_mapping = config["intersphinx_mapping"]
119 for k, v in intersphinx_mapping.items():
120 intersphinx_mapping[k] = tuple(
121 [intersphinx_mapping[k]["url"], intersphinx_mapping[k]["fallback"]]
122 )
123
124
101 125 # numpydoc config
102 126 numpydoc_show_class_members = config["numpydoc"][
103 127 "numpydoc_show_class_members"
104 128 ] # Otherwise Sphinx emits thousands of warnings
105 129 numpydoc_class_members_toctree = config["numpydoc"]["numpydoc_class_members_toctree"]
106 130 warning_is_error = config["numpydoc"]["warning_is_error"]
107 131
108 132 # Options for HTML output
109 133 # -----------------------
110 134 html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
111 135 # - html_theme
112 136 # - html_static_path
113 137 # Add any paths that contain custom static files (such as style sheets) here,
114 138 # relative to this directory. They are copied after the builtin static files,
115 139 # so a file named "default.css" will overwrite the builtin "default.css".
116 140 # Favicon needs the directory name
117 141 # - html_favicon
118 142 # - html_last_updated_fmt = config["html"]["html_last_updated_fmt"]
119 143 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
120 144 # using the given strftime format.
121 145 # Output file base name for HTML help builder.
122 146 # - htmlhelp_basename
123 147 locals().update(config["html"])
124 148
125 149 # Additional templates that should be rendered to pages, maps page names to
126 150 # template names.
127 151 html_additional_pages = {}
128 152 for item in config["html"]["html_additional_pages"]:
129 153 html_additional_pages[item[0]] = item[1]
130 154
131 155 # Options for LaTeX output
132 156 # ------------------------
133 157
134 158 # Grouping the document tree into LaTeX files. List of tuples
135 159 # (source start file, target name, title, author, document class [howto/manual]).
136 160 latex_documents = []
137 161 for item in config["latex"]["latex_documents"]:
138 162 latex_documents.append(tuple(item))
139 163 # If false, no module index is generated.
140 164 latex_use_modindex = config["latex"]["latex_use_modindex"]
141 165 # The font size ('10pt', '11pt' or '12pt').
142 166 latex_font_size = config["latex"]["latex_font_size"]
143 167
144 168 # Options for texinfo output
145 169 # --------------------------
146 170 texinfo_documents = [
147 171 (
148 172 master_doc,
149 173 "ipython",
150 174 "IPython Documentation",
151 175 "The IPython Development Team",
152 176 "IPython",
153 177 "IPython Documentation",
154 178 "Programming",
155 179 1,
156 180 ),
157 181 ]
158 182
159 183 #########################################################################
160 184 # Custom configuration
161 185 # The default replacements for |version| and |release|, also used in various
162 186 # other places throughout the built documents.
163 187 #
164 188 # The full version, including alpha/beta/rc tags.
165 189 release = "%s" % iprelease["version"]
166 190 # Just the X.Y.Z part, no '-dev'
167 191 version = iprelease["version"].split("-", 1)[0]
168 192
169 193 # There are two options for replacing |today|: either, you set today to some
170 194 # non-false value, then it is used:
171 195 # today = ''
172 196 # Else, today_fmt is used as the format for a strftime call.
173 197 today_fmt = "%B %d, %Y"
174 198
175 199 rst_prolog = ""
176 200
177 201
178 202 def is_stable(extra):
179 203 for ext in {"dev", "b", "rc"}:
180 204 if ext in extra:
181 205 return False
182 206 return True
183 207
184 208
185 209 if is_stable(iprelease["_version_extra"]):
186 210 tags.add("ipystable")
187 211 print("Adding Tag: ipystable")
188 212 else:
189 213 tags.add("ipydev")
190 214 print("Adding Tag: ipydev")
191 215 rst_prolog += """
192 216 .. warning::
193 217
194 218 This documentation covers a development version of IPython. The development
195 219 version may differ significantly from the latest stable release.
196 220 """
197 221
198 222 rst_prolog += """
199 223 .. important::
200 224
201 225 This documentation covers IPython versions 6.0 and higher. Beginning with
202 226 version 6.0, IPython stopped supporting compatibility with Python versions
203 227 lower than 3.3 including all versions of Python 2.7.
204 228
205 229 If you are looking for an IPython version compatible with Python 2.7,
206 230 please use the IPython 5.x LTS release and refer to its documentation (LTS
207 231 is the long term support release).
208 232
209 233 """
210 234
211 235 import logging
212 236
213 237
214 238 class ConfigtraitFilter(logging.Filter):
215 239 """
216 240 This is a filter to remove in sphinx 3+ the error about config traits being duplicated.
217 241
218 242 As we autogenerate configuration traits from, subclasses have lots of
219 243 duplication and we want to silence them. Indeed we build on travis with
220 244 warnings-as-error set to True, so those duplicate items make the build fail.
221 245 """
222 246
223 247 def filter(self, record):
224 248 if (
225 249 record.args
226 250 and record.args[0] == "configtrait"
227 251 and "duplicate" in record.msg
228 252 ):
229 253 return False
230 254 return True
231 255
232 256
233 257 ct_filter = ConfigtraitFilter()
234 258
235 259 import sphinx.util
236 260
237 261 logger = sphinx.util.logging.getLogger("sphinx.domains.std").logger
238 262 logger.addFilter(ct_filter)
239 263
240 264
241 265 def setup(app):
242 266 app.add_css_file("theme_overrides.css")
243 267
244 268
245 269 # Cleanup
246 270 # -------
247 271 # delete release info to avoid pickling errors from sphinx
248 272
249 273 del iprelease
@@ -1,210 +1,210 b''
1 1 [build-system]
2 2 requires = ["setuptools>=61.2"]
3 3 # We need access to the 'setupbase' module at build time.
4 4 # Hence we declare a custom build backend.
5 5 build-backend = "_build_meta" # just re-exports setuptools.build_meta definitions
6 6 backend-path = ["."]
7 7
8 8 [project]
9 9 name = "ipython"
10 10 description = "IPython: Productive Interactive Computing"
11 11 keywords = ["Interactive", "Interpreter", "Shell", "Embedding"]
12 12 classifiers = [
13 13 "Framework :: IPython",
14 14 "Framework :: Jupyter",
15 15 "Intended Audience :: Developers",
16 16 "Intended Audience :: Science/Research",
17 17 "License :: OSI Approved :: BSD License",
18 18 "Programming Language :: Python",
19 19 "Programming Language :: Python :: 3",
20 20 "Programming Language :: Python :: 3 :: Only",
21 21 "Topic :: System :: Shells",
22 22 ]
23 23 requires-python = ">=3.10"
24 24 dependencies = [
25 25 'colorama; sys_platform == "win32"',
26 26 "decorator",
27 27 "exceptiongroup; python_version<'3.11'",
28 28 "jedi>=0.16",
29 29 "matplotlib-inline",
30 30 'pexpect>4.3; sys_platform != "win32" and sys_platform != "emscripten"',
31 31 "prompt_toolkit>=3.0.41,<3.1.0",
32 32 "pygments>=2.4.0",
33 33 "stack_data",
34 34 "traitlets>=5.13.0",
35 35 "typing_extensions>=4.6; python_version<'3.12'",
36 36 ]
37 37 dynamic = ["authors", "license", "version"]
38 38
39 39 [project.entry-points."pygments.lexers"]
40 40 ipythonconsole = "IPython.lib.lexers:IPythonConsoleLexer"
41 41 ipython = "IPython.lib.lexers:IPythonLexer"
42 42 ipython3 = "IPython.lib.lexers:IPython3Lexer"
43 43
44 44 [project.scripts]
45 45 ipython = "IPython:start_ipython"
46 46 ipython3 = "IPython:start_ipython"
47 47
48 48 [project.readme]
49 49 file = "long_description.rst"
50 50 content-type = "text/x-rst"
51 51
52 52 [project.urls]
53 53 Homepage = "https://ipython.org"
54 54 Documentation = "https://ipython.readthedocs.io/"
55 55 Funding = "https://numfocus.org/"
56 56 Source = "https://github.com/ipython/ipython"
57 57 Tracker = "https://github.com/ipython/ipython/issues"
58 58
59 59 [project.optional-dependencies]
60 60 black = [
61 61 "black",
62 62 ]
63 63 doc = [
64 64 "docrepr",
65 65 "exceptiongroup",
66 "intersphinx_registry",
66 67 "ipykernel",
67 68 "ipython[test]",
68 69 "matplotlib",
69 70 "setuptools>=18.5",
70 71 "sphinx-rtd-theme",
71 72 "sphinx>=1.3",
72 73 "sphinxcontrib-jquery",
73 "stack_data",
74 74 "tomli ; python_version<'3.11'",
75 75 "typing_extensions",
76 76 ]
77 77 kernel = [
78 78 "ipykernel",
79 79 ]
80 80 nbconvert = [
81 81 "nbconvert",
82 82 ]
83 83 nbformat = [
84 84 "nbformat",
85 85 ]
86 86 notebook = [
87 87 "ipywidgets",
88 88 "notebook",
89 89 ]
90 90 parallel = [
91 91 "ipyparallel",
92 92 ]
93 93 qtconsole = [
94 94 "qtconsole",
95 95 ]
96 96 terminal = []
97 97 test = [
98 98 "pytest",
99 99 "pytest-asyncio<0.22",
100 100 "testpath",
101 101 "pickleshare",
102 102 ]
103 103 test_extra = [
104 104 "ipython[test]",
105 105 "curio",
106 106 "matplotlib!=3.2.0",
107 107 "nbformat",
108 108 "numpy>=1.23",
109 109 "pandas",
110 110 "trio",
111 111 ]
112 112 matplotlib = [
113 113 "matplotlib"
114 114 ]
115 115 all = [
116 116 "ipython[black,doc,kernel,nbconvert,nbformat,notebook,parallel,qtconsole,matplotlib]",
117 117 "ipython[test,test_extra]",
118 118 ]
119 119
120 120 [tool.mypy]
121 121 python_version = "3.10"
122 122 ignore_missing_imports = true
123 123 follow_imports = 'silent'
124 124 exclude = [
125 125 'test_\.+\.py',
126 126 'IPython.utils.tests.test_wildcard',
127 127 'testing',
128 128 'tests',
129 129 'PyColorize.py',
130 130 '_process_win32_controller.py',
131 131 'IPython/core/application.py',
132 132 'IPython/core/profileapp.py',
133 133 'IPython/lib/deepreload.py',
134 134 'IPython/sphinxext/ipython_directive.py',
135 135 'IPython/terminal/ipapp.py',
136 136 'IPython/utils/_process_win32.py',
137 137 'IPython/utils/path.py',
138 138 ]
139 139
140 140 [tool.pytest.ini_options]
141 141 addopts = [
142 142 "--durations=10",
143 143 "-pIPython.testing.plugin.pytest_ipdoctest",
144 144 "--ipdoctest-modules",
145 145 "--ignore=docs",
146 146 "--ignore=examples",
147 147 "--ignore=htmlcov",
148 148 "--ignore=ipython_kernel",
149 149 "--ignore=ipython_parallel",
150 150 "--ignore=results",
151 151 "--ignore=tmp",
152 152 "--ignore=tools",
153 153 "--ignore=traitlets",
154 154 "--ignore=IPython/core/tests/daft_extension",
155 155 "--ignore=IPython/sphinxext",
156 156 "--ignore=IPython/terminal/pt_inputhooks",
157 157 "--ignore=IPython/__main__.py",
158 158 "--ignore=IPython/external/qt_for_kernel.py",
159 159 "--ignore=IPython/html/widgets/widget_link.py",
160 160 "--ignore=IPython/html/widgets/widget_output.py",
161 161 "--ignore=IPython/terminal/console.py",
162 162 "--ignore=IPython/utils/_process_cli.py",
163 163 "--ignore=IPython/utils/_process_posix.py",
164 164 "--ignore=IPython/utils/_process_win32.py",
165 165 "--ignore=IPython/utils/_process_win32_controller.py",
166 166 "--ignore=IPython/utils/daemonize.py",
167 167 "--ignore=IPython/utils/eventful.py",
168 168 "--ignore=IPython/kernel",
169 169 "--ignore=IPython/consoleapp.py",
170 170 "--ignore=IPython/core/inputsplitter.py",
171 171 "--ignore=IPython/lib/kernel.py",
172 172 "--ignore=IPython/utils/jsonutil.py",
173 173 "--ignore=IPython/utils/localinterfaces.py",
174 174 "--ignore=IPython/utils/log.py",
175 175 "--ignore=IPython/utils/signatures.py",
176 176 "--ignore=IPython/utils/traitlets.py",
177 177 "--ignore=IPython/utils/version.py"
178 178 ]
179 179 doctest_optionflags = [
180 180 "NORMALIZE_WHITESPACE",
181 181 "ELLIPSIS"
182 182 ]
183 183 ipdoctest_optionflags = [
184 184 "NORMALIZE_WHITESPACE",
185 185 "ELLIPSIS"
186 186 ]
187 187 asyncio_mode = "strict"
188 188
189 189 [tool.pyright]
190 190 pythonPlatform="All"
191 191
192 192 [tool.setuptools]
193 193 zip-safe = false
194 194 platforms = ["Linux", "Mac OSX", "Windows"]
195 195 license-files = ["LICENSE"]
196 196 include-package-data = false
197 197
198 198 [tool.setuptools.packages.find]
199 199 exclude = ["setupext"]
200 200 namespaces = false
201 201
202 202 [tool.setuptools.package-data]
203 203 "IPython" = ["py.typed"]
204 204 "IPython.core" = ["profile/README*"]
205 205 "IPython.core.tests" = ["*.png", "*.jpg", "daft_extension/*.py"]
206 206 "IPython.lib.tests" = ["*.wav"]
207 207 "IPython.testing.plugin" = ["*.txt"]
208 208
209 209 [tool.setuptools.dynamic]
210 210 version = {attr = "IPython.core.release.__version__"}
General Comments 0
You need to be logged in to leave comments. Login now