px-idle 0.1.0__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.
Files changed (145) hide show
  1. px_idle-0.1.0/.github/workflows/validation.yml +91 -0
  2. px_idle-0.1.0/LICENSE +17 -0
  3. px_idle-0.1.0/MANIFEST.in +6 -0
  4. px_idle-0.1.0/NOTICE +10 -0
  5. px_idle-0.1.0/PKG-INFO +121 -0
  6. px_idle-0.1.0/README.md +101 -0
  7. px_idle-0.1.0/docs/artifact-inspection.json +14 -0
  8. px_idle-0.1.0/docs/compatibility-matrix.json +3263 -0
  9. px_idle-0.1.0/docs/compatibility-matrix.md +54 -0
  10. px_idle-0.1.0/docs/editor-isolation-evidence.json +78 -0
  11. px_idle-0.1.0/docs/engineering-research.md +148 -0
  12. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.10-sdist.json +44 -0
  13. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.10-wheel.json +44 -0
  14. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.11-sdist.json +62 -0
  15. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.11-wheel.json +44 -0
  16. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.12-sdist.json +44 -0
  17. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.12-wheel.json +62 -0
  18. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.13-sdist.json +62 -0
  19. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.13-wheel.json +62 -0
  20. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.14-sdist.json +62 -0
  21. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.14-wheel.json +62 -0
  22. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.15-sdist.json +62 -0
  23. px_idle-0.1.0/docs/initial-linux-results/linux-standalone-3.15-wheel.json +62 -0
  24. px_idle-0.1.0/docs/legacy-installer-probe.json +17 -0
  25. px_idle-0.1.0/docs/linux-focus-setup-results/linux-standalone-3.13-wheel.json +45 -0
  26. px_idle-0.1.0/docs/linux-idle-startup-control.json +6 -0
  27. px_idle-0.1.0/docs/linux-runtime-provenance.json +50 -0
  28. px_idle-0.1.0/docs/release-readiness.md +49 -0
  29. px_idle-0.1.0/docs/requirements-audit.md +42 -0
  30. px_idle-0.1.0/docs/results/linux-3.14-sdist.json +64 -0
  31. px_idle-0.1.0/docs/results/linux-3.14-wheel.json +64 -0
  32. px_idle-0.1.0/docs/results/linux-standalone-3.10-sdist.json +46 -0
  33. px_idle-0.1.0/docs/results/linux-standalone-3.10-wheel.json +46 -0
  34. px_idle-0.1.0/docs/results/linux-standalone-3.11-sdist.json +64 -0
  35. px_idle-0.1.0/docs/results/linux-standalone-3.11-wheel.json +64 -0
  36. px_idle-0.1.0/docs/results/linux-standalone-3.12-sdist.json +64 -0
  37. px_idle-0.1.0/docs/results/linux-standalone-3.12-wheel.json +64 -0
  38. px_idle-0.1.0/docs/results/linux-standalone-3.13-sdist.json +64 -0
  39. px_idle-0.1.0/docs/results/linux-standalone-3.13-wheel.json +64 -0
  40. px_idle-0.1.0/docs/results/linux-standalone-3.14-sdist.json +64 -0
  41. px_idle-0.1.0/docs/results/linux-standalone-3.14-wheel.json +64 -0
  42. px_idle-0.1.0/docs/results/linux-standalone-3.15-sdist.json +64 -0
  43. px_idle-0.1.0/docs/results/linux-standalone-3.15-wheel.json +64 -0
  44. px_idle-0.1.0/docs/results/windows-3.10-sdist.json +64 -0
  45. px_idle-0.1.0/docs/results/windows-3.10-wheel.json +64 -0
  46. px_idle-0.1.0/docs/results/windows-3.11-sdist.json +64 -0
  47. px_idle-0.1.0/docs/results/windows-3.11-wheel.json +64 -0
  48. px_idle-0.1.0/docs/results/windows-3.12-sdist.json +64 -0
  49. px_idle-0.1.0/docs/results/windows-3.12-wheel.json +64 -0
  50. px_idle-0.1.0/docs/results/windows-3.13-sdist.json +64 -0
  51. px_idle-0.1.0/docs/results/windows-3.13-wheel.json +64 -0
  52. px_idle-0.1.0/docs/results/windows-3.14-sdist.json +64 -0
  53. px_idle-0.1.0/docs/results/windows-3.14-wheel.json +64 -0
  54. px_idle-0.1.0/docs/results/windows-3.15-sdist.json +64 -0
  55. px_idle-0.1.0/docs/results/windows-3.15-wheel.json +64 -0
  56. px_idle-0.1.0/docs/results/windows-3.3-sdist.json +64 -0
  57. px_idle-0.1.0/docs/results/windows-3.3-wheel.json +64 -0
  58. px_idle-0.1.0/docs/results/windows-3.4-sdist.json +64 -0
  59. px_idle-0.1.0/docs/results/windows-3.4-wheel.json +64 -0
  60. px_idle-0.1.0/docs/results/windows-3.5-wheel.json +44 -0
  61. px_idle-0.1.0/docs/results/windows-3.6-sdist.json +64 -0
  62. px_idle-0.1.0/docs/results/windows-3.6-wheel.json +64 -0
  63. px_idle-0.1.0/docs/results/windows-3.7-sdist.json +63 -0
  64. px_idle-0.1.0/docs/results/windows-3.7-wheel.json +64 -0
  65. px_idle-0.1.0/docs/results/windows-3.8-sdist.json +63 -0
  66. px_idle-0.1.0/docs/results/windows-3.8-wheel.json +63 -0
  67. px_idle-0.1.0/docs/results/windows-3.9-sdist.json +63 -0
  68. px_idle-0.1.0/docs/results/windows-3.9-wheel.json +63 -0
  69. px_idle-0.1.0/docs/search-performance.json +13 -0
  70. px_idle-0.1.0/docs/testpypi.md +37 -0
  71. px_idle-0.1.0/docs/windows-desktop-results/windows-3.11-sdist.json +46 -0
  72. px_idle-0.1.0/docs/wslg-results/linux-3.14-sdist.json +63 -0
  73. px_idle-0.1.0/docs/wslg-results/linux-3.14-wheel.json +63 -0
  74. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.10-sdist.json +45 -0
  75. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.10-wheel.json +45 -0
  76. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.11-sdist.json +45 -0
  77. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.11-wheel.json +63 -0
  78. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.12-sdist.json +63 -0
  79. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.12-wheel.json +63 -0
  80. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.13-sdist.json +63 -0
  81. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.13-wheel.json +63 -0
  82. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.14-sdist.json +63 -0
  83. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.14-wheel.json +63 -0
  84. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.15-sdist.json +45 -0
  85. px_idle-0.1.0/docs/wslg-results/linux-standalone-3.15-wheel.json +63 -0
  86. px_idle-0.1.0/pyproject.toml +38 -0
  87. px_idle-0.1.0/research/idle-source-matrix.json +632 -0
  88. px_idle-0.1.0/scripts/compile_matrix.py +45 -0
  89. px_idle-0.1.0/scripts/idle_startup_control.py +31 -0
  90. px_idle-0.1.0/scripts/import_practicals.py +119 -0
  91. px_idle-0.1.0/scripts/inspect_artifacts.py +45 -0
  92. px_idle-0.1.0/scripts/linux_probe.py +10 -0
  93. px_idle-0.1.0/scripts/measure_search.py +21 -0
  94. px_idle-0.1.0/scripts/obtain_linux_runtimes.py +46 -0
  95. px_idle-0.1.0/scripts/obtain_windows_runtime.ps1 +44 -0
  96. px_idle-0.1.0/scripts/prepare_linux.sh +14 -0
  97. px_idle-0.1.0/scripts/prepare_xvfb.sh +10 -0
  98. px_idle-0.1.0/scripts/probe_legacy_install.py +28 -0
  99. px_idle-0.1.0/scripts/research_idle.py +53 -0
  100. px_idle-0.1.0/scripts/tk_undo_control.py +26 -0
  101. px_idle-0.1.0/scripts/validate_artifact.py +112 -0
  102. px_idle-0.1.0/scripts/validate_linux.sh +13 -0
  103. px_idle-0.1.0/scripts/validate_linux_standalone.py +77 -0
  104. px_idle-0.1.0/scripts/validate_linux_xvfb.py +50 -0
  105. px_idle-0.1.0/scripts/validate_windows_desktop.py +36 -0
  106. px_idle-0.1.0/scripts/validate_windows_matrix.py +25 -0
  107. px_idle-0.1.0/scripts/verify_editor_isolation.py +33 -0
  108. px_idle-0.1.0/setup.cfg +4 -0
  109. px_idle-0.1.0/setup.py +32 -0
  110. px_idle-0.1.0/src/PxIdle.py +2 -0
  111. px_idle-0.1.0/src/px_idle/__init__.py +2 -0
  112. px_idle-0.1.0/src/px_idle/__main__.py +2 -0
  113. px_idle-0.1.0/src/px_idle/cli.py +38 -0
  114. px_idle-0.1.0/src/px_idle/compat.py +100 -0
  115. px_idle-0.1.0/src/px_idle/extension.py +175 -0
  116. px_idle-0.1.0/src/px_idle/installer.py +102 -0
  117. px_idle-0.1.0/src/px_idle/plan.py +63 -0
  118. px_idle-0.1.0/src/px_idle/popup.py +67 -0
  119. px_idle-0.1.0/src/px_idle/practicals/assets/P01_Inverted_Index/inverted_index_posting.py +47 -0
  120. px_idle-0.1.0/src/px_idle/practicals/assets/P02_Retrieval_Models/boolean_retrieval.py +79 -0
  121. px_idle-0.1.0/src/px_idle/practicals/assets/P02_Retrieval_Models/vector_space_tfidf.py +126 -0
  122. px_idle-0.1.0/src/px_idle/practicals/assets/P03_Spelling_Correction/edit_distance_spelling.py +31 -0
  123. px_idle-0.1.0/src/px_idle/practicals/assets/P04_Evaluation_Metrics/precision_recall.py +84 -0
  124. px_idle-0.1.0/src/px_idle/practicals/assets/P05_Text_Categorization/naive_bayes_text_classification.py +120 -0
  125. px_idle-0.1.0/src/px_idle/practicals/assets/P06_KMeans_Clustering/kmeans_clustering.py +65 -0
  126. px_idle-0.1.0/src/px_idle/practicals/assets/P07_Web_Crawler/web_crawler_robots.py +85 -0
  127. px_idle-0.1.0/src/px_idle/practicals/assets/P08_Link_Analysis/hits_algorithm.py +73 -0
  128. px_idle-0.1.0/src/px_idle/practicals/assets/P08_Link_Analysis/pagerank.py +56 -0
  129. px_idle-0.1.0/src/px_idle/practicals/assets/P09_RankSVM/rank_svm.py +105 -0
  130. px_idle-0.1.0/src/px_idle/practicals/assets/P10_Advanced_IR/extractive_summarization.py +37 -0
  131. px_idle-0.1.0/src/px_idle/practicals/assets/P10_Advanced_IR/question_answering.py +30 -0
  132. px_idle-0.1.0/src/px_idle/practicals/registry.json +630 -0
  133. px_idle-0.1.0/src/px_idle/registry.py +49 -0
  134. px_idle-0.1.0/src/px_idle/search.py +46 -0
  135. px_idle-0.1.0/src/px_idle/trigger.py +11 -0
  136. px_idle-0.1.0/src/px_idle/verified-environments.json +110 -0
  137. px_idle-0.1.0/src/px_idle.egg-info/PKG-INFO +121 -0
  138. px_idle-0.1.0/src/px_idle.egg-info/SOURCES.txt +143 -0
  139. px_idle-0.1.0/src/px_idle.egg-info/dependency_links.txt +1 -0
  140. px_idle-0.1.0/src/px_idle.egg-info/entry_points.txt +2 -0
  141. px_idle-0.1.0/src/px_idle.egg-info/top_level.txt +2 -0
  142. px_idle-0.1.0/tests/test_core.py +108 -0
  143. px_idle-0.1.0/tests/test_idle_gui.py +236 -0
  144. px_idle-0.1.0/tests/test_importer.py +40 -0
  145. px_idle-0.1.0/tests/test_legacy_core.py +77 -0
