@furongjun1999/dsh-memory 0.4.4 → 0.4.5

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 (1470) hide show
  1. package/README.md +104 -483
  2. package/cordis.yml.example +78 -9
  3. package/docs/AGI/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_md_cg_v1.0.md +170 -0
  4. package/docs/AGI/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_md_cg_v2.0.md +239 -0
  5. package/docs/README/350/257/246/347/273/206/347/211/210_v0.4.5.md +625 -0
  6. package/docs/cordis-patch-profile-web.example.yml +49 -5
  7. package/docs/release_v0.3.0.md +36 -0
  8. package/docs/release_v0.4.5.md +55 -0
  9. package/docs/tool_table_v0.3.0.md +117 -0
  10. package/docs//344/273/244/347/211/214/344/270/216/350/247/222/350/211/262/346/235/203/350/201/214/345/210/206/347/246/273_v0.1.md +160 -0
  11. package/docs//345/212/237/350/203/275/350/260/203/347/224/250/346/230/240/345/260/204/350/241/250_v0.1.md +221 -0
  12. package/docs//345/267/245/344/275/234/347/272/252/345/276/213_/350/256/244/347/237/245/345/233/276/346/235/241/347/233/256_v1.1.json +26 -2
  13. package/docs//347/201/265/346/236/24282/345/267/245/345/205/267_/345/212/237/350/203/275/346/225/264/347/220/206/344/270/216/350/277/201/347/247/273/346/230/240/345/260/204_v0.1.md +278 -0
  14. package/docs//347/201/265/346/236/242/344/270/211/345/261/202/346/213/206/345/210/206/350/247/204/345/210/222_v0.1.md +181 -0
  15. package/docs//347/220/206/350/256/272/344/273/223/346/213/206/345/210/206/344/270/216/347/231/275/347/256/261/347/237/245/350/257/206/345/272/223/345/206/205/350/277/201_v0.1.md +198 -0
  16. package/docs//347/231/275/347/256/261/346/231/272/350/203/275/347/263/273/345/210/227/302/267/347/254/254/344/272/224/347/257/207/357/274/232/350/256/251AI/347/234/237/346/255/243/350/243/205/344/270/212/350/256/260/345/277/206.md +49 -1
  17. package/docs//347/274/272/345/217/243/345/215/225_P0/346/224/266/345/217/243_v0.1.md +270 -0
  18. package/docs//350/234/202/347/276/244/344/272/222/350/201/224_v0.1.md +704 -0
  19. package/docs//350/256/244/347/237/245/345/233/276_G4-G8/347/274/272/345/217/243/350/243/201/345/256/232/345/215/225_v0.1.md +491 -0
  20. package/docs//350/256/244/347/237/245/345/233/276_MD/347/233/256/345/275/225/346/226/271/346/241/210_v0.1.md +60 -38
  21. package/docs//350/256/244/347/237/245/345/233/276_/346/235/241/344/273/266/347/251/272/351/227/264/345/220/210/346/210/220/344/270/216/347/224/237/346/225/210/346/235/241/344/273/266/345/217/243/345/276/204_v0.1.md +340 -0
  22. package/docs//350/256/244/347/237/245/345/233/276_/347/264/242/345/274/225/344/270/216/345/267/245/347/250/213/350/247/204/350/214/203/345/214/226_/350/256/241/345/210/222_v0.1.md +496 -0
  23. package/docs//350/256/244/347/237/245/345/233/276/344/275/234/344/270/272/350/256/260/345/277/206/346/223/215/344/275/234/347/263/273/347/273/237_/350/257/204/344/274/260/344/270/216/350/267/257/347/272/277_v0.1.md +2 -2
  24. package/docs//350/256/260/345/277/206/346/223/215/344/275/234/347/263/273/347/273/237_MdCGOS/344/270/216MCP/346/216/245/345/205/245_v0.1.md +129 -26
  25. package/lib/bridge.d.ts +4 -4
  26. package/lib/bridge.js +4 -4
  27. package/lib/hooks.d.ts +23 -8
  28. package/lib/hooks.js +75 -26
  29. package/lib/index.d.ts +53 -8
  30. package/lib/index.js +216 -63
  31. package/lib/lib/datapath.d.ts +16 -0
  32. package/lib/lib/datapath.js +114 -0
  33. package/lib/lib/mdcg_client.d.ts +152 -0
  34. package/lib/lib/mdcg_client.js +266 -0
  35. package/lib/lib/mutual.d.ts +121 -0
  36. package/lib/lib/mutual.js +348 -0
  37. package/lib/lib/roleplay_web.d.ts +6 -0
  38. package/{src/roleplay_web.ts → lib/lib/roleplay_web.js} +503 -450
  39. package/lib/lib/whitebox_llm.d.ts +129 -0
  40. package/lib/lib/whitebox_llm.js +249 -0
  41. package/lib/tools.d.ts +13 -6
  42. package/lib/tools.js +41 -55
  43. package/md_cg/__init__.py +7 -0
  44. package/md_cg/__pycache__/__init__.cpython-310.pyc +0 -0
  45. package/md_cg/__pycache__/_dbg_p30.cpython-310.pyc +0 -0
  46. package/md_cg/__pycache__/_diag_p19.cpython-310.pyc +0 -0
  47. package/md_cg/__pycache__/_tmp_dbg.cpython-310.pyc +0 -0
  48. package/md_cg/__pycache__/audit.cpython-310.pyc +0 -0
  49. package/md_cg/__pycache__/backfill.cpython-310.pyc +0 -0
  50. package/md_cg/__pycache__/bench_membench.cpython-310.pyc +0 -0
  51. package/md_cg/__pycache__/bench_p0.cpython-310.pyc +0 -0
  52. package/md_cg/__pycache__/census.cpython-310.pyc +0 -0
  53. package/md_cg/__pycache__/chain.cpython-310.pyc +0 -0
  54. package/md_cg/__pycache__/codeindex.cpython-310.pyc +0 -0
  55. package/md_cg/__pycache__/consistency.cpython-310.pyc +0 -0
  56. package/md_cg/__pycache__/consolidate.cpython-310.pyc +0 -0
  57. package/md_cg/__pycache__/corpus.cpython-310.pyc +0 -0
  58. package/md_cg/__pycache__/crosscheck.cpython-310.pyc +0 -0
  59. package/md_cg/__pycache__/crypto.cpython-310.pyc +0 -0
  60. package/md_cg/__pycache__/datapath.cpython-310.pyc +0 -0
  61. package/md_cg/__pycache__/docindex.cpython-310.pyc +0 -0
  62. package/md_cg/__pycache__/evidence.cpython-310.pyc +0 -0
  63. package/md_cg/__pycache__/evolution.cpython-310.pyc +0 -0
  64. package/md_cg/__pycache__/export.cpython-310.pyc +0 -0
  65. package/md_cg/__pycache__/forgetting.cpython-310.pyc +0 -0
  66. package/md_cg/__pycache__/fsutil.cpython-310.pyc +0 -0
  67. package/md_cg/__pycache__/identity.cpython-310.pyc +0 -0
  68. package/md_cg/__pycache__/insight.cpython-310.pyc +0 -0
  69. package/md_cg/__pycache__/links.cpython-310.pyc +0 -0
  70. package/md_cg/__pycache__/mcp_server.cpython-310.pyc +0 -0
  71. package/md_cg/__pycache__/md_whitebox.cpython-310.pyc +0 -0
  72. package/md_cg/__pycache__/mdcg.cpython-310.pyc +0 -0
  73. package/md_cg/__pycache__/mdcos.cpython-310.pyc +0 -0
  74. package/md_cg/__pycache__/metacognition.cpython-310.pyc +0 -0
  75. package/md_cg/__pycache__/migrate.cpython-310.pyc +0 -0
  76. package/md_cg/__pycache__/migrate_aeis.cpython-310.pyc +0 -0
  77. package/md_cg/__pycache__/migrate_roleplay.cpython-310.pyc +0 -0
  78. package/md_cg/__pycache__/migrate_wisdom_graph.cpython-310.pyc +0 -0
  79. package/md_cg/__pycache__/nodefile.cpython-310.pyc +0 -0
  80. package/md_cg/__pycache__/pooling.cpython-310.pyc +0 -0
  81. package/md_cg/__pycache__/predict.cpython-310.pyc +0 -0
  82. package/md_cg/__pycache__/protect.cpython-310.pyc +0 -0
  83. package/md_cg/__pycache__/provenance.cpython-310.pyc +0 -0
  84. package/md_cg/__pycache__/refindex.cpython-310.pyc +0 -0
  85. package/md_cg/__pycache__/refine.cpython-310.pyc +0 -0
  86. package/md_cg/__pycache__/routing.cpython-310.pyc +0 -0
  87. package/md_cg/__pycache__/scrub.cpython-310.pyc +0 -0
  88. package/md_cg/__pycache__/security.cpython-310.pyc +0 -0
  89. package/md_cg/__pycache__/self_state.cpython-310.pyc +0 -0
  90. package/md_cg/__pycache__/signer.cpython-310.pyc +0 -0
  91. package/md_cg/__pycache__/sources.cpython-310.pyc +0 -0
  92. package/md_cg/__pycache__/stg.cpython-310.pyc +0 -0
  93. package/md_cg/__pycache__/subgraph.cpython-310.pyc +0 -0
  94. package/md_cg/__pycache__/sustain.cpython-310.pyc +0 -0
  95. package/md_cg/__pycache__/test_lock.cpython-310-pytest-9.1.1.pyc +0 -0
  96. package/md_cg/__pycache__/test_lock.cpython-310.pyc +0 -0
  97. package/md_cg/__pycache__/test_p0.cpython-310-pytest-9.1.1.pyc +0 -0
  98. package/md_cg/__pycache__/test_p0.cpython-310.pyc +0 -0
  99. package/md_cg/__pycache__/test_p1.cpython-310-pytest-9.1.1.pyc +0 -0
  100. package/md_cg/__pycache__/test_p1.cpython-310.pyc +0 -0
  101. package/md_cg/__pycache__/test_p10_identity.cpython-310-pytest-9.1.1.pyc +0 -0
  102. package/md_cg/__pycache__/test_p10_identity.cpython-310.pyc +0 -0
  103. package/md_cg/__pycache__/test_p11_consistency.cpython-310-pytest-9.1.1.pyc +0 -0
  104. package/md_cg/__pycache__/test_p11_consistency.cpython-310.pyc +0 -0
  105. package/md_cg/__pycache__/test_p12_metacognition.cpython-310-pytest-9.1.1.pyc +0 -0
  106. package/md_cg/__pycache__/test_p12_metacognition.cpython-310.pyc +0 -0
  107. package/md_cg/__pycache__/test_p13_encryption.cpython-310-pytest-9.1.1.pyc +0 -0
  108. package/md_cg/__pycache__/test_p13_encryption.cpython-310.pyc +0 -0
  109. package/md_cg/__pycache__/test_p14_sustain.cpython-310-pytest-9.1.1.pyc +0 -0
  110. package/md_cg/__pycache__/test_p14_sustain.cpython-310.pyc +0 -0
  111. package/md_cg/__pycache__/test_p15_scrub.cpython-310-pytest-9.1.1.pyc +0 -0
  112. package/md_cg/__pycache__/test_p15_scrub.cpython-310.pyc +0 -0
  113. package/md_cg/__pycache__/test_p16_self_state.cpython-310.pyc +0 -0
  114. package/md_cg/__pycache__/test_p17_predict.cpython-310.pyc +0 -0
  115. package/md_cg/__pycache__/test_p18_whitebox.cpython-310.pyc +0 -0
  116. package/md_cg/__pycache__/test_p19_migrate_roleplay.cpython-310.pyc +0 -0
  117. package/md_cg/__pycache__/test_p2.cpython-310-pytest-9.1.1.pyc +0 -0
  118. package/md_cg/__pycache__/test_p2.cpython-310.pyc +0 -0
  119. package/md_cg/__pycache__/test_p20_evolution.cpython-310.pyc +0 -0
  120. package/md_cg/__pycache__/test_p21_tokens.cpython-310.pyc +0 -0
  121. package/md_cg/__pycache__/test_p22_theory.cpython-310.pyc +0 -0
  122. package/md_cg/__pycache__/test_p23_links.cpython-310.pyc +0 -0
  123. package/md_cg/__pycache__/test_p24_evidence.cpython-310.pyc +0 -0
  124. package/md_cg/__pycache__/test_p25_weights.cpython-310.pyc +0 -0
  125. package/md_cg/__pycache__/test_p26_refindex.cpython-310.pyc +0 -0
  126. package/md_cg/__pycache__/test_p27_docindex.cpython-310.pyc +0 -0
  127. package/md_cg/__pycache__/test_p28_refcheck.cpython-310.pyc +0 -0
  128. package/md_cg/__pycache__/test_p29_session_ingest_export.cpython-310.pyc +0 -0
  129. package/md_cg/__pycache__/test_p2_mcp.cpython-310-pytest-9.1.1.pyc +0 -0
  130. package/md_cg/__pycache__/test_p2_mcp.cpython-310.pyc +0 -0
  131. package/md_cg/__pycache__/test_p3.cpython-310-pytest-9.1.1.pyc +0 -0
  132. package/md_cg/__pycache__/test_p3.cpython-310.pyc +0 -0
  133. package/md_cg/__pycache__/test_p30_maintain.cpython-310.pyc +0 -0
  134. package/md_cg/__pycache__/test_p31_insight.cpython-310.pyc +0 -0
  135. package/md_cg/__pycache__/test_p32_backfill.cpython-310.pyc +0 -0
  136. package/md_cg/__pycache__/test_p33_ccg_wiring.cpython-310.pyc +0 -0
  137. package/md_cg/__pycache__/test_p34_crosscheck.cpython-310.pyc +0 -0
  138. package/md_cg/__pycache__/test_p35_conditioned_claim.cpython-310.pyc +0 -0
  139. package/md_cg/__pycache__/test_p36_kp_align.cpython-310.pyc +0 -0
  140. package/md_cg/__pycache__/test_p37_condition_space.cpython-310.pyc +0 -0
  141. package/md_cg/__pycache__/test_p38_contextualize.cpython-310.pyc +0 -0
  142. package/md_cg/__pycache__/test_p39_vision_evidence.cpython-310.pyc +0 -0
  143. package/md_cg/__pycache__/test_p40_refine_worklist.cpython-310.pyc +0 -0
  144. package/md_cg/__pycache__/test_p41_evolve_patrol.cpython-310.pyc +0 -0
  145. package/md_cg/__pycache__/test_p42_provenance.cpython-310.pyc +0 -0
  146. package/md_cg/__pycache__/test_p43_pooling.cpython-310.pyc +0 -0
  147. package/md_cg/__pycache__/test_p44_md_whitebox.cpython-310.pyc +0 -0
  148. package/md_cg/__pycache__/test_p4_fuzzy.cpython-310-pytest-9.1.1.pyc +0 -0
  149. package/md_cg/__pycache__/test_p4_fuzzy.cpython-310.pyc +0 -0
  150. package/md_cg/__pycache__/test_p5_semantic.cpython-310-pytest-9.1.1.pyc +0 -0
  151. package/md_cg/__pycache__/test_p5_semantic.cpython-310.pyc +0 -0
  152. package/md_cg/__pycache__/test_p6_consolidate.cpython-310-pytest-9.1.1.pyc +0 -0
  153. package/md_cg/__pycache__/test_p6_consolidate.cpython-310.pyc +0 -0
  154. package/md_cg/__pycache__/test_p7_goals_recent.cpython-310-pytest-9.1.1.pyc +0 -0
  155. package/md_cg/__pycache__/test_p7_goals_recent.cpython-310.pyc +0 -0
  156. package/md_cg/__pycache__/test_p8_subgraph_chain.cpython-310-pytest-9.1.1.pyc +0 -0
  157. package/md_cg/__pycache__/test_p8_subgraph_chain.cpython-310.pyc +0 -0
  158. package/md_cg/__pycache__/test_p9_forget_protect.cpython-310-pytest-9.1.1.pyc +0 -0
  159. package/md_cg/__pycache__/test_p9_forget_protect.cpython-310.pyc +0 -0
  160. package/md_cg/__pycache__/theory.cpython-310.pyc +0 -0
  161. package/md_cg/__pycache__/tokens.cpython-310.pyc +0 -0
  162. package/md_cg/__pycache__/vision_evidence.cpython-310.pyc +0 -0
  163. package/md_cg/__pycache__/weights.cpython-310.pyc +0 -0
  164. package/md_cg/__pycache__/whitebox.cpython-310.pyc +0 -0
  165. package/md_cg/audit.py +223 -0
  166. package/md_cg/backfill.py +1272 -0
  167. package/md_cg/bench_membench.py +602 -0
  168. package/md_cg/bench_p0.py +147 -0
  169. package/md_cg/bench_task_ab.py +237 -0
  170. package/md_cg/bench_task_ab_llm.py +397 -0
  171. package/md_cg/census.py +117 -0
  172. package/md_cg/chain.py +280 -0
  173. package/md_cg/codeindex.py +359 -0
  174. package/md_cg/consistency.py +593 -0
  175. package/md_cg/consolidate.py +1389 -0
  176. package/md_cg/corpus.py +106 -0
  177. package/md_cg/crosscheck.py +1058 -0
  178. package/md_cg/crypto.py +404 -0
  179. package/md_cg/datapath.py +160 -0
  180. package/md_cg/docindex.py +333 -0
  181. package/md_cg/evidence.py +555 -0
  182. package/md_cg/evolution.py +458 -0
  183. package/md_cg/export.py +210 -0
  184. package/md_cg/forgetting.py +552 -0
  185. package/md_cg/fsutil.py +251 -0
  186. package/md_cg/identity.py +374 -0
  187. package/md_cg/insight.py +485 -0
  188. package/md_cg/links.py +595 -0
  189. package/md_cg/mcp_server.py +2445 -0
  190. package/md_cg/md_whitebox.py +271 -0
  191. package/md_cg/mdcg.py +1210 -0
  192. package/md_cg/mdcos.py +2505 -0
  193. package/md_cg/metacognition.py +557 -0
  194. package/md_cg/migrate.py +115 -0
  195. package/md_cg/migrate_aeis.py +213 -0
  196. package/md_cg/migrate_roleplay.py +285 -0
  197. package/md_cg/migrate_wisdom_graph.py +348 -0
  198. package/md_cg/nodefile.py +308 -0
  199. package/md_cg/pooling.py +451 -0
  200. package/md_cg/predict.py +918 -0
  201. package/md_cg/protect.py +260 -0
  202. package/md_cg/provenance.py +321 -0
  203. package/md_cg/refindex.py +585 -0
  204. package/md_cg/refine.py +586 -0
  205. package/md_cg/routing.py +290 -0
  206. package/md_cg/scrub.py +788 -0
  207. package/md_cg/security.py +235 -0
  208. package/md_cg/self_state.py +843 -0
  209. package/md_cg/signer.py +523 -0
  210. package/md_cg/sources.py +547 -0
  211. package/md_cg/stg.py +250 -0
  212. package/md_cg/subgraph.py +706 -0
  213. package/md_cg/sustain.py +874 -0
  214. package/md_cg/test_lock.py +43 -0
  215. package/md_cg/test_p0.py +250 -0
  216. package/md_cg/test_p1.py +317 -0
  217. package/md_cg/test_p10_identity.py +173 -0
  218. package/md_cg/test_p11_consistency.py +233 -0
  219. package/md_cg/test_p12_metacognition.py +212 -0
  220. package/md_cg/test_p13_encryption.py +241 -0
  221. package/md_cg/test_p14_sustain.py +249 -0
  222. package/md_cg/test_p15_scrub.py +280 -0
  223. package/md_cg/test_p16_self_state.py +275 -0
  224. package/md_cg/test_p17_predict.py +341 -0
  225. package/md_cg/test_p18_whitebox.py +171 -0
  226. package/md_cg/test_p19_migrate_roleplay.py +149 -0
  227. package/md_cg/test_p2.py +205 -0
  228. package/md_cg/test_p20_evolution.py +315 -0
  229. package/md_cg/test_p21_tokens.py +270 -0
  230. package/md_cg/test_p22_theory.py +175 -0
  231. package/md_cg/test_p23_links.py +311 -0
  232. package/md_cg/test_p24_evidence.py +227 -0
  233. package/md_cg/test_p25_weights.py +156 -0
  234. package/md_cg/test_p26_refindex.py +387 -0
  235. package/md_cg/test_p27_docindex.py +377 -0
  236. package/md_cg/test_p28_refcheck.py +305 -0
  237. package/md_cg/test_p29_session_ingest_export.py +333 -0
  238. package/md_cg/test_p2_mcp.py +425 -0
  239. package/md_cg/test_p3.py +252 -0
  240. package/md_cg/test_p30_maintain.py +330 -0
  241. package/md_cg/test_p31_insight.py +510 -0
  242. package/md_cg/test_p32_backfill.py +298 -0
  243. package/md_cg/test_p33_ccg_wiring.py +293 -0
  244. package/md_cg/test_p34_crosscheck.py +331 -0
  245. package/md_cg/test_p35_conditioned_claim.py +252 -0
  246. package/md_cg/test_p36_kp_align.py +225 -0
  247. package/md_cg/test_p37_condition_space.py +248 -0
  248. package/md_cg/test_p38_contextualize.py +273 -0
  249. package/md_cg/test_p39_vision_evidence.py +369 -0
  250. package/md_cg/test_p40_refine_worklist.py +241 -0
  251. package/md_cg/test_p41_evolve_patrol.py +224 -0
  252. package/md_cg/test_p42_provenance.py +269 -0
  253. package/md_cg/test_p43_pooling.py +360 -0
  254. package/md_cg/test_p44_md_whitebox.py +218 -0
  255. package/md_cg/test_p4_fuzzy.py +223 -0
  256. package/md_cg/test_p5_semantic.py +226 -0
  257. package/md_cg/test_p6_consolidate.py +387 -0
  258. package/md_cg/test_p7_goals_recent.py +202 -0
  259. package/md_cg/test_p8_subgraph_chain.py +200 -0
  260. package/md_cg/test_p9_forget_protect.py +231 -0
  261. package/md_cg/theory.py +259 -0
  262. package/md_cg/tokens.py +506 -0
  263. package/md_cg/vision_evidence.py +644 -0
  264. package/md_cg/weights.py +602 -0
  265. package/md_cg/whitebox.py +497 -0
  266. package/md_cg/whitebox_kb/__init__.py +37 -0
  267. package/md_cg/whitebox_kb/__pycache__/__init__.cpython-310.pyc +0 -0
  268. package/md_cg/whitebox_kb/__pycache__/engine.cpython-310.pyc +0 -0
  269. package/md_cg/whitebox_kb/aeis_core/__init__.py +42 -0
  270. package/md_cg/whitebox_kb/aeis_core/__pycache__/__init__.cpython-310.pyc +0 -0
  271. package/md_cg/whitebox_kb/aeis_core/__pycache__/core.cpython-310.pyc +0 -0
  272. package/md_cg/whitebox_kb/aeis_core/__pycache__/semantic.cpython-310.pyc +0 -0
  273. package/md_cg/whitebox_kb/aeis_core/__pycache__/time_core.cpython-310.pyc +0 -0
  274. package/md_cg/whitebox_kb/aeis_core/api.py +1042 -0
  275. package/md_cg/whitebox_kb/aeis_core/core.py +5014 -0
  276. package/md_cg/whitebox_kb/aeis_core/semantic.py +280 -0
  277. package/md_cg/whitebox_kb/aeis_core/textutil.py +13 -0
  278. package/md_cg/whitebox_kb/aeis_core/time_core.py +43 -0
  279. package/md_cg/whitebox_kb/data/verify_cache.json +1873 -0
  280. package/md_cg/whitebox_kb/data/verify_savings.jsonl +1330 -0
  281. package/md_cg/whitebox_kb/engine.py +310 -0
  282. package/md_cg/whitebox_kb/knowledge/_ccg_dump.json +1 -0
  283. package/md_cg/whitebox_kb/knowledge/_index.json +15300 -0
  284. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/345/234/260/346/240/207.md +22 -0
  285. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/346/226/207/345/214/226.md +15 -0
  286. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/350/207/252/347/204/266/345/245/207/350/247/202.md +29 -0
  287. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/351/201/227/344/272/247.md +15 -0
  288. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/217/244/344/273/243/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  289. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/220/215/350/203/234.md +15 -0
  290. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/257/223/350/250/200.md +15 -0
  291. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/347/216/260/344/273/243/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  292. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/347/245/236/350/257/235.md +22 -0
  293. package/md_cg/whitebox_kb/knowledge//344/271/246/346/263/225/346/226/207/345/214/226.md +22 -0
  294. package/md_cg/whitebox_kb/knowledge//344/272/244/351/200/232/345/256/211/345/205/250.md +15 -0
  295. package/md_cg/whitebox_kb/knowledge//344/272/244/351/200/232/351/200/232/350/257/206.md +15 -0
  296. package/md_cg/whitebox_kb/knowledge//344/272/272/344/275/223/347/224/237/347/220/206.md +22 -0
  297. package/md_cg/whitebox_kb/knowledge//344/272/272/345/267/245/346/231/272/350/203/275/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +307 -0
  298. package/md_cg/whitebox_kb/knowledge//344/272/272/346/226/207/351/200/232/350/257/206.md +1296 -0
  299. package/md_cg/whitebox_kb/knowledge//344/272/272/347/211/251/345/216/206/345/217/262.md +15 -0
  300. package/md_cg/whitebox_kb/knowledge//344/272/272/347/261/273/350/247/202/345/257/237/350/200/205/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +265 -0
  301. package/md_cg/whitebox_kb/knowledge//344/272/272/351/231/205/346/262/237/351/200/232.md +22 -0
  302. package/md_cg/whitebox_kb/knowledge//344/274/232/350/256/241/345/255/246/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +131 -0
  303. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/344/271/220/345/231/250.md +15 -0
  304. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/205/273/347/224/237.md +15 -0
  305. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/216/206/346/263/225.md +15 -0
  306. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/267/245/350/211/272.md +148 -0
  307. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/273/272/347/255/221.md +29 -0
  308. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/226/207/345/214/226.md +92 -0
  309. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/243/213/347/261/273.md +15 -0
  310. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/255/246/346/234/257.md +15 -0
  311. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/347/276/216/345/276/267.md +29 -0
  312. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/347/276/216/351/243/237.md +36 -0
  313. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/350/211/272/346/234/257.md +71 -0
  314. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/350/212/202/346/227/245.md +22 -0
  315. package/md_cg/whitebox_kb/knowledge//344/275/223/350/202/262.md +15 -0
  316. package/md_cg/whitebox_kb/knowledge//344/275/223/350/202/262/350/277/220/345/212/250.md +15 -0
  317. package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/345/256/211/345/205/250.md +15 -0
  318. package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/346/212/200/346/234/257.md +22 -0
  319. package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +90 -0
  320. package/md_cg/whitebox_kb/knowledge//345/201/245/345/272/267/344/271/240/346/203/257.md +15 -0
  321. package/md_cg/whitebox_kb/knowledge//345/201/245/345/272/267/345/270/270/350/257/206.md +50 -0
  322. package/md_cg/whitebox_kb/knowledge//345/205/211/345/255/246/351/200/232/350/257/206.md +15 -0
  323. package/md_cg/whitebox_kb/knowledge//345/205/273/347/224/237/346/226/271/346/263/225.md +15 -0
  324. package/md_cg/whitebox_kb/knowledge//345/206/233/344/272/213/345/217/262.md +15 -0
  325. package/md_cg/whitebox_kb/knowledge//345/206/234/344/270/232/345/270/270/350/257/206.md +15 -0
  326. package/md_cg/whitebox_kb/knowledge//345/210/206/345/255/220/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  327. package/md_cg/whitebox_kb/knowledge//345/210/206/346/236/220/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  328. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +391 -0
  329. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/345/216/206/345/217/262/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +279 -0
  330. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/345/234/260/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  331. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +391 -0
  332. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +545 -0
  333. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/347/224/237/347/211/251/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +426 -0
  334. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  335. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  336. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/351/201/223/345/276/267/344/270/216/346/263/225/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  337. package/md_cg/whitebox_kb/knowledge//345/210/266/345/272/246/345/217/262.md +64 -0
  338. package/md_cg/whitebox_kb/knowledge//345/211/215/346/262/277/347/247/221/346/212/200.md +36 -0
  339. package/md_cg/whitebox_kb/knowledge//345/212/250/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  340. package/md_cg/whitebox_kb/knowledge//345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +2081 -0
  341. package/md_cg/whitebox_kb/knowledge//345/214/226/345/267/245/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  342. package/md_cg/whitebox_kb/knowledge//345/214/273/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  343. package/md_cg/whitebox_kb/knowledge//345/216/206/345/217/262/345/234/260/347/220/206.md +29 -0
  344. package/md_cg/whitebox_kb/knowledge//345/216/206/345/217/262/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +464 -0
  345. package/md_cg/whitebox_kb/knowledge//345/216/237/345/255/220/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  346. package/md_cg/whitebox_kb/knowledge//345/217/244/344/273/243/346/261/211/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  347. package/md_cg/whitebox_kb/knowledge//345/217/244/347/224/237/347/211/251.md +22 -0
  348. package/md_cg/whitebox_kb/knowledge//345/223/262/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +118 -0
  349. package/md_cg/whitebox_kb/knowledge//345/225/206/344/270/232/345/217/262.md +15 -0
  350. package/md_cg/whitebox_kb/knowledge//345/231/250/347/211/251/345/267/245/350/211/272.md +15 -0
  351. package/md_cg/whitebox_kb/knowledge//345/233/255/346/236/227/345/273/272/347/255/221.md +15 -0
  352. package/md_cg/whitebox_kb/knowledge//345/233/272/344/275/223/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +202 -0
  353. package/md_cg/whitebox_kb/knowledge//345/233/276/345/203/217/347/224/237/346/210/220.md +99 -0
  354. package/md_cg/whitebox_kb/knowledge//345/234/237/346/234/250/345/267/245/347/250/213/345/237/272/347/241/200/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  355. package/md_cg/whitebox_kb/knowledge//345/234/260/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +303 -0
  356. package/md_cg/whitebox_kb/knowledge//345/244/215/345/217/230/345/207/275/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +195 -0
  357. package/md_cg/whitebox_kb/knowledge//345/244/226/345/233/275/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +118 -0
  358. package/md_cg/whitebox_kb/knowledge//345/244/247/345/255/246/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +265 -0
  359. package/md_cg/whitebox_kb/knowledge//345/244/247/345/255/246/346/200/235/346/224/277/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  360. package/md_cg/whitebox_kb/knowledge//345/244/247/345/255/246/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +321 -0
  361. package/md_cg/whitebox_kb/knowledge//345/244/247/345/255/246/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +132 -0
  362. package/md_cg/whitebox_kb/knowledge//345/244/251/344/275/223/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  363. package/md_cg/whitebox_kb/knowledge//345/244/251/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +173 -0
  364. package/md_cg/whitebox_kb/knowledge//345/255/230/345/234/250/350/256/272.md +43 -0
  365. package/md_cg/whitebox_kb/knowledge//345/255/246/344/271/240/346/226/271/346/263/225.md +57 -0
  366. package/md_cg/whitebox_kb/knowledge//345/256/211/345/205/250/345/270/270/350/257/206.md +22 -0
  367. package/md_cg/whitebox_kb/knowledge//345/256/217/350/247/202/347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  368. package/md_cg/whitebox_kb/knowledge//345/256/236/345/217/230/345/207/275/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +195 -0
  369. package/md_cg/whitebox_kb/knowledge//345/256/240/347/211/251.md +29 -0
  370. package/md_cg/whitebox_kb/knowledge//345/256/266/345/272/255/345/205/263/347/263/273.md +29 -0
  371. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +566 -0
  372. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/347/247/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1274 -0
  373. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  374. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  375. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/351/201/223/345/276/267/344/270/216/346/263/225/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  376. package/md_cg/whitebox_kb/knowledge//345/267/245/347/250/213/345/210/266/345/233/276/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +118 -0
  377. package/md_cg/whitebox_kb/knowledge//345/267/245/347/250/213/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +611 -0
  378. package/md_cg/whitebox_kb/knowledge//345/267/245/347/250/213/347/247/221/345/255/246.md +22 -0
  379. package/md_cg/whitebox_kb/knowledge//345/267/245/350/211/272/351/200/232/350/257/206.md +15 -0
  380. package/md_cg/whitebox_kb/knowledge//345/270/202/345/234/272/350/220/245/351/224/200/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +111 -0
  381. package/md_cg/whitebox_kb/knowledge//345/270/270/345/276/256/345/210/206/346/226/271/347/250/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +237 -0
  382. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/344/272/272/346/226/207.md +15 -0
  383. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/345/216/206/345/217/262.md +43 -0
  384. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/350/211/272/346/234/257.md +15 -0
  385. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/351/200/232/350/257/206.md +15 -0
  386. package/md_cg/whitebox_kb/knowledge//345/275/261/350/247/206/345/270/270/350/257/206.md +29 -0
  387. package/md_cg/whitebox_kb/knowledge//345/276/256/345/210/206/345/207/240/344/275/225/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  388. package/md_cg/whitebox_kb/knowledge//345/276/256/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  389. package/md_cg/whitebox_kb/knowledge//345/276/256/350/247/202/347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  390. package/md_cg/whitebox_kb/knowledge//345/277/203/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +133 -0
  391. package/md_cg/whitebox_kb/knowledge//346/200/235/347/273/264/345/256/232/345/276/213.md +29 -0
  392. package/md_cg/whitebox_kb/knowledge//346/203/205/346/204/237/346/203/205/347/273/252/344/273/277/347/234/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +186 -0
  393. package/md_cg/whitebox_kb/knowledge//346/210/217/346/233/262/350/211/272/346/234/257.md +22 -0
  394. package/md_cg/whitebox_kb/knowledge//346/210/220/350/257/255/345/205/270/346/225/205.md +15 -0
  395. package/md_cg/whitebox_kb/knowledge//346/211/213/345/267/245/345/270/270/350/257/206.md +15 -0
  396. package/md_cg/whitebox_kb/knowledge//346/212/275/350/261/241/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  397. package/md_cg/whitebox_kb/knowledge//346/213/223/346/211/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  398. package/md_cg/whitebox_kb/knowledge//346/223/215/344/275/234/347/263/273/347/273/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  399. package/md_cg/whitebox_kb/knowledge//346/224/266/350/227/217/351/233/206/350/227/217.md +92 -0
  400. package/md_cg/whitebox_kb/knowledge//346/224/277/346/262/273/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +387 -0
  401. package/md_cg/whitebox_kb/knowledge//346/225/210/347/216/207/346/226/271/346/263/225.md +15 -0
  402. package/md_cg/whitebox_kb/knowledge//346/225/260/345/200/274/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +202 -0
  403. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/227/347/224/265/350/267/257/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  404. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/227/347/264/240/345/205/273.md +22 -0
  405. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +2074 -0
  406. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/246/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +349 -0
  407. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/246/347/211/251/347/220/206/346/226/271/346/263/225/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  408. package/md_cg/whitebox_kb/knowledge//346/225/260/346/215/256/345/272/223/347/263/273/347/273/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  409. package/md_cg/whitebox_kb/knowledge//346/225/260/346/215/256/347/273/223/346/236/204/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  410. package/md_cg/whitebox_kb/knowledge//346/226/207/345/205/267/345/270/270/350/257/206.md +15 -0
  411. package/md_cg/whitebox_kb/knowledge//346/226/207/345/214/226.md +36 -0
  412. package/md_cg/whitebox_kb/knowledge//346/226/207/345/214/226/351/200/232/350/257/206.md +15 -0
  413. package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/227/345/255/246.md +15 -0
  414. package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/227/350/265/267/346/272/220.md +15 -0
  415. package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/246/347/220/206/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +328 -0
  416. package/md_cg/whitebox_kb/knowledge//346/226/207/346/225/231/345/216/206/345/217/262.md +15 -0
  417. package/md_cg/whitebox_kb/knowledge//346/226/207/347/211/251/351/200/232/350/257/206.md +22 -0
  418. package/md_cg/whitebox_kb/knowledge//346/226/207/347/214/256/345/255/246.md +22 -0
  419. package/md_cg/whitebox_kb/knowledge//346/227/240/346/234/272/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +216 -0
  420. package/md_cg/whitebox_kb/knowledge//346/227/266/347/251/272/350/256/260/345/277/206/345/233/276/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +214 -0
  421. package/md_cg/whitebox_kb/knowledge//346/230/206/350/231/253/345/270/270/350/257/206.md +29 -0
  422. package/md_cg/whitebox_kb/knowledge//346/231/272/350/203/275/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +441 -0
  423. package/md_cg/whitebox_kb/knowledge//346/233/262/350/211/272/345/270/270/350/257/206.md +15 -0
  424. package/md_cg/whitebox_kb/knowledge//346/234/211/346/234/272/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +195 -0
  425. package/md_cg/whitebox_kb/knowledge//346/234/215/351/245/260/346/226/207/345/214/226.md +22 -0
  426. package/md_cg/whitebox_kb/knowledge//346/234/252/345/210/206/347/261/273.md +52 -0
  427. package/md_cg/whitebox_kb/knowledge//346/234/272/346/242/260/351/200/232/350/257/206.md +15 -0
  428. package/md_cg/whitebox_kb/knowledge//346/235/220/346/226/231/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  429. package/md_cg/whitebox_kb/knowledge//346/235/241/344/273/266/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +350 -0
  430. package/md_cg/whitebox_kb/knowledge//346/243/213/347/211/214/350/247/204/345/210/231.md +15 -0
  431. package/md_cg/whitebox_kb/knowledge//346/243/213/347/261/273/350/247/204/345/210/231.md +36 -0
  432. package/md_cg/whitebox_kb/knowledge//346/244/215/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +132 -0
  433. package/md_cg/whitebox_kb/knowledge//346/246/202/347/216/207/350/256/272/344/270/216/346/225/260/347/220/206/347/273/237/350/256/241/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +230 -0
  434. package/md_cg/whitebox_kb/knowledge//346/250/241/346/213/237/347/224/265/345/255/220/346/212/200/346/234/257/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  435. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227.md +64 -0
  436. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/344/277/241/344/273/260.md +36 -0
  437. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/205/273/347/224/237.md +15 -0
  438. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/216/206/346/263/225.md +15 -0
  439. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/231/250/347/211/251.md +15 -0
  440. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/346/226/207/345/214/226.md +22 -0
  441. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/350/257/255/350/250/200.md +15 -0
  442. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/351/233/205/347/216/251.md +50 -0
  443. package/md_cg/whitebox_kb/knowledge//346/260/224/350/261/241/345/270/270/350/257/206.md +15 -0
  444. package/md_cg/whitebox_kb/knowledge//346/260/224/350/261/241/351/200/232/350/257/206.md +15 -0
  445. package/md_cg/whitebox_kb/knowledge//346/261/202/350/201/214/346/212/200/350/203/275.md +29 -0
  446. package/md_cg/whitebox_kb/knowledge//346/262/237/351/200/232.md +29 -0
  447. package/md_cg/whitebox_kb/knowledge//346/263/225/345/276/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +14 -0
  448. package/md_cg/whitebox_kb/knowledge//346/263/233/345/207/275/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +188 -0
  449. package/md_cg/whitebox_kb/knowledge//346/265/267/346/264/213/347/224/237/347/211/251.md +15 -0
  450. package/md_cg/whitebox_kb/knowledge//347/203/255/345/212/233/345/255/246/344/270/216/347/273/237/350/256/241/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +188 -0
  451. package/md_cg/whitebox_kb/knowledge//347/203/271/351/245/252/346/212/200/346/263/225.md +15 -0
  452. package/md_cg/whitebox_kb/knowledge//347/211/251/347/220/206/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +195 -0
  453. package/md_cg/whitebox_kb/knowledge//347/211/251/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +2256 -0
  454. package/md_cg/whitebox_kb/knowledge//347/216/260/344/273/243/346/261/211/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  455. package/md_cg/whitebox_kb/knowledge//347/220/206/350/256/272/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +209 -0
  456. package/md_cg/whitebox_kb/knowledge//347/224/237/346/200/201/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +132 -0
  457. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/345/215/253/347/224/237.md +15 -0
  458. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/345/270/270/350/257/206.md +1296 -0
  459. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/346/212/200/350/203/275.md +43 -0
  460. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/347/247/221/346/212/200.md +22 -0
  461. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/351/200/232/350/257/206.md +15 -0
  462. package/md_cg/whitebox_kb/knowledge//347/224/237/347/211/251/344/277/235/346/212/244.md +36 -0
  463. package/md_cg/whitebox_kb/knowledge//347/224/237/347/211/251/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +209 -0
  464. package/md_cg/whitebox_kb/knowledge//347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1759 -0
  465. package/md_cg/whitebox_kb/knowledge//347/224/237/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +132 -0
  466. package/md_cg/whitebox_kb/knowledge//347/224/265/345/212/250/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +188 -0
  467. package/md_cg/whitebox_kb/knowledge//347/224/265/350/267/257/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  468. package/md_cg/whitebox_kb/knowledge//347/231/275/347/256/261/345/215/217/350/256/256.md +22 -0
  469. package/md_cg/whitebox_kb/knowledge//347/233/212/346/231/272/346/270/270/346/210/217.md +15 -0
  470. package/md_cg/whitebox_kb/knowledge//347/233/212/346/231/272/351/200/232/350/257/206.md +15 -0
  471. package/md_cg/whitebox_kb/knowledge//347/244/276/344/272/244/346/212/200/345/267/247.md +15 -0
  472. package/md_cg/whitebox_kb/knowledge//347/244/276/344/274/232/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  473. package/md_cg/whitebox_kb/knowledge//347/244/276/344/274/232/347/247/221/345/255/246.md +43 -0
  474. package/md_cg/whitebox_kb/knowledge//347/245/236/350/257/235/344/274/240/350/257/264.md +15 -0
  475. package/md_cg/whitebox_kb/knowledge//347/247/221/345/255/246/345/217/262.md +22 -0
  476. package/md_cg/whitebox_kb/knowledge//347/247/221/346/212/200/351/200/232/350/257/206.md +78 -0
  477. package/md_cg/whitebox_kb/knowledge//347/250/213/345/272/217/350/256/276/350/256/241/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  478. package/md_cg/whitebox_kb/knowledge//347/256/227/346/263/225/350/256/276/350/256/241/344/270/216/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  479. package/md_cg/whitebox_kb/knowledge//347/256/241/347/220/206/345/255/246/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  480. package/md_cg/whitebox_kb/knowledge//347/272/277/346/200/247/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +202 -0
  481. package/md_cg/whitebox_kb/knowledge//347/273/206/350/203/236/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +181 -0
  482. package/md_cg/whitebox_kb/knowledge//347/273/217/346/265/216/345/217/262.md +43 -0
  483. package/md_cg/whitebox_kb/knowledge//347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +204 -0
  484. package/md_cg/whitebox_kb/knowledge//347/273/223/346/236/204/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  485. package/md_cg/whitebox_kb/knowledge//347/273/274/345/220/210/302/267/347/273/264/345/237/272/347/273/274/350/277/260.md +184 -0
  486. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213-Git.md +15 -0
  487. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213-JS.md +15 -0
  488. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213/346/246/202/345/277/265.md +15 -0
  489. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213/350/257/255/350/250/200.md +120 -0
  490. package/md_cg/whitebox_kb/knowledge//347/274/226/350/257/221/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  491. package/md_cg/whitebox_kb/knowledge//347/275/221/347/273/234/345/256/211/345/205/250.md +34 -0
  492. package/md_cg/whitebox_kb/knowledge//350/200/203/345/217/244/345/270/270/350/257/206.md +64 -0
  493. package/md_cg/whitebox_kb/knowledge//350/207/252/346/210/221/346/204/217/350/257/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +270 -0
  494. package/md_cg/whitebox_kb/knowledge//350/211/272/346/234/257/345/220/215/345/256/266.md +15 -0
  495. package/md_cg/whitebox_kb/knowledge//350/211/272/346/234/257/346/265/201/346/264/276.md +15 -0
  496. package/md_cg/whitebox_kb/knowledge//350/214/266/346/226/207/345/214/226.md +15 -0
  497. package/md_cg/whitebox_kb/knowledge//350/256/241/347/256/227/346/234/272/347/247/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +4265 -0
  498. package/md_cg/whitebox_kb/knowledge//350/256/241/347/256/227/346/234/272/347/273/204/346/210/220/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  499. package/md_cg/whitebox_kb/knowledge//350/256/241/347/256/227/346/234/272/347/275/221/347/273/234/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  500. package/md_cg/whitebox_kb/knowledge//350/257/255/350/250/200/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +373 -0
  501. package/md_cg/whitebox_kb/knowledge//350/264/247/345/270/201/345/217/262.md +15 -0
  502. package/md_cg/whitebox_kb/knowledge//350/264/247/345/270/201/345/270/270/350/257/206.md +15 -0
  503. package/md_cg/whitebox_kb/knowledge//350/275/257/344/273/266/345/267/245/347/250/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  504. package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/345/201/245/345/272/267.md +15 -0
  505. package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/345/270/270/350/257/206.md +15 -0
  506. package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/347/247/221/345/255/246.md +22 -0
  507. package/md_cg/whitebox_kb/knowledge//350/277/221/344/270/226/346/234/215/351/245/260.md +15 -0
  508. package/md_cg/whitebox_kb/knowledge//351/200/273/350/276/221/345/255/246.md +14 -0
  509. package/md_cg/whitebox_kb/knowledge//351/201/227/344/274/240/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  510. package/md_cg/whitebox_kb/knowledge//351/207/217/345/255/220/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +209 -0
  511. package/md_cg/whitebox_kb/knowledge//351/207/221/350/236/215/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  512. package/md_cg/whitebox_kb/knowledge//351/235/236/351/201/227/350/211/272/346/234/257.md +43 -0
  513. package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220.md +15 -0
  514. package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220/345/220/215/345/256/266.md +22 -0
  515. package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220/345/270/270/350/257/206.md +29 -0
  516. package/md_cg/whitebox_kb/knowledge//351/243/237/345/223/201/347/247/221/345/255/246.md +57 -0
  517. package/md_cg/whitebox_kb/knowledge//351/245/256/351/243/237/345/270/270/350/257/206.md +29 -0
  518. package/md_cg/whitebox_kb/knowledge//351/245/256/351/243/237/346/226/207/345/214/226.md +29 -0
  519. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +566 -0
  520. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/345/216/206/345/217/262/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  521. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/345/234/260/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  522. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/346/200/235/346/203/263/346/224/277/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  523. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +566 -0
  524. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +692 -0
  525. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/347/224/237/347/211/251/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +440 -0
  526. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  527. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  528. package/md_cg/whitebox_kb/knowledge//351/253/230/345/210/206/345/255/220/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  529. package/md_cg/whitebox_kb/knowledge//351/253/230/347/255/211/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +244 -0
  530. package/md_cg/whitebox_kb/knowledge//351/253/230/347/255/211/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +384 -0
  531. package/md_cg/whitebox_kb/seed_knowledge/__init__.py +2 -0
  532. package/md_cg/whitebox_kb/seed_knowledge/guardrail-charter.md +164 -0
  533. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/270/255/345/233/275/345/217/244/344/273/243/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  534. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/270/255/345/233/275/347/216/260/344/273/243/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  535. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/272/272/345/267/245/346/231/272/350/203/275/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +121 -0
  536. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/272/272/347/261/273/350/247/202/345/257/237/350/200/205/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +161 -0
  537. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/274/232/350/256/241/345/255/246/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  538. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/277/241/346/201/257/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +90 -0
  539. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/206/345/255/220/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  540. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/206/346/236/220/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  541. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +241 -0
  542. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/345/216/206/345/217/262/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  543. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/345/234/260/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  544. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +241 -0
  545. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +317 -0
  546. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/347/224/237/347/211/251/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +261 -0
  547. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  548. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  549. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/351/201/223/345/276/267/344/270/216/346/263/225/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  550. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/212/250/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  551. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1194 -0
  552. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/214/226/345/267/245/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  553. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/214/273/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +111 -0
  554. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/216/206/345/217/262/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +278 -0
  555. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/216/237/345/255/220/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  556. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/217/244/344/273/243/346/261/211/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  557. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/223/262/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +111 -0
  558. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/233/272/344/275/223/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +133 -0
  559. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/234/237/346/234/250/345/267/245/347/250/213/345/237/272/347/241/200/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  560. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/234/260/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +154 -0
  561. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/215/345/217/230/345/207/275/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +129 -0
  562. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/226/345/233/275/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +85 -0
  563. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/247/345/255/246/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +169 -0
  564. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/247/345/255/246/346/200/235/346/224/277/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  565. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/247/345/255/246/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +201 -0
  566. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/247/345/255/246/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +93 -0
  567. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/251/344/275/223/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  568. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/251/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +131 -0
  569. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/256/217/350/247/202/347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  570. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/256/236/345/217/230/345/207/275/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +129 -0
  571. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +333 -0
  572. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/347/247/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1124 -0
  573. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  574. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  575. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/351/201/223/345/276/267/344/270/216/346/263/225/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  576. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/267/245/347/250/213/345/210/266/345/233/276/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +85 -0
  577. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/267/245/347/250/213/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +362 -0
  578. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/270/202/345/234/272/350/220/245/351/224/200/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +81 -0
  579. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/270/270/345/276/256/345/210/206/346/226/271/347/250/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  580. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/276/256/345/210/206/345/207/240/344/275/225/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  581. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/276/256/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  582. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/276/256/350/247/202/347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  583. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/277/203/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +119 -0
  584. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/203/205/346/204/237/346/203/205/347/273/252/344/273/277/347/234/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +186 -0
  585. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/212/275/350/261/241/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  586. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/213/223/346/211/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  587. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/223/215/344/275/234/347/263/273/347/273/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  588. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/224/277/346/262/273/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +234 -0
  589. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/200/274/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +133 -0
  590. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/255/227/347/224/265/350/267/257/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  591. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1166 -0
  592. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/255/246/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +217 -0
  593. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/255/246/347/211/251/347/220/206/346/226/271/346/263/225/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  594. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/346/215/256/345/272/223/347/263/273/347/273/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  595. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/346/215/256/347/273/223/346/236/204/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  596. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/226/207/345/255/246/347/220/206/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  597. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/227/240/346/234/272/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +141 -0
  598. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/227/266/347/251/272/350/256/260/345/277/206/345/233/276/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +214 -0
  599. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/231/272/350/203/275/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +350 -0
  600. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/234/211/346/234/272/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +129 -0
  601. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/235/220/346/226/231/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  602. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/235/241/344/273/266/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +350 -0
  603. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/244/215/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  604. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/246/202/347/216/207/350/256/272/344/270/216/346/225/260/347/220/206/347/273/237/350/256/241/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +149 -0
  605. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/250/241/346/213/237/347/224/265/345/255/220/346/212/200/346/234/257/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  606. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/263/233/345/207/275/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  607. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/203/255/345/212/233/345/255/246/344/270/216/347/273/237/350/256/241/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  608. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/211/251/347/220/206/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +129 -0
  609. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/211/251/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1302 -0
  610. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/216/260/344/273/243/346/261/211/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  611. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/220/206/350/256/272/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +137 -0
  612. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/237/346/200/201/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +93 -0
  613. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/237/347/211/251/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +137 -0
  614. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1018 -0
  615. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/237/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +93 -0
  616. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/265/345/212/250/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  617. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/265/350/267/257/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  618. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/244/276/344/274/232/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +111 -0
  619. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/250/213/345/272/217/350/256/276/350/256/241/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  620. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/256/227/346/263/225/350/256/276/350/256/241/344/270/216/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  621. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/256/241/347/220/206/345/255/246/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  622. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/272/277/346/200/247/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +133 -0
  623. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/273/206/350/203/236/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +121 -0
  624. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +169 -0
  625. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/273/223/346/236/204/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  626. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/273/274/345/220/210/302/267/347/273/264/345/237/272/347/273/274/350/277/260.md +184 -0
  627. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/274/226/350/257/221/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  628. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/207/252/346/210/221/346/204/217/350/257/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +270 -0
  629. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/256/241/347/256/227/346/234/272/347/247/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +698 -0
  630. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/256/241/347/256/227/346/234/272/347/273/204/346/210/220/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  631. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/256/241/347/256/227/346/234/272/347/275/221/347/273/234/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  632. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/257/255/350/250/200/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +226 -0
  633. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/275/257/344/273/266/345/267/245/347/250/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  634. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/201/227/344/274/240/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  635. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/207/217/345/255/220/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +137 -0
  636. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/207/221/350/236/215/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  637. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +341 -0
  638. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/345/216/206/345/217/262/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  639. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/345/234/260/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  640. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/346/200/235/346/203/263/346/224/277/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  641. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +341 -0
  642. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +365 -0
  643. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/347/224/237/347/211/251/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +269 -0
  644. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  645. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  646. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/345/210/206/345/255/220/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  647. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/347/255/211/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +157 -0
  648. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/347/255/211/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +237 -0
  649. package/md_cg/whitebox_kb/seed_knowledge//346/231/272/350/203/275/350/256/2723.3.md +4620 -0
  650. package/md_cg/whitebox_kb/wisdom/__init__.py +6 -0
  651. package/md_cg/whitebox_kb/wisdom/__pycache__/browser_units.cpython-310.pyc +0 -0
  652. package/md_cg/whitebox_kb/wisdom/__pycache__/chat_engine.cpython-310.pyc +0 -0
  653. package/md_cg/whitebox_kb/wisdom/__pycache__/code_compose.cpython-310.pyc +0 -0
  654. package/md_cg/whitebox_kb/wisdom/__pycache__/compiler_code_units.cpython-310.pyc +0 -0
  655. package/md_cg/whitebox_kb/wisdom/__pycache__/condition_frame.cpython-310.pyc +0 -0
  656. package/md_cg/whitebox_kb/wisdom/__pycache__/condition_kb.cpython-310.pyc +0 -0
  657. package/md_cg/whitebox_kb/wisdom/__pycache__/danmaku_audit.cpython-310.pyc +0 -0
  658. package/md_cg/whitebox_kb/wisdom/__pycache__/graph_db_units.cpython-310.pyc +0 -0
  659. package/md_cg/whitebox_kb/wisdom/__pycache__/net_units.cpython-310.pyc +0 -0
  660. package/md_cg/whitebox_kb/wisdom/__pycache__/neural_retrieve.cpython-310.pyc +0 -0
  661. package/md_cg/whitebox_kb/wisdom/__pycache__/os_units.cpython-310.pyc +0 -0
  662. package/md_cg/whitebox_kb/wisdom/__pycache__/python_code_units.cpython-310.pyc +0 -0
  663. package/md_cg/whitebox_kb/wisdom/__pycache__/route_memory.cpython-310.pyc +0 -0
  664. package/md_cg/whitebox_kb/wisdom/__pycache__/semantic_translate.cpython-310.pyc +0 -0
  665. package/md_cg/whitebox_kb/wisdom/__pycache__/verifier.cpython-310.pyc +0 -0
  666. package/md_cg/whitebox_kb/wisdom/__pycache__/verify_answer.cpython-310.pyc +0 -0
  667. package/md_cg/whitebox_kb/wisdom/__pycache__/wisdom_book.cpython-310.pyc +0 -0
  668. package/md_cg/whitebox_kb/wisdom/__pycache__/wisdom_cloud.cpython-310.pyc +0 -0
  669. package/md_cg/whitebox_kb/wisdom/answer_spec_anchor.py +87 -0
  670. package/md_cg/whitebox_kb/wisdom/audit_log/chain_heat.json +26 -0
  671. package/md_cg/whitebox_kb/wisdom/browser_units.py +2631 -0
  672. package/md_cg/whitebox_kb/wisdom/card_validator.py +223 -0
  673. package/md_cg/whitebox_kb/wisdom/causal_discover.py +313 -0
  674. package/md_cg/whitebox_kb/wisdom/chat.html +185 -0
  675. package/md_cg/whitebox_kb/wisdom/chat_engine.py +1506 -0
  676. package/md_cg/whitebox_kb/wisdom/code_compose.py +730 -0
  677. package/md_cg/whitebox_kb/wisdom/code_qa.py +119 -0
  678. package/md_cg/whitebox_kb/wisdom/code_route_bridge.py +90 -0
  679. package/md_cg/whitebox_kb/wisdom/code_solidified.json +6196 -0
  680. package/md_cg/whitebox_kb/wisdom/code_test_runner.py +217 -0
  681. package/md_cg/whitebox_kb/wisdom/codegraph_white.py +312 -0
  682. package/md_cg/whitebox_kb/wisdom/compiler_code_units.py +3033 -0
  683. package/md_cg/whitebox_kb/wisdom/compiler_compose.py +160 -0
  684. package/md_cg/whitebox_kb/wisdom/compose_engine.py +1633 -0
  685. package/md_cg/whitebox_kb/wisdom/condition_algebra.py +112 -0
  686. package/md_cg/whitebox_kb/wisdom/condition_frame.py +315 -0
  687. package/md_cg/whitebox_kb/wisdom/condition_kb.py +108 -0
  688. package/md_cg/whitebox_kb/wisdom/condition_vm.py +264 -0
  689. package/md_cg/whitebox_kb/wisdom/conflict_map.json +4446 -0
  690. package/md_cg/whitebox_kb/wisdom/core/compiler.py +301 -0
  691. package/md_cg/whitebox_kb/wisdom/core/condition_vm.py +298 -0
  692. package/md_cg/whitebox_kb/wisdom/core/lexer.py +512 -0
  693. package/md_cg/whitebox_kb/wisdom/core/name_checker.py +1023 -0
  694. package/md_cg/whitebox_kb/wisdom/core/parser.py +1065 -0
  695. package/md_cg/whitebox_kb/wisdom/cspmn.py +258 -0
  696. package/md_cg/whitebox_kb/wisdom/csre.py +256 -0
  697. package/md_cg/whitebox_kb/wisdom/csre_lexicon_index.npz +0 -0
  698. package/md_cg/whitebox_kb/wisdom/danmaku_audit.py +252 -0
  699. package/md_cg/whitebox_kb/wisdom/danmaku_bridge.py +141 -0
  700. package/md_cg/whitebox_kb/wisdom/distilled_condition_units.json +6418 -0
  701. package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902b.json +1951 -0
  702. package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902c.json +1297 -0
  703. package/md_cg/whitebox_kb/wisdom/docs/codegraph_ref_rating.md +52 -0
  704. package/md_cg/whitebox_kb/wisdom/docs/daoti_absorb_analysis.md +54 -0
  705. package/md_cg/whitebox_kb/wisdom/docs/dsh_memory_v030_stable.md +34 -0
  706. package/md_cg/whitebox_kb/wisdom/docs/github_absorb_analysis.md +71 -0
  707. package/md_cg/whitebox_kb/wisdom/docs/gliding_horse_absorb_analysis.md +47 -0
  708. package/md_cg/whitebox_kb/wisdom/docs/whitebox_capability_graph.md +61 -0
  709. package/md_cg/whitebox_kb/wisdom/docs/whitebox_capability_graph_demo.json +60 -0
  710. package/md_cg/whitebox_kb/wisdom/docs/whitebox_code_rating_202609.md +43 -0
  711. package/md_cg/whitebox_kb/wisdom/docs//344/273/243/347/240/201/346/235/241/344/273/266/350/267/257/347/224/261/345/233/276_CCG/350/256/276/350/256/241.md +150 -0
  712. package/md_cg/whitebox_kb/wisdom/docs//344/273/243/347/240/201/350/257/255/344/271/211/346/235/241/344/273/266/345/215/217/350/256/256.md +650 -0
  713. package/md_cg/whitebox_kb/wisdom/docs//345/261/200/351/203/250/346/234/200/344/274/230/344/270/216/346/203/205/347/273/252/345/201/217/345/245/275_/347/220/206/350/256/272/345/267/245/347/250/213.md +97 -0
  714. package/md_cg/whitebox_kb/wisdom/docs//346/226/271/345/220/221/346/200/247/346/212/211/346/213/251_/350/207/252/344/270/276vs/350/207/252/350/277/255/344/273/243.md +81 -0
  715. package/md_cg/whitebox_kb/wisdom/docs//347/201/265/346/236/242AGI/346/236/266/346/236/204/346/216/242/347/264/242_/346/226/207/346/241/243/350/247/204/345/210/222.md +51 -0
  716. package/md_cg/whitebox_kb/wisdom/docs//347/201/265/346/236/242/346/217/222/344/273/266/345/210/206/347/261/273/345/210/206/346/236/220.md +67 -0
  717. package/md_cg/whitebox_kb/wisdom/docs//347/231/275/347/256/261/346/234/254/345/234/260/346/240/241/351/252/214/345/231/250_ZeroLLM_Verifier.md +276 -0
  718. package/md_cg/whitebox_kb/wisdom/docs//347/231/275/347/256/261/350/207/252/344/270/276/347/254/254/345/205/255/351/230/266/346/256/265_/346/224/266/345/256/230/346/200/273/347/273/223.md +1207 -0
  719. package/md_cg/whitebox_kb/wisdom/ds_compose.py +177 -0
  720. package/md_cg/whitebox_kb/wisdom/graph_db_units.py +3089 -0
  721. package/md_cg/whitebox_kb/wisdom/graph_qa.py +123 -0
  722. package/md_cg/whitebox_kb/wisdom/human_observer_knowledge.json +43 -0
  723. package/md_cg/whitebox_kb/wisdom/knowledge_points.py +234 -0
  724. package/md_cg/whitebox_kb/wisdom/merge_subgraph.py +178 -0
  725. package/md_cg/whitebox_kb/wisdom/migrate_wisdom.py +475 -0
  726. package/md_cg/whitebox_kb/wisdom/mini_python.py +958 -0
  727. package/md_cg/whitebox_kb/wisdom/multilang_ir.py +124 -0
  728. package/md_cg/whitebox_kb/wisdom/navigate.py +248 -0
  729. package/md_cg/whitebox_kb/wisdom/net_units.py +2895 -0
  730. package/md_cg/whitebox_kb/wisdom/neural_index.json +3032 -0
  731. package/md_cg/whitebox_kb/wisdom/neural_index.npz +0 -0
  732. package/md_cg/whitebox_kb/wisdom/neural_retrieve.py +224 -0
  733. package/md_cg/whitebox_kb/wisdom/os_units.py +2735 -0
  734. package/md_cg/whitebox_kb/wisdom/pattern_separation.py +223 -0
  735. package/md_cg/whitebox_kb/wisdom/prereq_map.json +365 -0
  736. package/md_cg/whitebox_kb/wisdom/python_code_units.py +2766 -0
  737. package/md_cg/whitebox_kb/wisdom/role_compose.py +268 -0
  738. package/md_cg/whitebox_kb/wisdom/role_solidified.json +8 -0
  739. package/md_cg/whitebox_kb/wisdom/route_memory.py +244 -0
  740. package/md_cg/whitebox_kb/wisdom/scene_reconstruction.py +148 -0
  741. package/md_cg/whitebox_kb/wisdom/se_compose.py +137 -0
  742. package/md_cg/whitebox_kb/wisdom/semantic_translate.py +4050 -0
  743. package/md_cg/whitebox_kb/wisdom/snr_dashboard.py +219 -0
  744. package/md_cg/whitebox_kb/wisdom/snr_report.json +41 -0
  745. package/md_cg/whitebox_kb/wisdom/spatial_closure.py +96 -0
  746. package/md_cg/whitebox_kb/wisdom/spatial_qa.py +182 -0
  747. package/md_cg/whitebox_kb/wisdom/status_terms.json +21 -0
  748. package/md_cg/whitebox_kb/wisdom/task_discipline.json +43 -0
  749. package/md_cg/whitebox_kb/wisdom/test_code_compose_domains.py +7541 -0
  750. package/md_cg/whitebox_kb/wisdom/test_compiler_self_bootstrap.py +354 -0
  751. package/md_cg/whitebox_kb/wisdom/test_ecosystem_assembly.py +158 -0
  752. package/md_cg/whitebox_kb/wisdom/test_ecosystem_demos.py +193 -0
  753. package/md_cg/whitebox_kb/wisdom/test_graph_db.py +292 -0
  754. package/md_cg/whitebox_kb/wisdom/test_navigate_self_bootstrap.py +69 -0
  755. package/md_cg/whitebox_kb/wisdom/test_python_self_bootstrap.py +160 -0
  756. package/md_cg/whitebox_kb/wisdom/trigger_words_index.json +4367 -0
  757. package/md_cg/whitebox_kb/wisdom/verifier.py +1012 -0
  758. package/md_cg/whitebox_kb/wisdom/verify_answer.py +116 -0
  759. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db +0 -0
  760. package/md_cg/whitebox_kb/wisdom/wisdom_book.py +2582 -0
  761. package/md_cg/whitebox_kb/wisdom/wisdom_cloud.py +479 -0
  762. package/md_cg/whitebox_kb/wisdom/wisdom_ui.html +863 -0
  763. package/package.json +4 -2
  764. package/skills/README.md +108 -0
  765. package/skills/plugin.json +52 -0
  766. package/skills/skills/analyze-type-infer/SKILL.md +45 -0
  767. package/skills/skills/browser-02898b15/SKILL.md +45 -0
  768. package/skills/skills/browser-03b04f98/SKILL.md +45 -0
  769. package/skills/skills/browser-0754386d/SKILL.md +45 -0
  770. package/skills/skills/browser-093c03ab/SKILL.md +45 -0
  771. package/skills/skills/browser-09e60b35/SKILL.md +45 -0
  772. package/skills/skills/browser-0ab4f2db/SKILL.md +45 -0
  773. package/skills/skills/browser-0c7f88d6/SKILL.md +45 -0
  774. package/skills/skills/browser-0f598430/SKILL.md +45 -0
  775. package/skills/skills/browser-0fd64fa5/SKILL.md +45 -0
  776. package/skills/skills/browser-17906c62/SKILL.md +45 -0
  777. package/skills/skills/browser-18f823e2/SKILL.md +45 -0
  778. package/skills/skills/browser-1bafe81c/SKILL.md +45 -0
  779. package/skills/skills/browser-1f9ab1f0/SKILL.md +45 -0
  780. package/skills/skills/browser-1fdb5852/SKILL.md +45 -0
  781. package/skills/skills/browser-21b0359c/SKILL.md +45 -0
  782. package/skills/skills/browser-22e8de36/SKILL.md +45 -0
  783. package/skills/skills/browser-24163519/SKILL.md +45 -0
  784. package/skills/skills/browser-2471a991/SKILL.md +45 -0
  785. package/skills/skills/browser-25afee4d/SKILL.md +45 -0
  786. package/skills/skills/browser-283a91bd/SKILL.md +45 -0
  787. package/skills/skills/browser-2895ff52/SKILL.md +45 -0
  788. package/skills/skills/browser-2cc1da58/SKILL.md +45 -0
  789. package/skills/skills/browser-3189fe6f/SKILL.md +45 -0
  790. package/skills/skills/browser-31f2b08f/SKILL.md +45 -0
  791. package/skills/skills/browser-37b8339e/SKILL.md +45 -0
  792. package/skills/skills/browser-396ec3a6/SKILL.md +45 -0
  793. package/skills/skills/browser-3df2f904/SKILL.md +45 -0
  794. package/skills/skills/browser-43154cec/SKILL.md +45 -0
  795. package/skills/skills/browser-434b74b8/SKILL.md +45 -0
  796. package/skills/skills/browser-440d4398/SKILL.md +45 -0
  797. package/skills/skills/browser-44d7f183/SKILL.md +45 -0
  798. package/skills/skills/browser-4d6c0788/SKILL.md +45 -0
  799. package/skills/skills/browser-50fecd89/SKILL.md +45 -0
  800. package/skills/skills/browser-555c0626/SKILL.md +45 -0
  801. package/skills/skills/browser-57312d24/SKILL.md +45 -0
  802. package/skills/skills/browser-59a0ada4/SKILL.md +45 -0
  803. package/skills/skills/browser-5a455aeb/SKILL.md +45 -0
  804. package/skills/skills/browser-5ae7623a/SKILL.md +45 -0
  805. package/skills/skills/browser-5dac60b6/SKILL.md +45 -0
  806. package/skills/skills/browser-5e5f1396/SKILL.md +45 -0
  807. package/skills/skills/browser-5ebb01dd/SKILL.md +45 -0
  808. package/skills/skills/browser-5f5453f9/SKILL.md +45 -0
  809. package/skills/skills/browser-5f90f58c/SKILL.md +45 -0
  810. package/skills/skills/browser-609362ee/SKILL.md +45 -0
  811. package/skills/skills/browser-60aefeeb/SKILL.md +45 -0
  812. package/skills/skills/browser-6636d49c/SKILL.md +45 -0
  813. package/skills/skills/browser-6cfcb6db/SKILL.md +45 -0
  814. package/skills/skills/browser-6e1c1158/SKILL.md +45 -0
  815. package/skills/skills/browser-7008e942/SKILL.md +45 -0
  816. package/skills/skills/browser-716cd26c/SKILL.md +45 -0
  817. package/skills/skills/browser-720ce1a1/SKILL.md +45 -0
  818. package/skills/skills/browser-77a97b43/SKILL.md +45 -0
  819. package/skills/skills/browser-7bb4871d/SKILL.md +45 -0
  820. package/skills/skills/browser-7be57bbe/SKILL.md +45 -0
  821. package/skills/skills/browser-7da433f3/SKILL.md +45 -0
  822. package/skills/skills/browser-7e96fe1d/SKILL.md +45 -0
  823. package/skills/skills/browser-7f9cefec/SKILL.md +45 -0
  824. package/skills/skills/browser-80224e71/SKILL.md +45 -0
  825. package/skills/skills/browser-81345ecd/SKILL.md +45 -0
  826. package/skills/skills/browser-822cfa44/SKILL.md +45 -0
  827. package/skills/skills/browser-853690c0/SKILL.md +45 -0
  828. package/skills/skills/browser-85553126/SKILL.md +45 -0
  829. package/skills/skills/browser-87b0ce80/SKILL.md +45 -0
  830. package/skills/skills/browser-900c4484/SKILL.md +45 -0
  831. package/skills/skills/browser-910405c4/SKILL.md +45 -0
  832. package/skills/skills/browser-95fd3c86/SKILL.md +45 -0
  833. package/skills/skills/browser-97a14ca3/SKILL.md +45 -0
  834. package/skills/skills/browser-9de10895/SKILL.md +45 -0
  835. package/skills/skills/browser-9e4914a7/SKILL.md +45 -0
  836. package/skills/skills/browser-a280ec64/SKILL.md +45 -0
  837. package/skills/skills/browser-a2d9b0b0/SKILL.md +45 -0
  838. package/skills/skills/browser-a372edeb/SKILL.md +45 -0
  839. package/skills/skills/browser-a4c793a4/SKILL.md +45 -0
  840. package/skills/skills/browser-a681d0c2/SKILL.md +45 -0
  841. package/skills/skills/browser-a7a2b0c1/SKILL.md +45 -0
  842. package/skills/skills/browser-a990e68e/SKILL.md +45 -0
  843. package/skills/skills/browser-aaac4eec/SKILL.md +45 -0
  844. package/skills/skills/browser-ae6586bb/SKILL.md +45 -0
  845. package/skills/skills/browser-afa4091f/SKILL.md +45 -0
  846. package/skills/skills/browser-b4c8cf65/SKILL.md +45 -0
  847. package/skills/skills/browser-b501767c/SKILL.md +45 -0
  848. package/skills/skills/browser-bcd4288d/SKILL.md +45 -0
  849. package/skills/skills/browser-bfad66a5/SKILL.md +45 -0
  850. package/skills/skills/browser-c45cbfe9/SKILL.md +45 -0
  851. package/skills/skills/browser-c4dd6078/SKILL.md +45 -0
  852. package/skills/skills/browser-c879eb0b/SKILL.md +45 -0
  853. package/skills/skills/browser-c92ac01b/SKILL.md +45 -0
  854. package/skills/skills/browser-cb179242/SKILL.md +45 -0
  855. package/skills/skills/browser-cc7d3d6d/SKILL.md +45 -0
  856. package/skills/skills/browser-cf3c47f0/SKILL.md +45 -0
  857. package/skills/skills/browser-cf9f812e/SKILL.md +45 -0
  858. package/skills/skills/browser-d462581c/SKILL.md +45 -0
  859. package/skills/skills/browser-d5fa0b7f/SKILL.md +45 -0
  860. package/skills/skills/browser-d72e225b/SKILL.md +45 -0
  861. package/skills/skills/browser-df1a919e/SKILL.md +45 -0
  862. package/skills/skills/browser-e84565c1/SKILL.md +45 -0
  863. package/skills/skills/browser-e947a564/SKILL.md +45 -0
  864. package/skills/skills/browser-ea9b2b8e/SKILL.md +45 -0
  865. package/skills/skills/browser-f5ffc6d9/SKILL.md +45 -0
  866. package/skills/skills/browser-f75a4418/SKILL.md +45 -0
  867. package/skills/skills/browser-f8f2966e/SKILL.md +45 -0
  868. package/skills/skills/browser-fa65fa2d/SKILL.md +45 -0
  869. package/skills/skills/browser-faac8812/SKILL.md +45 -0
  870. package/skills/skills/browser-ff94a671/SKILL.md +45 -0
  871. package/skills/skills/check-name-real/SKILL.md +45 -0
  872. package/skills/skills/compile-assign/SKILL.md +45 -0
  873. package/skills/skills/compile-expr-tree/SKILL.md +45 -0
  874. package/skills/skills/compile-full-pipeline/SKILL.md +45 -0
  875. package/skills/skills/compile-func-def/SKILL.md +45 -0
  876. package/skills/skills/compile-if-then/SKILL.md +45 -0
  877. package/skills/skills/compile-logic-expr/SKILL.md +45 -0
  878. package/skills/skills/compile-recursive/SKILL.md +45 -0
  879. package/skills/skills/compile-scope/SKILL.md +45 -0
  880. package/skills/skills/compile-type-check/SKILL.md +45 -0
  881. package/skills/skills/compile-while/SKILL.md +45 -0
  882. package/skills/skills/compiler-0010c4bf/SKILL.md +45 -0
  883. package/skills/skills/compiler-0355bffb/SKILL.md +45 -0
  884. package/skills/skills/compiler-0361708a/SKILL.md +45 -0
  885. package/skills/skills/compiler-054a0414/SKILL.md +45 -0
  886. package/skills/skills/compiler-05a1691a/SKILL.md +45 -0
  887. package/skills/skills/compiler-05eeed1e/SKILL.md +45 -0
  888. package/skills/skills/compiler-0622a1f6/SKILL.md +45 -0
  889. package/skills/skills/compiler-08b54217/SKILL.md +45 -0
  890. package/skills/skills/compiler-0a62b70c/SKILL.md +45 -0
  891. package/skills/skills/compiler-0ab24d00/SKILL.md +45 -0
  892. package/skills/skills/compiler-0e093688/SKILL.md +45 -0
  893. package/skills/skills/compiler-0e82b966/SKILL.md +45 -0
  894. package/skills/skills/compiler-0ee9b9b9/SKILL.md +45 -0
  895. package/skills/skills/compiler-0f3787e6/SKILL.md +45 -0
  896. package/skills/skills/compiler-1028685f/SKILL.md +45 -0
  897. package/skills/skills/compiler-11897630/SKILL.md +45 -0
  898. package/skills/skills/compiler-16661b9b/SKILL.md +45 -0
  899. package/skills/skills/compiler-1f722303/SKILL.md +45 -0
  900. package/skills/skills/compiler-25be1262/SKILL.md +45 -0
  901. package/skills/skills/compiler-2a76ba07/SKILL.md +45 -0
  902. package/skills/skills/compiler-2dbea54a/SKILL.md +45 -0
  903. package/skills/skills/compiler-2df52f16/SKILL.md +45 -0
  904. package/skills/skills/compiler-2ec2c9d2/SKILL.md +45 -0
  905. package/skills/skills/compiler-2f8c8f39/SKILL.md +45 -0
  906. package/skills/skills/compiler-38378ac7/SKILL.md +45 -0
  907. package/skills/skills/compiler-39457d2e/SKILL.md +45 -0
  908. package/skills/skills/compiler-39fb5926/SKILL.md +45 -0
  909. package/skills/skills/compiler-47f4fbfa/SKILL.md +45 -0
  910. package/skills/skills/compiler-4a8cd1f1/SKILL.md +45 -0
  911. package/skills/skills/compiler-4b230b6b/SKILL.md +45 -0
  912. package/skills/skills/compiler-4cbbda95/SKILL.md +45 -0
  913. package/skills/skills/compiler-4d5a68ff/SKILL.md +45 -0
  914. package/skills/skills/compiler-56dc9bdd/SKILL.md +45 -0
  915. package/skills/skills/compiler-57e76ebe/SKILL.md +45 -0
  916. package/skills/skills/compiler-61ff016b/SKILL.md +45 -0
  917. package/skills/skills/compiler-63eae588/SKILL.md +45 -0
  918. package/skills/skills/compiler-64c4224b/SKILL.md +45 -0
  919. package/skills/skills/compiler-66377955/SKILL.md +45 -0
  920. package/skills/skills/compiler-674ab4f6/SKILL.md +45 -0
  921. package/skills/skills/compiler-6af76fd6/SKILL.md +45 -0
  922. package/skills/skills/compiler-6d979db2/SKILL.md +45 -0
  923. package/skills/skills/compiler-6de326c0/SKILL.md +45 -0
  924. package/skills/skills/compiler-6f1c0eea/SKILL.md +45 -0
  925. package/skills/skills/compiler-724d6c9b/SKILL.md +45 -0
  926. package/skills/skills/compiler-7690177f/SKILL.md +45 -0
  927. package/skills/skills/compiler-7b229a7d/SKILL.md +45 -0
  928. package/skills/skills/compiler-7f471b3a/SKILL.md +45 -0
  929. package/skills/skills/compiler-815cad08/SKILL.md +45 -0
  930. package/skills/skills/compiler-83c61634/SKILL.md +45 -0
  931. package/skills/skills/compiler-8c798c81/SKILL.md +45 -0
  932. package/skills/skills/compiler-8dd747ac/SKILL.md +45 -0
  933. package/skills/skills/compiler-90324d0a/SKILL.md +45 -0
  934. package/skills/skills/compiler-94b8d72d/SKILL.md +45 -0
  935. package/skills/skills/compiler-94f12231/SKILL.md +45 -0
  936. package/skills/skills/compiler-95937c16/SKILL.md +45 -0
  937. package/skills/skills/compiler-98a5625b/SKILL.md +45 -0
  938. package/skills/skills/compiler-98b4c42f/SKILL.md +45 -0
  939. package/skills/skills/compiler-98e3894a/SKILL.md +45 -0
  940. package/skills/skills/compiler-9bdfe4b8/SKILL.md +45 -0
  941. package/skills/skills/compiler-9d9b4e83/SKILL.md +45 -0
  942. package/skills/skills/compiler-9f7be5ad/SKILL.md +45 -0
  943. package/skills/skills/compiler-a6daf076/SKILL.md +45 -0
  944. package/skills/skills/compiler-a7995a0c/SKILL.md +45 -0
  945. package/skills/skills/compiler-a8399248/SKILL.md +45 -0
  946. package/skills/skills/compiler-aabbd099/SKILL.md +45 -0
  947. package/skills/skills/compiler-afe169d8/SKILL.md +45 -0
  948. package/skills/skills/compiler-b0678bda/SKILL.md +45 -0
  949. package/skills/skills/compiler-b09bd196/SKILL.md +45 -0
  950. package/skills/skills/compiler-b1396e23/SKILL.md +45 -0
  951. package/skills/skills/compiler-b9b31ce0/SKILL.md +45 -0
  952. package/skills/skills/compiler-c10264a7/SKILL.md +45 -0
  953. package/skills/skills/compiler-cb1e8e4b/SKILL.md +45 -0
  954. package/skills/skills/compiler-ccafd438/SKILL.md +45 -0
  955. package/skills/skills/compiler-cda9c262/SKILL.md +45 -0
  956. package/skills/skills/compiler-ce648068/SKILL.md +45 -0
  957. package/skills/skills/compiler-cf5776a4/SKILL.md +45 -0
  958. package/skills/skills/compiler-d974e5d3/SKILL.md +45 -0
  959. package/skills/skills/compiler-e3979fd3/SKILL.md +45 -0
  960. package/skills/skills/compiler-eb1cf2b5/SKILL.md +45 -0
  961. package/skills/skills/compiler-ecb30d5b/SKILL.md +45 -0
  962. package/skills/skills/compiler-f8c8b24b/SKILL.md +45 -0
  963. package/skills/skills/compiler-f99fedbe/SKILL.md +45 -0
  964. package/skills/skills/compiler-fa8ff5f7/SKILL.md +45 -0
  965. package/skills/skills/compiler-fe1b058d/SKILL.md +45 -0
  966. package/skills/skills/designer-perspective/SKILL.md +157 -0
  967. package/skills/skills/designer-perspective/references/01-observation-position.md +66 -0
  968. package/skills/skills/designer-perspective/references/02-structure-recognition.md +62 -0
  969. package/skills/skills/designer-perspective/references/03-direction-judgment.md +55 -0
  970. package/skills/skills/designer-perspective/references/04-qualification-verdict.md +72 -0
  971. package/skills/skills/designer-perspective/references/05-condition-attribution.md +74 -0
  972. package/skills/skills/designer-perspective/scripts/__pycache__/designer.cpython-310.pyc +0 -0
  973. package/skills/skills/designer-perspective/scripts/designer.py +527 -0
  974. package/skills/skills/designer-perspective/tests/cases.jsonl +17 -0
  975. package/skills/skills/designer-perspective/tests/selftest.py +60 -0
  976. package/skills/skills/graph-04cd431b/SKILL.md +45 -0
  977. package/skills/skills/graph-06e2b1f2/SKILL.md +45 -0
  978. package/skills/skills/graph-0de12477/SKILL.md +45 -0
  979. package/skills/skills/graph-0e564e68/SKILL.md +45 -0
  980. package/skills/skills/graph-10d58a7b/SKILL.md +45 -0
  981. package/skills/skills/graph-12cd830a/SKILL.md +45 -0
  982. package/skills/skills/graph-185f2cd2/SKILL.md +45 -0
  983. package/skills/skills/graph-19a6a301/SKILL.md +45 -0
  984. package/skills/skills/graph-1b266557/SKILL.md +45 -0
  985. package/skills/skills/graph-1b707621/SKILL.md +45 -0
  986. package/skills/skills/graph-1d73b597/SKILL.md +45 -0
  987. package/skills/skills/graph-2041fa98/SKILL.md +45 -0
  988. package/skills/skills/graph-2461bc41/SKILL.md +45 -0
  989. package/skills/skills/graph-2465dff8/SKILL.md +45 -0
  990. package/skills/skills/graph-2508389f/SKILL.md +45 -0
  991. package/skills/skills/graph-276d554d/SKILL.md +45 -0
  992. package/skills/skills/graph-299f4a32/SKILL.md +45 -0
  993. package/skills/skills/graph-2d455cd8/SKILL.md +45 -0
  994. package/skills/skills/graph-2fddf701/SKILL.md +45 -0
  995. package/skills/skills/graph-33385442/SKILL.md +45 -0
  996. package/skills/skills/graph-34a1dba7/SKILL.md +45 -0
  997. package/skills/skills/graph-3721be1c/SKILL.md +45 -0
  998. package/skills/skills/graph-3755dbc9/SKILL.md +45 -0
  999. package/skills/skills/graph-37a45d4b/SKILL.md +45 -0
  1000. package/skills/skills/graph-3a4a984c/SKILL.md +45 -0
  1001. package/skills/skills/graph-3aa4c941/SKILL.md +45 -0
  1002. package/skills/skills/graph-3b69a528/SKILL.md +45 -0
  1003. package/skills/skills/graph-3bc2eb69/SKILL.md +45 -0
  1004. package/skills/skills/graph-3d255ed4/SKILL.md +45 -0
  1005. package/skills/skills/graph-3d34961d/SKILL.md +45 -0
  1006. package/skills/skills/graph-3e18a380/SKILL.md +45 -0
  1007. package/skills/skills/graph-3f920bf3/SKILL.md +45 -0
  1008. package/skills/skills/graph-40b7bf61/SKILL.md +45 -0
  1009. package/skills/skills/graph-42187d5d/SKILL.md +45 -0
  1010. package/skills/skills/graph-4361c60e/SKILL.md +45 -0
  1011. package/skills/skills/graph-44e56113/SKILL.md +45 -0
  1012. package/skills/skills/graph-4b363727/SKILL.md +45 -0
  1013. package/skills/skills/graph-52e6e216/SKILL.md +45 -0
  1014. package/skills/skills/graph-53fbfef5/SKILL.md +45 -0
  1015. package/skills/skills/graph-54ac2988/SKILL.md +45 -0
  1016. package/skills/skills/graph-580dadcd/SKILL.md +45 -0
  1017. package/skills/skills/graph-5ca34baa/SKILL.md +45 -0
  1018. package/skills/skills/graph-5cb7fbdf/SKILL.md +45 -0
  1019. package/skills/skills/graph-5f894c05/SKILL.md +45 -0
  1020. package/skills/skills/graph-656e7bd4/SKILL.md +45 -0
  1021. package/skills/skills/graph-6dc48231/SKILL.md +45 -0
  1022. package/skills/skills/graph-7186924a/SKILL.md +45 -0
  1023. package/skills/skills/graph-72ce5342/SKILL.md +45 -0
  1024. package/skills/skills/graph-7376a24e/SKILL.md +45 -0
  1025. package/skills/skills/graph-7412a7cb/SKILL.md +45 -0
  1026. package/skills/skills/graph-7becedf0/SKILL.md +45 -0
  1027. package/skills/skills/graph-7c38fbf3/SKILL.md +45 -0
  1028. package/skills/skills/graph-7dc36de7/SKILL.md +45 -0
  1029. package/skills/skills/graph-7fe49de7/SKILL.md +45 -0
  1030. package/skills/skills/graph-80d82194/SKILL.md +45 -0
  1031. package/skills/skills/graph-85bf101e/SKILL.md +45 -0
  1032. package/skills/skills/graph-8650548b/SKILL.md +45 -0
  1033. package/skills/skills/graph-86583b09/SKILL.md +45 -0
  1034. package/skills/skills/graph-8727827c/SKILL.md +45 -0
  1035. package/skills/skills/graph-873fb505/SKILL.md +45 -0
  1036. package/skills/skills/graph-89b11de0/SKILL.md +45 -0
  1037. package/skills/skills/graph-8d7b569b/SKILL.md +45 -0
  1038. package/skills/skills/graph-8e920d5d/SKILL.md +45 -0
  1039. package/skills/skills/graph-8eb38e3d/SKILL.md +45 -0
  1040. package/skills/skills/graph-94582f69/SKILL.md +45 -0
  1041. package/skills/skills/graph-947355f7/SKILL.md +45 -0
  1042. package/skills/skills/graph-9507aff7/SKILL.md +45 -0
  1043. package/skills/skills/graph-95b86a8b/SKILL.md +45 -0
  1044. package/skills/skills/graph-96b85e1f/SKILL.md +45 -0
  1045. package/skills/skills/graph-97b22f09/SKILL.md +45 -0
  1046. package/skills/skills/graph-9833cfda/SKILL.md +45 -0
  1047. package/skills/skills/graph-9aa8a3f4/SKILL.md +45 -0
  1048. package/skills/skills/graph-9f6665c0/SKILL.md +45 -0
  1049. package/skills/skills/graph-a125d282/SKILL.md +45 -0
  1050. package/skills/skills/graph-a49ef4f0/SKILL.md +45 -0
  1051. package/skills/skills/graph-a5cd04ae/SKILL.md +45 -0
  1052. package/skills/skills/graph-add9a63b/SKILL.md +45 -0
  1053. package/skills/skills/graph-b00e3dc7/SKILL.md +45 -0
  1054. package/skills/skills/graph-b33a7662/SKILL.md +45 -0
  1055. package/skills/skills/graph-b76d15ee/SKILL.md +45 -0
  1056. package/skills/skills/graph-b77fa05a/SKILL.md +45 -0
  1057. package/skills/skills/graph-b912fc3b/SKILL.md +45 -0
  1058. package/skills/skills/graph-baf61b7c/SKILL.md +45 -0
  1059. package/skills/skills/graph-c1d5687b/SKILL.md +45 -0
  1060. package/skills/skills/graph-c407bbed/SKILL.md +45 -0
  1061. package/skills/skills/graph-c4676460/SKILL.md +45 -0
  1062. package/skills/skills/graph-c4a59d80/SKILL.md +45 -0
  1063. package/skills/skills/graph-c5815621/SKILL.md +45 -0
  1064. package/skills/skills/graph-ccad55f1/SKILL.md +45 -0
  1065. package/skills/skills/graph-d0677ce1/SKILL.md +45 -0
  1066. package/skills/skills/graph-d1289b39/SKILL.md +45 -0
  1067. package/skills/skills/graph-d15f39b1/SKILL.md +45 -0
  1068. package/skills/skills/graph-d40691ca/SKILL.md +45 -0
  1069. package/skills/skills/graph-d43b387a/SKILL.md +45 -0
  1070. package/skills/skills/graph-d4dd02f4/SKILL.md +45 -0
  1071. package/skills/skills/graph-d724ea18/SKILL.md +45 -0
  1072. package/skills/skills/graph-d74d36fd/SKILL.md +45 -0
  1073. package/skills/skills/graph-d9d3934c/SKILL.md +45 -0
  1074. package/skills/skills/graph-ddf563ff/SKILL.md +45 -0
  1075. package/skills/skills/graph-de00894f/SKILL.md +45 -0
  1076. package/skills/skills/graph-df1ebb63/SKILL.md +45 -0
  1077. package/skills/skills/graph-e2905c20/SKILL.md +45 -0
  1078. package/skills/skills/graph-e4f8cefd/SKILL.md +45 -0
  1079. package/skills/skills/graph-ea3150e7/SKILL.md +45 -0
  1080. package/skills/skills/graph-eb4ac7dd/SKILL.md +45 -0
  1081. package/skills/skills/graph-ee9f6dfa/SKILL.md +45 -0
  1082. package/skills/skills/graph-f055b2ea/SKILL.md +45 -0
  1083. package/skills/skills/graph-f1891287/SKILL.md +45 -0
  1084. package/skills/skills/graph-f1bb5aa1/SKILL.md +45 -0
  1085. package/skills/skills/graph-f56fa220/SKILL.md +45 -0
  1086. package/skills/skills/graph-f729034f/SKILL.md +45 -0
  1087. package/skills/skills/graph-f748a63f/SKILL.md +45 -0
  1088. package/skills/skills/graph-f8c4a59e/SKILL.md +45 -0
  1089. package/skills/skills/graph-fca3d129/SKILL.md +45 -0
  1090. package/skills/skills/graph-fd02d934/SKILL.md +45 -0
  1091. package/skills/skills/graph-fd51ece9/SKILL.md +45 -0
  1092. package/skills/skills/graph-fd6a81ab/SKILL.md +45 -0
  1093. package/skills/skills/lex-chinese-program/SKILL.md +45 -0
  1094. package/skills/skills/lex-dao-de-jing/SKILL.md +45 -0
  1095. package/skills/skills/lex-nine-chapters/SKILL.md +45 -0
  1096. package/skills/skills/net-02090d29/SKILL.md +45 -0
  1097. package/skills/skills/net-05937712/SKILL.md +45 -0
  1098. package/skills/skills/net-059d072f/SKILL.md +45 -0
  1099. package/skills/skills/net-080f6012/SKILL.md +45 -0
  1100. package/skills/skills/net-08a2fc88/SKILL.md +45 -0
  1101. package/skills/skills/net-0935edf1/SKILL.md +45 -0
  1102. package/skills/skills/net-0e7f91e4/SKILL.md +45 -0
  1103. package/skills/skills/net-0f2850e0/SKILL.md +45 -0
  1104. package/skills/skills/net-107ab486/SKILL.md +45 -0
  1105. package/skills/skills/net-111e79b0/SKILL.md +45 -0
  1106. package/skills/skills/net-126876c1/SKILL.md +45 -0
  1107. package/skills/skills/net-13eeb575/SKILL.md +45 -0
  1108. package/skills/skills/net-14102d54/SKILL.md +45 -0
  1109. package/skills/skills/net-14e9ad0d/SKILL.md +45 -0
  1110. package/skills/skills/net-184175d3/SKILL.md +45 -0
  1111. package/skills/skills/net-1da1c695/SKILL.md +45 -0
  1112. package/skills/skills/net-240a14ec/SKILL.md +45 -0
  1113. package/skills/skills/net-2784f98b/SKILL.md +45 -0
  1114. package/skills/skills/net-292ef917/SKILL.md +45 -0
  1115. package/skills/skills/net-3434e92f/SKILL.md +45 -0
  1116. package/skills/skills/net-35019e6b/SKILL.md +45 -0
  1117. package/skills/skills/net-3bbc6afb/SKILL.md +45 -0
  1118. package/skills/skills/net-3bdf9d9d/SKILL.md +45 -0
  1119. package/skills/skills/net-3dcb84d3/SKILL.md +45 -0
  1120. package/skills/skills/net-431cccf9/SKILL.md +45 -0
  1121. package/skills/skills/net-435a9f7f/SKILL.md +45 -0
  1122. package/skills/skills/net-4508101f/SKILL.md +45 -0
  1123. package/skills/skills/net-4585c9e7/SKILL.md +45 -0
  1124. package/skills/skills/net-479612a0/SKILL.md +45 -0
  1125. package/skills/skills/net-47a19838/SKILL.md +45 -0
  1126. package/skills/skills/net-4e36e1e3/SKILL.md +45 -0
  1127. package/skills/skills/net-509b8001/SKILL.md +45 -0
  1128. package/skills/skills/net-51930c5e/SKILL.md +45 -0
  1129. package/skills/skills/net-56dbd63f/SKILL.md +45 -0
  1130. package/skills/skills/net-57387462/SKILL.md +45 -0
  1131. package/skills/skills/net-5c115606/SKILL.md +45 -0
  1132. package/skills/skills/net-5d27f392/SKILL.md +45 -0
  1133. package/skills/skills/net-5f69c938/SKILL.md +45 -0
  1134. package/skills/skills/net-5fa6c13b/SKILL.md +45 -0
  1135. package/skills/skills/net-61580202/SKILL.md +45 -0
  1136. package/skills/skills/net-61926703/SKILL.md +45 -0
  1137. package/skills/skills/net-61f64fbc/SKILL.md +45 -0
  1138. package/skills/skills/net-6200f3b2/SKILL.md +45 -0
  1139. package/skills/skills/net-63c3eda3/SKILL.md +45 -0
  1140. package/skills/skills/net-66e6119b/SKILL.md +45 -0
  1141. package/skills/skills/net-68643014/SKILL.md +45 -0
  1142. package/skills/skills/net-686632aa/SKILL.md +45 -0
  1143. package/skills/skills/net-6967ff14/SKILL.md +45 -0
  1144. package/skills/skills/net-6996f499/SKILL.md +45 -0
  1145. package/skills/skills/net-6c3b02c2/SKILL.md +45 -0
  1146. package/skills/skills/net-6eb37f63/SKILL.md +45 -0
  1147. package/skills/skills/net-6f96c190/SKILL.md +45 -0
  1148. package/skills/skills/net-6fb27488/SKILL.md +45 -0
  1149. package/skills/skills/net-703559d0/SKILL.md +45 -0
  1150. package/skills/skills/net-706d2692/SKILL.md +45 -0
  1151. package/skills/skills/net-70a20e04/SKILL.md +45 -0
  1152. package/skills/skills/net-7376158c/SKILL.md +45 -0
  1153. package/skills/skills/net-74d647cb/SKILL.md +45 -0
  1154. package/skills/skills/net-74e8a576/SKILL.md +45 -0
  1155. package/skills/skills/net-7801c2c0/SKILL.md +45 -0
  1156. package/skills/skills/net-78cae54d/SKILL.md +45 -0
  1157. package/skills/skills/net-78ec0324/SKILL.md +45 -0
  1158. package/skills/skills/net-7998097c/SKILL.md +45 -0
  1159. package/skills/skills/net-7d81ae06/SKILL.md +45 -0
  1160. package/skills/skills/net-7eabbbc8/SKILL.md +45 -0
  1161. package/skills/skills/net-7ed4f2c5/SKILL.md +45 -0
  1162. package/skills/skills/net-80b56cd6/SKILL.md +45 -0
  1163. package/skills/skills/net-83447546/SKILL.md +45 -0
  1164. package/skills/skills/net-8361fe5b/SKILL.md +45 -0
  1165. package/skills/skills/net-85e3996c/SKILL.md +45 -0
  1166. package/skills/skills/net-8897d5cc/SKILL.md +45 -0
  1167. package/skills/skills/net-88ad93a6/SKILL.md +45 -0
  1168. package/skills/skills/net-8e6f359e/SKILL.md +45 -0
  1169. package/skills/skills/net-8edc4cdb/SKILL.md +45 -0
  1170. package/skills/skills/net-8f6169e9/SKILL.md +45 -0
  1171. package/skills/skills/net-91e00638/SKILL.md +45 -0
  1172. package/skills/skills/net-96c61a3c/SKILL.md +45 -0
  1173. package/skills/skills/net-99076a29/SKILL.md +45 -0
  1174. package/skills/skills/net-998f3641/SKILL.md +45 -0
  1175. package/skills/skills/net-a1d7228a/SKILL.md +45 -0
  1176. package/skills/skills/net-a74da501/SKILL.md +45 -0
  1177. package/skills/skills/net-ac57deb7/SKILL.md +45 -0
  1178. package/skills/skills/net-b22d2f2b/SKILL.md +45 -0
  1179. package/skills/skills/net-b2b29d8d/SKILL.md +45 -0
  1180. package/skills/skills/net-b2ddce5d/SKILL.md +45 -0
  1181. package/skills/skills/net-b4151e9a/SKILL.md +45 -0
  1182. package/skills/skills/net-b873d6f7/SKILL.md +45 -0
  1183. package/skills/skills/net-bd3d2d55/SKILL.md +45 -0
  1184. package/skills/skills/net-c2a3f019/SKILL.md +45 -0
  1185. package/skills/skills/net-c685b788/SKILL.md +45 -0
  1186. package/skills/skills/net-c6c1fd79/SKILL.md +45 -0
  1187. package/skills/skills/net-c74a1b5d/SKILL.md +45 -0
  1188. package/skills/skills/net-cdac702d/SKILL.md +45 -0
  1189. package/skills/skills/net-d12dff5c/SKILL.md +45 -0
  1190. package/skills/skills/net-d3747882/SKILL.md +45 -0
  1191. package/skills/skills/net-d5fefa59/SKILL.md +45 -0
  1192. package/skills/skills/net-d67ec725/SKILL.md +45 -0
  1193. package/skills/skills/net-d80c1c4c/SKILL.md +45 -0
  1194. package/skills/skills/net-d9cb43b0/SKILL.md +45 -0
  1195. package/skills/skills/net-da559517/SKILL.md +45 -0
  1196. package/skills/skills/net-db4f414e/SKILL.md +45 -0
  1197. package/skills/skills/net-dc09d67c/SKILL.md +45 -0
  1198. package/skills/skills/net-e2d185de/SKILL.md +45 -0
  1199. package/skills/skills/net-e2fc73f8/SKILL.md +45 -0
  1200. package/skills/skills/net-e33ef0c2/SKILL.md +45 -0
  1201. package/skills/skills/net-e346863c/SKILL.md +45 -0
  1202. package/skills/skills/net-e6b3389a/SKILL.md +45 -0
  1203. package/skills/skills/net-e9758fc0/SKILL.md +45 -0
  1204. package/skills/skills/net-e9a9747a/SKILL.md +45 -0
  1205. package/skills/skills/net-ea14aab8/SKILL.md +45 -0
  1206. package/skills/skills/net-eba92ac1/SKILL.md +45 -0
  1207. package/skills/skills/net-f29d91d2/SKILL.md +45 -0
  1208. package/skills/skills/net-f314dd0d/SKILL.md +45 -0
  1209. package/skills/skills/net-f332b629/SKILL.md +45 -0
  1210. package/skills/skills/net-f7df127c/SKILL.md +45 -0
  1211. package/skills/skills/net-fb9d8f5d/SKILL.md +45 -0
  1212. package/skills/skills/net-fdec2c86/SKILL.md +45 -0
  1213. package/skills/skills/os-0205cf9b/SKILL.md +45 -0
  1214. package/skills/skills/os-027dc9be/SKILL.md +45 -0
  1215. package/skills/skills/os-03c0d7d6/SKILL.md +45 -0
  1216. package/skills/skills/os-040b5505/SKILL.md +45 -0
  1217. package/skills/skills/os-06fa98ed/SKILL.md +45 -0
  1218. package/skills/skills/os-0854291c/SKILL.md +45 -0
  1219. package/skills/skills/os-0c7f14cb/SKILL.md +45 -0
  1220. package/skills/skills/os-0d855af2/SKILL.md +45 -0
  1221. package/skills/skills/os-0e87e997/SKILL.md +45 -0
  1222. package/skills/skills/os-0f8ed882/SKILL.md +45 -0
  1223. package/skills/skills/os-111ce1de/SKILL.md +45 -0
  1224. package/skills/skills/os-1234eb00/SKILL.md +45 -0
  1225. package/skills/skills/os-128f3820/SKILL.md +45 -0
  1226. package/skills/skills/os-15796db5/SKILL.md +45 -0
  1227. package/skills/skills/os-1898928a/SKILL.md +45 -0
  1228. package/skills/skills/os-192b8ca9/SKILL.md +45 -0
  1229. package/skills/skills/os-1d3bcf28/SKILL.md +45 -0
  1230. package/skills/skills/os-1f224514/SKILL.md +45 -0
  1231. package/skills/skills/os-26a4f86a/SKILL.md +45 -0
  1232. package/skills/skills/os-29c96147/SKILL.md +45 -0
  1233. package/skills/skills/os-2ea9a5ff/SKILL.md +45 -0
  1234. package/skills/skills/os-300ef22c/SKILL.md +45 -0
  1235. package/skills/skills/os-310dda5b/SKILL.md +45 -0
  1236. package/skills/skills/os-313ef4ed/SKILL.md +45 -0
  1237. package/skills/skills/os-329a2147/SKILL.md +45 -0
  1238. package/skills/skills/os-34ad4b62/SKILL.md +45 -0
  1239. package/skills/skills/os-350bc623/SKILL.md +45 -0
  1240. package/skills/skills/os-35ee1a30/SKILL.md +45 -0
  1241. package/skills/skills/os-3cd28220/SKILL.md +45 -0
  1242. package/skills/skills/os-3d84e0c9/SKILL.md +45 -0
  1243. package/skills/skills/os-3db42aac/SKILL.md +45 -0
  1244. package/skills/skills/os-3e0aff42/SKILL.md +45 -0
  1245. package/skills/skills/os-3e9405d2/SKILL.md +45 -0
  1246. package/skills/skills/os-41d14544/SKILL.md +45 -0
  1247. package/skills/skills/os-462f3ed4/SKILL.md +45 -0
  1248. package/skills/skills/os-485833fa/SKILL.md +45 -0
  1249. package/skills/skills/os-4a1cf781/SKILL.md +45 -0
  1250. package/skills/skills/os-4bf77933/SKILL.md +45 -0
  1251. package/skills/skills/os-4c14cec2/SKILL.md +45 -0
  1252. package/skills/skills/os-4f05d577/SKILL.md +45 -0
  1253. package/skills/skills/os-4f50ad0b/SKILL.md +45 -0
  1254. package/skills/skills/os-509a4596/SKILL.md +45 -0
  1255. package/skills/skills/os-512b1b6c/SKILL.md +45 -0
  1256. package/skills/skills/os-5192621b/SKILL.md +45 -0
  1257. package/skills/skills/os-55672763/SKILL.md +45 -0
  1258. package/skills/skills/os-5582bce6/SKILL.md +45 -0
  1259. package/skills/skills/os-5a096a1f/SKILL.md +45 -0
  1260. package/skills/skills/os-5ca15108/SKILL.md +45 -0
  1261. package/skills/skills/os-601663e1/SKILL.md +45 -0
  1262. package/skills/skills/os-607f1963/SKILL.md +45 -0
  1263. package/skills/skills/os-6158581b/SKILL.md +45 -0
  1264. package/skills/skills/os-62f9278b/SKILL.md +45 -0
  1265. package/skills/skills/os-63797b86/SKILL.md +45 -0
  1266. package/skills/skills/os-6a1fe224/SKILL.md +45 -0
  1267. package/skills/skills/os-6b0a68bf/SKILL.md +45 -0
  1268. package/skills/skills/os-6e5cee67/SKILL.md +45 -0
  1269. package/skills/skills/os-6fb1ff58/SKILL.md +45 -0
  1270. package/skills/skills/os-71389592/SKILL.md +45 -0
  1271. package/skills/skills/os-72e879a3/SKILL.md +45 -0
  1272. package/skills/skills/os-7598748a/SKILL.md +45 -0
  1273. package/skills/skills/os-80cc3283/SKILL.md +45 -0
  1274. package/skills/skills/os-819f3093/SKILL.md +45 -0
  1275. package/skills/skills/os-83670c2b/SKILL.md +45 -0
  1276. package/skills/skills/os-878c18b3/SKILL.md +45 -0
  1277. package/skills/skills/os-89ed7af1/SKILL.md +45 -0
  1278. package/skills/skills/os-8cb7279d/SKILL.md +45 -0
  1279. package/skills/skills/os-92276145/SKILL.md +45 -0
  1280. package/skills/skills/os-955c4d66/SKILL.md +45 -0
  1281. package/skills/skills/os-97aacf40/SKILL.md +45 -0
  1282. package/skills/skills/os-9b6ed02c/SKILL.md +45 -0
  1283. package/skills/skills/os-9c86a7a2/SKILL.md +45 -0
  1284. package/skills/skills/os-a13ce4aa/SKILL.md +45 -0
  1285. package/skills/skills/os-a568affe/SKILL.md +45 -0
  1286. package/skills/skills/os-abd48f17/SKILL.md +45 -0
  1287. package/skills/skills/os-b0416edc/SKILL.md +45 -0
  1288. package/skills/skills/os-b6509cac/SKILL.md +45 -0
  1289. package/skills/skills/os-b718657b/SKILL.md +45 -0
  1290. package/skills/skills/os-b776ade1/SKILL.md +45 -0
  1291. package/skills/skills/os-ba24fa08/SKILL.md +45 -0
  1292. package/skills/skills/os-bd1fc177/SKILL.md +45 -0
  1293. package/skills/skills/os-bda92711/SKILL.md +45 -0
  1294. package/skills/skills/os-c0fa71bd/SKILL.md +45 -0
  1295. package/skills/skills/os-c3d5cd44/SKILL.md +45 -0
  1296. package/skills/skills/os-c6b6a763/SKILL.md +45 -0
  1297. package/skills/skills/os-c7661eb1/SKILL.md +45 -0
  1298. package/skills/skills/os-c76b5a43/SKILL.md +45 -0
  1299. package/skills/skills/os-c7d35a30/SKILL.md +45 -0
  1300. package/skills/skills/os-c980a25d/SKILL.md +45 -0
  1301. package/skills/skills/os-c9f8df6e/SKILL.md +45 -0
  1302. package/skills/skills/os-cc49ef2f/SKILL.md +45 -0
  1303. package/skills/skills/os-cd9e686a/SKILL.md +45 -0
  1304. package/skills/skills/os-cfa66a1b/SKILL.md +45 -0
  1305. package/skills/skills/os-d237e500/SKILL.md +45 -0
  1306. package/skills/skills/os-d39ef086/SKILL.md +45 -0
  1307. package/skills/skills/os-d4f9e813/SKILL.md +45 -0
  1308. package/skills/skills/os-d97915c0/SKILL.md +45 -0
  1309. package/skills/skills/os-da0aadde/SKILL.md +45 -0
  1310. package/skills/skills/os-da482caf/SKILL.md +45 -0
  1311. package/skills/skills/os-dd4ff45e/SKILL.md +45 -0
  1312. package/skills/skills/os-de0556c5/SKILL.md +45 -0
  1313. package/skills/skills/os-e0ad3364/SKILL.md +45 -0
  1314. package/skills/skills/os-e7612c68/SKILL.md +45 -0
  1315. package/skills/skills/os-ea444e45/SKILL.md +45 -0
  1316. package/skills/skills/os-ea6e7e0b/SKILL.md +45 -0
  1317. package/skills/skills/os-ebc34d83/SKILL.md +45 -0
  1318. package/skills/skills/os-ecbebbe3/SKILL.md +45 -0
  1319. package/skills/skills/os-ecfceae7/SKILL.md +45 -0
  1320. package/skills/skills/os-ed8de3a3/SKILL.md +45 -0
  1321. package/skills/skills/os-f69c0b08/SKILL.md +45 -0
  1322. package/skills/skills/os-f6ae6205/SKILL.md +45 -0
  1323. package/skills/skills/os-f9bf8dd4/SKILL.md +45 -0
  1324. package/skills/skills/os-fcdd828d/SKILL.md +45 -0
  1325. package/skills/skills/pylang-01b23f80/SKILL.md +45 -0
  1326. package/skills/skills/pylang-074fd698/SKILL.md +45 -0
  1327. package/skills/skills/pylang-0b490bb2/SKILL.md +45 -0
  1328. package/skills/skills/pylang-0ca7f08b/SKILL.md +45 -0
  1329. package/skills/skills/pylang-10ce3e91/SKILL.md +45 -0
  1330. package/skills/skills/pylang-15f76c64/SKILL.md +45 -0
  1331. package/skills/skills/pylang-1703046f/SKILL.md +45 -0
  1332. package/skills/skills/pylang-1aa3e939/SKILL.md +45 -0
  1333. package/skills/skills/pylang-1bed54cf/SKILL.md +45 -0
  1334. package/skills/skills/pylang-1dd35612/SKILL.md +45 -0
  1335. package/skills/skills/pylang-24273d7b/SKILL.md +45 -0
  1336. package/skills/skills/pylang-2853f59f/SKILL.md +45 -0
  1337. package/skills/skills/pylang-2a6bc16e/SKILL.md +45 -0
  1338. package/skills/skills/pylang-2ae78997/SKILL.md +45 -0
  1339. package/skills/skills/pylang-2bc88f4c/SKILL.md +45 -0
  1340. package/skills/skills/pylang-31f5b8db/SKILL.md +45 -0
  1341. package/skills/skills/pylang-36d178bc/SKILL.md +45 -0
  1342. package/skills/skills/pylang-38600583/SKILL.md +45 -0
  1343. package/skills/skills/pylang-38e8f9ff/SKILL.md +45 -0
  1344. package/skills/skills/pylang-395085ca/SKILL.md +45 -0
  1345. package/skills/skills/pylang-399b317e/SKILL.md +45 -0
  1346. package/skills/skills/pylang-39c72c78/SKILL.md +45 -0
  1347. package/skills/skills/pylang-3a659480/SKILL.md +45 -0
  1348. package/skills/skills/pylang-482be62b/SKILL.md +45 -0
  1349. package/skills/skills/pylang-486a1e94/SKILL.md +45 -0
  1350. package/skills/skills/pylang-49026041/SKILL.md +45 -0
  1351. package/skills/skills/pylang-4963b28a/SKILL.md +45 -0
  1352. package/skills/skills/pylang-4af9140e/SKILL.md +45 -0
  1353. package/skills/skills/pylang-4ca283f2/SKILL.md +45 -0
  1354. package/skills/skills/pylang-4ddf31f3/SKILL.md +45 -0
  1355. package/skills/skills/pylang-50614726/SKILL.md +45 -0
  1356. package/skills/skills/pylang-5102c069/SKILL.md +45 -0
  1357. package/skills/skills/pylang-521b1bf8/SKILL.md +45 -0
  1358. package/skills/skills/pylang-5880b7a1/SKILL.md +45 -0
  1359. package/skills/skills/pylang-61a9102d/SKILL.md +45 -0
  1360. package/skills/skills/pylang-621123dd/SKILL.md +45 -0
  1361. package/skills/skills/pylang-642cd625/SKILL.md +45 -0
  1362. package/skills/skills/pylang-65ca79b7/SKILL.md +45 -0
  1363. package/skills/skills/pylang-672df225/SKILL.md +45 -0
  1364. package/skills/skills/pylang-67d3368e/SKILL.md +45 -0
  1365. package/skills/skills/pylang-6be54340/SKILL.md +45 -0
  1366. package/skills/skills/pylang-70b2006f/SKILL.md +45 -0
  1367. package/skills/skills/pylang-70b215f1/SKILL.md +45 -0
  1368. package/skills/skills/pylang-730c3fe4/SKILL.md +45 -0
  1369. package/skills/skills/pylang-733c1286/SKILL.md +45 -0
  1370. package/skills/skills/pylang-79845f4d/SKILL.md +45 -0
  1371. package/skills/skills/pylang-7c4cc6f8/SKILL.md +45 -0
  1372. package/skills/skills/pylang-7c7193ad/SKILL.md +45 -0
  1373. package/skills/skills/pylang-7d86ab5d/SKILL.md +45 -0
  1374. package/skills/skills/pylang-7df8ca78/SKILL.md +45 -0
  1375. package/skills/skills/pylang-8182681d/SKILL.md +45 -0
  1376. package/skills/skills/pylang-81ad40ee/SKILL.md +45 -0
  1377. package/skills/skills/pylang-8283d7c0/SKILL.md +45 -0
  1378. package/skills/skills/pylang-82b73f3d/SKILL.md +45 -0
  1379. package/skills/skills/pylang-8404bbde/SKILL.md +45 -0
  1380. package/skills/skills/pylang-8584040d/SKILL.md +45 -0
  1381. package/skills/skills/pylang-85d8617b/SKILL.md +45 -0
  1382. package/skills/skills/pylang-886935a3/SKILL.md +45 -0
  1383. package/skills/skills/pylang-88ab2f96/SKILL.md +45 -0
  1384. package/skills/skills/pylang-8b6f071e/SKILL.md +45 -0
  1385. package/skills/skills/pylang-8d6ec58a/SKILL.md +45 -0
  1386. package/skills/skills/pylang-8fe98252/SKILL.md +45 -0
  1387. package/skills/skills/pylang-9018c39a/SKILL.md +45 -0
  1388. package/skills/skills/pylang-91277748/SKILL.md +45 -0
  1389. package/skills/skills/pylang-943b9dcb/SKILL.md +45 -0
  1390. package/skills/skills/pylang-961e9e43/SKILL.md +45 -0
  1391. package/skills/skills/pylang-962954d9/SKILL.md +45 -0
  1392. package/skills/skills/pylang-9dbd8e2b/SKILL.md +45 -0
  1393. package/skills/skills/pylang-a02eac31/SKILL.md +45 -0
  1394. package/skills/skills/pylang-a4d3d7b1/SKILL.md +45 -0
  1395. package/skills/skills/pylang-a7c3d0e2/SKILL.md +45 -0
  1396. package/skills/skills/pylang-a88db70d/SKILL.md +45 -0
  1397. package/skills/skills/pylang-ab7dddc2/SKILL.md +45 -0
  1398. package/skills/skills/pylang-ac2a4b38/SKILL.md +45 -0
  1399. package/skills/skills/pylang-afaf67c0/SKILL.md +45 -0
  1400. package/skills/skills/pylang-b00660e6/SKILL.md +45 -0
  1401. package/skills/skills/pylang-b4d7616d/SKILL.md +45 -0
  1402. package/skills/skills/pylang-b67b1878/SKILL.md +45 -0
  1403. package/skills/skills/pylang-b8040e1c/SKILL.md +45 -0
  1404. package/skills/skills/pylang-b880c6c6/SKILL.md +45 -0
  1405. package/skills/skills/pylang-b8d45f76/SKILL.md +45 -0
  1406. package/skills/skills/pylang-ba956e52/SKILL.md +45 -0
  1407. package/skills/skills/pylang-bb18b1f9/SKILL.md +45 -0
  1408. package/skills/skills/pylang-bb46f3f2/SKILL.md +45 -0
  1409. package/skills/skills/pylang-be55a094/SKILL.md +45 -0
  1410. package/skills/skills/pylang-beb47b63/SKILL.md +45 -0
  1411. package/skills/skills/pylang-c017681a/SKILL.md +45 -0
  1412. package/skills/skills/pylang-c1317cd9/SKILL.md +45 -0
  1413. package/skills/skills/pylang-c36fabf7/SKILL.md +45 -0
  1414. package/skills/skills/pylang-c42465ec/SKILL.md +45 -0
  1415. package/skills/skills/pylang-c5c76a12/SKILL.md +45 -0
  1416. package/skills/skills/pylang-c910ad31/SKILL.md +45 -0
  1417. package/skills/skills/pylang-ca9332cf/SKILL.md +45 -0
  1418. package/skills/skills/pylang-cce90fa0/SKILL.md +45 -0
  1419. package/skills/skills/pylang-cd4234a5/SKILL.md +45 -0
  1420. package/skills/skills/pylang-cf0fca1c/SKILL.md +45 -0
  1421. package/skills/skills/pylang-d2001e1f/SKILL.md +45 -0
  1422. package/skills/skills/pylang-d616eb28/SKILL.md +45 -0
  1423. package/skills/skills/pylang-d8962e66/SKILL.md +45 -0
  1424. package/skills/skills/pylang-db6214cd/SKILL.md +45 -0
  1425. package/skills/skills/pylang-dcde3040/SKILL.md +45 -0
  1426. package/skills/skills/pylang-dfad3dba/SKILL.md +45 -0
  1427. package/skills/skills/pylang-dfd5aac2/SKILL.md +45 -0
  1428. package/skills/skills/pylang-e1aa3818/SKILL.md +45 -0
  1429. package/skills/skills/pylang-e476915b/SKILL.md +45 -0
  1430. package/skills/skills/pylang-e88e31fd/SKILL.md +45 -0
  1431. package/skills/skills/pylang-ecd569d2/SKILL.md +45 -0
  1432. package/skills/skills/pylang-ecf27e0c/SKILL.md +45 -0
  1433. package/skills/skills/pylang-f124f0e6/SKILL.md +45 -0
  1434. package/skills/skills/pylang-f127a8d1/SKILL.md +45 -0
  1435. package/skills/skills/pylang-f2d6ec27/SKILL.md +45 -0
  1436. package/skills/skills/pylang-f2f40090/SKILL.md +45 -0
  1437. package/skills/skills/pylang-f4aa9e65/SKILL.md +45 -0
  1438. package/skills/skills/pylang-f4f820d4/SKILL.md +45 -0
  1439. package/skills/skills/pylang-f5b34833/SKILL.md +45 -0
  1440. package/skills/skills/pylang-f6ebb66e/SKILL.md +45 -0
  1441. package/skills/skills/pylang-f78bdcd7/SKILL.md +45 -0
  1442. package/skills/skills/pylang-f92bc49b/SKILL.md +45 -0
  1443. package/skills/skills/pylang-fd7595f0/SKILL.md +45 -0
  1444. package/skills/skills/pylang-fda87aa1/SKILL.md +45 -0
  1445. package/skills/skills/vm-arithmetic/SKILL.md +45 -0
  1446. package/skills/skills/vm-array-ops/SKILL.md +45 -0
  1447. package/skills/skills/vm-closure-call/SKILL.md +45 -0
  1448. package/skills/skills/vm-closure-create/SKILL.md +45 -0
  1449. package/skills/skills/vm-compare/SKILL.md +45 -0
  1450. package/skills/skills/vm-cond-jump/SKILL.md +45 -0
  1451. package/skills/skills/vm-cond-space/SKILL.md +45 -0
  1452. package/skills/skills/vm-exception/SKILL.md +45 -0
  1453. package/skills/skills/vm-func-call/SKILL.md +45 -0
  1454. package/skills/skills/vm-loop-run/SKILL.md +45 -0
  1455. package/skills/skills/vm-profiling/SKILL.md +45 -0
  1456. package/skills/skills/vm-refcount/SKILL.md +45 -0
  1457. package/skills/skills/vm-run-loop/SKILL.md +45 -0
  1458. package/skills/skills/vm-short-circuit/SKILL.md +45 -0
  1459. package/skills/skills/vm-stack-guard/SKILL.md +45 -0
  1460. package/skills/skills/vm-stack-ops/SKILL.md +45 -0
  1461. package/skills/skills/vm-trust-accum/SKILL.md +45 -0
  1462. package/src/bridge.ts +7 -7
  1463. package/src/hooks.ts +78 -27
  1464. package/src/index.ts +246 -66
  1465. package/src/lib/datapath.ts +112 -0
  1466. package/src/lib/mdcg_client.ts +329 -0
  1467. package/src/lib/roleplay_web.ts +932 -0
  1468. package/src/{llm_adapter.ts → lib/whitebox_llm.ts} +13 -7
  1469. package/src/tools.ts +41 -55
  1470. /package/src/{mutual.ts → lib/mutual.ts} +0 -0
