nbdev 3.3.19__tar.gz → 3.3.21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nbdev-3.3.19/nbdev.egg-info → nbdev-3.3.21}/PKG-INFO +4 -3
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/__init__.py +1 -1
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/_modidx.py +0 -6
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/cli.py +3 -3
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/config.py +2 -2
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/doclinks.py +1 -1
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/processors.py +2 -2
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/skill.py +2 -2
- {nbdev-3.3.19 → nbdev-3.3.21/nbdev.egg-info}/PKG-INFO +4 -3
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev.egg-info/requires.txt +2 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/pyproject.toml +3 -4
- {nbdev-3.3.19 → nbdev-3.3.21}/CONTRIBUTING.md +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/LICENSE +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/README.md +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/clean.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/diff.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/export.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/extract_attachments.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/frontmatter.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/imports.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/maker.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/merge.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/migrate.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/moddocs.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/process.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/qmd.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/quarto.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/release.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/scrubmagics.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/serve.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/serve_drv.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/showdoc.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/sync.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev/test.py +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev.egg-info/SOURCES.txt +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev.egg-info/dependency_links.txt +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev.egg-info/entry_points.txt +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/nbdev.egg-info/top_level.txt +0 -0
- {nbdev-3.3.19 → nbdev-3.3.21}/setup.cfg +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nbdev
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.21
|
|
4
4
|
Summary: Create delightful software with Jupyter Notebooks
|
|
5
5
|
Author-email: "Jeremy Howard and the fast.ai community" <j@fast.ai>
|
|
6
|
-
License: Apache-2.0
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
7
|
Project-URL: Repository, https://github.com/AnswerDotAI/nbdev
|
|
8
8
|
Project-URL: Documentation, https://nbdev.fast.ai/
|
|
9
9
|
Keywords: nbdev,fastai,jupyter,notebook,export
|
|
@@ -12,7 +12,6 @@ Classifier: Intended Audience :: Developers
|
|
|
12
12
|
Classifier: Natural Language :: English
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
|
14
14
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
16
15
|
Requires-Python: >=3.10
|
|
17
16
|
Description-Content-Type: text/markdown
|
|
18
17
|
License-File: LICENSE
|
|
@@ -39,6 +38,8 @@ Requires-Dist: pysym2md>=0.0.6; extra == "dev"
|
|
|
39
38
|
Requires-Dist: llms-txt; extra == "dev"
|
|
40
39
|
Requires-Dist: sphinx; extra == "dev"
|
|
41
40
|
Requires-Dist: plum-dispatch; extra == "dev"
|
|
41
|
+
Requires-Dist: nbclient; extra == "dev"
|
|
42
|
+
Requires-Dist: ipykernel; extra == "dev"
|
|
42
43
|
Dynamic: license-file
|
|
43
44
|
|
|
44
45
|
# Getting Started
|
|
@@ -6,7 +6,7 @@ Modules:
|
|
|
6
6
|
- `nbdev.moddocs`: # Module docs: creating them from existing notebooks
|
|
7
7
|
- `nbdev.skill`: Author nbdev notebooks as source, documentation, examples, and tests. Ensure this guidance is in context before any notebook edit."""
|
|
8
8
|
|
|
9
|
-
__version__ = "3.3.
|
|
9
|
+
__version__ = "3.3.21"
|
|
10
10
|
|
|
11
11
|
from .doclinks import nbdev_export
|
|
12
12
|
from .showdoc import show_doc
|
|
@@ -137,7 +137,6 @@ d = { 'settings': { 'branch': 'main',
|
|
|
137
137
|
'nbdev.export.ExportModuleProc.begin': ('api/export.html#exportmoduleproc.begin', 'nbdev/export.py'),
|
|
138
138
|
'nbdev.export.nb_export': ('api/export.html#nb_export', 'nbdev/export.py'),
|
|
139
139
|
'nbdev.export.nb_mdoc': ('api/export.html#nb_mdoc', 'nbdev/export.py')},
|
|
140
|
-
'nbdev.extract_attachments': {},
|
|
141
140
|
'nbdev.frontmatter': { 'nbdev.frontmatter.FrontmatterProc': ('api/frontmatter.html#frontmatterproc', 'nbdev/frontmatter.py'),
|
|
142
141
|
'nbdev.frontmatter.FrontmatterProc._update': ( 'api/frontmatter.html#frontmatterproc._update',
|
|
143
142
|
'nbdev/frontmatter.py'),
|
|
@@ -150,7 +149,6 @@ d = { 'settings': { 'branch': 'main',
|
|
|
150
149
|
'nbdev.frontmatter._dict2fm': ('api/frontmatter.html#_dict2fm', 'nbdev/frontmatter.py'),
|
|
151
150
|
'nbdev.frontmatter._fm2dict_md': ('api/frontmatter.html#_fm2dict_md', 'nbdev/frontmatter.py'),
|
|
152
151
|
'nbdev.frontmatter._insertfm': ('api/frontmatter.html#_insertfm', 'nbdev/frontmatter.py')},
|
|
153
|
-
'nbdev.imports': {},
|
|
154
152
|
'nbdev.maker': { 'nbdev.maker.ModuleMaker': ('api/maker.html#modulemaker', 'nbdev/maker.py'),
|
|
155
153
|
'nbdev.maker.ModuleMaker.__init__': ('api/maker.html#modulemaker.__init__', 'nbdev/maker.py'),
|
|
156
154
|
'nbdev.maker.ModuleMaker._last_future': ('api/maker.html#modulemaker._last_future', 'nbdev/maker.py'),
|
|
@@ -215,7 +213,6 @@ d = { 'settings': { 'branch': 'main',
|
|
|
215
213
|
'nbdev.migrate.migrate_nb': ('api/migrate.html#migrate_nb', 'nbdev/migrate.py'),
|
|
216
214
|
'nbdev.migrate.nbdev_migrate': ('api/migrate.html#nbdev_migrate', 'nbdev/migrate.py'),
|
|
217
215
|
'nbdev.migrate.nbdev_migrate_config': ('api/migrate.html#nbdev_migrate_config', 'nbdev/migrate.py')},
|
|
218
|
-
'nbdev.moddocs': {},
|
|
219
216
|
'nbdev.process': { 'nbdev.process.NBProcessor': ('api/process.html#nbprocessor', 'nbdev/process.py'),
|
|
220
217
|
'nbdev.process.NBProcessor.__init__': ('api/process.html#nbprocessor.__init__', 'nbdev/process.py'),
|
|
221
218
|
'nbdev.process.NBProcessor._proc': ('api/process.html#nbprocessor._proc', 'nbdev/process.py'),
|
|
@@ -364,12 +361,10 @@ d = { 'settings': { 'branch': 'main',
|
|
|
364
361
|
'nbdev.release.update_changelog': ('api/release.html#update_changelog', 'nbdev/release.py'),
|
|
365
362
|
'nbdev.release.write_conda_meta': ('api/release.html#write_conda_meta', 'nbdev/release.py'),
|
|
366
363
|
'nbdev.release.write_requirements': ('api/release.html#write_requirements', 'nbdev/release.py')},
|
|
367
|
-
'nbdev.scrubmagics': {},
|
|
368
364
|
'nbdev.serve': { 'nbdev.serve._is_qpy': ('api/serve.html#_is_qpy', 'nbdev/serve.py'),
|
|
369
365
|
'nbdev.serve._keep_file': ('api/serve.html#_keep_file', 'nbdev/serve.py'),
|
|
370
366
|
'nbdev.serve._proc_file': ('api/serve.html#_proc_file', 'nbdev/serve.py'),
|
|
371
367
|
'nbdev.serve.proc_nbs': ('api/serve.html#proc_nbs', 'nbdev/serve.py')},
|
|
372
|
-
'nbdev.serve_drv': {},
|
|
373
368
|
'nbdev.showdoc': { 'nbdev.showdoc.BasicMarkdownRenderer': ('api/showdoc.html#basicmarkdownrenderer', 'nbdev/showdoc.py'),
|
|
374
369
|
'nbdev.showdoc.BasicMarkdownRenderer._repr_markdown_': ( 'api/showdoc.html#basicmarkdownrenderer._repr_markdown_',
|
|
375
370
|
'nbdev/showdoc.py'),
|
|
@@ -378,7 +373,6 @@ d = { 'settings': { 'branch': 'main',
|
|
|
378
373
|
'nbdev.showdoc.doc': ('api/showdoc.html#doc', 'nbdev/showdoc.py'),
|
|
379
374
|
'nbdev.showdoc.show_doc': ('api/showdoc.html#show_doc', 'nbdev/showdoc.py'),
|
|
380
375
|
'nbdev.showdoc.showdoc_nm': ('api/showdoc.html#showdoc_nm', 'nbdev/showdoc.py')},
|
|
381
|
-
'nbdev.skill': {},
|
|
382
376
|
'nbdev.sync': { 'nbdev.sync._mod_files': ('api/sync.html#_mod_files', 'nbdev/sync.py'),
|
|
383
377
|
'nbdev.sync._to_absolute': ('api/sync.html#_to_absolute', 'nbdev/sync.py'),
|
|
384
378
|
'nbdev.sync._update_mod': ('api/sync.html#_update_mod', 'nbdev/sync.py'),
|
|
@@ -156,16 +156,16 @@ async def nbdev_update_license(
|
|
|
156
156
|
|
|
157
157
|
mapped = mapping.get(to, None)
|
|
158
158
|
if mapped not in avail_lic: raise ValueError(f"{to} is not an available license")
|
|
159
|
-
|
|
159
|
+
lic = await api.licenses.get(mapped)
|
|
160
160
|
|
|
161
161
|
copyright = f"{datetime.now().year}, {cfg.author}"
|
|
162
|
-
body = body.replace('[year], [fullname]', copyright)
|
|
162
|
+
body = lic['body'].replace('[year], [fullname]', copyright)
|
|
163
163
|
body = body.replace('[year] [fullname]', copyright)
|
|
164
164
|
|
|
165
165
|
# Update pyproject.toml
|
|
166
166
|
pyproj = cfg.config_file
|
|
167
167
|
content = pyproj.read_text()
|
|
168
|
-
content = re.sub(r'^
|
|
168
|
+
content = re.sub(r'^license\s*=.*$', f'license = "{lic.spdx_id}"', content, flags=re.MULTILINE)
|
|
169
169
|
pyproj.write_text(content)
|
|
170
170
|
|
|
171
171
|
Path('LICENSE').write_text(body)
|
|
@@ -71,7 +71,7 @@ def _fetch_from_git(raise_err=False):
|
|
|
71
71
|
|
|
72
72
|
# %% ../nbs/api/01_config.ipynb #05aae09f
|
|
73
73
|
pyproject_tmpl = '''[build-system]
|
|
74
|
-
requires = ["setuptools>=
|
|
74
|
+
requires = ["setuptools>=77"]
|
|
75
75
|
build-backend = "setuptools.build_meta"
|
|
76
76
|
|
|
77
77
|
[project]
|
|
@@ -80,7 +80,7 @@ dynamic = ["version"]
|
|
|
80
80
|
description = "{description}"
|
|
81
81
|
readme = "README.md"
|
|
82
82
|
requires-python = ">={min_python}"
|
|
83
|
-
license =
|
|
83
|
+
license = "{license}"
|
|
84
84
|
authors = [{{name = "{author}", email = "{author_email}"}}]
|
|
85
85
|
keywords = {keywords}
|
|
86
86
|
classifiers = [
|
|
@@ -92,7 +92,7 @@ def _get_modidx(py_path, code_root, nbs_path):
|
|
|
92
92
|
if isinstance(tree, ast.ClassDef):
|
|
93
93
|
for t2 in tree.body:
|
|
94
94
|
if isinstance(t2, _def_types): _stor(f'{tree.name}.{t2.name}')
|
|
95
|
-
return {mod_name: d}
|
|
95
|
+
return {mod_name: d} if d else {}
|
|
96
96
|
|
|
97
97
|
# %% ../nbs/api/05_doclinks.ipynb #587df0d4
|
|
98
98
|
def _build_modidx(dest=None, nbs_path=None, skip_exists=False):
|
|
@@ -257,8 +257,8 @@ class exec_show_docs(Processor):
|
|
|
257
257
|
if str2bool(fm.get('skip_showdoc', False)): return
|
|
258
258
|
if _do_eval(cell): self.k.cell(cell)
|
|
259
259
|
title = fm.get('title', '')
|
|
260
|
-
if self.k.exc:
|
|
261
|
-
raise Exception(f"Error{' in notebook: '+title if title else ''} in cell {cell.idx_} :\n{cell.source}") from
|
|
260
|
+
if (e := self.k.exc):
|
|
261
|
+
raise Exception(f"Error{' in notebook: '+title if title else ''} in cell {cell.idx_} :\n{cell.source}\n{type(e).__name__}: {e}") from e
|
|
262
262
|
|
|
263
263
|
def end(self):
|
|
264
264
|
try: from ipywidgets import Widget
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Write notebooks to be read top-to-bottom, interleaving implementation, explanation, examples, outputs, and failure demonstrations. These conventions target published libraries; match surrounding notebooks in internal projects.
|
|
6
6
|
|
|
7
|
-
Check the file, not the repo: `# AUTOGENERATED! DO NOT EDIT!` names the source notebook; `# %% ../nbs/04_usage.ipynb #a45f753a` identifies the source cell. Edit that notebook, never generated modules, `__all__`, `_modidx.py`, or module docstrings; `nbdev-export` regenerates them. Unmarked modules are hand-written. Use notebooks where narrative/examples teach the API, plain `.py` for dense mechanism iterated under pytest. Tests follow source form: lesson cells for notebooks, `tests/*.py` for plain modules.
|
|
7
|
+
Check the file, not the repo: `# AUTOGENERATED! DO NOT EDIT!` names the source notebook; `# %% ../nbs/04_usage.ipynb #a45f753a` identifies the source cell. Edit that notebook, never generated modules, `__all__`, `_modidx.py`, or module docstrings; `nbdev-export` regenerates them. Unmarked modules are hand-written. Use notebooks where narrative/examples teach the API, plain `.py` for dense mechanism iterated under pytest (which should be very rare; never add pytests to a project that doesn't have any, unless explicitly requested). Tests follow source form: lesson cells for notebooks, `tests/*.py` for plain modules.
|
|
8
8
|
|
|
9
9
|
For project-level questions, read `nbs/index.ipynb`, the source of README.md; regenerate with `nbdev-readme` after changes.
|
|
10
10
|
|
|
@@ -36,7 +36,7 @@ Check claims by running code before documenting them; preview assembly with `nbd
|
|
|
36
36
|
|
|
37
37
|
Write page content, not standalone test cells (except rare hidden checks): realistic values, minimal setup, reused objects, and direct assertions that support the lesson. End lesson cells with an informative displayed value when there is something useful to show. Compact `_repr_markdown_` or structured summaries can make later examples readable; plots, tables, images, and HTML also provide evidence. Explain what matters in large outputs and keep stored results focused.
|
|
38
38
|
|
|
39
|
-
Use `fastcore.test` assertions and `expect_fail` in ordinary code cells, with one focused error example per contract. Keep check plumbing, mocks, dense comprehensions, and long setup out of reader-facing examples: extract a small helper or hide the check.
|
|
39
|
+
Use `fastcore.test` assertions and `expect_fail` in ordinary code cells, with one focused error example per contract. Keep check plumbing, mocks, dense comprehensions, and long setup out of reader-facing examples: extract a small helper or hide the check. Use `nbdev-test --file-re` for running >1 named notebook, since they'll run in parallel.
|
|
40
40
|
|
|
41
41
|
Review these as rewrite signals, not absolute rules:
|
|
42
42
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nbdev
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.21
|
|
4
4
|
Summary: Create delightful software with Jupyter Notebooks
|
|
5
5
|
Author-email: "Jeremy Howard and the fast.ai community" <j@fast.ai>
|
|
6
|
-
License: Apache-2.0
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
7
|
Project-URL: Repository, https://github.com/AnswerDotAI/nbdev
|
|
8
8
|
Project-URL: Documentation, https://nbdev.fast.ai/
|
|
9
9
|
Keywords: nbdev,fastai,jupyter,notebook,export
|
|
@@ -12,7 +12,6 @@ Classifier: Intended Audience :: Developers
|
|
|
12
12
|
Classifier: Natural Language :: English
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
|
14
14
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
16
15
|
Requires-Python: >=3.10
|
|
17
16
|
Description-Content-Type: text/markdown
|
|
18
17
|
License-File: LICENSE
|
|
@@ -39,6 +38,8 @@ Requires-Dist: pysym2md>=0.0.6; extra == "dev"
|
|
|
39
38
|
Requires-Dist: llms-txt; extra == "dev"
|
|
40
39
|
Requires-Dist: sphinx; extra == "dev"
|
|
41
40
|
Requires-Dist: plum-dispatch; extra == "dev"
|
|
41
|
+
Requires-Dist: nbclient; extra == "dev"
|
|
42
|
+
Requires-Dist: ipykernel; extra == "dev"
|
|
42
43
|
Dynamic: license-file
|
|
43
44
|
|
|
44
45
|
# Getting Started
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["setuptools>=
|
|
2
|
+
requires = ["setuptools>=77"]
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
@@ -7,7 +7,7 @@ name = "nbdev"
|
|
|
7
7
|
description = "Create delightful software with Jupyter Notebooks"
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
requires-python = ">=3.10"
|
|
10
|
-
license =
|
|
10
|
+
license = "Apache-2.0"
|
|
11
11
|
authors = [{name = "Jeremy Howard and the fast.ai community", email = "j@fast.ai"}]
|
|
12
12
|
keywords = ["nbdev", "fastai", "jupyter", "notebook", "export"]
|
|
13
13
|
classifiers = [
|
|
@@ -16,14 +16,13 @@ classifiers = [
|
|
|
16
16
|
"Natural Language :: English",
|
|
17
17
|
"Programming Language :: Python :: 3",
|
|
18
18
|
"Programming Language :: Python :: 3 :: Only",
|
|
19
|
-
"License :: OSI Approved :: Apache Software License",
|
|
20
19
|
]
|
|
21
20
|
dynamic = ["version"]
|
|
22
21
|
dependencies = [ "fastcore>=2.2.28", "execnb>=0.3.3", "astunparse", "ghapi>=2.0.2", "watchdog", "asttokens",
|
|
23
22
|
"setuptools", "build", "fastgit>=0.0.7", "pyyaml", "tomli; python_version < '3.11'", ]
|
|
24
23
|
|
|
25
24
|
[project.optional-dependencies]
|
|
26
|
-
dev = [ "ipywidgets", "nbdev-numpy", "nbdev-stdlib", "pandas", "matplotlib", "black", "svg.py", "pysym2md>=0.0.6", "llms-txt", "sphinx", "plum-dispatch", ]
|
|
25
|
+
dev = [ "ipywidgets", "nbdev-numpy", "nbdev-stdlib", "pandas", "matplotlib", "black", "svg.py", "pysym2md>=0.0.6", "llms-txt", "sphinx", "plum-dispatch", "nbclient", "ipykernel", ]
|
|
27
26
|
|
|
28
27
|
[project.urls]
|
|
29
28
|
Repository = "https://github.com/AnswerDotAI/nbdev"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|