jpterm 0.2.1__tar.gz → 0.2.3__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.
- {jpterm-0.2.1 → jpterm-0.2.3}/CHANGELOG.md +30 -2
- {jpterm-0.2.1 → jpterm-0.2.3}/PKG-INFO +1 -1
- jpterm-0.2.3/examples/widget.ipynb +248 -0
- jpterm-0.2.3/jpterm/__init__.py +1 -0
- jpterm-0.2.3/plugins/cell/txl_cell/__init__.py +1 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/cell/txl_cell/components.py +3 -1
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/console/pyproject.toml +1 -0
- jpterm-0.2.3/plugins/console/txl_console/__init__.py +1 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/console/txl_console/components.py +28 -27
- jpterm-0.2.3/plugins/editors/txl_editors/__init__.py +1 -0
- jpterm-0.2.3/plugins/file_browser/txl_file_browser/__init__.py +1 -0
- jpterm-0.2.3/plugins/image_viewer/txl_image_viewer/__init__.py +1 -0
- jpterm-0.2.3/plugins/jpterm/txl_jpterm/__init__.py +1 -0
- jpterm-0.2.3/plugins/kernel/txl_kernel/__init__.py +1 -0
- jpterm-0.2.3/plugins/launcher/txl_launcher/__init__.py +1 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_contents/pyproject.toml +1 -1
- jpterm-0.2.3/plugins/local_contents/txl_local_contents/__init__.py +1 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_kernels/pyproject.toml +1 -1
- jpterm-0.2.3/plugins/local_kernels/txl_local_kernels/__init__.py +1 -0
- jpterm-0.2.3/plugins/local_terminals/txl_local_terminals/__init__.py +1 -0
- jpterm-0.2.3/plugins/markdown_viewer/txl_markdown_viewer/__init__.py +1 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/notebook_editor/pyproject.toml +1 -0
- jpterm-0.2.3/plugins/notebook_editor/txl_notebook_editor/__init__.py +1 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_contents/pyproject.toml +1 -0
- jpterm-0.2.3/plugins/remote_contents/txl_remote_contents/__init__.py +1 -0
- jpterm-0.2.3/plugins/remote_kernels/txl_remote_kernels/__init__.py +1 -0
- jpterm-0.2.3/plugins/remote_terminals/txl_remote_terminals/__init__.py +1 -0
- jpterm-0.2.3/plugins/terminal/txl_terminal/__init__.py +1 -0
- jpterm-0.2.3/plugins/text_editor/txl_text_editor/__init__.py +1 -0
- jpterm-0.2.3/plugins/text_viewer/txl_text_viewer/__init__.py +1 -0
- jpterm-0.2.3/plugins/widgets/txl_widgets/__init__.py +1 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/txl/pyproject.toml +0 -1
- jpterm-0.2.3/txl/txl/__init__.py +1 -0
- jpterm-0.2.1/examples/widget.ipynb +0 -59
- jpterm-0.2.1/jpterm/__init__.py +0 -1
- jpterm-0.2.1/plugins/cell/txl_cell/__init__.py +0 -1
- jpterm-0.2.1/plugins/console/txl_console/__init__.py +0 -1
- jpterm-0.2.1/plugins/editors/txl_editors/__init__.py +0 -1
- jpterm-0.2.1/plugins/file_browser/txl_file_browser/__init__.py +0 -1
- jpterm-0.2.1/plugins/image_viewer/txl_image_viewer/__init__.py +0 -1
- jpterm-0.2.1/plugins/jpterm/txl_jpterm/__init__.py +0 -1
- jpterm-0.2.1/plugins/kernel/txl_kernel/__init__.py +0 -1
- jpterm-0.2.1/plugins/launcher/txl_launcher/__init__.py +0 -1
- jpterm-0.2.1/plugins/local_contents/txl_local_contents/__init__.py +0 -1
- jpterm-0.2.1/plugins/local_kernels/txl_local_kernels/__init__.py +0 -1
- jpterm-0.2.1/plugins/local_terminals/txl_local_terminals/__init__.py +0 -1
- jpterm-0.2.1/plugins/markdown_viewer/txl_markdown_viewer/__init__.py +0 -1
- jpterm-0.2.1/plugins/notebook_editor/txl_notebook_editor/__init__.py +0 -1
- jpterm-0.2.1/plugins/remote_contents/txl_remote_contents/__init__.py +0 -1
- jpterm-0.2.1/plugins/remote_kernels/txl_remote_kernels/__init__.py +0 -1
- jpterm-0.2.1/plugins/remote_terminals/txl_remote_terminals/__init__.py +0 -1
- jpterm-0.2.1/plugins/terminal/txl_terminal/__init__.py +0 -1
- jpterm-0.2.1/plugins/text_editor/txl_text_editor/__init__.py +0 -1
- jpterm-0.2.1/plugins/text_viewer/txl_text_viewer/__init__.py +0 -1
- jpterm-0.2.1/plugins/widgets/txl_widgets/__init__.py +0 -1
- jpterm-0.2.1/txl/txl/__init__.py +0 -1
- {jpterm-0.2.1 → jpterm-0.2.3}/.github/workflows/test.yml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/.gitignore +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/.pre-commit-config.yaml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/LICENSE +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/config.yaml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/examples/button.ipynb +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/examples/demo.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/examples/jupyter.png +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/examples/plotext.ipynb +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/examples/switch.ipynb +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/jpterm/cli.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/cell/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/cell/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/cell/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/console/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/console/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/editors/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/editors/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/editors/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/editors/txl_editors/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/file_browser/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/file_browser/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/file_browser/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/file_browser/txl_file_browser/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/image_viewer/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/image_viewer/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/image_viewer/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/image_viewer/txl_image_viewer/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/jpterm/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/jpterm/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/jpterm/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/jpterm/txl_jpterm/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/jpterm/txl_jpterm/footer.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/jpterm/txl_jpterm/header.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/jpterm/txl_jpterm/jpterm.css +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/jpterm/txl_jpterm/main_area.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/kernel/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/kernel/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/kernel/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/kernel/txl_kernel/driver.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/kernel/txl_kernel/message.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/launcher/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/launcher/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/launcher/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/launcher/txl_launcher/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_contents/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_contents/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_contents/txl_local_contents/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_kernels/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_kernels/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_kernels/txl_local_kernels/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_kernels/txl_local_kernels/connect.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_kernels/txl_local_kernels/driver.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_kernels/txl_local_kernels/kernelspec.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_kernels/txl_local_kernels/message.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_kernels/txl_local_kernels/paths.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_terminals/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_terminals/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_terminals/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_terminals/txl_local_terminals/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_terminals/txl_local_terminals/terminal.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/local_terminals/txl_local_terminals/win_terminal.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/markdown_viewer/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/markdown_viewer/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/markdown_viewer/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/markdown_viewer/txl_markdown_viewer/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/notebook_editor/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/notebook_editor/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/notebook_editor/txl_notebook_editor/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/notebook_viewer/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/notebook_viewer/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/notebook_viewer/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/notebook_viewer/txl_notebook_viewer/__init__.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/notebook_viewer/txl_notebook_viewer/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_contents/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_contents/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_contents/txl_remote_contents/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_kernels/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_kernels/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_kernels/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_kernels/txl_remote_kernels/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_kernels/txl_remote_kernels/driver.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_kernels/txl_remote_kernels/message.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_terminals/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_terminals/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_terminals/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/remote_terminals/txl_remote_terminals/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/terminal/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/terminal/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/terminal/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/terminal/txl_terminal/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/text_editor/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/text_editor/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/text_editor/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/text_editor/txl_text_editor/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/text_viewer/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/text_viewer/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/text_viewer/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/text_viewer/txl_text_viewer/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/widgets/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/widgets/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/widgets/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/plugins/widgets/txl_widgets/components.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/pyproject.toml +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/txl/LICENSE.txt +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/txl/README.md +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/txl/txl/app.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/txl/txl/base.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/txl/txl/cli.py +0 -0
- {jpterm-0.2.1 → jpterm-0.2.3}/txl/txl/text_input.py +0 -0
@@ -2,6 +2,36 @@
|
|
2
2
|
|
3
3
|
<!-- <START NEW CHANGELOG ENTRY> -->
|
4
4
|
|
5
|
+
## 0.2.3
|
6
|
+
|
7
|
+
([Full Changelog](https://github.com/davidbrochart/jpterm/compare/v0.2.2...ae0ab58aa584c0b3bad16ffed12584ea74b823ec))
|
8
|
+
|
9
|
+
### Merged PRs
|
10
|
+
|
11
|
+
- Show output execution count [#69](https://github.com/davidbrochart/jpterm/pull/69) ([@davidbrochart](https://github.com/davidbrochart))
|
12
|
+
|
13
|
+
### Contributors to this release
|
14
|
+
|
15
|
+
([GitHub contributors page for this release](https://github.com/davidbrochart/jpterm/graphs/contributors?from=2023-12-21&to=2023-12-21&type=c))
|
16
|
+
|
17
|
+
[@davidbrochart](https://github.com/search?q=repo%3Adavidbrochart%2Fjpterm+involves%3Adavidbrochart+updated%3A2023-12-21..2023-12-21&type=Issues)
|
18
|
+
|
19
|
+
<!-- <END NEW CHANGELOG ENTRY> -->
|
20
|
+
|
21
|
+
## 0.2.2
|
22
|
+
|
23
|
+
([Full Changelog](https://github.com/davidbrochart/jpterm/compare/v0.2.1...e6480de616a8a8b471c5510910c90cbd4aa52cdf))
|
24
|
+
|
25
|
+
### Merged PRs
|
26
|
+
|
27
|
+
- Update dependencies [#68](https://github.com/davidbrochart/jpterm/pull/68) ([@davidbrochart](https://github.com/davidbrochart))
|
28
|
+
|
29
|
+
### Contributors to this release
|
30
|
+
|
31
|
+
([GitHub contributors page for this release](https://github.com/davidbrochart/jpterm/graphs/contributors?from=2023-12-20&to=2023-12-21&type=c))
|
32
|
+
|
33
|
+
[@davidbrochart](https://github.com/search?q=repo%3Adavidbrochart%2Fjpterm+involves%3Adavidbrochart+updated%3A2023-12-20..2023-12-21&type=Issues)
|
34
|
+
|
5
35
|
## 0.2.1
|
6
36
|
|
7
37
|
([Full Changelog](https://github.com/davidbrochart/jpterm/compare/v0.2.0...b54b3b60006897ba67fe6c03b38a6f03e9a3d023))
|
@@ -16,8 +46,6 @@
|
|
16
46
|
|
17
47
|
[@davidbrochart](https://github.com/search?q=repo%3Adavidbrochart%2Fjpterm+involves%3Adavidbrochart+updated%3A2023-12-20..2023-12-20&type=Issues)
|
18
48
|
|
19
|
-
<!-- <END NEW CHANGELOG ENTRY> -->
|
20
|
-
|
21
49
|
## 0.2.0
|
22
50
|
|
23
51
|
([Full Changelog](https://github.com/davidbrochart/jpterm/compare/v0.1.24...ad02105b38d40f104343f914a247e373a37d9911))
|
@@ -0,0 +1,248 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "code",
|
5
|
+
"execution_count": null,
|
6
|
+
"metadata": {},
|
7
|
+
"outputs": [],
|
8
|
+
"source": [
|
9
|
+
"from decimal import Decimal\n",
|
10
|
+
"\n",
|
11
|
+
"from textual import events, on\r",
|
12
|
+
"from textual.app import App, ComposeResult\r",
|
13
|
+
"from textual.containers import Container\r",
|
14
|
+
"from textual.css.query import NoMatches\r",
|
15
|
+
"from textual.reactive import var\r",
|
16
|
+
"from textual.widgets import Button, Digits\r",
|
17
|
+
"from ypywidgets_textual import Widget, Driver\r",
|
18
|
+
"\r",
|
19
|
+
"class CalculatorApp(App):\r",
|
20
|
+
" \"\"\"A working 'desktop' calculator.\"\"\"\r",
|
21
|
+
"\r",
|
22
|
+
" CSS = \"\"\"\r",
|
23
|
+
" Screen {\r",
|
24
|
+
" overflow: auto;\r",
|
25
|
+
" }\r",
|
26
|
+
" \r",
|
27
|
+
" #calculator {\r",
|
28
|
+
" layout: grid;\r",
|
29
|
+
" grid-size: 4;\r",
|
30
|
+
" grid-gutter: 1 2;\r",
|
31
|
+
" grid-columns: 1fr;\r",
|
32
|
+
" grid-rows: 2fr 1fr 1fr 1fr 1fr 1fr;\r",
|
33
|
+
" margin: 1 2;\r",
|
34
|
+
" min-height: 25;\r",
|
35
|
+
" min-width: 26;\r",
|
36
|
+
" height: 100%;\r",
|
37
|
+
" }\r",
|
38
|
+
" \r",
|
39
|
+
" Button {\r",
|
40
|
+
" width: 100%;\r",
|
41
|
+
" height: 100%;\r",
|
42
|
+
" }\r",
|
43
|
+
" \r",
|
44
|
+
" #numbers {\r",
|
45
|
+
" column-span: 4;\r",
|
46
|
+
" padding: 0 1;\r",
|
47
|
+
" height: 100%;\r",
|
48
|
+
" background: $primary-lighten-2;\r",
|
49
|
+
" color: $text;\r",
|
50
|
+
" content-align: center middle;\r",
|
51
|
+
" text-align: right;\r",
|
52
|
+
" }\r",
|
53
|
+
" \r",
|
54
|
+
" #number-0 {\r",
|
55
|
+
" column-span: 2;\r",
|
56
|
+
" }\r",
|
57
|
+
" \"\"\"\r",
|
58
|
+
"\r",
|
59
|
+
" numbers = var(\"0\")\r",
|
60
|
+
" show_ac = var(True)\r",
|
61
|
+
" left = var(Decimal(\"0\"))\r",
|
62
|
+
" right = var(Decimal(\"0\"))\r",
|
63
|
+
" value = var(\"\")\r",
|
64
|
+
" operator = var(\"plus\")\r",
|
65
|
+
"\r",
|
66
|
+
" NAME_MAP = {\r",
|
67
|
+
" \"asterisk\": \"multiply\",\r",
|
68
|
+
" \"slash\": \"divide\",\r",
|
69
|
+
" \"underscore\": \"plus-minus\",\r",
|
70
|
+
" \"full_stop\": \"point\",\r",
|
71
|
+
" \"plus_minus_sign\": \"plus-minus\",\r",
|
72
|
+
" \"percent_sign\": \"percent\",\r",
|
73
|
+
" \"equals_sign\": \"equals\",\r",
|
74
|
+
" \"minus\": \"minus\",\r",
|
75
|
+
" \"plus\": \"plus\",\r",
|
76
|
+
" }\r",
|
77
|
+
"\r",
|
78
|
+
" def watch_numbers(self, value: str) -> None:\r",
|
79
|
+
" \"\"\"Called when numbers is updated.\"\"\"\r",
|
80
|
+
" self.query_one(\"#numbers\", Digits).update(value)\r",
|
81
|
+
"\r",
|
82
|
+
" def compute_show_ac(self) -> bool:\r",
|
83
|
+
" \"\"\"Compute switch to show AC or C button\"\"\"\r",
|
84
|
+
" return self.value in (\"\", \"0\") and self.numbers == \"0\"\r",
|
85
|
+
"\r",
|
86
|
+
" def watch_show_ac(self, show_ac: bool) -> None:\r",
|
87
|
+
" \"\"\"Called when show_ac changes.\"\"\"\r",
|
88
|
+
" self.query_one(\"#c\").display = not show_ac\r",
|
89
|
+
" self.query_one(\"#ac\").display = show_ac\r",
|
90
|
+
"\r",
|
91
|
+
" def compose(self) -> ComposeResult:\r",
|
92
|
+
" \"\"\"Add our buttons.\"\"\"\r",
|
93
|
+
" with Container(id=\"calculator\"):\r",
|
94
|
+
" yield Digits(id=\"numbers\")\r",
|
95
|
+
" yield Button(\"AC\", id=\"ac\", variant=\"primary\")\r",
|
96
|
+
" yield Button(\"C\", id=\"c\", variant=\"primary\")\r",
|
97
|
+
" yield Button(\"+/-\", id=\"plus-minus\", variant=\"primary\")\r",
|
98
|
+
" yield Button(\"%\", id=\"percent\", variant=\"primary\")\r",
|
99
|
+
" yield Button(\"÷\", id=\"divide\", variant=\"warning\")\r",
|
100
|
+
" yield Button(\"7\", id=\"number-7\", classes=\"number\")\r",
|
101
|
+
" yield Button(\"8\", id=\"number-8\", classes=\"number\")\r",
|
102
|
+
" yield Button(\"9\", id=\"number-9\", classes=\"number\")\r",
|
103
|
+
" yield Button(\"×\", id=\"multiply\", variant=\"warning\")\r",
|
104
|
+
" yield Button(\"4\", id=\"number-4\", classes=\"number\")\r",
|
105
|
+
" yield Button(\"5\", id=\"number-5\", classes=\"number\")\r",
|
106
|
+
" yield Button(\"6\", id=\"number-6\", classes=\"number\")\r",
|
107
|
+
" yield Button(\"-\", id=\"minus\", variant=\"warning\")\r",
|
108
|
+
" yield Button(\"1\", id=\"number-1\", classes=\"number\")\r",
|
109
|
+
" yield Button(\"2\", id=\"number-2\", classes=\"number\")\r",
|
110
|
+
" yield Button(\"3\", id=\"number-3\", classes=\"number\")\r",
|
111
|
+
" yield Button(\"+\", id=\"plus\", variant=\"warning\")\r",
|
112
|
+
" yield Button(\"0\", id=\"number-0\", classes=\"number\")\r",
|
113
|
+
" yield Button(\".\", id=\"point\")\r",
|
114
|
+
" yield Button(\"=\", id=\"equals\", variant=\"warning\")\r",
|
115
|
+
"\r",
|
116
|
+
" def on_key(self, event: events.Key) -> None:\r",
|
117
|
+
" \"\"\"Called when the user presses a key.\"\"\"\r",
|
118
|
+
"\r",
|
119
|
+
" def press(button_id: str) -> None:\r",
|
120
|
+
" \"\"\"Press a button, should it exist.\"\"\"\r",
|
121
|
+
" try:\r",
|
122
|
+
" self.query_one(f\"#{button_id}\", Button).press()\r",
|
123
|
+
" except NoMatches:\r",
|
124
|
+
" pass\r",
|
125
|
+
"\r",
|
126
|
+
" key = event.key\r",
|
127
|
+
" if key.isdecimal():\r",
|
128
|
+
" press(f\"number-{key}\")\r",
|
129
|
+
" elif key == \"c\":\r",
|
130
|
+
" press(\"c\")\r",
|
131
|
+
" press(\"ac\")\r",
|
132
|
+
" else:\r",
|
133
|
+
" button_id = self.NAME_MAP.get(key)\r",
|
134
|
+
" if button_id is not None:\r",
|
135
|
+
" press(self.NAME_MAP.get(key, key))\r",
|
136
|
+
"\r",
|
137
|
+
" @on(Button.Pressed, \".number\")\r",
|
138
|
+
" def number_pressed(self, event: Button.Pressed) -> None:\r",
|
139
|
+
" \"\"\"Pressed a number.\"\"\"\r",
|
140
|
+
" assert event.button.id is not None\r",
|
141
|
+
" number = event.button.id.partition(\"-\")[-1]\r",
|
142
|
+
" self.numbers = self.value = self.value.lstrip(\"0\") + number\r",
|
143
|
+
"\r",
|
144
|
+
" @on(Button.Pressed, \"#plus-minus\")\r",
|
145
|
+
" def plus_minus_pressed(self) -> None:\r",
|
146
|
+
" \"\"\"Pressed + / -\"\"\"\r",
|
147
|
+
" self.numbers = self.value = str(Decimal(self.value or \"0\") * -1)\r",
|
148
|
+
"\r",
|
149
|
+
" @on(Button.Pressed, \"#percent\")\r",
|
150
|
+
" def percent_pressed(self) -> None:\r",
|
151
|
+
" \"\"\"Pressed %\"\"\"\r",
|
152
|
+
" self.numbers = self.value = str(Decimal(self.value or \"0\") / Decimal(100))\r",
|
153
|
+
"\r",
|
154
|
+
" @on(Button.Pressed, \"#point\")\r",
|
155
|
+
" def pressed_point(self) -> None:\r",
|
156
|
+
" \"\"\"Pressed .\"\"\"\r",
|
157
|
+
" if \".\" not in self.value:\r",
|
158
|
+
" self.numbers = self.value = (self.value or \"0\") + \".\"\r",
|
159
|
+
"\r",
|
160
|
+
" @on(Button.Pressed, \"#ac\")\r",
|
161
|
+
" def pressed_ac(self) -> None:\r",
|
162
|
+
" \"\"\"Pressed AC\"\"\"\r",
|
163
|
+
" self.value = \"\"\r",
|
164
|
+
" self.left = self.right = Decimal(0)\r",
|
165
|
+
" self.operator = \"plus\"\r",
|
166
|
+
" self.numbers = \"0\"\r",
|
167
|
+
"\r",
|
168
|
+
" @on(Button.Pressed, \"#c\")\r",
|
169
|
+
" def pressed_c(self) -> None:\r",
|
170
|
+
" \"\"\"Pressed C\"\"\"\r",
|
171
|
+
" self.value = \"\"\r",
|
172
|
+
" self.numbers = \"0\"\r",
|
173
|
+
"\r",
|
174
|
+
" def _do_math(self) -> None:\r",
|
175
|
+
" \"\"\"Does the math: LEFT OPERATOR RIGHT\"\"\"\r",
|
176
|
+
" try:\r",
|
177
|
+
" if self.operator == \"plus\":\r",
|
178
|
+
" self.left += self.right\r",
|
179
|
+
" elif self.operator == \"minus\":\r",
|
180
|
+
" self.left -= self.right\r",
|
181
|
+
" elif self.operator == \"divide\":\r",
|
182
|
+
" self.left /= self.right\r",
|
183
|
+
" elif self.operator == \"multiply\":\r",
|
184
|
+
" self.left *= self.right\r",
|
185
|
+
" self.numbers = str(self.left)\r",
|
186
|
+
" self.value = \"\"\r",
|
187
|
+
" except Exception:\r",
|
188
|
+
" self.numbers = \"Error\"\r",
|
189
|
+
"\r",
|
190
|
+
" @on(Button.Pressed, \"#plus,#minus,#divide,#multiply\")\r",
|
191
|
+
" def pressed_op(self, event: Button.Pressed) -> None:\r",
|
192
|
+
" \"\"\"Pressed one of the arithmetic operations.\"\"\"\r",
|
193
|
+
" self.right = Decimal(self.value or \"0\")\r",
|
194
|
+
" self._do_math()\r",
|
195
|
+
" assert event.button.id is not None\r",
|
196
|
+
" self.operator = event.button.id\r",
|
197
|
+
"\r",
|
198
|
+
" @on(Button.Pressed, \"#equals\")\r",
|
199
|
+
" def pressed_equals(self) -> None:\r",
|
200
|
+
" \"\"\"Pressed =\"\"\"\r",
|
201
|
+
" if self.value:\r",
|
202
|
+
" self.right = Decimal(self.value)\r",
|
203
|
+
" self._do_math()\r",
|
204
|
+
"\r",
|
205
|
+
"app = CalculatorApp(driver_class=Driver)"
|
206
|
+
]
|
207
|
+
},
|
208
|
+
{
|
209
|
+
"cell_type": "code",
|
210
|
+
"execution_count": null,
|
211
|
+
"metadata": {},
|
212
|
+
"outputs": [],
|
213
|
+
"source": [
|
214
|
+
"w = Widget(app, cols=0, rows=0)"
|
215
|
+
]
|
216
|
+
},
|
217
|
+
{
|
218
|
+
"cell_type": "code",
|
219
|
+
"execution_count": null,
|
220
|
+
"metadata": {},
|
221
|
+
"outputs": [],
|
222
|
+
"source": [
|
223
|
+
"w"
|
224
|
+
]
|
225
|
+
}
|
226
|
+
],
|
227
|
+
"metadata": {
|
228
|
+
"kernelspec": {
|
229
|
+
"display_name": "Python 3 (ipykernel)",
|
230
|
+
"language": "python",
|
231
|
+
"name": "python3"
|
232
|
+
},
|
233
|
+
"language_info": {
|
234
|
+
"codemirror_mode": {
|
235
|
+
"name": "ipython",
|
236
|
+
"version": 3
|
237
|
+
},
|
238
|
+
"file_extension": ".py",
|
239
|
+
"mimetype": "text/x-python",
|
240
|
+
"name": "python",
|
241
|
+
"nbconvert_exporter": "python",
|
242
|
+
"pygments_lexer": "ipython3",
|
243
|
+
"version": "3.11.6"
|
244
|
+
}
|
245
|
+
},
|
246
|
+
"nbformat": 4,
|
247
|
+
"nbformat_minor": 4
|
248
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -227,6 +227,8 @@ class _Cell(Cell, Container, metaclass=CellMeta, can_focus=True):
|
|
227
227
|
renderable = RichText.from_ansi(text)
|
228
228
|
elif output_type == "execute_result":
|
229
229
|
execution_count = output.get("execution_count", " ") or " "
|
230
|
+
if execution_count != " ":
|
231
|
+
execution_count = int(execution_count)
|
230
232
|
execution_count = RichText.from_markup(
|
231
233
|
f"[red]Out[[#ee4b2b]{execution_count}[/#ee4b2b]]:[/red]\n"
|
232
234
|
)
|
@@ -237,7 +239,7 @@ class _Cell(Cell, Container, metaclass=CellMeta, can_focus=True):
|
|
237
239
|
widget = YDOCS[f"txl_{model.__class__.__name__[:-5]}"](model)
|
238
240
|
if not widget:
|
239
241
|
data = output["data"].get("text/plain", "")
|
240
|
-
renderable =
|
242
|
+
renderable = execution_count
|
241
243
|
if isinstance(data, list):
|
242
244
|
text = "".join(data)
|
243
245
|
renderable += RichText.from_ansi(text)
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -67,34 +67,35 @@ class _Console(Console, VerticalScroll, metaclass=ConsoleMeta):
|
|
67
67
|
if target == "cells":
|
68
68
|
for event in events:
|
69
69
|
if isinstance(event, ArrayEvent):
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
insert
|
75
|
-
|
76
|
-
retain
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
self.
|
89
|
-
|
90
|
-
if i < len(self.cells):
|
91
|
-
self.mount(cell, before=self.cells[i])
|
70
|
+
if len(event.path) < 2:
|
71
|
+
insert = None
|
72
|
+
retain = None
|
73
|
+
for d in event.delta:
|
74
|
+
if "insert" in d:
|
75
|
+
insert = d["insert"]
|
76
|
+
elif "retain" in d:
|
77
|
+
retain = d["retain"]
|
78
|
+
i = 0 if retain is None else retain
|
79
|
+
if insert is not None:
|
80
|
+
for c in insert:
|
81
|
+
cell = self.cell_factory(
|
82
|
+
ycell=c,
|
83
|
+
language=self.language,
|
84
|
+
kernel=self.kernel,
|
85
|
+
show_execution_count=False,
|
86
|
+
show_border=False,
|
87
|
+
)
|
88
|
+
if not self.cells:
|
89
|
+
self.mount(cell)
|
92
90
|
else:
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
91
|
+
if i < len(self.cells):
|
92
|
+
self.mount(cell, before=self.cells[i])
|
93
|
+
else:
|
94
|
+
self.mount(cell, after=self.cells[i - 1])
|
95
|
+
if i <= self.cell_i:
|
96
|
+
self.cell_i += 1
|
97
|
+
self.cells.insert(i, cell)
|
98
|
+
i += 1
|
98
99
|
if self.cells:
|
99
100
|
self.cells[self.cell_i].select()
|
100
101
|
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.2.3"
|
@@ -1,59 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"cells": [
|
3
|
-
{
|
4
|
-
"execution_count": 1,
|
5
|
-
"metadata": {
|
6
|
-
"trusted": false
|
7
|
-
},
|
8
|
-
"source": "from decimal import Decimal\n\nfrom textual import events, on\rfrom textual.app import App, ComposeResult\rfrom textual.containers import Container\rfrom textual.css.query import NoMatches\rfrom textual.reactive import var\rfrom textual.widgets import Button, Digits\rfrom ypywidgets_textual import Widget, Driver\r\rclass CalculatorApp(App):\r \"\"\"A working 'desktop' calculator.\"\"\"\r\r CSS = \"\"\"\r Screen {\r overflow: auto;\r }\r \r #calculator {\r layout: grid;\r grid-size: 4;\r grid-gutter: 1 2;\r grid-columns: 1fr;\r grid-rows: 2fr 1fr 1fr 1fr 1fr 1fr;\r margin: 1 2;\r min-height: 25;\r min-width: 26;\r height: 100%;\r }\r \r Button {\r width: 100%;\r height: 100%;\r }\r \r #numbers {\r column-span: 4;\r padding: 0 1;\r height: 100%;\r background: $primary-lighten-2;\r color: $text;\r content-align: center middle;\r text-align: right;\r }\r \r #number-0 {\r column-span: 2;\r }\r \"\"\"\r\r numbers = var(\"0\")\r show_ac = var(True)\r left = var(Decimal(\"0\"))\r right = var(Decimal(\"0\"))\r value = var(\"\")\r operator = var(\"plus\")\r\r NAME_MAP = {\r \"asterisk\": \"multiply\",\r \"slash\": \"divide\",\r \"underscore\": \"plus-minus\",\r \"full_stop\": \"point\",\r \"plus_minus_sign\": \"plus-minus\",\r \"percent_sign\": \"percent\",\r \"equals_sign\": \"equals\",\r \"minus\": \"minus\",\r \"plus\": \"plus\",\r }\r\r def watch_numbers(self, value: str) -> None:\r \"\"\"Called when numbers is updated.\"\"\"\r self.query_one(\"#numbers\", Digits).update(value)\r\r def compute_show_ac(self) -> bool:\r \"\"\"Compute switch to show AC or C button\"\"\"\r return self.value in (\"\", \"0\") and self.numbers == \"0\"\r\r def watch_show_ac(self, show_ac: bool) -> None:\r \"\"\"Called when show_ac changes.\"\"\"\r self.query_one(\"#c\").display = not show_ac\r self.query_one(\"#ac\").display = show_ac\r\r def compose(self) -> ComposeResult:\r \"\"\"Add our buttons.\"\"\"\r with Container(id=\"calculator\"):\r yield Digits(id=\"numbers\")\r yield Button(\"AC\", id=\"ac\", variant=\"primary\")\r yield Button(\"C\", id=\"c\", variant=\"primary\")\r yield Button(\"+/-\", id=\"plus-minus\", variant=\"primary\")\r yield Button(\"%\", id=\"percent\", variant=\"primary\")\r yield Button(\"\u00f7\", id=\"divide\", variant=\"warning\")\r yield Button(\"7\", id=\"number-7\", classes=\"number\")\r yield Button(\"8\", id=\"number-8\", classes=\"number\")\r yield Button(\"9\", id=\"number-9\", classes=\"number\")\r yield Button(\"\u00d7\", id=\"multiply\", variant=\"warning\")\r yield Button(\"4\", id=\"number-4\", classes=\"number\")\r yield Button(\"5\", id=\"number-5\", classes=\"number\")\r yield Button(\"6\", id=\"number-6\", classes=\"number\")\r yield Button(\"-\", id=\"minus\", variant=\"warning\")\r yield Button(\"1\", id=\"number-1\", classes=\"number\")\r yield Button(\"2\", id=\"number-2\", classes=\"number\")\r yield Button(\"3\", id=\"number-3\", classes=\"number\")\r yield Button(\"+\", id=\"plus\", variant=\"warning\")\r yield Button(\"0\", id=\"number-0\", classes=\"number\")\r yield Button(\".\", id=\"point\")\r yield Button(\"=\", id=\"equals\", variant=\"warning\")\r\r def on_key(self, event: events.Key) -> None:\r \"\"\"Called when the user presses a key.\"\"\"\r\r def press(button_id: str) -> None:\r \"\"\"Press a button, should it exist.\"\"\"\r try:\r self.query_one(f\"#{button_id}\", Button).press()\r except NoMatches:\r pass\r\r key = event.key\r if key.isdecimal():\r press(f\"number-{key}\")\r elif key == \"c\":\r press(\"c\")\r press(\"ac\")\r else:\r button_id = self.NAME_MAP.get(key)\r if button_id is not None:\r press(self.NAME_MAP.get(key, key))\r\r @on(Button.Pressed, \".number\")\r def number_pressed(self, event: Button.Pressed) -> None:\r \"\"\"Pressed a number.\"\"\"\r assert event.button.id is not None\r number = event.button.id.partition(\"-\")[-1]\r self.numbers = self.value = self.value.lstrip(\"0\") + number\r\r @on(Button.Pressed, \"#plus-minus\")\r def plus_minus_pressed(self) -> None:\r \"\"\"Pressed + / -\"\"\"\r self.numbers = self.value = str(Decimal(self.value or \"0\") * -1)\r\r @on(Button.Pressed, \"#percent\")\r def percent_pressed(self) -> None:\r \"\"\"Pressed %\"\"\"\r self.numbers = self.value = str(Decimal(self.value or \"0\") / Decimal(100))\r\r @on(Button.Pressed, \"#point\")\r def pressed_point(self) -> None:\r \"\"\"Pressed .\"\"\"\r if \".\" not in self.value:\r self.numbers = self.value = (self.value or \"0\") + \".\"\r\r @on(Button.Pressed, \"#ac\")\r def pressed_ac(self) -> None:\r \"\"\"Pressed AC\"\"\"\r self.value = \"\"\r self.left = self.right = Decimal(0)\r self.operator = \"plus\"\r self.numbers = \"0\"\r\r @on(Button.Pressed, \"#c\")\r def pressed_c(self) -> None:\r \"\"\"Pressed C\"\"\"\r self.value = \"\"\r self.numbers = \"0\"\r\r def _do_math(self) -> None:\r \"\"\"Does the math: LEFT OPERATOR RIGHT\"\"\"\r try:\r if self.operator == \"plus\":\r self.left += self.right\r elif self.operator == \"minus\":\r self.left -= self.right\r elif self.operator == \"divide\":\r self.left /= self.right\r elif self.operator == \"multiply\":\r self.left *= self.right\r self.numbers = str(self.left)\r self.value = \"\"\r except Exception:\r self.numbers = \"Error\"\r\r @on(Button.Pressed, \"#plus,#minus,#divide,#multiply\")\r def pressed_op(self, event: Button.Pressed) -> None:\r \"\"\"Pressed one of the arithmetic operations.\"\"\"\r self.right = Decimal(self.value or \"0\")\r self._do_math()\r assert event.button.id is not None\r self.operator = event.button.id\r\r @on(Button.Pressed, \"#equals\")\r def pressed_equals(self) -> None:\r \"\"\"Pressed =\"\"\"\r if self.value:\r self.right = Decimal(self.value)\r self._do_math()\r\rapp = CalculatorApp(driver_class=Driver)",
|
9
|
-
"execution_state": "idle",
|
10
|
-
"cell_type": "code",
|
11
|
-
"outputs": []
|
12
|
-
},
|
13
|
-
{
|
14
|
-
"source": "w = Widget(app, cols=0, rows=0)",
|
15
|
-
"metadata": {
|
16
|
-
"trusted": false
|
17
|
-
},
|
18
|
-
"cell_type": "code",
|
19
|
-
"execution_count": 2,
|
20
|
-
"execution_state": "idle",
|
21
|
-
"outputs": []
|
22
|
-
},
|
23
|
-
{
|
24
|
-
"execution_state": "idle",
|
25
|
-
"outputs": [
|
26
|
-
{
|
27
|
-
"guid": "ff6903b-1ade-40f9-922d-d414d02afa"
|
28
|
-
}
|
29
|
-
],
|
30
|
-
"source": "w",
|
31
|
-
"metadata": {
|
32
|
-
"trusted": false
|
33
|
-
},
|
34
|
-
"execution_count": 3,
|
35
|
-
"cell_type": "code"
|
36
|
-
}
|
37
|
-
],
|
38
|
-
"metadata": {
|
39
|
-
"language_info": {
|
40
|
-
"file_extension": ".py",
|
41
|
-
"version": "3.11.6",
|
42
|
-
"name": "python",
|
43
|
-
"mimetype": "text/x-python",
|
44
|
-
"nbconvert_exporter": "python",
|
45
|
-
"codemirror_mode": {
|
46
|
-
"version": 3,
|
47
|
-
"name": "ipython"
|
48
|
-
},
|
49
|
-
"pygments_lexer": "ipython3"
|
50
|
-
},
|
51
|
-
"kernelspec": {
|
52
|
-
"name": "python3",
|
53
|
-
"language": "python",
|
54
|
-
"display_name": "Python 3 (ipykernel)"
|
55
|
-
}
|
56
|
-
},
|
57
|
-
"nbformat": 4,
|
58
|
-
"nbformat_minor": 4
|
59
|
-
}
|
jpterm-0.2.1/jpterm/__init__.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
jpterm-0.2.1/txl/txl/__init__.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.2.1"
|
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
|
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
|
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
|
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
|