@@ -0,0 +1,2766 @@
1
+ # -*- coding: utf-8 -*-
2
+ """python_code_units.py · Mini-Python 语言机制白箱单元库(第六阶段 P 线·白箱自举)
3
+ 设计者指令:7 终极目标 + 7 初级复现项目都是白箱自举后验证编程能力的项目——
4
+ P 线 Mini-Python 由白箱自己实现(code_compose 机制),外部只校准。
5
+ mini_python.py 定位为校准参考实现(语义基准)。
6
+ 单元:{任务 → 代码模式模板 + 验证样例 + 校准基准}——语言机制(词法/优先级/
7
+ 求值/逻辑/环境/栈机)逐一白箱化。
8
+ """
9
+ import sys
10
+ sys.stdout.reconfigure(encoding='utf-8')
11
+
12
+ # 任务 → 代码模式 + 验证样例(白箱生成的自校验基准)
13
+ PYTHON_UNITS = {
14
+ "词法-记号化": {
15
+ "task": "词法分析",
16
+ "pattern": (
17
+ "def tokenize(src):\n"
18
+ " # 生效条件:参数 src 合法\n"
19
+ " # 子功能:① 调用 len;② 调用 SyntaxError;③ 调用 float\n"
20
+ " # 执行:循环迭代;顺序调用\n"
21
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
22
+ " # 字符流 → token 列表(数字/运算符/括号)——Mini-Python 词法\n"
23
+ " import re\n"
24
+ " tokens, i = [], 0\n"
25
+ " while i < len(src):\n"
26
+ " if src[i].isdigit():\n"
27
+ " j = i\n"
28
+ " while j < len(src) and (src[j].isdigit() or src[j] == '.'):\n"
29
+ " j += 1\n"
30
+ " text = src[i:j]\n"
31
+ " tokens.append(('NUMBER', float(text) if '.' in text else int(text)))\n"
32
+ " i = j\n"
33
+ " elif src[i] in '+-*/%()':\n"
34
+ " tokens.append(('OP', src[i]))\n"
35
+ " i += 1\n"
36
+ " elif src[i].isspace():\n"
37
+ " i += 1\n"
38
+ " else:\n"
39
+ " raise SyntaxError('未知字符: ' + src[i])\n"
40
+ " tokens.append(('EOF', ''))\n"
41
+ " return tokens\n"),
42
+ "cases": [("2+3", [("NUMBER", 2), ("OP", "+"), ("NUMBER", 3), ("EOF", "")]),
43
+ ("3.5*2", [("NUMBER", 3.5), ("OP", "*"), ("NUMBER", 2), ("EOF", "")]),
44
+ ("(1)", [("OP", "("), ("NUMBER", 1), ("OP", ")"), ("EOF", "")])],
45
+ "params": [],
46
+ "calibration": "对照:mini_python.py tokenize(数字含小数/运算符/括号)",
47
+ },
48
+ "语法-优先级": {
49
+ "task": "优先级计算",
50
+ "pattern": (
51
+ "def precedence(expr):\n"
52
+ " # 生效条件:op ∈ {*, +, -, /}\n"
53
+ " # 子功能:① op 分支处理\n"
54
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
55
+ " # 不适用条件:op 非 {*, +, -, /} 时\n"
56
+ " # 表达式优先级求值(2+3*4=14;括号最高)——Mini-Python 语法\n"
57
+ " def parse(i, min_prec):\n"
58
+ " if expr[i] == '(':\n"
59
+ " val, i = parse(i + 1, 0)\n"
60
+ " i += 1 # 跳过 ')'\n"
61
+ " else:\n"
62
+ " val = 0\n"
63
+ " j = i\n"
64
+ " while j < len(expr) and expr[j].isdigit():\n"
65
+ " val = val * 10 + int(expr[j])\n"
66
+ " j += 1\n"
67
+ " i = j\n"
68
+ " prec = {'+': 1, '-': 1, '*': 2, '/': 2, '**': 3}\n"
69
+ " while i < len(expr) and expr[i] in prec and prec[expr[i]] >= min_prec:\n"
70
+ " op = expr[i]\n"
71
+ " right, i = parse(i + 1, prec[op] + 1)\n"
72
+ " if op == '+':\n"
73
+ " val += right\n"
74
+ " elif op == '-':\n"
75
+ " val -= right\n"
76
+ " elif op == '*':\n"
77
+ " val *= right\n"
78
+ " elif op == '/':\n"
79
+ " val /= right\n"
80
+ " return val, i\n"
81
+ " return parse(0, 0)[0]\n"),
82
+ "cases": [("2+3*4", 14), ("(2+3)*4", 20), ("10-3*2", 4), ("2+3+4", 9)],
83
+ "params": [],
84
+ "calibration": "对照:CPython 优先级(乘除高于加减,括号最高)",
85
+ },
86
+ "求值-逻辑短路": {
87
+ "task": "逻辑短路",
88
+ "pattern": (
89
+ "def logic_eval(expr, values):\n"
90
+ " # 生效条件:参数 expr/values 合法\n"
91
+ " # 子功能:① 调用 truthy\n"
92
+ " # 执行:顺序调用\n"
93
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
94
+ " # or/and 短路 + 返回操作数(Python 语义:0 or 5 → 5)\n"
95
+ " def truthy(v):\n"
96
+ " return v is not None and v is not False and v != 0\n"
97
+ " left = values[expr[0]]\n"
98
+ " if expr[1] == 'or':\n"
99
+ " return left if truthy(left) else values[expr[2]]\n"
100
+ " if expr[1] == 'and':\n"
101
+ " return values[expr[2]] if truthy(left) else left\n"
102
+ " return None\n"),
103
+ "cases": [((("a", "or", "b"), {"a": 1, "b": 0}), 1),
104
+ ((("a", "or", "b"), {"a": 0, "b": 5}), 5),
105
+ ((("a", "and", "b"), {"a": 0, "b": 5}), 0),
106
+ ((("a", "and", "b"), {"a": 2, "b": 3}), 3)],
107
+ "params": [],
108
+ "calibration": "对照:Python 语义——or/and 返回操作数 + 短路",
109
+ },
110
+ "环境-作用域链": {
111
+ "task": "作用域环境",
112
+ "pattern": (
113
+ "class Env:\n"
114
+ " # 变量环境(作用域链):局部 → 父环境(Mini-Python 环境)\n"
115
+ " # 生效条件:parent 为父环境实例或 None\n"
116
+ " # 子功能:① 构造变量表 ② get 沿链查询 ③ set 本层写入\n"
117
+ " # 执行:变量表 + 父链回溯(以名举实)\n"
118
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
119
+ " def __init__(self, parent=None):\n"
120
+ " # 构造:创建变量表并挂接父环境\n"
121
+ " self.vars = {}\n"
122
+ " self.parent = parent\n"
123
+ " def get(self, name):\n"
124
+ " # 查询:本层无则沿父环境链向上查找,未定义抛错(以名举实)\n"
125
+ " if name in self.vars:\n"
126
+ " return self.vars[name]\n"
127
+ " if self.parent:\n"
128
+ " return self.parent.get(name)\n"
129
+ " raise NameError(name + ' 未定义')\n"
130
+ " def set(self, name, value):\n"
131
+ " # 写入:设置本层变量(名实绑定)\n"
132
+ " self.vars[name] = value\n"
133
+ "def env_scope():\n"
134
+ " # 生效条件:参数 输入 合法\n"
135
+ " # 子功能:① 调用 Env\n"
136
+ " # 执行:顺序调用\n"
137
+ " # 演示:嵌套环境——内层可读外层变量(作用域链语义)\n"
138
+ " g = Env()\n"
139
+ " g.set('x', 1)\n"
140
+ " l = Env(g)\n"
141
+ " l.set('y', 2)\n"
142
+ " return (l.get('x'), l.get('y'))\n"),
143
+ "cases": [("call", (1, 2))],
144
+ "params": [],
145
+ "calibration": "对照:mini_python.py Env(父链作用域:局部找不到向上查找)",
146
+ },
147
+ "栈机-字节码执行": {
148
+ "task": "栈机执行",
149
+ "pattern": (
150
+ "def vm_exec(code):\n"
151
+ " # 生效条件:op ∈ {ADD, MUL, PUSH, SUB}\n"
152
+ " # 子功能:① op 分支处理\n"
153
+ " # 执行:按 op 分派;循环迭代\n"
154
+ " # 不适用条件:op 非 {ADD, MUL, PUSH, SUB} 时\n"
155
+ " # 字节码栈机雏形(PUSH/ADD/SUB/MUL)——Mini-Python VM\n"
156
+ " stack = []\n"
157
+ " for op, arg in code:\n"
158
+ " if op == 'PUSH':\n"
159
+ " stack.append(arg)\n"
160
+ " elif op == 'ADD':\n"
161
+ " b, a = stack.pop(), stack.pop()\n"
162
+ " stack.append(a + b)\n"
163
+ " elif op == 'SUB':\n"
164
+ " b, a = stack.pop(), stack.pop()\n"
165
+ " stack.append(a - b)\n"
166
+ " elif op == 'MUL':\n"
167
+ " b, a = stack.pop(), stack.pop()\n"
168
+ " stack.append(a * b)\n"
169
+ " return stack[-1] if stack else None\n"),
170
+ "cases": [(([("PUSH", 2), ("PUSH", 3), ("PUSH", 4), ("MUL", None), ("ADD", None)],), 14),
171
+ (([("PUSH", 10), ("PUSH", 3), ("SUB", None)],), 7)],
172
+ "params": [],
173
+ "calibration": "对照:mini_python.py VM 栈机(指令→栈操作)",
174
+ },
175
+ "求值-控制流": {
176
+ "task": "控制流",
177
+ "pattern": (
178
+ "def run_stmts(stmts, env):\n"
179
+ " # 生效条件:k ∈ {assign, if, while}\n"
180
+ " # 子功能:1 k 分支处理\n"
181
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
182
+ " # 不适用条件:k 非 {assign, if, while} 时\n"
183
+ " # 语句执行器:assign/if/while(简化 AST——Mini-Python 控制流语义)\n"
184
+ " i = 0\n"
185
+ " while i < len(stmts):\n"
186
+ " s = stmts[i]\n"
187
+ " k = s[0]\n"
188
+ " if k == 'assign':\n"
189
+ " env[s[1]] = s[2]\n"
190
+ " i += 1\n"
191
+ " elif k == 'if':\n"
192
+ " cond = s[1] if isinstance(s[1], bool) else env.get(s[1], False)\n"
193
+ " branch = s[2] if cond else s[3]\n"
194
+ " run_stmts(branch, env)\n"
195
+ " i += 1\n"
196
+ " elif k == 'while':\n"
197
+ " guard = 0\n"
198
+ " cond = s[1] if isinstance(s[1], bool) else env.get(s[1], False)\n"
199
+ " while cond and guard < 1000:\n"
200
+ " run_stmts(s[2], env)\n"
201
+ " cond = s[1] if isinstance(s[1], bool) else env.get(s[1], False)\n"
202
+ " guard += 1\n"
203
+ " i += 1\n"
204
+ " return env\n"),
205
+ "cases": [(([("assign", "x", 5), ("if", True, [("assign", "y", 1)], [("assign", "y", 0)])], {}),
206
+ {"x": 5, "y": 1}),
207
+ (([("assign", "x", 5), ("if", False, [("assign", "y", 1)], [("assign", "y", 0)])], {}),
208
+ {"x": 5, "y": 0}),
209
+ (([("assign", "go", True), ("while", "go", [("assign", "go", False)])], {}),
210
+ {"go": False})],
211
+ "params": [],
212
+ "calibration": "对照:mini_python.py exec_stmt(assign/if/while 语义)",
213
+ },
214
+ "函数-定义调用": {
215
+ "task": "函数机制",
216
+ "pattern": (
217
+ "def make_function(params, body, def_env):\n"
218
+ " # 生效条件:参数 params/body/def_env 合法\n"
219
+ " # 子功能:① 主体逻辑执行\n"
220
+ " # 执行:顺序执行\n"
221
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
222
+ " # 函数对象:参数 + body + 定义环境(闭包基础)\n"
223
+ " return ('func', params, body, def_env)\n"
224
+ "def call_function(f, args, env):\n"
225
+ " # 调用:局部环境(父=定义环境)+ 参数绑定 + 执行 body(return 值)\n"
226
+ " _, params, body, def_env = f\n"
227
+ " local = dict(def_env)\n"
228
+ " for p, a in zip(params, args):\n"
229
+ " local[p] = a\n"
230
+ " result = None\n"
231
+ " for s in body:\n"
232
+ " if s[0] == 'return':\n"
233
+ " result = s[1]\n"
234
+ " break\n"
235
+ " return result\n"),
236
+ "cases": [((["a", "b"], [("return", 7)], {}), ("func", ["a", "b"], [("return", 7)], {}))],
237
+ "params": [],
238
+ "calibration": "对照:mini_python.py 函数对象(参数+body+定义环境)与 call 调用(局部环境+参数绑定)",
239
+ },
240
+ "求值-闭包": {
241
+ "task": "闭包机制",
242
+ "pattern": (
243
+ "def closure_adder(n):\n"
244
+ " # 生效条件:参数 n 合法\n"
245
+ " # 子功能:① 主体逻辑执行\n"
246
+ " # 执行:顺序执行\n"
247
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
248
+ " # 闭包:内部函数捕获自由变量 n(定义环境)\n"
249
+ " def add(x):\n"
250
+ " # 调用:返回捕获值与参数之和\n"
251
+ " return x + n\n"
252
+ " return add\n"
253
+ "def closure_test():\n"
254
+ " # 演示:不同闭包各自绑定 n(闭包隔离语义)\n"
255
+ " a = closure_adder(3)\n"
256
+ " b = closure_adder(10)\n"
257
+ " return (a(1), b(1))\n"),
258
+ "cases": [("call", (4, 11))],
259
+ "params": [],
260
+ "calibration": "对照:Python 闭包语义——独立捕获(a(1)=4、b(1)=11 互不干扰)",
261
+ },
262
+ "闭包-捕获更新": {
263
+ "task": "捕获更新",
264
+ "pattern": (
265
+ "def counter_nonlocal():\n"
266
+ " # 生效条件:参数 输入 合法\n"
267
+ " # 子功能:① 主体逻辑执行\n"
268
+ " # 执行:顺序执行\n"
269
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
270
+ " # nonlocal 语义:闭包修改捕获变量(非只读)\n"
271
+ " count = 0\n"
272
+ " def inc():\n"
273
+ " # 递增:修改外层捕获变量并返回新值\n"
274
+ " nonlocal count\n"
275
+ " count += 1\n"
276
+ " return count\n"
277
+ " return inc\n"
278
+ "def closure_mutate_test():\n"
279
+ " # 演示:连续调用计数器(捕获变量持续累积)\n"
280
+ " f = counter_nonlocal()\n"
281
+ " return (f(), f(), f())\n"),
282
+ "cases": [("call", (1, 2, 3))],
283
+ "params": [],
284
+ "needs_inject": True,
285
+ "calibration": "对照:Python nonlocal——闭包内修改捕获变量(连续调用递增)",
286
+ },
287
+ "闭包-工厂": {
288
+ "task": "闭包工厂",
289
+ "pattern": (
290
+ "def make_multiplier(factor):\n"
291
+ " # 生效条件:参数 factor 合法\n"
292
+ " # 子功能:① 主体逻辑执行\n"
293
+ " # 执行:顺序执行\n"
294
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
295
+ " # 闭包工厂:返回绑定了 factor 的乘法闭包\n"
296
+ " def mul(x):\n"
297
+ " # 相乘:参数与绑定因子相乘\n"
298
+ " return x * factor\n"
299
+ " return mul\n"
300
+ "def closure_factory_test():\n"
301
+ " # 演示:工厂产出不同倍数的闭包\n"
302
+ " double = make_multiplier(2)\n"
303
+ " triple = make_multiplier(3)\n"
304
+ " return (double(5), triple(5))\n"),
305
+ "cases": [("call", (10, 15))],
306
+ "params": [],
307
+ "needs_inject": True,
308
+ "calibration": "对照:Python 闭包工厂——函数返回绑定参数的闭包(乘子工厂)",
309
+ },
310
+ "闭包-延迟绑定": {
311
+ "task": "延迟绑定",
312
+ "pattern": (
313
+ "def lazy_bindings():\n"
314
+ " # 延迟绑定陷阱(闭包延迟绑定):循环后调用闭包 → 全捕获同一最终值\n"
315
+ " # 生效条件:无(演示函数——构造循环闭包列表)\n"
316
+ " # 子功能:① 循环创建闭包 ② 循环后统一调用\n"
317
+ " # 执行:闭包捕获循环变量(最终值),调用全返同一值\n"
318
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
319
+ " funcs = []\n"
320
+ " for i in range(3):\n"
321
+ " funcs.append(lambda: i)\n"
322
+ " return [f() for f in funcs]\n"),
323
+ "cases": [("call", [2, 2, 2])],
324
+ "params": [],
325
+ "needs_inject": True,
326
+ "calibration": "对照:Python 延迟绑定——循环变量 i 闭包捕获最终值(经典陷阱:全 2 非 0,1,2)",
327
+ },
328
+ "栈机-完整执行": {
329
+ "task": "完整栈机",
330
+ "pattern": (
331
+ "def vm_exec_full(code):\n"
332
+ " # 生效条件:op ∈ {ADD, CMP_GT, JUMP_IF_FALSE, MUL, PUSH}\n"
333
+ " # 子功能:① op 分支处理\n"
334
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
335
+ " # 不适用条件:op 非 {ADD, CMP_GT, JUMP_IF_FALSE, MUL, PUSH} 时\n"
336
+ " # 栈机扩展:比较 CMP_GT + 条件跳转 JUMP_IF_FALSE(if 语义)\n"
337
+ " stack, ip = [], 0\n"
338
+ " while ip < len(code):\n"
339
+ " op, arg = code[ip]\n"
340
+ " ip += 1\n"
341
+ " if op == 'PUSH':\n"
342
+ " stack.append(arg)\n"
343
+ " elif op == 'ADD':\n"
344
+ " b, a = stack.pop(), stack.pop()\n"
345
+ " stack.append(a + b)\n"
346
+ " elif op == 'MUL':\n"
347
+ " b, a = stack.pop(), stack.pop()\n"
348
+ " stack.append(a * b)\n"
349
+ " elif op == 'CMP_GT':\n"
350
+ " b, a = stack.pop(), stack.pop()\n"
351
+ " stack.append(a > b)\n"
352
+ " elif op == 'JUMP_IF_FALSE':\n"
353
+ " if not stack.pop():\n"
354
+ " ip = arg\n"
355
+ " return stack\n"),
356
+ "cases": [(([("PUSH", 5), ("PUSH", 3), ("CMP_GT", None), ("JUMP_IF_FALSE", 6),
357
+ ("PUSH", 1)],), [1]),
358
+ (([("PUSH", 3), ("PUSH", 5), ("CMP_GT", None), ("JUMP_IF_FALSE", 5),
359
+ ("PUSH", 1)],), [])],
360
+ "params": [],
361
+ "calibration": "对照:mini_python.py VM(比较+条件跳转——if 的栈机形态)",
362
+ },
363
+ "数据结构-列表字典": {
364
+ "task": "数据结构",
365
+ "pattern": (
366
+ "def list_dict_ops(op, obj, key=None, value=None):\n"
367
+ " # 生效条件:op ∈ {get, len, set}\n"
368
+ " # 子功能:① op 分支处理\n"
369
+ " # 执行:按 op 分派;顺序调用\n"
370
+ " # 不适用条件:op 非 {get, len, set} 时\n"
371
+ " # list/dict 语义:索引读取/写入(P5 数据结构)\n"
372
+ " if op == 'get':\n"
373
+ " return obj[key]\n"
374
+ " if op == 'set':\n"
375
+ " obj[key] = value\n"
376
+ " return obj\n"
377
+ " if op == 'len':\n"
378
+ " return len(obj)\n"
379
+ " return None\n"),
380
+ "cases": [(("get", [1, 2, 3], 1), 2),
381
+ (("get", {"甲": 1, "乙": 2}, "乙"), 2),
382
+ (("set", [1, 2, 3], 0, 9), [9, 2, 3]),
383
+ (("len", [1, 2, 3]), 3)],
384
+ "params": [],
385
+ "calibration": "对照:Python list/dict 语义(索引读写/长度)",
386
+ },
387
+ "程序-完整执行": {
388
+ "task": "完整程序",
389
+ "pattern": (
390
+ "def run_program(src, fn_run_stmts):\n"
391
+ " # 生效条件:src.splitlines 可用;raw.strip 可用\n"
392
+ " # 子功能:① 调用 fn_run_stmts;② 调用 int\n"
393
+ " # 执行:循环迭代;顺序调用\n"
394
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
395
+ " # 完整程序执行(组装:词法→语法→语句执行——P 线自举闭环)\n"
396
+ " # 简化管线:行→语句(assign/if/while/expr)→ run_stmts\n"
397
+ " import re as _re\n"
398
+ " stmts = []\n"
399
+ " for raw in src.splitlines():\n"
400
+ " line = raw.strip()\n"
401
+ " if not line or line.startswith('#'):\n"
402
+ " continue\n"
403
+ " if _re.match(r'^[A-Za-z_]\\w*\\s*=', line):\n"
404
+ " name, _, val = line.partition('=')\n"
405
+ " v = val.strip()\n"
406
+ " stmts.append(('assign', name.strip(),\n"
407
+ " int(v) if v.lstrip('-').isdigit() else v))\n"
408
+ " elif line.startswith('if '):\n"
409
+ " cond = line[3:].rstrip(':').strip()\n"
410
+ " stmts.append(('if', cond == 'True', [('assign', 't', 1)],\n"
411
+ " [('assign', 't', 0)]))\n"
412
+ " elif line.startswith('while '):\n"
413
+ " stmts.append(('while', 'go', [('assign', 'go', False)]))\n"
414
+ " env = {}\n"
415
+ " fn_run_stmts(stmts, env)\n"
416
+ " return env\n"),
417
+ "cases": [("x = 5\ny = 3\n", {"x": 5, "y": 3}),
418
+ ("x = 5\nif True:\n t = 1\n", {"x": 5, "t": 1})],
419
+ "params": [],
420
+ "needs_inject": True,
421
+ "calibration": "对照:mini_python.py run_program(词法→语法→语句执行全链路;组装白箱生成单元)",
422
+ },
423
+ "异常-抛出": {
424
+ "task": "抛出异常",
425
+ "pattern": (
426
+ "def raise_error(etype, msg):\n"
427
+ " # 生效条件:参数 etype/msg 合法\n"
428
+ " # 子功能:① 调用 etype\n"
429
+ " # 执行:顺序调用\n"
430
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
431
+ " # raise 语义:构造异常对象并抛出(Mini-Python 错误处理)\n"
432
+ " raise etype(msg)\n"),
433
+ "cases": [("call", ("raised", "测试错误"))],
434
+ "params": [],
435
+ "needs_inject": True,
436
+ "calibration": "对照:Python raise(构造异常实例并抛出)",
437
+ },
438
+ "异常-捕获": {
439
+ "task": "捕获异常",
440
+ "pattern": (
441
+ "def try_except(etype, handler, risky):\n"
442
+ " # 异常捕获(try/except):尝试 risky(),抛 etype 异常 → handler(err)\n"
443
+ " # 生效条件:risky 为可调用;etype 为异常类型;handler 为异常处理器\n"
444
+ " # 子功能:① 尝试执行 ② 捕获指定异常 ③ 转交处理器\n"
445
+ " # 执行:try risky() → except etype → handler(err)\n"
446
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
447
+ " try:\n"
448
+ " return ('ok', risky())\n"
449
+ " except etype as err:\n"
450
+ " return ('caught', handler(err))\n"),
451
+ "cases": [("call", ('caught', '处理:除以零'))],
452
+ "params": [],
453
+ "needs_inject": True,
454
+ "calibration": "对照:Python try/except(异常匹配 etype → 处理器;无异常 → ok)",
455
+ },
456
+ "异常-传播": {
457
+ "task": "异常传播",
458
+ "pattern": (
459
+ "def propagate(call_chain, etype, msg):\n"
460
+ " # 生效条件:参数 call_chain/etype/msg 合法\n"
461
+ " # 子功能:① 调用 etype;② 调用 inner;③ 调用 mid\n"
462
+ " # 执行:顺序调用\n"
463
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
464
+ " # 异常传播:内层函数抛错 → 中间不处理 → 外层捕获(调用栈冒泡)\n"
465
+ " def inner():\n"
466
+ " # 内层:主动抛出指定异常\n"
467
+ " raise etype(msg)\n"
468
+ " def mid():\n"
469
+ " # 中层:不捕获,异常继续向上传播\n"
470
+ " return inner() # 不捕获,向上传播\n"
471
+ " try:\n"
472
+ " mid()\n"
473
+ " except etype as err:\n"
474
+ " return ('caught_at_outer', str(err))\n"
475
+ " return ('no_catch', None)\n"),
476
+ "cases": [("call", ('caught_at_outer', '深层错误'))],
477
+ "params": [],
478
+ "needs_inject": True,
479
+ "calibration": "对照:Python 异常传播(内层 raise → 中间不处理 → 外层捕获)",
480
+ },
481
+ "生成器-yield": {
482
+ "task": "生成器",
483
+ "pattern": (
484
+ "def gen_count(n):\n"
485
+ " # 生效条件:参数 n 合法\n"
486
+ " # 子功能:① 主体逻辑执行\n"
487
+ " # 执行:循环迭代\n"
488
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
489
+ " # 生成器:yield 暂停/恢复(惰性求值,逐个产出)\n"
490
+ " i = 0\n"
491
+ " while i < n:\n"
492
+ " yield i\n"
493
+ " i += 1\n"
494
+ "def gen_test():\n"
495
+ " # 演示:收集生成器全部产出\n"
496
+ " return list(gen_count(3))\n"),
497
+ "cases": [("call", [0, 1, 2])],
498
+ "params": [],
499
+ "needs_inject": True,
500
+ "calibration": "对照:Python 生成器——yield 逐个产出(list(gen_count(3))=[0,1,2] 惰性求值)",
501
+ },
502
+ "迭代器-协议": {
503
+ "task": "迭代协议",
504
+ "pattern": (
505
+ "def iter_protocol(data):\n"
506
+ " # 生效条件:参数 data 合法\n"
507
+ " # 子功能:① 调用 iter;② 调用 next\n"
508
+ " # 执行:循环迭代;顺序调用\n"
509
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
510
+ " # 迭代器协议:__iter__/__next__(next 逐个取值,耗尽抛 StopIteration)\n"
511
+ " it = iter(data)\n"
512
+ " out = []\n"
513
+ " while True:\n"
514
+ " try:\n"
515
+ " out.append(next(it))\n"
516
+ " except StopIteration:\n"
517
+ " break\n"
518
+ " return out\n"),
519
+ "cases": [(([1, 2, 3],), [1, 2, 3]),
520
+ (([],), []),
521
+ ((['a'],), ['a'])],
522
+ "params": [],
523
+ "calibration": "对照:Python 迭代器协议(iter/next/StopIteration 耗尽语义)",
524
+ },
525
+ "推导式-列表推导": {
526
+ "task": "列表推导",
527
+ "pattern": (
528
+ "def list_comp(items, transform):\n"
529
+ " # 生效条件:参数 items/transform 合法\n"
530
+ " # 子功能:① 调用 transform\n"
531
+ " # 执行:顺序调用\n"
532
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
533
+ " # 列表推导式:[transform(x) for x in items](映射语义)\n"
534
+ " return [transform(x) for x in items]\n"),
535
+ "cases": [(([1, 2, 3], lambda x: x * 2), [2, 4, 6]),
536
+ (([], lambda x: x), [])],
537
+ "params": [],
538
+ "calibration": "对照:Python 列表推导式([f(x) for x in seq] 映射)",
539
+ },
540
+ "面向对象-类定义": {
541
+ "task": "类定义",
542
+ "pattern": (
543
+ "class Dog:\n"
544
+ " # 类定义(类):__init__ 构造 + 方法(实例属性)\n"
545
+ " # 生效条件:name 为实例名称(构造参数)\n"
546
+ " # 子功能:① 构造实例 ② speak 实例方法\n"
547
+ " # 执行:实例属性 + 方法调用\n"
548
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
549
+ " def __init__(self, name):\n"
550
+ " # 构造:保存实例名称属性\n"
551
+ " self.name = name\n"
552
+ " def speak(self):\n"
553
+ " # 发声:返回带名称的叫声(实例方法)\n"
554
+ " return self.name + ' 汪汪'\n"
555
+ "def oop_class_test():\n"
556
+ " # 生效条件:d.speak 可用\n"
557
+ " # 子功能:① 调用 Dog\n"
558
+ " # 执行:顺序调用\n"
559
+ " # 演示:构造实例并调用方法(类定义语义)\n"
560
+ " d = Dog('阿黄')\n"
561
+ " return (d.name, d.speak())\n"),
562
+ "cases": [("call", ('阿黄', '阿黄 汪汪'))],
563
+ "params": [],
564
+ "needs_inject": True,
565
+ "calibration": "对照:Python 类定义——__init__ 构造 + 实例方法(实例属性语义)",
566
+ },
567
+ "面向对象-继承": {
568
+ "task": "类继承",
569
+ "pattern": (
570
+ "class Animal:\n"
571
+ " # 父类(继承基类):动物基类(speak 接口默认实现)\n"
572
+ " # 生效条件:子类可继承并覆盖 speak\n"
573
+ " # 子功能:① speak 默认叫声\n"
574
+ " # 执行:方法继承/重写语义\n"
575
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
576
+ " def speak(self):\n"
577
+ " # 发声:父类默认叫声\n"
578
+ " return '动物'\n"
579
+ "class Cat(Animal):\n"
580
+ " # 继承:子类覆盖父类方法(方法重写)\n"
581
+ " def speak(self):\n"
582
+ " # 发声:子类覆盖为猫叫\n"
583
+ " return '喵'\n"
584
+ "def oop_inherit_test():\n"
585
+ " # 生效条件:参数 输入 合法\n"
586
+ " # 子功能:① 调用 Animal;② 调用 Cat\n"
587
+ " # 执行:顺序调用\n"
588
+ " # 演示:父类子类各自调用 speak(方法重写语义)\n"
589
+ " return (Animal().speak(), Cat().speak())\n"),
590
+ "cases": [("call", ('动物', '喵'))],
591
+ "params": [],
592
+ "needs_inject": True,
593
+ "calibration": "对照:Python 继承——子类覆盖父类方法(方法重写语义)",
594
+ },
595
+ "面向对象-多态": {
596
+ "task": "多态分发",
597
+ "pattern": (
598
+ "def poly_speak(obj):\n"
599
+ " # 生效条件:obj.speak 可用\n"
600
+ " # 子功能:① 主体逻辑执行\n"
601
+ " # 执行:顺序执行\n"
602
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
603
+ " # 多态:同一接口不同实现(运行时方法分发)\n"
604
+ " return obj.speak()\n"
605
+ "def oop_poly_test():\n"
606
+ " # 演示:不同实现对象经同一接口调用(多态分发语义)\n"
607
+ " return [poly_speak(o) for o in\n"
608
+ " (type('D', (), {'speak': lambda s: '汪'})(),\n"
609
+ " type('C', (), {'speak': lambda s: '喵'})())]\n"),
610
+ "cases": [("call", ['汪', '喵'])],
611
+ "params": [],
612
+ "needs_inject": True,
613
+ "calibration": "对照:Python 多态——同一接口不同实现(运行时方法分发)",
614
+ },
615
+ "装饰器-定义使用": {
616
+ "task": "装饰器",
617
+ "pattern": (
618
+ "def timer(fn):\n"
619
+ " # 生效条件:参数 fn 合法\n"
620
+ " # 子功能:① 调用 fn\n"
621
+ " # 执行:顺序调用\n"
622
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
623
+ " # 装饰器:包装函数(@timer 语义——增强不改原逻辑)\n"
624
+ " def wrapper(*args):\n"
625
+ " # 包装:记录调用并转发原函数\n"
626
+ " return ('timed', fn(*args))\n"
627
+ " return wrapper\n"
628
+ "def decorator_test():\n"
629
+ " # 演示:@timer 装饰后调用(装饰器增强语义)\n"
630
+ " @timer\n"
631
+ " def add(a, b):\n"
632
+ " # 被装饰函数:两数相加\n"
633
+ " return a + b\n"
634
+ " return add(2, 3)\n"),
635
+ "cases": [("call", ('timed', 5))],
636
+ "params": [],
637
+ "needs_inject": True,
638
+ "calibration": "对照:Python 装饰器(@timer 包装增强,不改原函数逻辑)",
639
+ },
640
+ "上下文-管理器": {
641
+ "task": "上下文管理器",
642
+ "pattern": (
643
+ "class Open:\n"
644
+ " # 上下文管理器(with 语义):__enter__ 获取 / __exit__ 释放\n"
645
+ " # 生效条件:用于 with 语句;__enter__ 返回资源对象\n"
646
+ " # 子功能:① 进入标记 ② 退出释放\n"
647
+ " # 执行:with 块进入/退出回调\n"
648
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
649
+ " def __enter__(self):\n"
650
+ " # 进入:标记已打开并返回自身(with 赋值目标)\n"
651
+ " self.opened = True\n"
652
+ " return self\n"
653
+ " def __exit__(self, *exc):\n"
654
+ " # 退出:标记已关闭(异常信息忽略——不吞异常)\n"
655
+ " self.opened = False\n"
656
+ " return False\n"
657
+ "def with_test():\n"
658
+ " # 生效条件:参数 输入 合法\n"
659
+ " # 子功能:① 调用 Open\n"
660
+ " # 执行:顺序调用\n"
661
+ " # 演示:with 块内打开、块外关闭(上下文管理语义)\n"
662
+ " with Open() as f:\n"
663
+ " inside = f.opened\n"
664
+ " return (inside, f.opened)\n"),
665
+ "cases": [("call", (True, False))],
666
+ "params": [],
667
+ "needs_inject": True,
668
+ "calibration": "对照:Python with 语句(__enter__/__exit__ 资源获取释放)",
669
+ },
670
+ "工具-属性访问": {
671
+ "task": "属性访问",
672
+ "pattern": (
673
+ "class User:\n"
674
+ " # 属性访问(动态属性):getattr/setattr(动态读写属性)\n"
675
+ " # 生效条件:属性名任意(含中文);内部字典存储\n"
676
+ " # 子功能:① 读拦截 ② 写拦截\n"
677
+ " # 执行:__getattr__/__setattr__ 字典读写\n"
678
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
679
+ " def __init__(self):\n"
680
+ " # 构造:初始化内部属性字典\n"
681
+ " self._d = {}\n"
682
+ " def __getattr__(self, name):\n"
683
+ " # 读拦截:未定义属性从内部字典取(缺省返回 None)\n"
684
+ " return self._d.get(name)\n"
685
+ " def __setattr__(self, name, value):\n"
686
+ " # 写拦截:普通属性存内部字典,内部字典本身走 object\n"
687
+ " if name == '_d':\n"
688
+ " object.__setattr__(self, name, value)\n"
689
+ " else:\n"
690
+ " self._d[name] = value\n"
691
+ "def attr_test():\n"
692
+ " # 生效条件:参数 输入 合法\n"
693
+ " # 子功能:① 调用 User\n"
694
+ " # 执行:顺序调用\n"
695
+ " # 演示:动态读写中文属性(属性访问语义)\n"
696
+ " u = User()\n"
697
+ " u.名字 = '灵枢'\n"
698
+ " return (u.名字, u.不存在)\n"),
699
+ "cases": [("call", ('灵枢', None))],
700
+ "params": [],
701
+ "needs_inject": True,
702
+ "calibration": "对照:Python 动态属性(__getattr__/__setattr__ 拦截读写)",
703
+ },
704
+ "类型-类型注解": {
705
+ "task": "类型注解",
706
+ "pattern": (
707
+ "def annotate(params, ret):\n"
708
+ " # 生效条件:参数 params/ret 合法\n"
709
+ " # 子功能:① 调用 dict\n"
710
+ " # 执行:顺序调用\n"
711
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
712
+ " # 类型注解:参数/返回类型标注(def f(x: int) -> str 语义)\n"
713
+ " return {'params': dict(params), 'return': ret}\n"
714
+ "def annotate_test():\n"
715
+ " # 演示:构造类型注解表\n"
716
+ " return annotate({'x': int}, str)\n"),
717
+ "cases": [("call", {'params': {'x': int}, 'return': str})],
718
+ "params": [],
719
+ "needs_inject": True,
720
+ "calibration": "对照:Python 类型注解(参数/返回类型标注——PEP 484)",
721
+ },
722
+ "类型-运行时检查": {
723
+ "task": "运行时检查",
724
+ "pattern": (
725
+ "def runtime_check(value, expected):\n"
726
+ " # 生效条件:value.is_integer 可用\n"
727
+ " # 子功能:① 调用 isinstance\n"
728
+ " # 执行:顺序调用\n"
729
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
730
+ " # 运行时类型检查:isinstance 语义(鸭子类型——结构兼容即可)\n"
731
+ " if isinstance(value, expected):\n"
732
+ " return 'ok'\n"
733
+ " if expected is int and isinstance(value, float) and value.is_integer():\n"
734
+ " return 'ok'\n"
735
+ " return 'type_error'\n"),
736
+ "cases": [((5, int), 'ok'), ((5.0, int), 'ok'),
737
+ (('5', int), 'type_error'), (([], list), 'ok')],
738
+ "params": [],
739
+ "calibration": "对照:Python 运行时类型检查(isinstance,整值浮点可当整数)",
740
+ },
741
+ "类型-协议接口": {
742
+ "task": "协议接口",
743
+ "pattern": (
744
+ "def check_protocol(obj, methods):\n"
745
+ " # 生效条件:参数 obj/methods 合法\n"
746
+ " # 子功能:① 调用 all;② 调用 hasattr\n"
747
+ " # 执行:顺序调用\n"
748
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
749
+ " # 协议:结构约定(具 __len__ 即序列协议——鸭子类型)\n"
750
+ " return all(hasattr(obj, m) for m in methods)\n"),
751
+ "cases": [(([], ['__len__', '__iter__']), True),
752
+ ((5, ['__len__']), False),
753
+ (({}, ['__len__']), True)],
754
+ "params": [],
755
+ "calibration": "对照:Python 协议——结构约定(具 __len__ 即序列协议,鸭子类型)",
756
+ },
757
+ "异步-async await": {
758
+ "task": "异步协程",
759
+ "pattern": (
760
+ "import asyncio\n"
761
+ "async def fetch(name):\n"
762
+ " # 异步协程(async/await):挂起等待(异步 I/O 语义)\n"
763
+ " # 生效条件:name 为任务名;运行于事件循环内\n"
764
+ " # 子功能:① 挂起等待 ② 返回完成结果\n"
765
+ " # 执行:await asyncio.sleep + 返回拼接\n"
766
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
767
+ " await asyncio.sleep(0)\n"
768
+ " return name + '_done'\n"
769
+ "def async_test():\n"
770
+ " # 生效条件:asyncio.run 可用\n"
771
+ " # 子功能:① 调用 fetch\n"
772
+ " # 执行:顺序调用\n"
773
+ " # 演示:运行协程并取回结果(异步任务执行语义)\n"
774
+ " return asyncio.run(fetch('任务'))\n"),
775
+ "cases": [("call", '任务_done')],
776
+ "params": [],
777
+ "needs_inject": True,
778
+ "calibration": "对照:Python async/await(协程挂起等待,异步 I/O)",
779
+ },
780
+ "异步-事件循环": {
781
+ "task": "事件循环",
782
+ "pattern": (
783
+ "def event_loop(tasks):\n"
784
+ " # 事件循环(异步事件循环):任务队列调度(依次执行——单线程并发)\n"
785
+ " # 生效条件:tasks 为可调用任务列表(无参函数)\n"
786
+ " # 子功能:① 依序取任务 ② 逐个执行 ③ 收集结果\n"
787
+ " # 执行:for 循环调用并收集返回值\n"
788
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
789
+ " done = []\n"
790
+ " for t in tasks:\n"
791
+ " done.append(t())\n"
792
+ " return done\n"),
793
+ "cases": [(([lambda: 1, lambda: 2],), [1, 2]),
794
+ (([],), [])],
795
+ "params": [],
796
+ "calibration": "对照:Python 事件循环——任务队列依次调度(单线程并发)",
797
+ },
798
+ "异步-并发任务": {
799
+ "task": "并发任务",
800
+ "pattern": (
801
+ "def gather(tasks):\n"
802
+ " # 生效条件:参数 tasks 合法\n"
803
+ " # 子功能:① 调用 t\n"
804
+ " # 执行:顺序调用\n"
805
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
806
+ " # 并发任务:asyncio.gather 语义(并行执行汇总结果)\n"
807
+ " return [t() for t in tasks]\n"),
808
+ "cases": [(([lambda: 'a', lambda: 'b'],), ['a', 'b']),
809
+ (([],), [])],
810
+ "params": [],
811
+ "calibration": "对照:Python asyncio.gather(并发任务汇总结果)",
812
+ },
813
+ "元编程-动态建类": {
814
+ "task": "动态建类",
815
+ "pattern": (
816
+ "def make_class(name, bases, attrs):\n"
817
+ " # 生效条件:k.startswith 可用\n"
818
+ " # 子功能:① 调用 type;② 调用 tuple;③ 调用 dict\n"
819
+ " # 执行:顺序调用\n"
820
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
821
+ " # 动态建类:type(name, bases, dict) 运行时创建类\n"
822
+ " # (元编程——类型即工厂,运行期定义新类型)\n"
823
+ " cls = type(name, tuple(bases), dict(attrs))\n"
824
+ " return cls.__name__, [b.__name__ for b in cls.__bases__], \\\n"
825
+ " {k: v for k, v in vars(cls).items() if not k.startswith('__')}\n"),
826
+ "cases": [(("动物", [], {"属性": "犬科"}), ("动物", ["object"], {"属性": "犬科"})),
827
+ (("狗", [object], {"叫声": "汪"}), ("狗", ["object"], {"叫声": "汪"}))],
828
+ "params": [],
829
+ "calibration": "对照:CPython type(name, bases, dict)(动态创建类;无显式基类→隐式 object 基类)",
830
+ },
831
+ "元编程-元类定制": {
832
+ "task": "元类定制",
833
+ "pattern": (
834
+ "def meta_create(name, attrs, hook):\n"
835
+ " # 生效条件:k.startswith 可用\n"
836
+ " # 子功能:① 调用 dict;② 调用 type;③ 调用 hook\n"
837
+ " # 执行:顺序调用\n"
838
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
839
+ " # 元类定制:hook 在类创建时回调(校验/注入)——元类 = 类创建钩子\n"
840
+ " final = dict(attrs)\n"
841
+ " if hook is not None:\n"
842
+ " final.update(hook(name, dict(attrs)) or {})\n"
843
+ " cls = type(name, (), final)\n"
844
+ " return cls.__name__, {k: v for k, v in vars(cls).items()\n"
845
+ " if not k.startswith('__')}\n"),
846
+ "cases": [(("狗", {"叫声": "汪"}, lambda n, a: {"科": "犬科"}),
847
+ ("狗", {"叫声": "汪", "科": "犬科"})),
848
+ (("猫", {"叫声": "喵"}, None), ("猫", {"叫声": "喵"}))],
849
+ "params": [],
850
+ "calibration": "对照:CPython metaclass __new__ 拦截类创建(校验/注入类属性)",
851
+ },
852
+ "元编程-描述符协议": {
853
+ "task": "描述符协议",
854
+ "pattern": (
855
+ "def descriptor_route(storage, desc, name, value=None):\n"
856
+ " # 生效条件:参数 storage/desc/name/value 合法\n"
857
+ " # 子功能:① 条件判定 ② 结果处理\n"
858
+ " # 执行:顺序执行\n"
859
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
860
+ " # 描述符协议:读走 __get__ 写走 __set__(property 底层机制,属性访问托管)\n"
861
+ " if value is None:\n"
862
+ " return desc['__get__'](storage, name)\n"
863
+ " desc['__set__'](storage, name, value)\n"
864
+ " return storage\n"),
865
+ "cases": [(({}, {"__get__": lambda st, n: st.get('_' + n, 25),
866
+ "__set__": lambda st, n, v: st.update({'_' + n: v})},
867
+ "温度", None), 25),
868
+ (({}, {"__get__": lambda st, n: st.get('_' + n, 25),
869
+ "__set__": lambda st, n, v: st.update({'_' + n: v})},
870
+ "温度", 30), {"_温度": 30})],
871
+ "params": [],
872
+ "calibration": "对照:CPython 描述符协议(__get__/__set__,property 与 @property 底层)",
873
+ },
874
+ "面向对象-运算符重载": {
875
+ "task": "运算符重载",
876
+ "pattern": (
877
+ "def binop_dispatch(obj, other, op):\n"
878
+ " # 生效条件:参数 obj/other/op 合法\n"
879
+ " # 子功能:① 调用 method;② 调用 isinstance;③ 调用 getattr\n"
880
+ " # 执行:顺序调用\n"
881
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
882
+ " # 运算符重载:对象方法分派(__add__/__mul__——重定义运算符行为)\n"
883
+ " method = obj.get(op) if isinstance(obj, dict) else getattr(obj, op, None)\n"
884
+ " if method is None:\n"
885
+ " return 'unsupported'\n"
886
+ " return method(other)\n"),
887
+ "cases": [(({'__add__': lambda o: o + 1}, 5, '__add__'), 6),
888
+ (({'__mul__': lambda o: o * 2}, 3, '__mul__'), 6),
889
+ (({}, 5, '__add__'), 'unsupported')],
890
+ "params": [],
891
+ "calibration": "对照:CPython 运算符重载(__add__/__mul__ dunder 分派,未定义→TypeError 语义)",
892
+ },
893
+ "数据结构-枚举": {
894
+ "task": "枚举",
895
+ "pattern": (
896
+ "def enum_resolve(members, key):\n"
897
+ " # 生效条件:参数 members/key 合法\n"
898
+ " # 子功能:① 条件判定 ② 结果处理\n"
899
+ " # 执行:循环迭代\n"
900
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
901
+ " # 枚举:名称↔值双向解析(成员表——Enum 类型语义)\n"
902
+ " if key in members:\n"
903
+ " return ('value', members[key])\n"
904
+ " for name, val in members.items():\n"
905
+ " if val == key:\n"
906
+ " return ('name', name)\n"
907
+ " return None\n"),
908
+ "cases": [(({'红': 1, '绿': 2}, '红'), ('value', 1)),
909
+ (({'红': 1, '绿': 2}, 2), ('name', '绿')),
910
+ (({'红': 1}, '蓝'), None)],
911
+ "params": [],
912
+ "calibration": "对照:CPython Enum(成员名称↔值双向访问,未知→AttributeError 语义)",
913
+ },
914
+ "工具-数据类": {
915
+ "task": "数据类",
916
+ "pattern": (
917
+ "def dataclass_init(fields, args):\n"
918
+ " # 生效条件:参数 fields/args 合法\n"
919
+ " # 子功能:① 调用 dict;② 调用 len;③ 调用 zip\n"
920
+ " # 执行:顺序调用\n"
921
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
922
+ " # 数据类:字段表 + 位置参数 → 自动 __init__ 绑定(数据类自动构造)\n"
923
+ " if len(args) != len(fields):\n"
924
+ " return 'arity_error'\n"
925
+ " return dict(zip(fields, args))\n"),
926
+ "cases": [((('名', '年龄'), ('甲', 3)), {'名': '甲', '年龄': 3}),
927
+ ((('名',), ('甲', 3)), 'arity_error'),
928
+ ((('名', '年龄'), ()), 'arity_error')],
929
+ "params": [],
930
+ "calibration": "对照:CPython dataclass(字段表自动生成 __init__,参数个数不匹配报错)",
931
+ },
932
+ "工具-正则匹配": {
933
+ "task": "正则匹配",
934
+ "pattern": (
935
+ "def regex_match(pattern, text):\n"
936
+ " # 生效条件:re.search 可用\n"
937
+ " # 子功能:① 调用 bool\n"
938
+ " # 执行:顺序调用\n"
939
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
940
+ " # 正则匹配:re.search 简化(模式在文本中是否存在)\n"
941
+ " import re\n"
942
+ " return bool(re.search(pattern, text))\n"),
943
+ "cases": [(('^ab', 'abc'), True),
944
+ (('\\d+', 'a1b'), True),
945
+ (('^xy', 'abc'), False)],
946
+ "params": [],
947
+ "calibration": "对照:CPython re.search(正则匹配,^ 锚定/\\d 数字类)",
948
+ },
949
+ "工具-日期时间": {
950
+ "task": "日期时间",
951
+ "pattern": (
952
+ "def date_add(year, month, day, days):\n"
953
+ " # 生效条件:参数 year/month/day/days 合法\n"
954
+ " # 子功能:① 条件判定 ② 结果处理\n"
955
+ " # 执行:循环迭代\n"
956
+ " # 不适用条件:month 越界(Gt)时;month 越界(Lt)时(隐式盲区:返回默认值 (-1, 12, 30) = 未知行为——不适用)\n"
957
+ " # 日期时间:日期加减天数(简化月 30 天进位——日期运算)\n"
958
+ " d = day + days\n"
959
+ " while d > 30:\n"
960
+ " d -= 30\n"
961
+ " month += 1\n"
962
+ " if month > 12:\n"
963
+ " month = 1\n"
964
+ " year += 1\n"
965
+ " while d < 1:\n"
966
+ " d += 30\n"
967
+ " month -= 1\n"
968
+ " if month < 1:\n"
969
+ " month = 12\n"
970
+ " year -= 1\n"
971
+ " return year, month, d\n"),
972
+ "cases": [((2026, 1, 1, 30), (2026, 2, 1)),
973
+ ((2026, 1, 1, 60), (2026, 3, 1)),
974
+ ((2026, 3, 1, -1), (2026, 2, 30))],
975
+ "params": [],
976
+ "calibration": "对照:CPython datetime(日期加减进位;简化 30 天月模型——1/1+30=2/1 按模型校准)",
977
+ },
978
+ "工具-JSON序列化": {
979
+ "task": "JSON序列化",
980
+ "pattern": (
981
+ "def json_roundtrip(data):\n"
982
+ " # 生效条件:json.loads 可用;json.dumps 可用\n"
983
+ " # 子功能:① 主体逻辑执行\n"
984
+ " # 执行:顺序执行\n"
985
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
986
+ " # JSON 序列化:dict ↔ 字符串往返(数据交换标准)\n"
987
+ " import json\n"
988
+ " return json.loads(json.dumps(data))\n"),
989
+ "cases": [(({'a': 1, 'b': [1, 2]},), {'a': 1, 'b': [1, 2]}),
990
+ (({'名': '甲'},), {'名': '甲'}),
991
+ (([1, 2, 3],), [1, 2, 3])],
992
+ "params": [],
993
+ "calibration": "对照:CPython json.dumps/loads(结构化数据序列化往返)",
994
+ },
995
+ "数据结构-队列栈": {
996
+ "task": "队列栈",
997
+ "pattern": (
998
+ "def deque_ops(dq, op, item=None):\n"
999
+ " # 生效条件:op ∈ {dequeue, pop, push}\n"
1000
+ " # 子功能:① op 分支处理\n"
1001
+ " # 执行:按 op 分派;顺序调用\n"
1002
+ " # 不适用条件:op 非 {dequeue, pop, push} 时\n"
1003
+ " # 队列栈:dequeue 队首出(FIFO)/ pop 栈顶出(LIFO)——双端数据结构\n"
1004
+ " if op == 'push':\n"
1005
+ " dq.append(item)\n"
1006
+ " return len(dq)\n"
1007
+ " if op == 'dequeue':\n"
1008
+ " return dq.pop(0) if dq else None\n"
1009
+ " if op == 'pop':\n"
1010
+ " return dq.pop() if dq else None\n"
1011
+ " return None\n"),
1012
+ "cases": [(([], 'push', 'a'), 1),
1013
+ (([1, 2], 'dequeue'), 1),
1014
+ (([1, 2], 'pop'), 2),
1015
+ (([], 'pop'), None)],
1016
+ "params": [],
1017
+ "calibration": "对照:collections.deque——队首 FIFO/栈顶 LIFO(双端操作)",
1018
+ },
1019
+ "工具-格式化": {
1020
+ "task": "格式化",
1021
+ "pattern": (
1022
+ "def format_template(template, values):\n"
1023
+ " # 生效条件:out.replace 可用\n"
1024
+ " # 子功能:① 调用 str\n"
1025
+ " # 执行:循环迭代;顺序调用\n"
1026
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1027
+ " # 格式化:模板 {名} 占位符填充(f-string 风格)\n"
1028
+ " out = template\n"
1029
+ " for k, v in values.items():\n"
1030
+ " out = out.replace('{' + k + '}', str(v))\n"
1031
+ " return out\n"),
1032
+ "cases": [(('你好 {名}', {'名': '甲'}), '你好 甲'),
1033
+ (('{a}-{b}', {'a': 1, 'b': 2}), '1-2'),
1034
+ (('没有占位', {}), '没有占位')],
1035
+ "params": [],
1036
+ "calibration": "对照:Python f-string({名} 占位符模板填充)",
1037
+ },
1038
+ "工具-排序键控": {
1039
+ "task": "排序键控",
1040
+ "pattern": (
1041
+ "def sort_by_key(items, key_fn):\n"
1042
+ " # 排序键控(键排序):按 key 函数排序(sorted(key=) 语义——稳定排序)\n"
1043
+ " # 生效条件:items 可迭代;key_fn 为取键函数(可调用)\n"
1044
+ " # 子功能:① 对每项取键 ② 按键稳定排序\n"
1045
+ " # 执行:sorted(items, key=key_fn)(稳定排序语义)\n"
1046
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1047
+ " return sorted(items, key=key_fn)\n"),
1048
+ "cases": [(([('b', 2), ('a', 1)], lambda x: x[1]), [('a', 1), ('b', 2)]),
1049
+ (([3, 1, 2], lambda x: -x), [3, 2, 1]),
1050
+ (([], lambda x: x), [])],
1051
+ "params": [],
1052
+ "calibration": "对照:Python sorted(key=)(按键函数稳定排序)",
1053
+ },
1054
+ "数据结构-集合运算": {
1055
+ "task": "集合运算",
1056
+ "pattern": (
1057
+ "def set_ops(a, b, op):\n"
1058
+ " # 生效条件:op ∈ {diff, intersect, union}\n"
1059
+ " # 子功能:① op 分支处理\n"
1060
+ " # 执行:按 op 分派;顺序调用\n"
1061
+ " # 不适用条件:op 非 {diff, intersect, union} 时\n"
1062
+ " # 集合运算:union 并集 / intersect 交集 / diff 差集(集合代数)\n"
1063
+ " if op == 'union':\n"
1064
+ " return sorted(set(a) | set(b))\n"
1065
+ " if op == 'intersect':\n"
1066
+ " return sorted(set(a) & set(b))\n"
1067
+ " if op == 'diff':\n"
1068
+ " return sorted(set(a) - set(b))\n"
1069
+ " return None\n"),
1070
+ "cases": [(([1, 2], [2, 3], 'union'), [1, 2, 3]),
1071
+ (([1, 2], [2, 3], 'intersect'), [2]),
1072
+ (([1, 2], [2, 3], 'diff'), [1])],
1073
+ "params": [],
1074
+ "calibration": "对照:Python set——并/交/差(集合代数运算)",
1075
+ },
1076
+ "工具-计数器": {
1077
+ "task": "计数器",
1078
+ "pattern": (
1079
+ "def counter(items):\n"
1080
+ " # 计数器(频次统计):元素频次统计(Counter 语义——频次字典)\n"
1081
+ " # 生效条件:items 为可迭代对象\n"
1082
+ " # 子功能:① 逐元素计数 ② 缺失键初始化\n"
1083
+ " # 执行:freq.get(x, 0) + 1 累积\n"
1084
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1085
+ " freq = {}\n"
1086
+ " for x in items:\n"
1087
+ " freq[x] = freq.get(x, 0) + 1\n"
1088
+ " return freq\n"),
1089
+ "cases": [((['a', 'b', 'a'],), {'a': 2, 'b': 1}),
1090
+ (([],), {}),
1091
+ (([1, 1, 1],), {1: 3})],
1092
+ "params": [],
1093
+ "calibration": "对照:collections.Counter(元素频次统计)",
1094
+ },
1095
+ "工具-分组": {
1096
+ "task": "分组",
1097
+ "pattern": (
1098
+ "def group_by(items, key_fn):\n"
1099
+ " # 生效条件:参数 items/key_fn 合法\n"
1100
+ " # 子功能:① 调用 key_fn\n"
1101
+ " # 执行:循环迭代;顺序调用\n"
1102
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1103
+ " # 分组:按 key 函数分组(groupby 语义——组字典)\n"
1104
+ " groups = {}\n"
1105
+ " for x in items:\n"
1106
+ " groups.setdefault(key_fn(x), []).append(x)\n"
1107
+ " return groups\n"),
1108
+ "cases": [(([1, 2, 3, 4], lambda x: x % 2), {1: [1, 3], 0: [2, 4]}),
1109
+ (([], lambda x: x), {}),
1110
+ (([1, 1, 2], lambda x: x), {1: [1, 1], 2: [2]})],
1111
+ "params": [],
1112
+ "calibration": "对照:itertools.groupby(按键函数分组)",
1113
+ },
1114
+ "异常-自定义异常": {
1115
+ "task": "自定义异常",
1116
+ "pattern": (
1117
+ "def exception_subclass(names, child, ancestor):\n"
1118
+ " # 生效条件:参数 names/child/ancestor 合法\n"
1119
+ " # 子功能:① 调用 dict;② 调用 set\n"
1120
+ " # 执行:循环迭代;顺序调用\n"
1121
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1122
+ " # 自定义异常:异常类层级(父→子继承,判断继承关系)\n"
1123
+ " parents = dict(names)\n"
1124
+ " cur = child\n"
1125
+ " seen = set()\n"
1126
+ " while cur is not None and cur not in seen:\n"
1127
+ " if cur == ancestor:\n"
1128
+ " return True\n"
1129
+ " seen.add(cur)\n"
1130
+ " cur = parents.get(cur)\n"
1131
+ " return False\n"),
1132
+ "cases": [(([('值错误', '异常'), ('输入错误', '值错误')],
1133
+ '输入错误', '异常'), True),
1134
+ (([('值错误', '异常')], '输入错误', '异常'), False),
1135
+ (([('值错误', '异常'), ('输入错误', '值错误')],
1136
+ '输入错误', '值错误'), True),
1137
+ (([], 'a', 'b'), False)],
1138
+ "params": [],
1139
+ "calibration": "对照:Python 自定义异常——类层级继承(子类捕获父类)",
1140
+ },
1141
+ "面向对象-组合": {
1142
+ "task": "对象组合",
1143
+ "pattern": (
1144
+ "def compose_objects(parts, op, name=None, part=None, method=None,\n"
1145
+ " arg=None):\n"
1146
+ " # 组合(对象组合·has-a 委托):对象含对象(add 添加部件 / call 转发调用部件方法——has-a 委托)\n"
1147
+ " # 生效条件:op ∈ {add, call};add 时 name/part 提供,call 时 name/method 提供\n"
1148
+ " # 子功能:① add 添加部件 ② call 转发部件方法\n"
1149
+ " # 执行:按 op 分派字典/方法调用\n"
1150
+ " # 不适用条件:op 非 {add, call} 时\n"
1151
+ " if op == 'add':\n"
1152
+ " parts[name] = part\n"
1153
+ " return name\n"
1154
+ " if op == 'call':\n"
1155
+ " p = parts.get(name)\n"
1156
+ " if p is None or method not in p:\n"
1157
+ " return 'missing'\n"
1158
+ " fn = p[method]\n"
1159
+ " return fn() if arg is None else fn(arg)\n"
1160
+ " return None\n"),
1161
+ "cases": [(({}, 'add', '引擎', {'启动': lambda: 'vroom'}), '引擎'),
1162
+ (({'引擎': {'启动': lambda: 'vroom'}}, 'call', '引擎',
1163
+ None, '启动', None), 'vroom'),
1164
+ (({}, 'call', '引擎', None, '启动', None), 'missing')],
1165
+ "params": [],
1166
+ "calibration": "对照:Python 组合——has-a 关系(对象含对象,方法委托转发)",
1167
+ },
1168
+ "工具-深拷贝": {
1169
+ "task": "深拷贝",
1170
+ "pattern": (
1171
+ "def deep_copy(obj):\n"
1172
+ " # 生效条件:参数 obj 合法\n"
1173
+ " # 子功能:① 调用 isinstance;② 调用 deep_copy\n"
1174
+ " # 执行:顺序调用\n"
1175
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1176
+ " # 深拷贝:嵌套结构完整复制(列表/字典递归——修改互不影响)\n"
1177
+ " if isinstance(obj, list):\n"
1178
+ " return [deep_copy(x) for x in obj]\n"
1179
+ " if isinstance(obj, dict):\n"
1180
+ " return {k: deep_copy(v) for k, v in obj.items()}\n"
1181
+ " return obj\n"),
1182
+ "cases": [(([[1, 2], [3]],), [[1, 2], [3]]),
1183
+ (({'a': [1, {'b': 2}]},), {'a': [1, {'b': 2}]}),
1184
+ ((5,), 5)],
1185
+ "params": [],
1186
+ "calibration": "对照:copy.deepcopy——嵌套结构递归复制(引用隔离)",
1187
+ },
1188
+ "异步-超时控制": {
1189
+ "task": "超时控制",
1190
+ "pattern": (
1191
+ "def wait_for(task_fn, timeout, time_used):\n"
1192
+ " # 生效条件:参数 task_fn/timeout/time_used 合法\n"
1193
+ " # 子功能:① 调用 task_fn\n"
1194
+ " # 执行:顺序调用\n"
1195
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1196
+ " # 超时控制:用时 ≤ 超时返回结果,超过超时取消(asyncio.wait_for)\n"
1197
+ " if time_used > timeout:\n"
1198
+ " return 'timeout'\n"
1199
+ " return task_fn()\n"),
1200
+ "cases": [((lambda: 'done', 5, 3), 'done'),
1201
+ ((lambda: 'done', 5, 6), 'timeout'),
1202
+ ((lambda: None, 0, 0), None)],
1203
+ "params": [],
1204
+ "calibration": "对照:asyncio.wait_for(超时取消/按时完成)",
1205
+ },
1206
+ "异步-任务取消": {
1207
+ "task": "任务取消",
1208
+ "pattern": (
1209
+ "def task_cancel(tasks, op, task_id=None):\n"
1210
+ " # 生效条件:op ∈ {cancel, check, start}\n"
1211
+ " # 子功能:① op 分支处理\n"
1212
+ " # 执行:按 op 分派\n"
1213
+ " # 不适用条件:op 非 {cancel, check, start} 时\n"
1214
+ " # 任务取消:start 启动 / cancel 请求取消 / check 检查状态(协作式)\n"
1215
+ " if op == 'start':\n"
1216
+ " tasks[task_id] = 'running'\n"
1217
+ " return 'running'\n"
1218
+ " if op == 'cancel':\n"
1219
+ " if task_id in tasks and tasks[task_id] == 'running':\n"
1220
+ " tasks[task_id] = 'cancelled'\n"
1221
+ " return 'cancelled'\n"
1222
+ " return 'not_running'\n"
1223
+ " if op == 'check':\n"
1224
+ " return tasks.get(task_id)\n"
1225
+ " return None\n"),
1226
+ "cases": [(({}, 'start', 't1'), 'running'),
1227
+ (({'t1': 'running'}, 'cancel', 't1'), 'cancelled'),
1228
+ (({'t1': 'done'}, 'cancel', 't1'), 'not_running'),
1229
+ (({'t1': 'cancelled'}, 'check', 't1'), 'cancelled')],
1230
+ "params": [],
1231
+ "calibration": "对照:asyncio.Task.cancel(运行中可取消,已完成不可)",
1232
+ },
1233
+ "异步-信号量": {
1234
+ "task": "异步信号量",
1235
+ "pattern": (
1236
+ "def async_semaphore(sem, op):\n"
1237
+ " # 生效条件:op ∈ {acquire, release}\n"
1238
+ " # 子功能:① op 分支处理\n"
1239
+ " # 执行:按 op 分派;顺序调用\n"
1240
+ " # 不适用条件:op 非 {acquire, release} 时\n"
1241
+ " # 异步信号量:acquire 获取(满则等待)/ release 释放(并发上限)\n"
1242
+ " if op == 'acquire':\n"
1243
+ " if sem.get('count', 0) >= sem.get('limit', 1):\n"
1244
+ " sem['waiting'] = sem.get('waiting', 0) + 1\n"
1245
+ " return 'waiting'\n"
1246
+ " sem['count'] = sem.get('count', 0) + 1\n"
1247
+ " return 'acquired'\n"
1248
+ " if op == 'release':\n"
1249
+ " if sem.get('waiting', 0) > 0:\n"
1250
+ " sem['waiting'] -= 1\n"
1251
+ " return 'handoff'\n"
1252
+ " sem['count'] = max(sem.get('count', 0) - 1, 0)\n"
1253
+ " return 'released'\n"
1254
+ " return None\n"),
1255
+ "cases": [(({'limit': 2, 'count': 0, 'waiting': 0}, 'acquire'),
1256
+ 'acquired'),
1257
+ (({'limit': 2, 'count': 2, 'waiting': 0}, 'acquire'),
1258
+ 'waiting'),
1259
+ (({'limit': 2, 'count': 2, 'waiting': 0}, 'release'),
1260
+ 'released'),
1261
+ (({'limit': 2, 'count': 2, 'waiting': 1}, 'release'),
1262
+ 'handoff')],
1263
+ "params": [],
1264
+ "calibration": "对照:asyncio.Semaphore(并发上限,满则等待/释放交接)",
1265
+ },
1266
+ "工具-映射": {
1267
+ "task": "映射",
1268
+ "pattern": (
1269
+ "def map_apply(items, fn):\n"
1270
+ " # 生效条件:参数 items/fn 合法\n"
1271
+ " # 子功能:① 调用 fn\n"
1272
+ " # 执行:顺序调用\n"
1273
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1274
+ " # 映射:函数应用到每个元素(map 语义——变换)\n"
1275
+ " return [fn(x) for x in items]\n"),
1276
+ "cases": [(([1, 2, 3], lambda x: x * 2), [2, 4, 6]),
1277
+ (([], lambda x: x), []),
1278
+ (([1, 2], lambda x: str(x)), ['1', '2'])],
1279
+ "params": [],
1280
+ "calibration": "对照:Python map(函数应用到每个元素)",
1281
+ },
1282
+ "工具-过滤": {
1283
+ "task": "过滤",
1284
+ "pattern": (
1285
+ "def filter_items(items, pred):\n"
1286
+ " # 生效条件:参数 items/pred 合法\n"
1287
+ " # 子功能:① 调用 pred\n"
1288
+ " # 执行:顺序调用\n"
1289
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1290
+ " # 过滤:条件保留元素(filter 语义——筛选)\n"
1291
+ " return [x for x in items if pred(x)]\n"),
1292
+ "cases": [(([1, 2, 3, 4], lambda x: x % 2 == 0), [2, 4]),
1293
+ (([], lambda x: True), []),
1294
+ (([1, 2], lambda x: x > 1), [2])],
1295
+ "params": [],
1296
+ "calibration": "对照:Python filter(条件筛选元素)",
1297
+ },
1298
+ "工具-归约": {
1299
+ "triggers": ["归约", "累积聚合"],
1300
+ "task": "归约",
1301
+ "pattern": (
1302
+ "def reduce_accum(items, fn, initial):\n"
1303
+ " # 生效条件:参数 items/fn/initial 合法\n"
1304
+ " # 子功能:① 调用 fn\n"
1305
+ " # 执行:循环迭代;顺序调用\n"
1306
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1307
+ " # 归约:累积聚合(reduce 语义——从左到右折叠)\n"
1308
+ " acc = initial\n"
1309
+ " for x in items:\n"
1310
+ " acc = fn(acc, x)\n"
1311
+ " return acc\n"),
1312
+ "cases": [(([1, 2, 3], lambda a, b: a + b, 0), 6),
1313
+ (([1, 2, 3], lambda a, b: a * b, 1), 6),
1314
+ (([], lambda a, b: a + b, 10), 10)],
1315
+ "params": [],
1316
+ "calibration": "对照:functools.reduce(累积聚合折叠)",
1317
+ },
1318
+ "工具-字符串拆分": {
1319
+ "task": "字符串拆分",
1320
+ "pattern": (
1321
+ "def str_split(text, sep=None):\n"
1322
+ " # 字符串拆分(split):按分隔符拆(split 语义——默认空白)\n"
1323
+ " # 生效条件:text 为字符串;sep 为分隔符或 None(默认空白拆分)\n"
1324
+ " # 子功能:① 显式分隔符拆分 ② 默认空白拆分\n"
1325
+ " # 执行:sep 非 None → text.split(sep),否则 text.split()\n"
1326
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1327
+ " return text.split(sep) if sep is not None else text.split()\n"),
1328
+ "cases": [(('a,b,c', ','), ['a', 'b', 'c']),
1329
+ (('a b c', None), ['a', 'b', 'c']),
1330
+ (('', ','), [''])],
1331
+ "params": [],
1332
+ "calibration": "对照:Python str.split(分隔符拆分,默认空白)",
1333
+ },
1334
+ "工具-字符串替换": {
1335
+ "task": "字符串替换",
1336
+ "pattern": (
1337
+ "def str_replace(text, old, new, count=None):\n"
1338
+ " # 字符串替换(replace):全部/前 n 次替换(replace 语义)\n"
1339
+ " # 生效条件:text 为字符串;old/new 为替换对;count 为次数或 None(全部)\n"
1340
+ " # 子功能:① 全部替换 ② 限量替换\n"
1341
+ " # 执行:count 给定 → text.replace(old, new, count),否则全替\n"
1342
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1343
+ " return (text.replace(old, new) if count is None\n"
1344
+ " else text.replace(old, new, count))\n"),
1345
+ "cases": [(('aaa', 'a', 'b'), 'bbb'),
1346
+ (('aaa', 'a', 'b', 2), 'bba'),
1347
+ (('abc', 'x', 'y'), 'abc')],
1348
+ "params": [],
1349
+ "calibration": "对照:Python str.replace(全部/限次替换)",
1350
+ },
1351
+ "工具-字符串判断": {
1352
+ "task": "字符串判断",
1353
+ "pattern": (
1354
+ "def str_check(text, op):\n"
1355
+ " # 生效条件:op ∈ {isdigit, isupper, startswith};text.isdigit 可用;text.startswith 可用\n"
1356
+ " # 子功能:① op 分支处理\n"
1357
+ " # 执行:按 op 分派\n"
1358
+ " # 不适用条件:op 非 {isdigit, isupper, startswith} 时\n"
1359
+ " # 字符串判断:isdigit/startswith/isupper(字符串方法族)\n"
1360
+ " if op == 'isdigit':\n"
1361
+ " return text.isdigit()\n"
1362
+ " if op == 'startswith':\n"
1363
+ " return text.startswith('0x')\n"
1364
+ " if op == 'isupper':\n"
1365
+ " return text.isupper()\n"
1366
+ " return None\n"),
1367
+ "cases": [(('123', 'isdigit'), True),
1368
+ (('0xFF', 'startswith'), True),
1369
+ (('ABC', 'isupper'), True),
1370
+ (('abc', 'isupper'), False),
1371
+ (('12a', 'isdigit'), False)],
1372
+ "params": [],
1373
+ "calibration": "对照:Python 字符串方法族(isdigit/startswith/isupper)",
1374
+ },
1375
+ "工具-数学函数": {
1376
+ "task": "数学函数",
1377
+ "pattern": (
1378
+ "def math_func(op, a, b=None):\n"
1379
+ " # 生效条件:op ∈ {abs, pow, sqrt};math.sqrt 可用\n"
1380
+ " # 子功能:① op 分支处理\n"
1381
+ " # 执行:按 op 分派;顺序调用\n"
1382
+ " # 不适用条件:op 非 {abs, pow, sqrt} 时\n"
1383
+ " # 数学函数:abs 绝对值 / pow 幂 / sqrt 平方根(math 语义)\n"
1384
+ " if op == 'abs':\n"
1385
+ " return abs(a)\n"
1386
+ " if op == 'pow':\n"
1387
+ " return a ** b\n"
1388
+ " if op == 'sqrt':\n"
1389
+ " import math\n"
1390
+ " return math.sqrt(a)\n"
1391
+ " return None\n"),
1392
+ "cases": [(('abs', -5), 5),
1393
+ (('pow', 2, 3), 8),
1394
+ (('sqrt', 9), 3.0)],
1395
+ "params": [],
1396
+ "calibration": "对照:Python math——abs/pow/sqrt(数学函数族)",
1397
+ },
1398
+ "工具-数值舍入": {
1399
+ "task": "数值舍入",
1400
+ "pattern": (
1401
+ "def round_num(value, op):\n"
1402
+ " # 生效条件:op ∈ {ceil, floor, round};math.floor 可用;math.ceil 可用\n"
1403
+ " # 子功能:① op 分支处理\n"
1404
+ " # 执行:按 op 分派;顺序调用\n"
1405
+ " # 不适用条件:op 非 {ceil, floor, round} 时\n"
1406
+ " # 数值舍入:round 四舍五入 / floor 向下 / ceil 向上\n"
1407
+ " import math\n"
1408
+ " if op == 'round':\n"
1409
+ " return round(value)\n"
1410
+ " if op == 'floor':\n"
1411
+ " return math.floor(value)\n"
1412
+ " if op == 'ceil':\n"
1413
+ " return math.ceil(value)\n"
1414
+ " return None\n"),
1415
+ "cases": [((2.6, 'round'), 3),
1416
+ ((2.9, 'floor'), 2),
1417
+ ((2.1, 'ceil'), 3),
1418
+ ((2.0, 'floor'), 2)],
1419
+ "params": [],
1420
+ "calibration": "对照:Python round/floor/ceil(数值舍入)",
1421
+ },
1422
+ "工具-数值统计": {
1423
+ "task": "数值统计",
1424
+ "pattern": (
1425
+ "def stats_calc(nums, op):\n"
1426
+ " # 生效条件:op ∈ {max, mean, min}\n"
1427
+ " # 子功能:① op 分支处理\n"
1428
+ " # 执行:按 op 分派;顺序调用\n"
1429
+ " # 不适用条件:nums 为空/非法时;op 非 {max, mean, min} 时\n"
1430
+ " # 数值统计:mean 平均 / min 最小 / max 最大(统计函数族)\n"
1431
+ " if not nums:\n"
1432
+ " return None\n"
1433
+ " if op == 'mean':\n"
1434
+ " return sum(nums) / len(nums)\n"
1435
+ " if op == 'min':\n"
1436
+ " return min(nums)\n"
1437
+ " if op == 'max':\n"
1438
+ " return max(nums)\n"
1439
+ " return None\n"),
1440
+ "cases": [(([1, 2, 3], 'mean'), 2.0),
1441
+ (([3, 1, 2], 'min'), 1),
1442
+ (([3, 1, 2], 'max'), 3),
1443
+ (([], 'mean'), None)],
1444
+ "params": [],
1445
+ "calibration": "对照:Python statistics——mean/min/max(统计族)",
1446
+ },
1447
+ "语法-多行字符串": {
1448
+ "task": "多行字符串",
1449
+ "pattern": (
1450
+ "def multiline_str(src, i):\n"
1451
+ " # 生效条件:src.find 可用\n"
1452
+ " # 子功能:① 调用 chr;② 调用 len\n"
1453
+ " # 执行:顺序调用\n"
1454
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1455
+ " # 多行字符串:三引号解析(chr 构造——跨行字符串)\n"
1456
+ " q = chr(34) * 3\n"
1457
+ " if src[i:i + 3] != q:\n"
1458
+ " return None, i\n"
1459
+ " j = src.find(q, i + 3)\n"
1460
+ " if j == -1:\n"
1461
+ " return (src[i + 3:], 'unterminated'), len(src)\n"
1462
+ " return (src[i + 3:j]), j + 3\n"),
1463
+ "cases": [
1464
+ ((chr(34) * 3 + '你好' + chr(10) + '世界' + chr(34) * 3, 0), ('你好' + chr(10) + '世界', 11)),
1465
+ ((chr(34) * 3 + '未闭合', 0), (('未闭合', 'unterminated'), 6))],
1466
+ "params": [],
1467
+ "calibration": "对照:Python 三引号字符串(跨行字面量)",
1468
+ },
1469
+ "工具-文件读取": {
1470
+ "task": "文件读取",
1471
+ "pattern": (
1472
+ "def file_read_lines(content, op):\n"
1473
+ " # 生效条件:op ∈ {lines, read};content.splitlines 可用\n"
1474
+ " # 子功能:① op 分支处理\n"
1475
+ " # 执行:按 op 分派\n"
1476
+ " # 不适用条件:op 非 {lines, read} 时\n"
1477
+ " # 文件读取:read 读全部 / lines 读行(文件 IO 简化)\n"
1478
+ " if op == 'read':\n"
1479
+ " return content\n"
1480
+ " if op == 'lines':\n"
1481
+ " return content.splitlines()\n"
1482
+ " return None\n"),
1483
+ "cases": [(('第一行\n第二行', 'lines'), ['第一行', '第二行']),
1484
+ (('内容', 'read'), '内容'),
1485
+ (('', 'lines'), [])],
1486
+ "params": [],
1487
+ "calibration": "对照:Python 文件读取——读全部/按行(splitlines)",
1488
+ },
1489
+ "工具-性能计时": {
1490
+ "task": "性能计时",
1491
+ "pattern": (
1492
+ "def perf_time(start, end, unit='ms'):\n"
1493
+ " # 生效条件:参数 start/end/unit 合法\n"
1494
+ " # 子功能:① 条件判定 ② 结果处理\n"
1495
+ " # 执行:顺序执行\n"
1496
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1497
+ " # 性能计时:耗时计算(start/end 时间戳——性能测量)\n"
1498
+ " diff = end - start\n"
1499
+ " return diff * 1000 if unit == 'ms' else diff\n"),
1500
+ "cases": [((0.0, 0.005, 'ms'), 5.0),
1501
+ ((1.0, 3.0, 's'), 2.0),
1502
+ ((0.0, 0.0, 'ms'), 0.0)],
1503
+ "params": [],
1504
+ "calibration": "对照:time.perf_counter——耗时计算(毫秒/秒)",
1505
+ },
1506
+ "工具-环境查询": {
1507
+ "task": "环境查询",
1508
+ "pattern": (
1509
+ "def platform_check(env, op, key=None):\n"
1510
+ " # 生效条件:op ∈ {get, platform, version}\n"
1511
+ " # 子功能:① op 分支处理\n"
1512
+ " # 执行:按 op 分派\n"
1513
+ " # 不适用条件:op 非 {get, platform, version} 时\n"
1514
+ " # 环境查询:platform 平台 / version 版本 / get 键查询(环境信息)\n"
1515
+ " if op == 'platform':\n"
1516
+ " return env.get('platform')\n"
1517
+ " if op == 'version':\n"
1518
+ " return env.get('version')\n"
1519
+ " if op == 'get':\n"
1520
+ " return env.get(key)\n"
1521
+ " return None\n"),
1522
+ "cases": [(({'platform': 'win32'}, 'platform'), 'win32'),
1523
+ (({'version': '3.12'}, 'version'), '3.12'),
1524
+ (({'py': '3'}, 'get', 'py'), '3'),
1525
+ (({}, 'get', 'x'), None)],
1526
+ "params": [],
1527
+ "calibration": "对照:sys/platform——平台与版本环境查询",
1528
+ },
1529
+ "数据结构-链表": {
1530
+ "task": "链表",
1531
+ "pattern": (
1532
+ "def linked_list_ops(values, op, value=None):\n"
1533
+ " # 链表操作(单链表):build 值列表→节点链 / traverse 链→值列表 / contains 查找\n"
1534
+ " # 生效条件:op ∈ {build, traverse, contains};value 为查找目标(contains 时)\n"
1535
+ " # 子功能:① build 逆序建链 ② traverse 顺序取值 ③ contains 遍历查找\n"
1536
+ " # 执行:节点 dict {value, next} 链式构造与遍历\n"
1537
+ " # 不适用条件:op 非 {build, contains, traverse} 时\n"
1538
+ " if op == 'build':\n"
1539
+ " head = None\n"
1540
+ " for v in reversed(values):\n"
1541
+ " head = {'value': v, 'next': head}\n"
1542
+ " return head\n"
1543
+ " if op == 'traverse':\n"
1544
+ " out = []\n"
1545
+ " cur = values\n"
1546
+ " while cur is not None:\n"
1547
+ " out.append(cur['value'])\n"
1548
+ " cur = cur['next']\n"
1549
+ " return out\n"
1550
+ " if op == 'contains':\n"
1551
+ " cur = values\n"
1552
+ " while cur is not None:\n"
1553
+ " if cur['value'] == value:\n"
1554
+ " return True\n"
1555
+ " cur = cur['next']\n"
1556
+ " return False\n"
1557
+ " return None\n"),
1558
+ "cases": [(([1, 2], 'build'), {'value': 1, 'next': {'value': 2, 'next': None}}),
1559
+ (({'value': 1, 'next': {'value': 2, 'next': None}}, 'traverse'), [1, 2]),
1560
+ (({'value': 1, 'next': {'value': 2, 'next': None}}, 'contains', 2), True),
1561
+ (({'value': 1, 'next': {'value': 2, 'next': None}}, 'contains', 3), False)],
1562
+ "params": [],
1563
+ "calibration": "对照:单链表——节点链构建/遍历/查找(Python 链表机制)",
1564
+ },
1565
+ "工具-进制转换": {
1566
+ "task": "进制转换",
1567
+ "pattern": (
1568
+ "def base_convert(value, base, to_text=True):\n"
1569
+ " # 生效条件:digits.index 可用\n"
1570
+ " # 子功能:① 调用 reversed\n"
1571
+ " # 执行:循环迭代;顺序调用\n"
1572
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1573
+ " # 进制转换:to_text 十进制→base 进制字符串 / 反向解析为十进制\n"
1574
+ " digits = '0123456789abcdef'\n"
1575
+ " if to_text:\n"
1576
+ " if value == 0:\n"
1577
+ " return '0'\n"
1578
+ " out = []\n"
1579
+ " n = value\n"
1580
+ " while n > 0:\n"
1581
+ " out.append(digits[n % base])\n"
1582
+ " n //= base\n"
1583
+ " return ''.join(reversed(out))\n"
1584
+ " total = 0\n"
1585
+ " for ch in value:\n"
1586
+ " total = total * base + digits.index(ch)\n"
1587
+ " return total\n"),
1588
+ "cases": [((255, 16, True), 'ff'),
1589
+ ((10, 2, True), '1010'),
1590
+ (('ff', 16, False), 255),
1591
+ ((0, 8, True), '0'),
1592
+ (('1010', 2, False), 10)],
1593
+ "params": [],
1594
+ "calibration": "对照:Python bin/oct/hex + int(x, base)——进制双向转换",
1595
+ },
1596
+ "异常-异常链": {
1597
+ "task": "异常链",
1598
+ "pattern": (
1599
+ "def exception_chain(msg, cause=None):\n"
1600
+ " # 生效条件:参数 msg/cause 合法\n"
1601
+ " # 子功能:① 调用 ValueError;② 调用 str\n"
1602
+ " # 执行:顺序调用\n"
1603
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1604
+ " # 异常链:包装异常并保留原因(raise from 语义——上下文链)\n"
1605
+ " e = ValueError(msg)\n"
1606
+ " if cause is not None:\n"
1607
+ " e.__cause__ = ValueError(cause)\n"
1608
+ " return (e.__class__.__name__, str(e),\n"
1609
+ " str(e.__cause__) if e.__cause__ else None)\n"),
1610
+ "cases": [
1611
+ (('外层', '内层'), ('ValueError', '外层', '内层')),
1612
+ (('孤立',), ('ValueError', '孤立', None))],
1613
+ "params": [],
1614
+ "calibration": "对照:Python raise ... from ...——异常链保留原因上下文",
1615
+ },
1616
+ "数据结构-二叉树": {
1617
+ "task": "二叉树",
1618
+ "pattern": (
1619
+ "def btree_ops(values, op):\n"
1620
+ " # 生效条件:op ∈ {build, inorder}\n"
1621
+ " # 子功能:① op 分支处理\n"
1622
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1623
+ " # 不适用条件:op 非 {build, inorder} 时\n"
1624
+ " # 二叉树:build 有序列表→BST 插入 / inorder 中序遍历(二叉搜索树)\n"
1625
+ " def insert(node, v):\n"
1626
+ " # 插入:按序递归定位并建节点(BST 左小右大)\n"
1627
+ " if node is None:\n"
1628
+ " return {'v': v, 'l': None, 'r': None}\n"
1629
+ " if v < node['v']:\n"
1630
+ " node['l'] = insert(node['l'], v)\n"
1631
+ " else:\n"
1632
+ " node['r'] = insert(node['r'], v)\n"
1633
+ " return node\n"
1634
+ " def inorder(node):\n"
1635
+ " # 中序:左根右遍历(BST 输出升序)\n"
1636
+ " if node is None:\n"
1637
+ " return []\n"
1638
+ " return inorder(node['l']) + [node['v']] + inorder(node['r'])\n"
1639
+ " if op == 'build':\n"
1640
+ " root = None\n"
1641
+ " for v in values:\n"
1642
+ " root = insert(root, v)\n"
1643
+ " return root\n"
1644
+ " if op == 'inorder':\n"
1645
+ " return inorder(values)\n"
1646
+ " return None\n"),
1647
+ "cases": [
1648
+ (([3, 1, 2], 'build'), {'v': 3, 'l': {'v': 1, 'l': None, 'r': {'v': 2, 'l': None, 'r': None}}, 'r': None}),
1649
+ (({'v': 2, 'l': {'v': 1, 'l': None, 'r': None}, 'r': {'v': 3, 'l': None, 'r': None}}, 'inorder'), [1, 2, 3]),
1650
+ (([], 'build'), None)],
1651
+ "params": [],
1652
+ "calibration": "对照:二叉搜索树——插入构建 + 中序遍历(升序输出)",
1653
+ },
1654
+ "工具-迭代工具": {
1655
+ "task": "迭代工具",
1656
+ "pattern": (
1657
+ "def iter_utils(seqs, op, n=None):\n"
1658
+ " # 生效条件:op ∈ {chain, take, zip}\n"
1659
+ " # 子功能:① op 分支处理\n"
1660
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1661
+ " # 不适用条件:op 非 {chain, take, zip} 时\n"
1662
+ " # 迭代工具:chain 拼接 / take 取前 n 个 / zip 配对(itertools 语义)\n"
1663
+ " if op == 'chain':\n"
1664
+ " out = []\n"
1665
+ " for s in seqs:\n"
1666
+ " out.extend(s)\n"
1667
+ " return out\n"
1668
+ " if op == 'take':\n"
1669
+ " return list(seqs[0])[:n]\n"
1670
+ " if op == 'zip':\n"
1671
+ " return list(zip(*seqs))\n"
1672
+ " return None\n"),
1673
+ "cases": [
1674
+ (([[1, 2], [3]], 'chain'), [1, 2, 3]),
1675
+ (([[1, 2, 3]], 'take', 2), [1, 2]),
1676
+ (([[1, 2], ['a', 'b']], 'zip'), [(1, 'a'), (2, 'b')])],
1677
+ "params": [],
1678
+ "calibration": "对照:itertools——chain 拼接/take 截取/zip 配对",
1679
+ },
1680
+ "语法-字典合并": {
1681
+ "task": "字典合并",
1682
+ "pattern": (
1683
+ "def dict_merge(*dicts):\n"
1684
+ " # 生效条件:参数 输入 合法\n"
1685
+ " # 子功能:① 主体逻辑执行\n"
1686
+ " # 执行:循环迭代\n"
1687
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1688
+ " # 字典合并:多字典顺序合并(后者覆盖前者——| 运算符语义)\n"
1689
+ " out = {}\n"
1690
+ " for d in dicts:\n"
1691
+ " out.update(d)\n"
1692
+ " return out\n"),
1693
+ "cases": [
1694
+ (({'a': 1}, {'b': 2}), {'a': 1, 'b': 2}),
1695
+ (({'a': 1}, {'a': 2}), {'a': 2}),
1696
+ (({},), {})],
1697
+ "params": [],
1698
+ "calibration": "对照:Python 3.9 dict | 运算符——顺序合并后者覆盖",
1699
+ },
1700
+ "数据结构-最小堆": {
1701
+ "task": "最小堆",
1702
+ "pattern": (
1703
+ "def heap_ops(heap, op, item=None):\n"
1704
+ " # 生效条件:op ∈ {peek, pop, push}\n"
1705
+ " # 子功能:① op 分支处理\n"
1706
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1707
+ " # 不适用条件:heap 为空/非法时;op 非 {peek, pop, push} 时\n"
1708
+ " # 最小堆:push 上浮插入 / pop 根最小弹出 / peek 查看根(堆机制)\n"
1709
+ " def up(i):\n"
1710
+ " # 上浮:新元素与父节点比较并交换(维持最小堆序)\n"
1711
+ " while i > 0:\n"
1712
+ " p = (i - 1) // 2\n"
1713
+ " if heap[p] <= heap[i]:\n"
1714
+ " break\n"
1715
+ " heap[p], heap[i] = heap[i], heap[p]\n"
1716
+ " i = p\n"
1717
+ " def down(i):\n"
1718
+ " # 下沉:根与较小子节点交换(pop 后重建堆序)\n"
1719
+ " n = len(heap)\n"
1720
+ " while True:\n"
1721
+ " l, r, m = 2 * i + 1, 2 * i + 2, i\n"
1722
+ " if l < n and heap[l] < heap[m]:\n"
1723
+ " m = l\n"
1724
+ " if r < n and heap[r] < heap[m]:\n"
1725
+ " m = r\n"
1726
+ " if m == i:\n"
1727
+ " break\n"
1728
+ " heap[i], heap[m] = heap[m], heap[i]\n"
1729
+ " i = m\n"
1730
+ " if op == 'push':\n"
1731
+ " heap.append(item)\n"
1732
+ " up(len(heap) - 1)\n"
1733
+ " return heap[0]\n"
1734
+ " if op == 'pop':\n"
1735
+ " if not heap:\n"
1736
+ " return None\n"
1737
+ " root = heap[0]\n"
1738
+ " last = heap.pop()\n"
1739
+ " if heap:\n"
1740
+ " heap[0] = last\n"
1741
+ " down(0)\n"
1742
+ " return root\n"
1743
+ " if op == 'peek':\n"
1744
+ " return heap[0] if heap else None\n"
1745
+ " return None\n"),
1746
+ "cases": [(([3, 1, 2], 'push', 0), 0),
1747
+ (([1, 3, 2], 'pop'), 1),
1748
+ (([], 'pop'), None),
1749
+ (([1, 2], 'peek'), 1)],
1750
+ "params": [],
1751
+ "calibration": "对照:heapq——最小堆上浮/下沉(push/pop/peek)",
1752
+ },
1753
+ "工具-函数缓存": {
1754
+ "task": "函数缓存",
1755
+ "pattern": (
1756
+ "def cached_value(store, key, compute):\n"
1757
+ " # 生效条件:参数 store/key/compute 合法\n"
1758
+ " # 子功能:① 调用 compute\n"
1759
+ " # 执行:顺序调用\n"
1760
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1761
+ " # 函数缓存:缓存命中直取 / 未命中计算并写入(lru_cache 语义)\n"
1762
+ " if key in store:\n"
1763
+ " return store[key], True\n"
1764
+ " val = compute()\n"
1765
+ " store[key] = val\n"
1766
+ " return val, False\n"),
1767
+ "cases": [
1768
+ (({}, 'k', lambda: 42), (42, False)),
1769
+ (({'k': 42}, 'k', lambda: 99), (42, True)),
1770
+ (({}, 'x', lambda: '甲'), ('甲', False))],
1771
+ "params": [],
1772
+ "calibration": "对照:functools.lru_cache——按 key 记忆化缓存(命中直取)",
1773
+ },
1774
+ "异步-异步生成器": {
1775
+ "task": "异步生成器",
1776
+ "pattern": (
1777
+ "def async_gen_ops(state, op, value=None):\n"
1778
+ " # 生效条件:op ∈ {done, feed, next}\n"
1779
+ " # 子功能:① op 分支处理\n"
1780
+ " # 执行:按 op 分派\n"
1781
+ " # 不适用条件:op 非 {done, feed, next} 时\n"
1782
+ " # 异步生成器:next 产出一个值 / feed 喂值 / done 是否结束(async yield 语义)\n"
1783
+ " if op == 'next':\n"
1784
+ " i = state.get('i', 0)\n"
1785
+ " if i < state.get('n', 0):\n"
1786
+ " state['i'] = i + 1\n"
1787
+ " return i\n"
1788
+ " return None\n"
1789
+ " if op == 'feed':\n"
1790
+ " state['fed'] = value\n"
1791
+ " return value\n"
1792
+ " if op == 'done':\n"
1793
+ " return state.get('i', 0) >= state.get('n', 0)\n"
1794
+ " return None\n"),
1795
+ "cases": [
1796
+ (({'n': 3}, 'next'), 0),
1797
+ (({'i': 3, 'n': 3}, 'next'), None),
1798
+ (({}, 'feed', 7), 7),
1799
+ (({'i': 2, 'n': 2}, 'done'), True)],
1800
+ "params": [],
1801
+ "calibration": "对照:async generator——异步逐值产出(yield 语义模拟)",
1802
+ },
1803
+ "工具-切片操作": {
1804
+ "task": "切片操作",
1805
+ "pattern": (
1806
+ "def slice_ops(seq, start, stop, step=1):\n"
1807
+ " # 生效条件:参数 seq/start/stop/step 合法\n"
1808
+ " # 子功能:① 调用 list\n"
1809
+ " # 执行:顺序调用\n"
1810
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1811
+ " # 切片操作:start:stop:step 区间截取(序列切片语义)\n"
1812
+ " return list(seq[start:stop:step])\n"),
1813
+ "cases": [
1814
+ (([0, 1, 2, 3, 4], 1, 4), [1, 2, 3]),
1815
+ (([0, 1, 2, 3, 4], 0, 5, 2), [0, 2, 4]),
1816
+ (([0, 1, 2, 3, 4], -3, None), [2, 3, 4]),
1817
+ (([], 0, 3), [])],
1818
+ "params": [],
1819
+ "calibration": "对照:Python 切片——start:stop:step 区间截取(含负索引)",
1820
+ },
1821
+ "工具-矩阵运算": {
1822
+ "task": "矩阵运算",
1823
+ "pattern": (
1824
+ "def matrix_ops(a, b=None, op=None):\n"
1825
+ " # 生效条件:op ∈ {add, mul}\n"
1826
+ " # 子功能:① op 分支处理\n"
1827
+ " # 执行:按 op 分派;顺序调用\n"
1828
+ " # 不适用条件:op 非 {add, mul} 时\n"
1829
+ " # 矩阵运算:add 逐元素加 / mul 矩阵乘(内积和)\n"
1830
+ " if op == 'add':\n"
1831
+ " return [[a[i][j] + b[i][j] for j in range(len(a[0]))]\n"
1832
+ " for i in range(len(a))]\n"
1833
+ " if op == 'mul':\n"
1834
+ " n, m, p = len(a), len(a[0]), len(b[0])\n"
1835
+ " return [[sum(a[i][k] * b[k][j] for k in range(m))\n"
1836
+ " for j in range(p)] for i in range(n)]\n"
1837
+ " return None\n"),
1838
+ "cases": [
1839
+ (([[1, 2], [3, 4]], [[5, 6], [7, 8]], 'add'), [[6, 8], [10, 12]]),
1840
+ (([[1, 2], [3, 4]], [[1, 0], [0, 1]], 'mul'), [[1, 2], [3, 4]]),
1841
+ (([[1, 2]], [[1], [2]], 'mul'), [[5]])],
1842
+ "params": [],
1843
+ "calibration": "对照:矩阵运算——逐元素加/矩阵乘(内积和)",
1844
+ },
1845
+ "元编程-类装饰器": {
1846
+ "task": "类装饰器",
1847
+ "pattern": (
1848
+ "def class_decorator(cls, marker):\n"
1849
+ " # 生效条件:参数 marker 合法\n"
1850
+ " # 子功能:① 主体逻辑执行\n"
1851
+ " # 执行:顺序执行\n"
1852
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1853
+ " # 类装饰器:给类附加标记属性并返回标记(类增强语义)\n"
1854
+ " cls.__marker__ = marker\n"
1855
+ " return cls.__marker__\n"),
1856
+ "cases": [
1857
+ ((type('狗', (), {}), '宠物'), '宠物'),
1858
+ ((type('猫', (), {}), '宠物'), '宠物')],
1859
+ "params": [],
1860
+ "calibration": "对照:Python 类装饰器——类对象增强(附加标记/注册语义)",
1861
+ },
1862
+ "数据结构-默认字典": {
1863
+ "task": "默认字典",
1864
+ "pattern": (
1865
+ "def default_dict(d, key, default=0):\n"
1866
+ " # 生效条件:参数 d/key/default 合法\n"
1867
+ " # 子功能:① 条件判定 ② 结果处理\n"
1868
+ " # 执行:顺序执行\n"
1869
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1870
+ " # 默认字典:缺失键返回默认值并登记(defaultdict 语义)\n"
1871
+ " if key not in d:\n"
1872
+ " d[key] = default\n"
1873
+ " return d[key]\n"),
1874
+ "cases": [
1875
+ (({}, 'a', 0), 0),
1876
+ (({'a': 5}, 'a'), 5),
1877
+ (({}, 'b', []), []),
1878
+ (({'x': 1}, 'y', 7), 7)],
1879
+ "params": [],
1880
+ "calibration": "对照:collections.defaultdict——缺失键返回默认值并登记",
1881
+ },
1882
+ "工具-排列组合": {
1883
+ "task": "排列组合",
1884
+ "pattern": (
1885
+ "def permute_combine(items, r, op):\n"
1886
+ " # 生效条件:op ∈ {combinations, permutations}\n"
1887
+ " # 子功能:① op 分支处理\n"
1888
+ " # 执行:按 op 分派;顺序调用\n"
1889
+ " # 不适用条件:op 非 {combinations, permutations} 时\n"
1890
+ " # 排列组合:permutations 排列 / combinations 组合(有序/无序选取)\n"
1891
+ " from itertools import permutations, combinations\n"
1892
+ " if op == 'permutations':\n"
1893
+ " return list(permutations(items, r))\n"
1894
+ " if op == 'combinations':\n"
1895
+ " return list(combinations(items, r))\n"
1896
+ " return None\n"),
1897
+ "cases": [
1898
+ (([1, 2, 3], 2, 'permutations'), [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]),
1899
+ (([1, 2, 3], 2, 'combinations'), [(1, 2), (1, 3), (2, 3)])],
1900
+ "params": [],
1901
+ "calibration": "对照:itertools.permutations/combinations——有序排列/无序组合",
1902
+ },
1903
+ "工具-二分查找": {
1904
+ "task": "二分查找",
1905
+ "pattern": (
1906
+ "def binary_search(seq, target):\n"
1907
+ " # 生效条件:参数 seq/target 合法\n"
1908
+ " # 子功能:① 调用 len\n"
1909
+ " # 执行:循环迭代;顺序调用\n"
1910
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1911
+ " # 二分查找:有序序列定位目标(折半查找)\n"
1912
+ " lo, hi = 0, len(seq) - 1\n"
1913
+ " while lo <= hi:\n"
1914
+ " mid = (lo + hi) // 2\n"
1915
+ " if seq[mid] == target:\n"
1916
+ " return mid\n"
1917
+ " if seq[mid] < target:\n"
1918
+ " lo = mid + 1\n"
1919
+ " else:\n"
1920
+ " hi = mid - 1\n"
1921
+ " return -1\n"),
1922
+ "cases": [
1923
+ (([1, 3, 5, 7, 9], 5), 2),
1924
+ (([1, 3, 5, 7, 9], 8), -1),
1925
+ (([], 1), -1),
1926
+ (([2], 2), 0)],
1927
+ "params": [],
1928
+ "calibration": "对照:bisect——有序序列折半查找(命中索引/-1)",
1929
+ },
1930
+ "推导式-字典推导": {
1931
+ "task": "字典推导",
1932
+ "pattern": (
1933
+ "def dict_comp(items, key_fn, val_fn):\n"
1934
+ " # 生效条件:参数 items/key_fn/val_fn 合法\n"
1935
+ " # 子功能:① 调用 key_fn;② 调用 val_fn\n"
1936
+ " # 执行:顺序调用\n"
1937
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1938
+ " # 字典推导:键值函数映射建字典({k:v for ...} 语义)\n"
1939
+ " return {key_fn(x): val_fn(x) for x in items}\n"),
1940
+ "cases": [
1941
+ ((['甲', '乙'], lambda x: x, lambda x: len(x)), {'甲': 1, '乙': 1}),
1942
+ (([1, 2], lambda x: x * 10, lambda x: x * x), {10: 1, 20: 4}),
1943
+ (([], lambda x: x, lambda x: x), {})],
1944
+ "params": [],
1945
+ "calibration": "对照:字典推导——键值函数映射建字典(dict comprehension)",
1946
+ },
1947
+ "异步-异步队列": {
1948
+ "task": "异步队列",
1949
+ "pattern": (
1950
+ "def async_queue(q, op, item=None):\n"
1951
+ " # 生效条件:op ∈ {get, put, size}\n"
1952
+ " # 子功能:① op 分支处理\n"
1953
+ " # 执行:按 op 分派;顺序调用\n"
1954
+ " # 不适用条件:op 非 {get, put, size} 时\n"
1955
+ " # 异步队列:put 入队 / get 出队 / size 大小(asyncio.Queue 语义)\n"
1956
+ " if op == 'put':\n"
1957
+ " q.append(item)\n"
1958
+ " return len(q)\n"
1959
+ " if op == 'get':\n"
1960
+ " return q.pop(0) if q else None\n"
1961
+ " if op == 'size':\n"
1962
+ " return len(q)\n"
1963
+ " return None\n"),
1964
+ "cases": [
1965
+ (([], 'put', 'a'), 1),
1966
+ ((['a', 'b'], 'get'), 'a'),
1967
+ (([], 'get'), None),
1968
+ ((['a'], 'size'), 1)],
1969
+ "params": [],
1970
+ "calibration": "对照:asyncio.Queue——异步入队/出队/大小(FIFO)",
1971
+ },
1972
+ "工具-模板渲染": {
1973
+ "task": "模板渲染",
1974
+ "pattern": (
1975
+ "def render_template(template, values):\n"
1976
+ " # 生效条件:out.replace 可用\n"
1977
+ " # 子功能:① 调用 str\n"
1978
+ " # 执行:循环迭代;顺序调用\n"
1979
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1980
+ " # 模板渲染:$ 变量占位符替换(string.Template 语义)\n"
1981
+ " out = template\n"
1982
+ " for k, v in values.items():\n"
1983
+ " out = out.replace('$' + k, str(v))\n"
1984
+ " return out\n"),
1985
+ "cases": [
1986
+ (('你好 $名', {'名': '甲'}), '你好 甲'),
1987
+ (('$a-$b', {'a': 1, 'b': 2}), '1-2'),
1988
+ (('无变量', {}), '无变量')],
1989
+ "params": [],
1990
+ "calibration": "对照:string.Template——$ 变量占位符替换(模板渲染)",
1991
+ },
1992
+ "数据结构-有序字典": {
1993
+ "task": "有序字典",
1994
+ "pattern": (
1995
+ "def ordered_dict(d, op, key=None, value=None):\n"
1996
+ " # 生效条件:op ∈ {get, order, put}\n"
1997
+ " # 子功能:① op 分支处理\n"
1998
+ " # 执行:按 op 分派;顺序调用\n"
1999
+ " # 不适用条件:op 非 {get, order, put} 时\n"
2000
+ " # 有序字典:put 按序写入 / get 取值 / order 键序(OrderedDict 语义)\n"
2001
+ " if op == 'put':\n"
2002
+ " d[key] = value\n"
2003
+ " return list(d.keys())\n"
2004
+ " if op == 'get':\n"
2005
+ " return d.get(key)\n"
2006
+ " if op == 'order':\n"
2007
+ " return list(d.keys())\n"
2008
+ " return None\n"),
2009
+ "cases": [
2010
+ (({}, 'put', 'a', 1), ['a']),
2011
+ (({'a': 1, 'b': 2}, 'get', 'b'), 2),
2012
+ (({'a': 1, 'b': 2}, 'order'), ['a', 'b']),
2013
+ (({}, 'get', 'x'), None)],
2014
+ "params": [],
2015
+ "calibration": "对照:collections.OrderedDict——插入序保持(键序)",
2016
+ },
2017
+ "工具-随机采样": {
2018
+ "task": "随机采样",
2019
+ "pattern": (
2020
+ "def random_sample(items, k):\n"
2021
+ " # 生效条件:参数 items/k 合法\n"
2022
+ " # 子功能:① 调用 len;② 调用 max;③ 调用 list\n"
2023
+ " # 执行:顺序调用\n"
2024
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2025
+ " # 随机采样:取 k 个不重复元素(random.sample 语义,确定性取模)\n"
2026
+ " n = len(items)\n"
2027
+ " if k >= n:\n"
2028
+ " return list(items)\n"
2029
+ " step = max(1, n // k)\n"
2030
+ " return [items[i * step] for i in range(k)]\n"),
2031
+ "cases": [
2032
+ (([1, 2, 3, 4], 2), [1, 3]),
2033
+ (([1, 2, 3], 5), [1, 2, 3]),
2034
+ (([], 0), [])],
2035
+ "params": [],
2036
+ "calibration": "对照:random.sample——无重复采样(确定性等价实现)",
2037
+ },
2038
+ "工具-字节编解码": {
2039
+ "task": "字节编解码",
2040
+ "pattern": (
2041
+ "def bytes_codec(data, op):\n"
2042
+ " # 生效条件:op ∈ {decode, encode};data.encode 可用;data.decode 可用\n"
2043
+ " # 子功能:① op 分支处理\n"
2044
+ " # 执行:按 op 分派\n"
2045
+ " # 不适用条件:op 非 {decode, encode} 时\n"
2046
+ " # 字节编解码:encode 文本→字节 / decode 字节→文本(UTF-8)\n"
2047
+ " if op == 'encode':\n"
2048
+ " return data.encode('utf-8')\n"
2049
+ " if op == 'decode':\n"
2050
+ " return data.decode('utf-8')\n"
2051
+ " return None\n"),
2052
+ "cases": [
2053
+ (('甲', 'encode'), b'\xe7\x94\xb2'),
2054
+ ((b'\xe7\x94\xb2', 'decode'), '甲'),
2055
+ (('', 'encode'), b'')],
2056
+ "params": [],
2057
+ "calibration": "对照:bytes——UTF-8 编码/解码(文本↔字节)",
2058
+ },
2059
+ "工具-字符串哈希": {
2060
+ "task": "字符串哈希",
2061
+ "pattern": (
2062
+ "def str_hash(text, mod=256):\n"
2063
+ " # 生效条件:参数 text/mod 合法\n"
2064
+ " # 子功能:① 调用 ord\n"
2065
+ " # 执行:循环迭代;顺序调用\n"
2066
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2067
+ " # 字符串哈希:逐字符加权累加取模(确定性哈希)\n"
2068
+ " h = 0\n"
2069
+ " for ch in text:\n"
2070
+ " h = (h * 31 + ord(ch)) % mod\n"
2071
+ " return h\n"),
2072
+ "cases": [
2073
+ ((chr(97) + chr(98) + chr(99),), 98),
2074
+ ((chr(0),), 0),
2075
+ ((chr(97), 256), 97)],
2076
+ "params": [],
2077
+ "calibration": "对照:字符串哈希——加权累加取模(确定性散列)",
2078
+ },
2079
+ "数据结构-跳表": {
2080
+ "task": "跳表",
2081
+ "pattern": (
2082
+ "def skiplist_ops(state, op, key=None, value=None):\n"
2083
+ " # 生效条件:op ∈ {get, levels, put}\n"
2084
+ " # 子功能:① op 分支处理\n"
2085
+ " # 执行:按 op 分派;顺序调用\n"
2086
+ " # 不适用条件:op 非 {get, levels, put} 时\n"
2087
+ " # 跳表:put 插入 / get 查找 / levels 层数(有序结构加速)\n"
2088
+ " if op == 'put':\n"
2089
+ " state[key] = value\n"
2090
+ " return key\n"
2091
+ " if op == 'get':\n"
2092
+ " return state.get(key)\n"
2093
+ " if op == 'levels':\n"
2094
+ " return max(1, len(state) // 2)\n"
2095
+ " return None\n"),
2096
+ "cases": [
2097
+ (({}, 'put', 1, 'a'), 1),
2098
+ (({1: 'a'}, 'get', 1), 'a'),
2099
+ (({}, 'get', 5), None),
2100
+ (({1: 'a', 2: 'b', 3: 'c', 4: 'd'}, 'levels'), 2)],
2101
+ "params": [],
2102
+ "calibration": "对照:跳表——有序键插入/查找(多层索引加速语义)",
2103
+ },
2104
+ "工具-时间格式化": {
2105
+ "task": "时间格式化",
2106
+ "pattern": (
2107
+ "def time_format(t, fmt):\n"
2108
+ " # 生效条件:out.replace 可用\n"
2109
+ " # 子功能:① 调用 str\n"
2110
+ " # 执行:顺序调用\n"
2111
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2112
+ " # 时间格式化:占位符替换(strftime 语义:%Y 年 %m 月 %d 日)\n"
2113
+ " out = fmt\n"
2114
+ " out = out.replace('%Y', str(t['year']))\n"
2115
+ " out = out.replace('%m', str(t['month']).zfill(2))\n"
2116
+ " out = out.replace('%d', str(t['day']).zfill(2))\n"
2117
+ " return out\n"),
2118
+ "cases": [
2119
+ (({'year': 2024, 'month': 3, 'day': 5}, '%Y-%m-%d'), '2024-03-05'),
2120
+ (({'year': 1999, 'month': 12, 'day': 31}, '%Y/%m/%d'), '1999/12/31'),
2121
+ (({'year': 2024, 'month': 1, 'day': 9}, '%Y-%m-%d'), '2024-01-09')],
2122
+ "params": [],
2123
+ "calibration": "对照:strftime——%Y/%m/%d 占位符时间格式化",
2124
+ },
2125
+ "工具-字符串对齐": {
2126
+ "task": "字符串对齐",
2127
+ "pattern": (
2128
+ "def str_align(text, width, align, fill=' '):\n"
2129
+ " # 生效条件:align ∈ {center, left, right};text.ljust 可用;text.rjust 可用\n"
2130
+ " # 子功能:1 align 分支处理\n"
2131
+ " # 执行:按 op 分派\n"
2132
+ " # 不适用条件:align 非 {center, left, right} 时(隐式盲区:返回默认值 0 = 未知行为——不适用)\n"
2133
+ " # 字符串对齐:ljust 左 / rjust 右 / center 中(填充到宽)\n"
2134
+ " if align == 'left':\n"
2135
+ " return text.ljust(width, fill)\n"
2136
+ " if align == 'right':\n"
2137
+ " return text.rjust(width, fill)\n"
2138
+ " if align == 'center':\n"
2139
+ " return text.center(width, fill)\n"
2140
+ " return text\n"),
2141
+ "cases": [
2142
+ (('甲', 3, 'right'), ' 甲'),
2143
+ (('甲', 3, 'center'), ' 甲 '),
2144
+ (('甲', 5, 'left', '-'), '甲----'),
2145
+ (('甲乙', 2, 'left'), '甲乙')],
2146
+ "params": [],
2147
+ "calibration": "对照:str.ljust/rjust/center——填充对齐",
2148
+ },
2149
+ "工具-顺序去重": {
2150
+ "task": "顺序去重",
2151
+ "pattern": (
2152
+ "def dedup_keep(seq):\n"
2153
+ " # 生效条件:参数 seq 合法\n"
2154
+ " # 子功能:① 调用 set\n"
2155
+ " # 执行:循环迭代;顺序调用\n"
2156
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2157
+ " # 顺序去重:保留首次出现序(preserve-order unique)\n"
2158
+ " seen = set()\n"
2159
+ " out = []\n"
2160
+ " for x in seq:\n"
2161
+ " if x not in seen:\n"
2162
+ " seen.add(x)\n"
2163
+ " out.append(x)\n"
2164
+ " return out\n"),
2165
+ "cases": [
2166
+ (([1, 2, 1, 3, 2],), [1, 2, 3]),
2167
+ ((['a', 'a', 'b'],), ['a', 'b']),
2168
+ (([],), [])],
2169
+ "params": [],
2170
+ "calibration": "对照:preserve-order unique——去重保序(dict.fromkeys 语义)",
2171
+ },
2172
+ "工具-滑动均值": {
2173
+ "task": "滑动均值",
2174
+ "pattern": (
2175
+ "def moving_avg(seq, window):\n"
2176
+ " # 滑动均值(移动平均):窗口内平均(平滑时间序列)\n"
2177
+ " # 生效条件:seq 为数值序列;window > 0\n"
2178
+ " # 子功能:① 非法窗口/空序列直返空 ② 逐窗口求均值 ③ 两位小数归整\n"
2179
+ " # 执行:滑窗求和取平均,round 2 位\n"
2180
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2181
+ " if window <= 0 or not seq:\n"
2182
+ " return []\n"
2183
+ " out = []\n"
2184
+ " for i in range(len(seq) - window + 1):\n"
2185
+ " out.append(round(sum(seq[i:i + window]) / window, 2))\n"
2186
+ " return out\n"),
2187
+ "cases": [
2188
+ (([1, 2, 3, 4], 2), [1.5, 2.5, 3.5]),
2189
+ (([1, 2, 3], 3), [2.0]),
2190
+ (([1, 2], 3), []),
2191
+ (([], 2), [])],
2192
+ "params": [],
2193
+ "calibration": "对照:滑动平均——窗口均值平滑(时间序列)",
2194
+ },
2195
+ "工具-行程压缩": {
2196
+ "task": "行程压缩",
2197
+ "pattern": (
2198
+ "def rle_codec(data, op):\n"
2199
+ " # 生效条件:op ∈ {decode, encode}\n"
2200
+ " # 子功能:① op 分支处理\n"
2201
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
2202
+ " # 不适用条件:op 非 {decode, encode} 时\n"
2203
+ " # 行程压缩:encode 连续值计数 / decode 还原(run-length encoding)\n"
2204
+ " if op == 'encode':\n"
2205
+ " out = []\n"
2206
+ " i = 0\n"
2207
+ " while i < len(data):\n"
2208
+ " j = i\n"
2209
+ " while j < len(data) and data[j] == data[i]:\n"
2210
+ " j += 1\n"
2211
+ " out.append((data[i], j - i))\n"
2212
+ " i = j\n"
2213
+ " return out\n"
2214
+ " if op == 'decode':\n"
2215
+ " out = []\n"
2216
+ " for ch, n in data:\n"
2217
+ " out.extend([ch] * n)\n"
2218
+ " return out\n"
2219
+ " return None\n"),
2220
+ "cases": [
2221
+ (('aaabbc', 'encode'), [('a', 3), ('b', 2), ('c', 1)]),
2222
+ (([('a', 2), ('b', 1)], 'decode'), ['a', 'a', 'b']),
2223
+ (('', 'encode'), [])],
2224
+ "params": [],
2225
+ "calibration": "对照:run-length encoding——连续值行程压缩/还原",
2226
+ },
2227
+ "工具-位掩码": {
2228
+ "task": "位掩码",
2229
+ "pattern": (
2230
+ "def bitmask_ops(flags, op, bit=None):\n"
2231
+ " # 生效条件:op ∈ {clear, set, test, toggle}\n"
2232
+ " # 子功能:① op 分支处理\n"
2233
+ " # 执行:按 op 分派;顺序调用\n"
2234
+ " # 不适用条件:op 非 {clear, set, test, toggle} 时\n"
2235
+ " # 位掩码:set 置位 / clear 清位 / toggle 翻转 / test 测位(位标志)\n"
2236
+ " if op == 'set':\n"
2237
+ " return flags | (1 << bit)\n"
2238
+ " if op == 'clear':\n"
2239
+ " return flags & ~(1 << bit)\n"
2240
+ " if op == 'toggle':\n"
2241
+ " return flags ^ (1 << bit)\n"
2242
+ " if op == 'test':\n"
2243
+ " return bool(flags & (1 << bit))\n"
2244
+ " return None\n"),
2245
+ "cases": [
2246
+ ((0, 'set', 2), 4),
2247
+ ((7, 'clear', 1), 5),
2248
+ ((1, 'toggle', 1), 3),
2249
+ ((4, 'test', 2), True)],
2250
+ "params": [],
2251
+ "calibration": "对照:位标志——set/clear/toggle/test(位掩码)",
2252
+ },
2253
+ "工具-众数统计": {
2254
+ "task": "众数统计",
2255
+ "pattern": (
2256
+ "def mode_count(items):\n"
2257
+ " # 生效条件:参数 items 合法\n"
2258
+ " # 子功能:① 调用 max\n"
2259
+ " # 执行:循环迭代;顺序调用\n"
2260
+ " # 不适用条件:items 为空/非法时(隐式盲区:返回默认值 [] = 未知行为——不适用)\n"
2261
+ " # 众数统计:出现最频繁的元素(mode)\n"
2262
+ " if not items:\n"
2263
+ " return None\n"
2264
+ " cnt = {}\n"
2265
+ " for x in items:\n"
2266
+ " cnt[x] = cnt.get(x, 0) + 1\n"
2267
+ " return max(cnt.items(), key=lambda kv: kv[1])[0]\n"),
2268
+ "cases": [
2269
+ (([1, 2, 2, 3],), 2),
2270
+ ((['a', 'b', 'a'],), 'a'),
2271
+ (([],), None)],
2272
+ "params": [],
2273
+ "calibration": "对照:statistics.mode——众数(最频繁元素)",
2274
+ },
2275
+ "工具-分位数": {
2276
+ "task": "分位数",
2277
+ "pattern": (
2278
+ "def percentile(data, p):\n"
2279
+ " # 生效条件:参数 data/p 合法\n"
2280
+ " # 子功能:① 调用 sorted;② 调用 int;③ 调用 min\n"
2281
+ " # 执行:顺序调用\n"
2282
+ " # 不适用条件:data 为空/非法时\n"
2283
+ " # 分位数:排序后按百分位取位置(statistics.quantiles 语义)\n"
2284
+ " if not data:\n"
2285
+ " return None\n"
2286
+ " s = sorted(data)\n"
2287
+ " k = (len(s) - 1) * p / 100.0\n"
2288
+ " lo = int(k)\n"
2289
+ " hi = min(lo + 1, len(s) - 1)\n"
2290
+ " frac = k - lo\n"
2291
+ " return round(s[lo] + (s[hi] - s[lo]) * frac, 2)\n"),
2292
+ "cases": [
2293
+ (([1, 2, 3, 4], 50), 2.5),
2294
+ (([1, 2, 3, 4], 0), 1.0),
2295
+ (([1, 2, 3, 4], 100), 4.0),
2296
+ (([], 50), None)],
2297
+ "params": [],
2298
+ "calibration": "对照:quantiles——百分位插值(分位数)",
2299
+ },
2300
+ "工具-文本分词": {
2301
+ "task": "文本分词",
2302
+ "pattern": (
2303
+ "def tokenize_text(text):\n"
2304
+ " # 生效条件:text.lower 可用\n"
2305
+ " # 子功能:① 主体逻辑执行\n"
2306
+ " # 执行:顺序执行\n"
2307
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2308
+ " # 文本分词:非字母字符分割并转小写(简单 tokenizer)\n"
2309
+ " import re\n"
2310
+ " return [t for t in re.split(r'[^A-Za-z0-9]+', text.lower()) if t]\n"),
2311
+ "cases": [
2312
+ ((chr(72) + chr(101) + chr(108) + chr(108) + chr(111) + ',' + chr(32) + chr(87) + chr(111) + chr(114) + chr(108) + chr(100) + '!',), ['hello', 'world']),
2313
+ ((chr(97) + chr(32) + chr(98) + chr(32) + chr(99),), ['a', 'b', 'c']),
2314
+ ((chr(32),), [])],
2315
+ "params": [],
2316
+ "calibration": "对照:tokenize——非字母数字分割(文本分词)",
2317
+ },
2318
+ "工具-笛卡尔积": {
2319
+ "task": "笛卡尔积",
2320
+ "pattern": (
2321
+ "def cartesian_product(*seqs):\n"
2322
+ " # 生效条件:参数 输入 合法\n"
2323
+ " # 子功能:① 调用 list;② 调用 product\n"
2324
+ " # 执行:顺序调用\n"
2325
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2326
+ " # 笛卡尔积:多序列组合(itertools.product 语义)\n"
2327
+ " from itertools import product\n"
2328
+ " return list(product(*seqs))\n"),
2329
+ "cases": [
2330
+ (([1, 2], ['a', 'b']), [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]),
2331
+ (([1], []), []),
2332
+ (([],), [])],
2333
+ "params": [],
2334
+ "calibration": "对照:itertools.product——笛卡尔积(全组合)",
2335
+ },
2336
+ "工具-列表分块": {
2337
+ "task": "列表分块",
2338
+ "pattern": (
2339
+ "def chunk_list(items, size):\n"
2340
+ " # 生效条件:参数 items/size 合法\n"
2341
+ " # 子功能:① 调用 range;② 调用 len\n"
2342
+ " # 执行:顺序调用\n"
2343
+ " # 不适用条件:size 越界(LtE)时(隐式盲区:返回默认值 [] = 未知行为——不适用)\n"
2344
+ " # 列表分块:按固定大小切块(分批处理)\n"
2345
+ " if size <= 0:\n"
2346
+ " return []\n"
2347
+ " return [items[i:i + size] for i in range(0, len(items), size)]\n"),
2348
+ "cases": [
2349
+ (([1, 2, 3, 4, 5], 2), [[1, 2], [3, 4], [5]]),
2350
+ (([1, 2, 3], 3), [[1, 2, 3]]),
2351
+ (([], 2), []),
2352
+ (([1, 2], 0), [])],
2353
+ "params": [],
2354
+ "calibration": "对照:分块——按大小分批(chunking)",
2355
+ },
2356
+ "工具-嵌套扁平化": {
2357
+ "task": "嵌套扁平化",
2358
+ "pattern": (
2359
+ "def flatten(items):\n"
2360
+ " # 生效条件:参数 items 合法\n"
2361
+ " # 子功能:① 调用 isinstance;② 调用 flatten\n"
2362
+ " # 执行:循环迭代;顺序调用\n"
2363
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2364
+ " # 嵌套扁平化:递归展开嵌套列表(单层拍平)\n"
2365
+ " out = []\n"
2366
+ " for x in items:\n"
2367
+ " if isinstance(x, list):\n"
2368
+ " out.extend(flatten(x))\n"
2369
+ " else:\n"
2370
+ " out.append(x)\n"
2371
+ " return out\n"),
2372
+ "cases": [
2373
+ (([[1, 2], [3, [4]]],), [1, 2, 3, 4]),
2374
+ (([[1], 2],), [1, 2]),
2375
+ (([],), [])],
2376
+ "params": [],
2377
+ "calibration": "对照:递归展开——嵌套列表扁平化(flatten)",
2378
+ },
2379
+ "工具-循环轮转": {
2380
+ "task": "循环轮转",
2381
+ "pattern": (
2382
+ "def rotate(items, k):\n"
2383
+ " # 生效条件:参数 items/k 合法\n"
2384
+ " # 子功能:① 调用 len;② 调用 list\n"
2385
+ " # 执行:顺序调用\n"
2386
+ " # 不适用条件:items 为空/非法时(隐式盲区:返回默认值 [] = 未知行为——不适用)\n"
2387
+ " # 循环轮转:向右旋转 k 位(deque.rotate 语义)\n"
2388
+ " if not items:\n"
2389
+ " return []\n"
2390
+ " k = k % len(items)\n"
2391
+ " return items[-k:] + items[:-k] if k else list(items)\n"),
2392
+ "cases": [
2393
+ (([1, 2, 3, 4], 1), [4, 1, 2, 3]),
2394
+ (([1, 2, 3], 2), [2, 3, 1]),
2395
+ (([1, 2], 4), [1, 2]),
2396
+ (([], 3), [])],
2397
+ "params": [],
2398
+ "calibration": "对照:deque.rotate——循环轮转(右移 k 位)",
2399
+ },
2400
+ "工具-字典反转": {
2401
+ "task": "字典反转",
2402
+ "pattern": (
2403
+ "def invert_dict(d):\n"
2404
+ " # 生效条件:参数 d 合法\n"
2405
+ " # 子功能:① 主体逻辑执行\n"
2406
+ " # 执行:循环迭代\n"
2407
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2408
+ " # 字典反转:键值互换(值变键,重复值收集为列表)\n"
2409
+ " out = {}\n"
2410
+ " for k, v in d.items():\n"
2411
+ " out.setdefault(v, []).append(k)\n"
2412
+ " return out\n"),
2413
+ "cases": [
2414
+ (({'a': 1, 'b': 2},), {1: ['a'], 2: ['b']}),
2415
+ (({'a': 1, 'b': 1},), {1: ['a', 'b']}),
2416
+ (({},), {})],
2417
+ "params": [],
2418
+ "calibration": "对照:键值反转——值映射到键列表(invert)",
2419
+ },
2420
+ "工具-直方图": {
2421
+ "task": "直方图",
2422
+ "pattern": (
2423
+ "def histogram(data, bins):\n"
2424
+ " # 生效条件:参数 data/bins 合法\n"
2425
+ " # 子功能:① 调用 min;② 调用 max;③ 调用 int\n"
2426
+ " # 执行:循环迭代;顺序调用\n"
2427
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2428
+ " # 直方图:分桶计数(数据分布统计)\n"
2429
+ " if not data or bins <= 0:\n"
2430
+ " return []\n"
2431
+ " lo, hi = min(data), max(data)\n"
2432
+ " width = (hi - lo) / bins if bins else 1\n"
2433
+ " counts = [0] * bins\n"
2434
+ " for x in data:\n"
2435
+ " idx = min(int((x - lo) / width), bins - 1) if width else 0\n"
2436
+ " counts[idx] += 1\n"
2437
+ " return counts\n"),
2438
+ "cases": [
2439
+ (([0, 1, 2, 3, 4, 5], 3), [2, 2, 2]),
2440
+ (([1, 1, 1], 2), [3, 0]),
2441
+ (([], 3), [])],
2442
+ "params": [],
2443
+ "calibration": "对照:分桶直方图——数据分布计数",
2444
+ },
2445
+ "工具-峰值检测": {
2446
+ "task": "峰值检测",
2447
+ "pattern": (
2448
+ "def peak_detect(seq):\n"
2449
+ " # 生效条件:参数 seq 合法\n"
2450
+ " # 子功能:① 调用 range;② 调用 len\n"
2451
+ " # 执行:循环迭代;顺序调用\n"
2452
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2453
+ " # 峰值检测:局部极大值(高于左右邻)\n"
2454
+ " out = []\n"
2455
+ " for i in range(1, len(seq) - 1):\n"
2456
+ " if seq[i] > seq[i - 1] and seq[i] > seq[i + 1]:\n"
2457
+ " out.append((i, seq[i]))\n"
2458
+ " return out\n"),
2459
+ "cases": [
2460
+ (([1, 3, 2, 5, 4],), [(1, 3), (3, 5)]),
2461
+ (([1, 2, 3],), []),
2462
+ (([],), [])],
2463
+ "params": [],
2464
+ "calibration": "对照:峰值检测——局部极大值定位(信号分析)",
2465
+ },
2466
+ "工具-累加器": {
2467
+ "task": "累加器",
2468
+ "pattern": (
2469
+ "def accumulate(seq, func=None):\n"
2470
+ " # 生效条件:参数 seq/func 合法\n"
2471
+ " # 子功能:① 调用 f\n"
2472
+ " # 执行:循环迭代;顺序调用\n"
2473
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2474
+ " # 累加器:前缀累积(itertools.accumulate 语义)\n"
2475
+ " f = func or (lambda a, b: a + b)\n"
2476
+ " out = []\n"
2477
+ " cur = None\n"
2478
+ " for x in seq:\n"
2479
+ " cur = x if cur is None else f(cur, x)\n"
2480
+ " out.append(cur)\n"
2481
+ " return out\n"),
2482
+ "cases": [
2483
+ (([1, 2, 3, 4],), [1, 3, 6, 10]),
2484
+ (([1, 2, 3], lambda a, b: a * b), [1, 2, 6]),
2485
+ (([],), [])],
2486
+ "params": [],
2487
+ "calibration": "对照:itertools.accumulate——前缀累积(和/积)",
2488
+ },
2489
+ "工具-成对迭代": {
2490
+ "task": "成对迭代",
2491
+ "pattern": (
2492
+ "def pairwise(seq):\n"
2493
+ " # 生效条件:参数 seq 合法\n"
2494
+ " # 子功能:① 调用 range;② 调用 len\n"
2495
+ " # 执行:顺序调用\n"
2496
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2497
+ " # 成对迭代:相邻元素对(itertools.pairwise 语义)\n"
2498
+ " return [(seq[i], seq[i + 1]) for i in range(len(seq) - 1)]\n"),
2499
+ "cases": [
2500
+ (([1, 2, 3, 4],), [(1, 2), (2, 3), (3, 4)]),
2501
+ (([1],), []),
2502
+ (([],), [])],
2503
+ "params": [],
2504
+ "calibration": "对照:itertools.pairwise——相邻元素对",
2505
+ },
2506
+ "工具-打乱": {
2507
+ "triggers": ["打乱", "种子重排"],
2508
+ "task": "打乱",
2509
+ "pattern": (
2510
+ "def shuffle_seq(seq, seed=7):\n"
2511
+ " # 生效条件:参数 seq/seed 合法\n"
2512
+ " # 子功能:① 调用 list;② 调用 range;③ 调用 len\n"
2513
+ " # 执行:循环迭代;顺序调用\n"
2514
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2515
+ " # 打乱:确定性伪随机重排(Fisher-Yates 带种子)\n"
2516
+ " items = list(seq)\n"
2517
+ " r = seed\n"
2518
+ " for i in range(len(items) - 1, 0, -1):\n"
2519
+ " r = (r * 31 + 7) % 997\n"
2520
+ " j = r % (i + 1)\n"
2521
+ " items[i], items[j] = items[j], items[i]\n"
2522
+ " return items\n"),
2523
+ "cases": [
2524
+ (([1, 2, 3, 4], 7), [2, 3, 4, 1]),
2525
+ (([1, 2, 3], 7), [1, 2, 3]),
2526
+ (([], 7), [])],
2527
+ "params": [],
2528
+ "calibration": "对照:random.shuffle——确定性打乱(带种子 Fisher-Yates)",
2529
+ },
2530
+ "数据结构-并查集": {
2531
+ "task": "并查集",
2532
+ "pattern": (
2533
+ "def union_find(state, op, a=None, b=None):\n"
2534
+ " # 生效条件:op ∈ {connected, find, union}\n"
2535
+ " # 子功能:① op 分支处理\n"
2536
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
2537
+ " # 不适用条件:op 非 {connected, find, union} 时\n"
2538
+ " # 并查集:find 根查找 / union 合并 / connected 连通判定(不相交集)\n"
2539
+ " parent = state.setdefault('parent', {})\n"
2540
+ " def find(x):\n"
2541
+ " # 根查找:路径压缩(沿途节点直连根)\n"
2542
+ " parent.setdefault(x, x)\n"
2543
+ " while parent[x] != x:\n"
2544
+ " parent[x] = parent[parent[x]]\n"
2545
+ " x = parent[x]\n"
2546
+ " return x\n"
2547
+ " if op == 'find':\n"
2548
+ " return find(a)\n"
2549
+ " if op == 'union':\n"
2550
+ " ra, rb = find(a), find(b)\n"
2551
+ " if ra != rb:\n"
2552
+ " parent[rb] = ra\n"
2553
+ " return ra\n"
2554
+ " if op == 'connected':\n"
2555
+ " return find(a) == find(b)\n"
2556
+ " return None\n"),
2557
+ "cases": [
2558
+ (({}, 'find', 1), 1),
2559
+ (({}, 'union', 1, 2), 1),
2560
+ (({'parent': {1: 1, 2: 1}}, 'connected', 1, 2), True),
2561
+ (({}, 'connected', 1, 2), False)],
2562
+ "params": [],
2563
+ "calibration": "对照:union-find——不相交集合并/查找/连通(路径压缩)",
2564
+ },
2565
+ "工具-最长公共前缀": {
2566
+ "task": "最长公共前缀",
2567
+ "pattern": (
2568
+ "def common_prefix(words):\n"
2569
+ " # 生效条件:w.startswith 可用\n"
2570
+ " # 子功能:① 条件判定 ② 结果处理\n"
2571
+ " # 执行:循环迭代\n"
2572
+ " # 不适用条件:words 为空/非法时;prefix 为空/非法时(隐式盲区:返回默认值 空串 = 未知行为——不适用)\n"
2573
+ " # 最长公共前缀:逐字符比对所有词(LCP)\n"
2574
+ " if not words:\n"
2575
+ " return ''\n"
2576
+ " prefix = words[0]\n"
2577
+ " for w in words[1:]:\n"
2578
+ " while not w.startswith(prefix):\n"
2579
+ " prefix = prefix[:-1]\n"
2580
+ " if not prefix:\n"
2581
+ " return ''\n"
2582
+ " return prefix\n"),
2583
+ "cases": [
2584
+ ((['flower', 'flow', 'flight'],), 'fl'),
2585
+ ((['dog', 'racecar'],), ''),
2586
+ ((['same'],), 'same')],
2587
+ "params": [],
2588
+ "calibration": "对照:最长公共前缀——逐词比对(LCP)",
2589
+ },
2590
+ "工具-编辑距离": {
2591
+ "task": "编辑距离",
2592
+ "pattern": (
2593
+ "def edit_distance(a, b):\n"
2594
+ " # 生效条件:参数 a/b 合法\n"
2595
+ " # 子功能:① 调用 range;② 调用 len;③ 调用 min\n"
2596
+ " # 执行:循环迭代;顺序调用\n"
2597
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2598
+ " # 编辑距离:插入/删除/替换最小次数(Levenshtein)\n"
2599
+ " dp = [[0] * (len(b) + 1) for _ in range(len(a) + 1)]\n"
2600
+ " for i in range(len(a) + 1):\n"
2601
+ " dp[i][0] = i\n"
2602
+ " for j in range(len(b) + 1):\n"
2603
+ " dp[0][j] = j\n"
2604
+ " for i in range(1, len(a) + 1):\n"
2605
+ " for j in range(1, len(b) + 1):\n"
2606
+ " cost = 0 if a[i - 1] == b[j - 1] else 1\n"
2607
+ " dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1,\n"
2608
+ " dp[i - 1][j - 1] + cost)\n"
2609
+ " return dp[len(a)][len(b)]\n"),
2610
+ "cases": [
2611
+ ((chr(107) + chr(105) + chr(116) + chr(116) + chr(101) + chr(110),
2612
+ chr(115) + chr(105) + chr(116) + chr(116) + chr(105) + chr(110) + chr(103)), 3),
2613
+ ((chr(97) + chr(98), chr(97) + chr(98)), 0),
2614
+ ((chr(97), ''), 1)],
2615
+ "params": [],
2616
+ "calibration": "对照:Levenshtein——编辑距离(插删改最小次数)",
2617
+ },
2618
+ "求值-解包赋值": {
2619
+ "task": "解包赋值",
2620
+ "pattern": (
2621
+ "def unpack_assign(targets, values):\n"
2622
+ " # 解包赋值(多重赋值):a, b = b, a 嵌套解包(P 线赋值机制)\n"
2623
+ " # 生效条件:targets 与 values 结构对应(嵌套列表匹配嵌套值)\n"
2624
+ " # 子功能:① 逐目标遍历 ② 嵌套列表递归解包 ③ 叶子目标绑定值\n"
2625
+ " # 执行:zip 配对 + 递归 walk,RHS 先求值后逐层写入\n"
2626
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2627
+ " out = {}\n"
2628
+ " def walk(ts, vs):\n"
2629
+ " # 递归遍历:嵌套列表目标逐层绑定值\n"
2630
+ " for t, v in zip(ts, vs):\n"
2631
+ " if isinstance(t, list):\n"
2632
+ " walk(t, v)\n"
2633
+ " else:\n"
2634
+ " out[t] = v\n"
2635
+ " walk(targets, values)\n"
2636
+ " return out\n"),
2637
+ "cases": [
2638
+ ((['a', 'b'], [1, 2]), {'a': 1, 'b': 2}),
2639
+ ((['a', 'b'], [2, 1]), {'a': 2, 'b': 1}),
2640
+ ((['a', ['b', 'c']], [1, [2, 3]]), {'a': 1, 'b': 2, 'c': 3}),
2641
+ ((['x'], [7]), {'x': 7}),
2642
+ (([], []), {})],
2643
+ "params": [],
2644
+ "calibration": "对照:CPython 解包赋值(RHS 先求值后按目标逐层写入,嵌套列表递归解包)",
2645
+ },
2646
+ "推导式-集合推导": {
2647
+ "task": "集合推导",
2648
+ "pattern": (
2649
+ "def set_comprehension(items, cond=None):\n"
2650
+ " # 集合推导(集合推导式):{x for x in items if cond(x)} 去重构建(P 线推导式机制)\n"
2651
+ " # 生效条件:items 可迭代;cond 为谓词函数或 None(不过滤)\n"
2652
+ " # 子功能:① 无谓词直接去重建集 ② 有谓词过滤后建集\n"
2653
+ " # 执行:set(items) 或 {x for x in items if cond(x)}\n"
2654
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2655
+ " if cond is None:\n"
2656
+ " return set(items)\n"
2657
+ " return {x for x in items if cond(x)}\n"),
2658
+ "cases": [
2659
+ (([1, 2, 2, 3], None), {1, 2, 3}),
2660
+ (([1, 2, 3, 4], lambda x: x % 2 == 0), {2, 4}),
2661
+ (([], None), set()),
2662
+ (([5, 5, 5], lambda x: x > 3), {5})],
2663
+ "params": [],
2664
+ "calibration": "对照:CPython 集合推导({x for ...} 去重 + 条件过滤,与列表/字典推导同族)",
2665
+ },
2666
+ "语法-切片赋值": {
2667
+ "task": "切片赋值",
2668
+ "pattern": (
2669
+ "def slice_assign(arr, start, end, values):\n"
2670
+ " # 生效条件:参数 arr/start/end/values 合法\n"
2671
+ " # 子功能:① 调用 list\n"
2672
+ " # 执行:顺序调用\n"
2673
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2674
+ " # 切片赋值:a[start:end] = values 写入(P 线列表切片机制)\n"
2675
+ " return arr[:start] + list(values) + arr[end:]\n"),
2676
+ "cases": [
2677
+ (([1, 2, 3, 4, 5], 1, 3, [8, 9]), [1, 8, 9, 4, 5]),
2678
+ (([1, 2, 3], 0, 1, [7]), [7, 2, 3]),
2679
+ (([1, 2], 5, 5, [9]), [1, 2, 9]),
2680
+ (([1, 2, 3], 1, 1, [9]), [1, 9, 2, 3]),
2681
+ (([], 0, 0, [1, 2]), [1, 2])],
2682
+ "params": [],
2683
+ "calibration": "对照:CPython 切片赋值(a[start:end]=values 区间写入/插入/追加,与切片读取互补)",
2684
+ },
2685
+ '复合赋值-执行内核': {
2686
+ "task": '复合赋值求值',
2687
+ "triggers": ["复合赋值", "+=", "aug_assign"],
2688
+ "pattern": "def mini_aug_apply(cur, op, rhs):\n # 生效条件:op 为 '+=' '-=' '*=' '/=' 之一;rhs 与 cur 类型相容\n # 子功能:① 四值分派;② '/=' 零除报错;③ 字符串 '+=' 拼接\n # 执行:条件分派;算术求值\n # 不适用条件:未知 op 抛 ValueError;下标/属性目标不在本单元范围\n if op == '+=':\n return cur + rhs\n if op == '-=':\n return cur - rhs\n if op == '*=':\n return cur * rhs\n if op == '/=':\n if rhs == 0:\n raise ValueError('division by zero')\n return cur / rhs\n raise ValueError('unknown op')",
2689
+ "cases": [((1, '+=', 2), 3), ((10, '/=', 4), 2.5), (('a', '+=', 'b'), 'ab'), ((3, '-=', 5), -2), ((3, '*=', 4), 12)],
2690
+ "params": [],
2691
+ "calibration": '对照:mini_python.py aug_assign 语句内核(CPython += 真除/零除语义)',
2692
+ },
2693
+ '字符串-切分': {
2694
+ "task": '字符串切分',
2695
+ "triggers": ["字符串切分", "split"],
2696
+ "pattern": "def mini_split(s, sep):\n # 生效条件:s 为字符串;sep 为单字符分隔符\n # 子功能:① 线性扫描;② 保留空段;③ 缺分隔符返回原串\n # 执行:循环迭代;顺序追加\n # 不适用条件:多字符分隔符/正则语义/maxsplit 不在本单元范围\n if sep not in s:\n return [s]\n parts = []\n buf = ''\n for ch in s:\n if ch == sep:\n parts.append(buf)\n buf = ''\n else:\n buf += ch\n parts.append(buf)\n return parts",
2697
+ "cases": [(('a,b,c', ','), ['a', 'b', 'c']), (('a,,b', ','), ['a', '', 'b']), (('abc', ','), ['abc']), (('', ','), ['']), (('a;b;c', ';'), ['a', 'b', 'c'])],
2698
+ "params": [],
2699
+ "calibration": '对照:mini_python.py str 方法白名单 split(str.split 基础版,保留空段)',
2700
+ },
2701
+ '字符串-大写': {
2702
+ "task": '字符串大写',
2703
+ "triggers": ["字符串大写", "upper", "大写"],
2704
+ "pattern": "def mini_upper(s):\n # 生效条件:s 为字符串\n # 子功能:① 逐字符判定 a-z;② ASCII 偏移转大写;③ 非小写原样保留\n # 执行:循环迭代;条件分派\n # 不适用条件:非 ASCII 字母(中文等)不在本单元范围,原样保留\n out = ''\n for ch in s:\n if 'a' <= ch <= 'z':\n out += chr(ord(ch) - 32)\n else:\n out += ch\n return out",
2705
+ "cases": [('hello', 'HELLO'), ('aBc1!', 'ABC1!'), ('', ''), ('中文abc', '中文ABC')],
2706
+ "params": [],
2707
+ "calibration": '对照:mini_python.py str 方法白名单 upper(CPython str.upper ASCII 子集)',
2708
+ },
2709
+ '蜂群-服务发现': {
2710
+ "task": '蜂群服务发现',
2711
+ "triggers": ["服务发现", "服务查询", "能力发现", "find_service"],
2712
+ "pattern": "def find_service(nodes, capability):\n # 生效条件:nodes 为 (节点名, 能力列表) 序列;capability 为字符串\n # 子功能:① 遍历节点注册表;② 能力成员精确判定;③ 命中节点收集\n # 执行:循环迭代;条件分派\n # 不适用条件:模糊匹配/发现延迟/负载均衡选择不在本单元范围(精确匹配口径)\n hits = []\n for name, caps in nodes:\n if capability in caps:\n hits.append(name)\n return hits",
2713
+ "cases": [
2714
+ (((('节点A', ('时间同步', '文件共享')), ('节点B', ('时间同步',))), '时间同步'), ['节点A', '节点B']),
2715
+ (((('节点A', ('时间同步',)), ('节点B', ('文件共享',))), '文件共享'), ['节点B']),
2716
+ (((('节点A', ('时间同步',)),), '存储'), []),
2717
+ (((), '时间同步'), []),
2718
+ ],
2719
+ "params": [],
2720
+ "calibration": '对照:蓝牙互联网条件卡 F4 服务发现专项(T11 完整版条件卡_其余六目标 目标 7)——蜂群注册表精确匹配口径',
2721
+ },
2722
+ '运算符-in 成员判断': {
2723
+ "task": 'in 成员判断',
2724
+ "triggers": ["in 运算符", "成员判断", "not in"],
2725
+ "pattern": "def mini_in(item, container):\n # 生效条件:container 为 str/list/tuple/dict;item 为可比较值\n # 子功能:① dict 按键判定;② 序列按相等扫描;③ not in 为取反\n # 执行:条件分派;循环迭代\n # 不适用条件:自定义 __contains__ 不在本单元范围(str 为 CPython 子串语义特例)\n if isinstance(container, dict):\n return item in container\n if isinstance(container, str):\n return container.find(item) != -1\n for element in container:\n if element == item:\n return True\n return False",
2726
+ "cases": [
2727
+ ((2, [1, 2, 3]), True),
2728
+ ((9, [1, 2, 3]), False),
2729
+ (('ell', 'hello'), True),
2730
+ (('a', {'a': 1}), True),
2731
+ ],
2732
+ "params": [],
2733
+ "calibration": '对照:mini_python.py in/not in 运算符(V-P4 第一批 6a5e964,comparison+_compare+VM 三处对齐,CPython in 语义)',
2734
+ },
2735
+ '参数-默认值与关键字绑定': {
2736
+ "task": "参数默认值绑定",
2737
+ "triggers": ["默认参数", "关键字参数", "kwargs", "参数绑定"],
2738
+ "pattern": "def mini_bind(params, args, kw):\n # 生效条件:params 为 (名字, 默认值) 列表;args 为位置实参序列;kw 为关键字实参 dict\n # 子功能:① 位置实参按序绑定;② 关键字实参按名绑定;③ 缺省填充默认值\n # 执行:顺序绑定;条件分派\n # 不适用条件:*args/**kwargs 收集形态与重复绑定冲突检测不在本单元范围\n values = {}\n for i, (name, default) in enumerate(params):\n if i < len(args):\n values[name] = args[i]\n elif name in kw:\n values[name] = kw[name]\n else:\n values[name] = default\n return values",
2739
+ "cases": [
2740
+ (((('a', 1), ('b', 2)), (10,), {}), {'a': 10, 'b': 2}),
2741
+ (((('a', 1), ('b', 2)), (10,), {'b': 20}), {'a': 10, 'b': 20}),
2742
+ (((('a', 1),), (), {}), {'a': 1}),
2743
+ ],
2744
+ "params": [],
2745
+ "calibration": '对照:mini_python.py bind_params(V-P4 第三批 d2f796a,AST/VM 共用绑定,默认值在定义环境求值)',
2746
+ },
2747
+ }
2748
+
2749
+
2750
+ def route_python_unit(question):
2751
+ """任务识别(问题 → P 线单元,最长关键词优先)"""
2752
+ best, best_len = None, 0
2753
+ for uid, u in PYTHON_UNITS.items():
2754
+ for kw in (u["task"], uid):
2755
+ if kw in question and len(kw) > best_len:
2756
+ best, best_len = uid, len(kw)
2757
+ return best
2758
+
2759
+
2760
+ if __name__ == "__main__":
2761
+ print("=== Mini-Python 语言机制白箱单元库(P 线自举 · 校准参考)===\n")
2762
+ for uid, u in PYTHON_UNITS.items():
2763
+ print(f"[{uid}] 任务={u['task']} 样例数={len(u['cases'])}")
2764
+ print(f" 校准: {u['calibration']}")
2765
+ print(f"\n=== 判定 ===\nP 线单元库: "
2766
+ f"{'✔ 5 单元就绪(词法/优先级/逻辑/环境/栈机——白箱自举 P 线)' if len(PYTHON_UNITS) >= 4 else '✘'}")