@@ -0,0 +1,91 @@
1
+ name: Artifact and real IDLE validation
2
+ on: [push, pull_request, workflow_dispatch]
3
+ jobs:
4
+ modern:
5
+ strategy:
6
+ fail-fast: false
7
+ matrix:
8
+ os: [windows-latest, ubuntu-latest, macos-latest]
9
+ python: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
10
+ runs-on: ${{ matrix.os }}
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: actions/setup-python@v6
14
+ with:
15
+ python-version: ${{ matrix.python }}
16
+ - if: runner.os == 'Linux'
17
+ run: sudo apt-get update && sudo apt-get install -y python3-tk xvfb
18
+ - run: python -m pip install build twine
19
+ - run: python -m build
20
+ - run: python scripts/inspect_artifacts.py
21
+ - run: python -m twine check dist/*
22
+ - if: runner.os != 'Linux'
23
+ run: python scripts/validate_artifact.py --artifact dist/px_idle-0.1.0-py3-none-any.whl --output docs/results/ci-wheel.json
24
+ - if: runner.os == 'Linux'
25
+ run: xvfb-run -a python scripts/validate_artifact.py --artifact dist/px_idle-0.1.0-py3-none-any.whl --output docs/results/ci-wheel.json
26
+ - if: runner.os != 'Linux'
27
+ run: python scripts/validate_artifact.py --artifact dist/px_idle-0.1.0.tar.gz --output docs/results/ci-sdist.json
28
+ - if: runner.os == 'Linux'
29
+ run: xvfb-run -a python scripts/validate_artifact.py --artifact dist/px_idle-0.1.0.tar.gz --output docs/results/ci-sdist.json
30
+ - uses: actions/upload-artifact@v4
31
+ if: always()
32
+ with:
33
+ name: evidence-${{ matrix.os }}-${{ matrix.python }}
34
+ path: docs/results/
35
+ prerelease:
36
+ continue-on-error: true
37
+ runs-on: windows-latest
38
+ steps:
39
+ - uses: actions/checkout@v4
40
+ - uses: actions/setup-python@v6
41
+ with:
42
+ python-version: '3.15-dev'
43
+ allow-prereleases: true
44
+ - run: python -m pip install build
45
+ - run: python -m build
46
+ - run: python scripts/validate_artifact.py --artifact dist/px_idle-0.1.0-py3-none-any.whl --output docs/results/ci-prerelease.json
47
+ - uses: actions/upload-artifact@v4
48
+ if: always()
49
+ with:
50
+ name: prerelease-evidence
51
+ path: docs/results/
52
+ legacy:
53
+ runs-on: windows-latest
54
+ strategy:
55
+ fail-fast: false
56
+ matrix:
57
+ python: ['3.3.5', '3.4.4', '3.6.8', '3.7.9', '3.8.10']
58
+ steps:
59
+ - uses: actions/checkout@v4
60
+ - uses: actions/setup-python@v6
61
+ with:
62
+ python-version: '3.13'
63
+ - run: python -m pip install build
64
+ - run: python -m build
65
+ - run: python -m pip download --no-deps --dest .runtimes/legacy-tools pip==9.0.3 setuptools==39.2.0 wheel==0.29.0
66
+ - shell: pwsh
67
+ run: |
68
+ New-Item -ItemType Directory -Force .runtimes/wix | Out-Null
69
+ Invoke-WebRequest https://github.com/wixtoolset/wix3/releases/download/wix3141rtm/wix314-binaries.zip -OutFile .runtimes/wix/wix.zip
70
+ Expand-Archive .runtimes/wix/wix.zip .runtimes/wix -Force
71
+ ./scripts/obtain_windows_runtime.ps1 -Version '${{ matrix.python }}'
72
+ - run: python scripts/validate_artifact.py --python .runtimes/${{ matrix.python }}/python/python.exe --artifact dist/px_idle-0.1.0-py3-none-any.whl --output docs/results/ci-legacy-wheel.json
73
+ - run: python scripts/validate_artifact.py --python .runtimes/${{ matrix.python }}/python/python.exe --artifact dist/px_idle-0.1.0.tar.gz --output docs/results/ci-legacy-sdist.json
74
+ - uses: actions/upload-artifact@v4
75
+ if: always()
76
+ with:
77
+ name: legacy-${{ matrix.python }}
78
+ path: docs/results/
79
+ fidelity:
80
+ runs-on: ubuntu-latest
81
+ steps:
82
+ - uses: actions/checkout@v4
83
+ - uses: actions/setup-python@v6
84
+ with:
85
+ python-version: '3.13'
86
+ - run: git clone https://github.com/mcc-exam/src.git upstream
87
+ - run: git -C upstream checkout a44c65dee9eadf37310a54bcbc90fe78df2289f3
88
+ - run: python -m pip install .
89
+ - run: python -m unittest discover -s tests -p test_core.py -v
90
+ - run: python scripts/import_practicals.py upstream --output regenerated
91
+ - run: diff -r src/px_idle/practicals regenerated
px_idle-0.1.0/LICENSE ADDED
@@ -0,0 +1,17 @@
1
+ px-idle local-use license
2
+
3
+ Copyright (c) 2026 the project owner. All rights reserved.
4
+
5
+ The project owner authorizes distribution of this package through PyPI and
6
+ TestPyPI. Recipients may download, install, and use px-idle locally, including
7
+ inserting, editing, and executing its bundled practical code for local use.
8
+ No permission is granted to recipients to redistribute, republish, sublicense,
9
+ or repackage the extension or bundled practical content. All other rights are
10
+ reserved by the project owner.
11
+
12
+ The project owner confirmed ownership of mcc-exam/src and selected
13
+ "Keep all rights reserved; local use only" and authorized PyPI publication on
14
+ 2026-10-07. These terms retain that local-use restriction while permitting the
15
+ owner's requested public package distribution.
16
+ This notice does not alter the licenses of Python or other separately installed
17
+ software, which are not bundled in this distribution.
@@ -0,0 +1,6 @@
1
+ include LICENSE NOTICE README.md
2
+ recursive-include scripts *.py *.ps1 *.sh
3
+ recursive-include docs *.md *.json
4
+ include research/idle-source-matrix.json
5
+ recursive-include tests *.py
6
+ recursive-include .github *.yml
px_idle-0.1.0/NOTICE ADDED
@@ -0,0 +1,10 @@
1
+ Practical source is taken verbatim (UTF-8 and LF normalization only) from
2
+ https://github.com/mcc-exam/src.git
3
+ commit a44c65dee9eadf37310a54bcbc90fe78df2289f3.
4
+
5
+ The upstream snapshot contains no license file. The project owner confirmed
6
+ ownership and selected all rights reserved, local use only on 2026-10-07.
7
+ The LICENSE in this distribution records that local-use restriction for both
8
+ the extension and bundled practicals. No practical code is executed by px-idle.
9
+ The owner subsequently authorized PyPI publication; recipients' redistribution
10
+ rights remain reserved.
px_idle-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,121 @@
1
+ Metadata-Version: 2.4
2
+ Name: px-idle
3
+ Version: 0.1.0
4
+ Summary: Offline keyword-driven practical-code expansion for Python IDLE Editors
5
+ License-Expression: LicenseRef-PxIdle-Local-Use
6
+ Project-URL: Practical Source, https://github.com/mcc-exam/src
7
+ Classifier: Development Status :: 3 - Alpha
8
+ Classifier: Environment :: Other Environment
9
+ Classifier: Intended Audience :: Education
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.3
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Topic :: Text Editors :: Integrated Development Environments (IDE)
15
+ Requires-Python: !=3.5.4,>=3.3
16
+ Description-Content-Type: text/markdown
17
+ License-File: LICENSE
18
+ License-File: NOTICE
19
+ Dynamic: license-file
20
+
21
+ # px-idle
22
+
23
+ Offline practical-code expansion inside normal Python IDLE Editor windows.
24
+ Type `#>` on a dedicated comment line to discover the complete catalogue, or
25
+ `#>spell` to filter it. Up/Down navigate, Enter or Tab insert, Escape dismisses.
26
+ The exact bundled source replaces the active trigger directly in the Text buffer
27
+ as one undo operation. Each editor has an independent popup. Shell is excluded.
28
+
29
+ ## Local installation
30
+
31
+ The owner of this project and the upstream practical repository selected all
32
+ rights reserved, local use only, and authorized distribution through PyPI.
33
+ Recipients may install and use the package locally; redistribution rights are
34
+ reserved. See LICENSE. Publication awaits configured account access and
35
+ TestPyPI verification. Until then, install the local wheel:
36
+
37
+ ```
38
+ python -m pip install dist/px_idle-0.1.0-py3-none-any.whl
39
+ px-idle install
40
+ ```
41
+
42
+ Use the same Python installation to launch IDLE. Restart IDLE after registration.
43
+ Registration is explicit; pip installation never modifies your IDLE settings.
44
+
45
+ `px-idle status` reports registration. `px-idle doctor` checks Python, Tk, IDLE,
46
+ shim import and all bundled source hashes. `px-idle uninstall` removes only
47
+ PxIdle configuration sections; it leaves the Python package installed.
48
+ Use `--config-dir DIRECTORY` for an isolated test configuration. Existing
49
+ configuration is backed up before mutation and written atomically; malformed
50
+ configuration is backed up and left unchanged.
51
+
52
+ ## Source and offline behavior
53
+
54
+ 13 source entries from [mcc-exam/src](https://github.com/mcc-exam/src), snapshot
55
+ `a44c65dee9eadf37310a54bcbc90fe78df2289f3`, are bundled. See
56
+ [the audit](docs/engineering-research.md) and generated registry for mappings,
57
+ aliases, imports and resource requirements. No git, internet, clipboard or
58
+ third-party runtime packages are required for expansion. px-idle never executes
59
+ practicals. Their own execution may require matplotlib, numpy, networkx,
60
+ requests/beautifulsoup4, scikit-learn, nltk or NLTK punkt_tab data; the crawler
61
+ itself uses the internet. These dependencies are not installed by px-idle.
62
+
63
+ ## Compatibility and limitations
64
+
65
+ Requires-Python is `>=3.3,!=3.5.4`, based on actual Python 3.3.5 installation
66
+ and IDLE tests. Runtime syntax deliberately avoids post-3.3 features. Source research
67
+ covers 2.7 and every 3.0–3.15 generation; it does not prove runtime compatibility.
68
+ See `research/idle-source-matrix.json` for primary-source evidence.
69
+ Exact executed Windows environments are listed below. Every passing row includes
70
+ wheel installation, CLI lifecycle, the actual IDLE loader and Editor, popup
71
+ controls, source insertion, undo, repeat expansion, real Shell exclusion,
72
+ multiple editors and safe uninstall. Full artifact results, including sdist
73
+ tests and Linux evidence, are in [the matrix](docs/compatibility-matrix.md) and
74
+ its machine-readable JSON. Metadata's minimum does not assert that untested
75
+ patch releases or operating systems have passed.
76
+
77
+ | Python on Windows 11 | Tk | Result / tier |
78
+ | --- | --- | --- |
79
+ | 3.3.5 | 8.5.11 | Passed / legacy |
80
+ | 3.4.4 | 8.6.1 | Passed / legacy |
81
+ | 3.5.4 | 8.6.4 | Unsupported: native IDLE undo segfault, also without px-idle |
82
+ | 3.6.8 | 8.6.6 | Passed / legacy |
83
+ | 3.7.9 | 8.6.9 | Passed / legacy |
84
+ | 3.8.10 | 8.6.9 | Passed / extended |
85
+ | 3.9.13 | 8.6.12 | Passed / extended |
86
+ | 3.10.11 | 8.6.12 | Passed / primary |
87
+ | 3.11.9 | 8.6.12 | Passed / primary |
88
+ | 3.12.10 | 8.6.15 | Passed / primary |
89
+ | 3.13.14 | 8.6.15 | Passed / primary |
90
+ | 3.14.8 | 9.0.4 | Passed / primary |
91
+ | 3.15.0rc3 | 9.0.4 | Passed / experimental prerelease |
92
+
93
+ Python 2.7 and 3.0–3.2 are unsupported. macOS and CPython main have no executed
94
+ runtime evidence here. Configured CI jobs do not count as observed passes.
95
+ Linux tests use Ubuntu WSL with WSLg or isolated Xvfb (recorded per run), with
96
+ distro Python 3.14.4/Tk 8.6.17 and
97
+ portable Python 3.11.17, 3.12.15, 3.13.16, 3.14.8 and 3.15.0rc3/Tk 9.0.4.
98
+ The portable Linux Python 3.10.22/Tk 9.0.4 build fails native IDLE startup even
99
+ with px-idle unregistered and is unsupported. Consult the matrix for each
100
+ artifact result; a Python version alone does not identify a tested Tk environment.
101
+ Old pip installation uses a small setup.py fallback justified by an actual
102
+ pip 9 sdist failure. Build tooling runs on modern Python; runtime has no external
103
+ dependencies. A tested local wheel is the legacy fallback. See
104
+ [publication status](docs/testpypi.md).
105
+
106
+ Triggers activate only on a line containing optional whitespace and `#>query`.
107
+ Normal comments and inline strings do not activate. Existing IDLE STRING tags
108
+ suppress multiline string triggers; delayed coloring is a known limitation to
109
+ be checked in GUI tests. Companion files require a saved primary file with the
110
+ matching original filename. Existing meaningful content is never overwritten.
111
+ The current catalogue has no companion files. Source fidelity takes priority
112
+ over modernization: practical syntax may require a newer Python than expansion.
113
+
114
+ ## Development
115
+
116
+ Fetch the authoritative repository into `upstream/` and run
117
+ `python scripts/import_practicals.py upstream`. The importer reads data and ASTs,
118
+ never imports or runs repository scripts. Run `python -m unittest discover -s tests`.
119
+ Build using `python -m build`, inspect with `python -m twine check dist/*`, then
120
+ test each built artifact in a clean environment. Public upload must follow
121
+ TestPyPI validation first. Unexecuted CI jobs are never recorded as passes.
@@ -0,0 +1,101 @@
1
+ # px-idle
2
+
3
+ Offline practical-code expansion inside normal Python IDLE Editor windows.
4
+ Type `#>` on a dedicated comment line to discover the complete catalogue, or
5
+ `#>spell` to filter it. Up/Down navigate, Enter or Tab insert, Escape dismisses.
6
+ The exact bundled source replaces the active trigger directly in the Text buffer
7
+ as one undo operation. Each editor has an independent popup. Shell is excluded.
8
+
9
+ ## Local installation
10
+
11
+ The owner of this project and the upstream practical repository selected all
12
+ rights reserved, local use only, and authorized distribution through PyPI.
13
+ Recipients may install and use the package locally; redistribution rights are
14
+ reserved. See LICENSE. Publication awaits configured account access and
15
+ TestPyPI verification. Until then, install the local wheel:
16
+
17
+ ```
18
+ python -m pip install dist/px_idle-0.1.0-py3-none-any.whl
19
+ px-idle install
20
+ ```
21
+
22
+ Use the same Python installation to launch IDLE. Restart IDLE after registration.
23
+ Registration is explicit; pip installation never modifies your IDLE settings.
24
+
25
+ `px-idle status` reports registration. `px-idle doctor` checks Python, Tk, IDLE,
26
+ shim import and all bundled source hashes. `px-idle uninstall` removes only
27
+ PxIdle configuration sections; it leaves the Python package installed.
28
+ Use `--config-dir DIRECTORY` for an isolated test configuration. Existing
29
+ configuration is backed up before mutation and written atomically; malformed
30
+ configuration is backed up and left unchanged.
31
+
32
+ ## Source and offline behavior
33
+
34
+ 13 source entries from [mcc-exam/src](https://github.com/mcc-exam/src), snapshot
35
+ `a44c65dee9eadf37310a54bcbc90fe78df2289f3`, are bundled. See
36
+ [the audit](docs/engineering-research.md) and generated registry for mappings,
37
+ aliases, imports and resource requirements. No git, internet, clipboard or
38
+ third-party runtime packages are required for expansion. px-idle never executes
39
+ practicals. Their own execution may require matplotlib, numpy, networkx,
40
+ requests/beautifulsoup4, scikit-learn, nltk or NLTK punkt_tab data; the crawler
41
+ itself uses the internet. These dependencies are not installed by px-idle.
42
+
43
+ ## Compatibility and limitations
44
+
45
+ Requires-Python is `>=3.3,!=3.5.4`, based on actual Python 3.3.5 installation
46
+ and IDLE tests. Runtime syntax deliberately avoids post-3.3 features. Source research
47
+ covers 2.7 and every 3.0–3.15 generation; it does not prove runtime compatibility.
48
+ See `research/idle-source-matrix.json` for primary-source evidence.
49
+ Exact executed Windows environments are listed below. Every passing row includes
50
+ wheel installation, CLI lifecycle, the actual IDLE loader and Editor, popup
51
+ controls, source insertion, undo, repeat expansion, real Shell exclusion,
52
+ multiple editors and safe uninstall. Full artifact results, including sdist
53
+ tests and Linux evidence, are in [the matrix](docs/compatibility-matrix.md) and
54
+ its machine-readable JSON. Metadata's minimum does not assert that untested
55
+ patch releases or operating systems have passed.
56
+
57
+ | Python on Windows 11 | Tk | Result / tier |
58
+ | --- | --- | --- |
59
+ | 3.3.5 | 8.5.11 | Passed / legacy |
60
+ | 3.4.4 | 8.6.1 | Passed / legacy |
61
+ | 3.5.4 | 8.6.4 | Unsupported: native IDLE undo segfault, also without px-idle |
62
+ | 3.6.8 | 8.6.6 | Passed / legacy |
63
+ | 3.7.9 | 8.6.9 | Passed / legacy |
64
+ | 3.8.10 | 8.6.9 | Passed / extended |
65
+ | 3.9.13 | 8.6.12 | Passed / extended |
66
+ | 3.10.11 | 8.6.12 | Passed / primary |
67
+ | 3.11.9 | 8.6.12 | Passed / primary |
68
+ | 3.12.10 | 8.6.15 | Passed / primary |
69
+ | 3.13.14 | 8.6.15 | Passed / primary |
70
+ | 3.14.8 | 9.0.4 | Passed / primary |
71
+ | 3.15.0rc3 | 9.0.4 | Passed / experimental prerelease |
72
+
73
+ Python 2.7 and 3.0–3.2 are unsupported. macOS and CPython main have no executed
74
+ runtime evidence here. Configured CI jobs do not count as observed passes.
75
+ Linux tests use Ubuntu WSL with WSLg or isolated Xvfb (recorded per run), with
76
+ distro Python 3.14.4/Tk 8.6.17 and
77
+ portable Python 3.11.17, 3.12.15, 3.13.16, 3.14.8 and 3.15.0rc3/Tk 9.0.4.
78
+ The portable Linux Python 3.10.22/Tk 9.0.4 build fails native IDLE startup even
79
+ with px-idle unregistered and is unsupported. Consult the matrix for each
80
+ artifact result; a Python version alone does not identify a tested Tk environment.
81
+ Old pip installation uses a small setup.py fallback justified by an actual
82
+ pip 9 sdist failure. Build tooling runs on modern Python; runtime has no external
83
+ dependencies. A tested local wheel is the legacy fallback. See
84
+ [publication status](docs/testpypi.md).
85
+
86
+ Triggers activate only on a line containing optional whitespace and `#>query`.
87
+ Normal comments and inline strings do not activate. Existing IDLE STRING tags
88
+ suppress multiline string triggers; delayed coloring is a known limitation to
89
+ be checked in GUI tests. Companion files require a saved primary file with the
90
+ matching original filename. Existing meaningful content is never overwritten.
91
+ The current catalogue has no companion files. Source fidelity takes priority
92
+ over modernization: practical syntax may require a newer Python than expansion.
93
+
94
+ ## Development
95
+
96
+ Fetch the authoritative repository into `upstream/` and run
97
+ `python scripts/import_practicals.py upstream`. The importer reads data and ASTs,
98
+ never imports or runs repository scripts. Run `python -m unittest discover -s tests`.
99
+ Build using `python -m build`, inspect with `python -m twine check dist/*`, then
100
+ test each built artifact in a clean environment. Public upload must follow
101
+ TestPyPI validation first. Unexecuted CI jobs are never recorded as passes.
@@ -0,0 +1,14 @@
1
+ [
2
+ {
3
+ "artifact": "px_idle-0.1.0-py3-none-any.whl",
4
+ "sha256": "8b2be7e0edc374e819ecdad7419b5341cf25e30f09b738ef82efa42365c0e8a2",
5
+ "assets": 13,
6
+ "inspection": "passed"
7
+ },
8
+ {
9
+ "artifact": "px_idle-0.1.0.tar.gz",
10
+ "sha256": "f5e5becbebc6155734450320aa5ef1311441128e07adebb681129871f9836f33",
11
+ "assets": 13,
12
+ "inspection": "passed"
13
+ }
14
+ ]