@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.
- package/README.md +104 -483
- package/cordis.yml.example +78 -9
- 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
- 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
- package/docs/README/350/257/246/347/273/206/347/211/210_v0.4.5.md +625 -0
- package/docs/cordis-patch-profile-web.example.yml +49 -5
- package/docs/release_v0.3.0.md +36 -0
- package/docs/release_v0.4.5.md +55 -0
- package/docs/tool_table_v0.3.0.md +117 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/docs//347/274/272/345/217/243/345/215/225_P0/346/224/266/345/217/243_v0.1.md +270 -0
- package/docs//350/234/202/347/276/244/344/272/222/350/201/224_v0.1.md +704 -0
- 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
- 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
- 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
- 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
- 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
- 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
- package/lib/bridge.d.ts +4 -4
- package/lib/bridge.js +4 -4
- package/lib/hooks.d.ts +23 -8
- package/lib/hooks.js +75 -26
- package/lib/index.d.ts +53 -8
- package/lib/index.js +216 -63
- package/lib/lib/datapath.d.ts +16 -0
- package/lib/lib/datapath.js +114 -0
- package/lib/lib/mdcg_client.d.ts +152 -0
- package/lib/lib/mdcg_client.js +266 -0
- package/lib/lib/mutual.d.ts +121 -0
- package/lib/lib/mutual.js +348 -0
- package/lib/lib/roleplay_web.d.ts +6 -0
- package/{src/roleplay_web.ts → lib/lib/roleplay_web.js} +503 -450
- package/lib/lib/whitebox_llm.d.ts +129 -0
- package/lib/lib/whitebox_llm.js +249 -0
- package/lib/tools.d.ts +13 -6
- package/lib/tools.js +41 -55
- package/md_cg/__init__.py +7 -0
- package/md_cg/__pycache__/__init__.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/_dbg_p30.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/_diag_p19.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/_tmp_dbg.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/audit.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/backfill.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/bench_membench.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/bench_p0.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/census.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/chain.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/codeindex.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/consistency.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/consolidate.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/corpus.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/crosscheck.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/crypto.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/datapath.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/docindex.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/evidence.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/evolution.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/export.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/forgetting.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/fsutil.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/identity.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/insight.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/links.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/mcp_server.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/md_whitebox.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/mdcg.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/mdcos.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/metacognition.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/migrate.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/migrate_aeis.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/migrate_roleplay.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/migrate_wisdom_graph.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/nodefile.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/pooling.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/predict.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/protect.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/provenance.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/refindex.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/refine.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/routing.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/scrub.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/security.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/self_state.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/signer.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/sources.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/stg.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/subgraph.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/sustain.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_lock.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_lock.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p0.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p0.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p1.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p1.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p10_identity.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p10_identity.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p11_consistency.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p11_consistency.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p12_metacognition.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p12_metacognition.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p13_encryption.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p13_encryption.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p14_sustain.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p14_sustain.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p15_scrub.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p15_scrub.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p16_self_state.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p17_predict.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p18_whitebox.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p19_migrate_roleplay.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p2.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p2.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p20_evolution.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p21_tokens.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p22_theory.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p23_links.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p24_evidence.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p25_weights.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p26_refindex.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p27_docindex.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p28_refcheck.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p29_session_ingest_export.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p2_mcp.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p2_mcp.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p3.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p3.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p30_maintain.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p31_insight.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p32_backfill.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p33_ccg_wiring.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p34_crosscheck.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p35_conditioned_claim.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p36_kp_align.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p37_condition_space.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p38_contextualize.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p39_vision_evidence.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p40_refine_worklist.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p41_evolve_patrol.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p42_provenance.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p43_pooling.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p44_md_whitebox.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p4_fuzzy.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p4_fuzzy.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p5_semantic.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p5_semantic.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p6_consolidate.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p6_consolidate.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p7_goals_recent.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p7_goals_recent.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p8_subgraph_chain.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p8_subgraph_chain.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/test_p9_forget_protect.cpython-310-pytest-9.1.1.pyc +0 -0
- package/md_cg/__pycache__/test_p9_forget_protect.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/theory.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/tokens.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/vision_evidence.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/weights.cpython-310.pyc +0 -0
- package/md_cg/__pycache__/whitebox.cpython-310.pyc +0 -0
- package/md_cg/audit.py +223 -0
- package/md_cg/backfill.py +1272 -0
- package/md_cg/bench_membench.py +602 -0
- package/md_cg/bench_p0.py +147 -0
- package/md_cg/bench_task_ab.py +237 -0
- package/md_cg/bench_task_ab_llm.py +397 -0
- package/md_cg/census.py +117 -0
- package/md_cg/chain.py +280 -0
- package/md_cg/codeindex.py +359 -0
- package/md_cg/consistency.py +593 -0
- package/md_cg/consolidate.py +1389 -0
- package/md_cg/corpus.py +106 -0
- package/md_cg/crosscheck.py +1058 -0
- package/md_cg/crypto.py +404 -0
- package/md_cg/datapath.py +160 -0
- package/md_cg/docindex.py +333 -0
- package/md_cg/evidence.py +555 -0
- package/md_cg/evolution.py +458 -0
- package/md_cg/export.py +210 -0
- package/md_cg/forgetting.py +552 -0
- package/md_cg/fsutil.py +251 -0
- package/md_cg/identity.py +374 -0
- package/md_cg/insight.py +485 -0
- package/md_cg/links.py +595 -0
- package/md_cg/mcp_server.py +2445 -0
- package/md_cg/md_whitebox.py +271 -0
- package/md_cg/mdcg.py +1210 -0
- package/md_cg/mdcos.py +2505 -0
- package/md_cg/metacognition.py +557 -0
- package/md_cg/migrate.py +115 -0
- package/md_cg/migrate_aeis.py +213 -0
- package/md_cg/migrate_roleplay.py +285 -0
- package/md_cg/migrate_wisdom_graph.py +348 -0
- package/md_cg/nodefile.py +308 -0
- package/md_cg/pooling.py +451 -0
- package/md_cg/predict.py +918 -0
- package/md_cg/protect.py +260 -0
- package/md_cg/provenance.py +321 -0
- package/md_cg/refindex.py +585 -0
- package/md_cg/refine.py +586 -0
- package/md_cg/routing.py +290 -0
- package/md_cg/scrub.py +788 -0
- package/md_cg/security.py +235 -0
- package/md_cg/self_state.py +843 -0
- package/md_cg/signer.py +523 -0
- package/md_cg/sources.py +547 -0
- package/md_cg/stg.py +250 -0
- package/md_cg/subgraph.py +706 -0
- package/md_cg/sustain.py +874 -0
- package/md_cg/test_lock.py +43 -0
- package/md_cg/test_p0.py +250 -0
- package/md_cg/test_p1.py +317 -0
- package/md_cg/test_p10_identity.py +173 -0
- package/md_cg/test_p11_consistency.py +233 -0
- package/md_cg/test_p12_metacognition.py +212 -0
- package/md_cg/test_p13_encryption.py +241 -0
- package/md_cg/test_p14_sustain.py +249 -0
- package/md_cg/test_p15_scrub.py +280 -0
- package/md_cg/test_p16_self_state.py +275 -0
- package/md_cg/test_p17_predict.py +341 -0
- package/md_cg/test_p18_whitebox.py +171 -0
- package/md_cg/test_p19_migrate_roleplay.py +149 -0
- package/md_cg/test_p2.py +205 -0
- package/md_cg/test_p20_evolution.py +315 -0
- package/md_cg/test_p21_tokens.py +270 -0
- package/md_cg/test_p22_theory.py +175 -0
- package/md_cg/test_p23_links.py +311 -0
- package/md_cg/test_p24_evidence.py +227 -0
- package/md_cg/test_p25_weights.py +156 -0
- package/md_cg/test_p26_refindex.py +387 -0
- package/md_cg/test_p27_docindex.py +377 -0
- package/md_cg/test_p28_refcheck.py +305 -0
- package/md_cg/test_p29_session_ingest_export.py +333 -0
- package/md_cg/test_p2_mcp.py +425 -0
- package/md_cg/test_p3.py +252 -0
- package/md_cg/test_p30_maintain.py +330 -0
- package/md_cg/test_p31_insight.py +510 -0
- package/md_cg/test_p32_backfill.py +298 -0
- package/md_cg/test_p33_ccg_wiring.py +293 -0
- package/md_cg/test_p34_crosscheck.py +331 -0
- package/md_cg/test_p35_conditioned_claim.py +252 -0
- package/md_cg/test_p36_kp_align.py +225 -0
- package/md_cg/test_p37_condition_space.py +248 -0
- package/md_cg/test_p38_contextualize.py +273 -0
- package/md_cg/test_p39_vision_evidence.py +369 -0
- package/md_cg/test_p40_refine_worklist.py +241 -0
- package/md_cg/test_p41_evolve_patrol.py +224 -0
- package/md_cg/test_p42_provenance.py +269 -0
- package/md_cg/test_p43_pooling.py +360 -0
- package/md_cg/test_p44_md_whitebox.py +218 -0
- package/md_cg/test_p4_fuzzy.py +223 -0
- package/md_cg/test_p5_semantic.py +226 -0
- package/md_cg/test_p6_consolidate.py +387 -0
- package/md_cg/test_p7_goals_recent.py +202 -0
- package/md_cg/test_p8_subgraph_chain.py +200 -0
- package/md_cg/test_p9_forget_protect.py +231 -0
- package/md_cg/theory.py +259 -0
- package/md_cg/tokens.py +506 -0
- package/md_cg/vision_evidence.py +644 -0
- package/md_cg/weights.py +602 -0
- package/md_cg/whitebox.py +497 -0
- package/md_cg/whitebox_kb/__init__.py +37 -0
- package/md_cg/whitebox_kb/__pycache__/__init__.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/__pycache__/engine.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/aeis_core/__init__.py +42 -0
- package/md_cg/whitebox_kb/aeis_core/__pycache__/__init__.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/aeis_core/__pycache__/core.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/aeis_core/__pycache__/semantic.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/aeis_core/__pycache__/time_core.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/aeis_core/api.py +1042 -0
- package/md_cg/whitebox_kb/aeis_core/core.py +5014 -0
- package/md_cg/whitebox_kb/aeis_core/semantic.py +280 -0
- package/md_cg/whitebox_kb/aeis_core/textutil.py +13 -0
- package/md_cg/whitebox_kb/aeis_core/time_core.py +43 -0
- package/md_cg/whitebox_kb/data/verify_cache.json +1873 -0
- package/md_cg/whitebox_kb/data/verify_savings.jsonl +1330 -0
- package/md_cg/whitebox_kb/engine.py +310 -0
- package/md_cg/whitebox_kb/knowledge/_ccg_dump.json +1 -0
- package/md_cg/whitebox_kb/knowledge/_index.json +15300 -0
- package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/345/234/260/346/240/207.md +22 -0
- package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/346/226/207/345/214/226.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/351/201/227/344/272/247.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/220/215/350/203/234.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/257/223/350/250/200.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/347/245/236/350/257/235.md +22 -0
- package/md_cg/whitebox_kb/knowledge//344/271/246/346/263/225/346/226/207/345/214/226.md +22 -0
- package/md_cg/whitebox_kb/knowledge//344/272/244/351/200/232/345/256/211/345/205/250.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/272/244/351/200/232/351/200/232/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/272/272/344/275/223/347/224/237/347/220/206.md +22 -0
- 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
- package/md_cg/whitebox_kb/knowledge//344/272/272/346/226/207/351/200/232/350/257/206.md +1296 -0
- package/md_cg/whitebox_kb/knowledge//344/272/272/347/211/251/345/216/206/345/217/262.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//344/272/272/351/231/205/346/262/237/351/200/232.md +22 -0
- 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
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/344/271/220/345/231/250.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/205/273/347/224/237.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/216/206/346/263/225.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/267/245/350/211/272.md +148 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/273/272/347/255/221.md +29 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/226/207/345/214/226.md +92 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/243/213/347/261/273.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/255/246/346/234/257.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/347/276/216/345/276/267.md +29 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/347/276/216/351/243/237.md +36 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/350/211/272/346/234/257.md +71 -0
- package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/350/212/202/346/227/245.md +22 -0
- package/md_cg/whitebox_kb/knowledge//344/275/223/350/202/262.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/275/223/350/202/262/350/277/220/345/212/250.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/345/256/211/345/205/250.md +15 -0
- package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/346/212/200/346/234/257.md +22 -0
- 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
- package/md_cg/whitebox_kb/knowledge//345/201/245/345/272/267/344/271/240/346/203/257.md +15 -0
- package/md_cg/whitebox_kb/knowledge//345/201/245/345/272/267/345/270/270/350/257/206.md +50 -0
- package/md_cg/whitebox_kb/knowledge//345/205/211/345/255/246/351/200/232/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//345/205/273/347/224/237/346/226/271/346/263/225.md +15 -0
- package/md_cg/whitebox_kb/knowledge//345/206/233/344/272/213/345/217/262.md +15 -0
- package/md_cg/whitebox_kb/knowledge//345/206/234/344/270/232/345/270/270/350/257/206.md +15 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//345/210/266/345/272/246/345/217/262.md +64 -0
- package/md_cg/whitebox_kb/knowledge//345/211/215/346/262/277/347/247/221/346/212/200.md +36 -0
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//345/216/206/345/217/262/345/234/260/347/220/206.md +29 -0
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//345/217/244/347/224/237/347/211/251.md +22 -0
- 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
- package/md_cg/whitebox_kb/knowledge//345/225/206/344/270/232/345/217/262.md +15 -0
- package/md_cg/whitebox_kb/knowledge//345/231/250/347/211/251/345/267/245/350/211/272.md +15 -0
- package/md_cg/whitebox_kb/knowledge//345/233/255/346/236/227/345/273/272/347/255/221.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//345/233/276/345/203/217/347/224/237/346/210/220.md +99 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//345/255/230/345/234/250/350/256/272.md +43 -0
- package/md_cg/whitebox_kb/knowledge//345/255/246/344/271/240/346/226/271/346/263/225.md +57 -0
- package/md_cg/whitebox_kb/knowledge//345/256/211/345/205/250/345/270/270/350/257/206.md +22 -0
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//345/256/240/347/211/251.md +29 -0
- package/md_cg/whitebox_kb/knowledge//345/256/266/345/272/255/345/205/263/347/263/273.md +29 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//345/267/245/347/250/213/347/247/221/345/255/246.md +22 -0
- package/md_cg/whitebox_kb/knowledge//345/267/245/350/211/272/351/200/232/350/257/206.md +15 -0
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/344/272/272/346/226/207.md +15 -0
- package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/345/216/206/345/217/262.md +43 -0
- package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/350/211/272/346/234/257.md +15 -0
- package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/351/200/232/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//345/275/261/350/247/206/345/270/270/350/257/206.md +29 -0
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//346/200/235/347/273/264/345/256/232/345/276/213.md +29 -0
- 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
- package/md_cg/whitebox_kb/knowledge//346/210/217/346/233/262/350/211/272/346/234/257.md +22 -0
- package/md_cg/whitebox_kb/knowledge//346/210/220/350/257/255/345/205/270/346/225/205.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/211/213/345/267/245/345/270/270/350/257/206.md +15 -0
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//346/224/266/350/227/217/351/233/206/350/227/217.md +92 -0
- 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
- package/md_cg/whitebox_kb/knowledge//346/225/210/347/216/207/346/226/271/346/263/225.md +15 -0
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/227/347/264/240/345/205/273.md +22 -0
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//346/226/207/345/205/267/345/270/270/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/226/207/345/214/226.md +36 -0
- package/md_cg/whitebox_kb/knowledge//346/226/207/345/214/226/351/200/232/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/227/345/255/246.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/227/350/265/267/346/272/220.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//346/226/207/346/225/231/345/216/206/345/217/262.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/226/207/347/211/251/351/200/232/350/257/206.md +22 -0
- package/md_cg/whitebox_kb/knowledge//346/226/207/347/214/256/345/255/246.md +22 -0
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//346/230/206/350/231/253/345/270/270/350/257/206.md +29 -0
- 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
- package/md_cg/whitebox_kb/knowledge//346/233/262/350/211/272/345/270/270/350/257/206.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//346/234/215/351/245/260/346/226/207/345/214/226.md +22 -0
- package/md_cg/whitebox_kb/knowledge//346/234/252/345/210/206/347/261/273.md +52 -0
- package/md_cg/whitebox_kb/knowledge//346/234/272/346/242/260/351/200/232/350/257/206.md +15 -0
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//346/243/213/347/211/214/350/247/204/345/210/231.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/243/213/347/261/273/350/247/204/345/210/231.md +36 -0
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227.md +64 -0
- package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/344/277/241/344/273/260.md +36 -0
- package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/205/273/347/224/237.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/216/206/346/263/225.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/231/250/347/211/251.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/346/226/207/345/214/226.md +22 -0
- package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/350/257/255/350/250/200.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/351/233/205/347/216/251.md +50 -0
- package/md_cg/whitebox_kb/knowledge//346/260/224/350/261/241/345/270/270/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/260/224/350/261/241/351/200/232/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//346/261/202/350/201/214/346/212/200/350/203/275.md +29 -0
- package/md_cg/whitebox_kb/knowledge//346/262/237/351/200/232.md +29 -0
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//346/265/267/346/264/213/347/224/237/347/211/251.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//347/203/271/351/245/252/346/212/200/346/263/225.md +15 -0
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/345/215/253/347/224/237.md +15 -0
- package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/345/270/270/350/257/206.md +1296 -0
- package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/346/212/200/350/203/275.md +43 -0
- package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/347/247/221/346/212/200.md +22 -0
- package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/351/200/232/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//347/224/237/347/211/251/344/277/235/346/212/244.md +36 -0
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//347/231/275/347/256/261/345/215/217/350/256/256.md +22 -0
- package/md_cg/whitebox_kb/knowledge//347/233/212/346/231/272/346/270/270/346/210/217.md +15 -0
- package/md_cg/whitebox_kb/knowledge//347/233/212/346/231/272/351/200/232/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//347/244/276/344/272/244/346/212/200/345/267/247.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//347/244/276/344/274/232/347/247/221/345/255/246.md +43 -0
- package/md_cg/whitebox_kb/knowledge//347/245/236/350/257/235/344/274/240/350/257/264.md +15 -0
- package/md_cg/whitebox_kb/knowledge//347/247/221/345/255/246/345/217/262.md +22 -0
- package/md_cg/whitebox_kb/knowledge//347/247/221/346/212/200/351/200/232/350/257/206.md +78 -0
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//347/273/217/346/265/216/345/217/262.md +43 -0
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213-Git.md +15 -0
- package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213-JS.md +15 -0
- package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213/346/246/202/345/277/265.md +15 -0
- package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213/350/257/255/350/250/200.md +120 -0
- 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
- package/md_cg/whitebox_kb/knowledge//347/275/221/347/273/234/345/256/211/345/205/250.md +34 -0
- package/md_cg/whitebox_kb/knowledge//350/200/203/345/217/244/345/270/270/350/257/206.md +64 -0
- 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
- package/md_cg/whitebox_kb/knowledge//350/211/272/346/234/257/345/220/215/345/256/266.md +15 -0
- package/md_cg/whitebox_kb/knowledge//350/211/272/346/234/257/346/265/201/346/264/276.md +15 -0
- package/md_cg/whitebox_kb/knowledge//350/214/266/346/226/207/345/214/226.md +15 -0
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//350/264/247/345/270/201/345/217/262.md +15 -0
- package/md_cg/whitebox_kb/knowledge//350/264/247/345/270/201/345/270/270/350/257/206.md +15 -0
- 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
- package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/345/201/245/345/272/267.md +15 -0
- package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/345/270/270/350/257/206.md +15 -0
- package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/347/247/221/345/255/246.md +22 -0
- package/md_cg/whitebox_kb/knowledge//350/277/221/344/270/226/346/234/215/351/245/260.md +15 -0
- package/md_cg/whitebox_kb/knowledge//351/200/273/350/276/221/345/255/246.md +14 -0
- 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
- 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
- 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
- package/md_cg/whitebox_kb/knowledge//351/235/236/351/201/227/350/211/272/346/234/257.md +43 -0
- package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220.md +15 -0
- package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220/345/220/215/345/256/266.md +22 -0
- package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220/345/270/270/350/257/206.md +29 -0
- package/md_cg/whitebox_kb/knowledge//351/243/237/345/223/201/347/247/221/345/255/246.md +57 -0
- package/md_cg/whitebox_kb/knowledge//351/245/256/351/243/237/345/270/270/350/257/206.md +29 -0
- package/md_cg/whitebox_kb/knowledge//351/245/256/351/243/237/346/226/207/345/214/226.md +29 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/seed_knowledge/__init__.py +2 -0
- package/md_cg/whitebox_kb/seed_knowledge/guardrail-charter.md +164 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/seed_knowledge//346/231/272/350/203/275/350/256/2723.3.md +4620 -0
- package/md_cg/whitebox_kb/wisdom/__init__.py +6 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/browser_units.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/chat_engine.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/code_compose.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/compiler_code_units.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/condition_frame.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/condition_kb.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/danmaku_audit.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/graph_db_units.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/net_units.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/neural_retrieve.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/os_units.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/python_code_units.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/route_memory.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/semantic_translate.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/verifier.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/verify_answer.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/wisdom_book.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/__pycache__/wisdom_cloud.cpython-310.pyc +0 -0
- package/md_cg/whitebox_kb/wisdom/answer_spec_anchor.py +87 -0
- package/md_cg/whitebox_kb/wisdom/audit_log/chain_heat.json +26 -0
- package/md_cg/whitebox_kb/wisdom/browser_units.py +2631 -0
- package/md_cg/whitebox_kb/wisdom/card_validator.py +223 -0
- package/md_cg/whitebox_kb/wisdom/causal_discover.py +313 -0
- package/md_cg/whitebox_kb/wisdom/chat.html +185 -0
- package/md_cg/whitebox_kb/wisdom/chat_engine.py +1506 -0
- package/md_cg/whitebox_kb/wisdom/code_compose.py +730 -0
- package/md_cg/whitebox_kb/wisdom/code_qa.py +119 -0
- package/md_cg/whitebox_kb/wisdom/code_route_bridge.py +90 -0
- package/md_cg/whitebox_kb/wisdom/code_solidified.json +6196 -0
- package/md_cg/whitebox_kb/wisdom/code_test_runner.py +217 -0
- package/md_cg/whitebox_kb/wisdom/codegraph_white.py +312 -0
- package/md_cg/whitebox_kb/wisdom/compiler_code_units.py +3033 -0
- package/md_cg/whitebox_kb/wisdom/compiler_compose.py +160 -0
- package/md_cg/whitebox_kb/wisdom/compose_engine.py +1633 -0
- package/md_cg/whitebox_kb/wisdom/condition_algebra.py +112 -0
- package/md_cg/whitebox_kb/wisdom/condition_frame.py +315 -0
- package/md_cg/whitebox_kb/wisdom/condition_kb.py +108 -0
- package/md_cg/whitebox_kb/wisdom/condition_vm.py +264 -0
- package/md_cg/whitebox_kb/wisdom/conflict_map.json +4446 -0
- package/md_cg/whitebox_kb/wisdom/core/compiler.py +301 -0
- package/md_cg/whitebox_kb/wisdom/core/condition_vm.py +298 -0
- package/md_cg/whitebox_kb/wisdom/core/lexer.py +512 -0
- package/md_cg/whitebox_kb/wisdom/core/name_checker.py +1023 -0
- package/md_cg/whitebox_kb/wisdom/core/parser.py +1065 -0
- package/md_cg/whitebox_kb/wisdom/cspmn.py +258 -0
- package/md_cg/whitebox_kb/wisdom/csre.py +256 -0
- package/md_cg/whitebox_kb/wisdom/csre_lexicon_index.npz +0 -0
- package/md_cg/whitebox_kb/wisdom/danmaku_audit.py +252 -0
- package/md_cg/whitebox_kb/wisdom/danmaku_bridge.py +141 -0
- package/md_cg/whitebox_kb/wisdom/distilled_condition_units.json +6418 -0
- package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902b.json +1951 -0
- package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902c.json +1297 -0
- package/md_cg/whitebox_kb/wisdom/docs/codegraph_ref_rating.md +52 -0
- package/md_cg/whitebox_kb/wisdom/docs/daoti_absorb_analysis.md +54 -0
- package/md_cg/whitebox_kb/wisdom/docs/dsh_memory_v030_stable.md +34 -0
- package/md_cg/whitebox_kb/wisdom/docs/github_absorb_analysis.md +71 -0
- package/md_cg/whitebox_kb/wisdom/docs/gliding_horse_absorb_analysis.md +47 -0
- package/md_cg/whitebox_kb/wisdom/docs/whitebox_capability_graph.md +61 -0
- package/md_cg/whitebox_kb/wisdom/docs/whitebox_capability_graph_demo.json +60 -0
- package/md_cg/whitebox_kb/wisdom/docs/whitebox_code_rating_202609.md +43 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/md_cg/whitebox_kb/wisdom/ds_compose.py +177 -0
- package/md_cg/whitebox_kb/wisdom/graph_db_units.py +3089 -0
- package/md_cg/whitebox_kb/wisdom/graph_qa.py +123 -0
- package/md_cg/whitebox_kb/wisdom/human_observer_knowledge.json +43 -0
- package/md_cg/whitebox_kb/wisdom/knowledge_points.py +234 -0
- package/md_cg/whitebox_kb/wisdom/merge_subgraph.py +178 -0
- package/md_cg/whitebox_kb/wisdom/migrate_wisdom.py +475 -0
- package/md_cg/whitebox_kb/wisdom/mini_python.py +958 -0
- package/md_cg/whitebox_kb/wisdom/multilang_ir.py +124 -0
- package/md_cg/whitebox_kb/wisdom/navigate.py +248 -0
- package/md_cg/whitebox_kb/wisdom/net_units.py +2895 -0
- package/md_cg/whitebox_kb/wisdom/neural_index.json +3032 -0
- package/md_cg/whitebox_kb/wisdom/neural_index.npz +0 -0
- package/md_cg/whitebox_kb/wisdom/neural_retrieve.py +224 -0
- package/md_cg/whitebox_kb/wisdom/os_units.py +2735 -0
- package/md_cg/whitebox_kb/wisdom/pattern_separation.py +223 -0
- package/md_cg/whitebox_kb/wisdom/prereq_map.json +365 -0
- package/md_cg/whitebox_kb/wisdom/python_code_units.py +2766 -0
- package/md_cg/whitebox_kb/wisdom/role_compose.py +268 -0
- package/md_cg/whitebox_kb/wisdom/role_solidified.json +8 -0
- package/md_cg/whitebox_kb/wisdom/route_memory.py +244 -0
- package/md_cg/whitebox_kb/wisdom/scene_reconstruction.py +148 -0
- package/md_cg/whitebox_kb/wisdom/se_compose.py +137 -0
- package/md_cg/whitebox_kb/wisdom/semantic_translate.py +4050 -0
- package/md_cg/whitebox_kb/wisdom/snr_dashboard.py +219 -0
- package/md_cg/whitebox_kb/wisdom/snr_report.json +41 -0
- package/md_cg/whitebox_kb/wisdom/spatial_closure.py +96 -0
- package/md_cg/whitebox_kb/wisdom/spatial_qa.py +182 -0
- package/md_cg/whitebox_kb/wisdom/status_terms.json +21 -0
- package/md_cg/whitebox_kb/wisdom/task_discipline.json +43 -0
- package/md_cg/whitebox_kb/wisdom/test_code_compose_domains.py +7541 -0
- package/md_cg/whitebox_kb/wisdom/test_compiler_self_bootstrap.py +354 -0
- package/md_cg/whitebox_kb/wisdom/test_ecosystem_assembly.py +158 -0
- package/md_cg/whitebox_kb/wisdom/test_ecosystem_demos.py +193 -0
- package/md_cg/whitebox_kb/wisdom/test_graph_db.py +292 -0
- package/md_cg/whitebox_kb/wisdom/test_navigate_self_bootstrap.py +69 -0
- package/md_cg/whitebox_kb/wisdom/test_python_self_bootstrap.py +160 -0
- package/md_cg/whitebox_kb/wisdom/trigger_words_index.json +4367 -0
- package/md_cg/whitebox_kb/wisdom/verifier.py +1012 -0
- package/md_cg/whitebox_kb/wisdom/verify_answer.py +116 -0
- package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db +0 -0
- package/md_cg/whitebox_kb/wisdom/wisdom_book.py +2582 -0
- package/md_cg/whitebox_kb/wisdom/wisdom_cloud.py +479 -0
- package/md_cg/whitebox_kb/wisdom/wisdom_ui.html +863 -0
- package/package.json +4 -2
- package/skills/README.md +108 -0
- package/skills/plugin.json +52 -0
- package/skills/skills/analyze-type-infer/SKILL.md +45 -0
- package/skills/skills/browser-02898b15/SKILL.md +45 -0
- package/skills/skills/browser-03b04f98/SKILL.md +45 -0
- package/skills/skills/browser-0754386d/SKILL.md +45 -0
- package/skills/skills/browser-093c03ab/SKILL.md +45 -0
- package/skills/skills/browser-09e60b35/SKILL.md +45 -0
- package/skills/skills/browser-0ab4f2db/SKILL.md +45 -0
- package/skills/skills/browser-0c7f88d6/SKILL.md +45 -0
- package/skills/skills/browser-0f598430/SKILL.md +45 -0
- package/skills/skills/browser-0fd64fa5/SKILL.md +45 -0
- package/skills/skills/browser-17906c62/SKILL.md +45 -0
- package/skills/skills/browser-18f823e2/SKILL.md +45 -0
- package/skills/skills/browser-1bafe81c/SKILL.md +45 -0
- package/skills/skills/browser-1f9ab1f0/SKILL.md +45 -0
- package/skills/skills/browser-1fdb5852/SKILL.md +45 -0
- package/skills/skills/browser-21b0359c/SKILL.md +45 -0
- package/skills/skills/browser-22e8de36/SKILL.md +45 -0
- package/skills/skills/browser-24163519/SKILL.md +45 -0
- package/skills/skills/browser-2471a991/SKILL.md +45 -0
- package/skills/skills/browser-25afee4d/SKILL.md +45 -0
- package/skills/skills/browser-283a91bd/SKILL.md +45 -0
- package/skills/skills/browser-2895ff52/SKILL.md +45 -0
- package/skills/skills/browser-2cc1da58/SKILL.md +45 -0
- package/skills/skills/browser-3189fe6f/SKILL.md +45 -0
- package/skills/skills/browser-31f2b08f/SKILL.md +45 -0
- package/skills/skills/browser-37b8339e/SKILL.md +45 -0
- package/skills/skills/browser-396ec3a6/SKILL.md +45 -0
- package/skills/skills/browser-3df2f904/SKILL.md +45 -0
- package/skills/skills/browser-43154cec/SKILL.md +45 -0
- package/skills/skills/browser-434b74b8/SKILL.md +45 -0
- package/skills/skills/browser-440d4398/SKILL.md +45 -0
- package/skills/skills/browser-44d7f183/SKILL.md +45 -0
- package/skills/skills/browser-4d6c0788/SKILL.md +45 -0
- package/skills/skills/browser-50fecd89/SKILL.md +45 -0
- package/skills/skills/browser-555c0626/SKILL.md +45 -0
- package/skills/skills/browser-57312d24/SKILL.md +45 -0
- package/skills/skills/browser-59a0ada4/SKILL.md +45 -0
- package/skills/skills/browser-5a455aeb/SKILL.md +45 -0
- package/skills/skills/browser-5ae7623a/SKILL.md +45 -0
- package/skills/skills/browser-5dac60b6/SKILL.md +45 -0
- package/skills/skills/browser-5e5f1396/SKILL.md +45 -0
- package/skills/skills/browser-5ebb01dd/SKILL.md +45 -0
- package/skills/skills/browser-5f5453f9/SKILL.md +45 -0
- package/skills/skills/browser-5f90f58c/SKILL.md +45 -0
- package/skills/skills/browser-609362ee/SKILL.md +45 -0
- package/skills/skills/browser-60aefeeb/SKILL.md +45 -0
- package/skills/skills/browser-6636d49c/SKILL.md +45 -0
- package/skills/skills/browser-6cfcb6db/SKILL.md +45 -0
- package/skills/skills/browser-6e1c1158/SKILL.md +45 -0
- package/skills/skills/browser-7008e942/SKILL.md +45 -0
- package/skills/skills/browser-716cd26c/SKILL.md +45 -0
- package/skills/skills/browser-720ce1a1/SKILL.md +45 -0
- package/skills/skills/browser-77a97b43/SKILL.md +45 -0
- package/skills/skills/browser-7bb4871d/SKILL.md +45 -0
- package/skills/skills/browser-7be57bbe/SKILL.md +45 -0
- package/skills/skills/browser-7da433f3/SKILL.md +45 -0
- package/skills/skills/browser-7e96fe1d/SKILL.md +45 -0
- package/skills/skills/browser-7f9cefec/SKILL.md +45 -0
- package/skills/skills/browser-80224e71/SKILL.md +45 -0
- package/skills/skills/browser-81345ecd/SKILL.md +45 -0
- package/skills/skills/browser-822cfa44/SKILL.md +45 -0
- package/skills/skills/browser-853690c0/SKILL.md +45 -0
- package/skills/skills/browser-85553126/SKILL.md +45 -0
- package/skills/skills/browser-87b0ce80/SKILL.md +45 -0
- package/skills/skills/browser-900c4484/SKILL.md +45 -0
- package/skills/skills/browser-910405c4/SKILL.md +45 -0
- package/skills/skills/browser-95fd3c86/SKILL.md +45 -0
- package/skills/skills/browser-97a14ca3/SKILL.md +45 -0
- package/skills/skills/browser-9de10895/SKILL.md +45 -0
- package/skills/skills/browser-9e4914a7/SKILL.md +45 -0
- package/skills/skills/browser-a280ec64/SKILL.md +45 -0
- package/skills/skills/browser-a2d9b0b0/SKILL.md +45 -0
- package/skills/skills/browser-a372edeb/SKILL.md +45 -0
- package/skills/skills/browser-a4c793a4/SKILL.md +45 -0
- package/skills/skills/browser-a681d0c2/SKILL.md +45 -0
- package/skills/skills/browser-a7a2b0c1/SKILL.md +45 -0
- package/skills/skills/browser-a990e68e/SKILL.md +45 -0
- package/skills/skills/browser-aaac4eec/SKILL.md +45 -0
- package/skills/skills/browser-ae6586bb/SKILL.md +45 -0
- package/skills/skills/browser-afa4091f/SKILL.md +45 -0
- package/skills/skills/browser-b4c8cf65/SKILL.md +45 -0
- package/skills/skills/browser-b501767c/SKILL.md +45 -0
- package/skills/skills/browser-bcd4288d/SKILL.md +45 -0
- package/skills/skills/browser-bfad66a5/SKILL.md +45 -0
- package/skills/skills/browser-c45cbfe9/SKILL.md +45 -0
- package/skills/skills/browser-c4dd6078/SKILL.md +45 -0
- package/skills/skills/browser-c879eb0b/SKILL.md +45 -0
- package/skills/skills/browser-c92ac01b/SKILL.md +45 -0
- package/skills/skills/browser-cb179242/SKILL.md +45 -0
- package/skills/skills/browser-cc7d3d6d/SKILL.md +45 -0
- package/skills/skills/browser-cf3c47f0/SKILL.md +45 -0
- package/skills/skills/browser-cf9f812e/SKILL.md +45 -0
- package/skills/skills/browser-d462581c/SKILL.md +45 -0
- package/skills/skills/browser-d5fa0b7f/SKILL.md +45 -0
- package/skills/skills/browser-d72e225b/SKILL.md +45 -0
- package/skills/skills/browser-df1a919e/SKILL.md +45 -0
- package/skills/skills/browser-e84565c1/SKILL.md +45 -0
- package/skills/skills/browser-e947a564/SKILL.md +45 -0
- package/skills/skills/browser-ea9b2b8e/SKILL.md +45 -0
- package/skills/skills/browser-f5ffc6d9/SKILL.md +45 -0
- package/skills/skills/browser-f75a4418/SKILL.md +45 -0
- package/skills/skills/browser-f8f2966e/SKILL.md +45 -0
- package/skills/skills/browser-fa65fa2d/SKILL.md +45 -0
- package/skills/skills/browser-faac8812/SKILL.md +45 -0
- package/skills/skills/browser-ff94a671/SKILL.md +45 -0
- package/skills/skills/check-name-real/SKILL.md +45 -0
- package/skills/skills/compile-assign/SKILL.md +45 -0
- package/skills/skills/compile-expr-tree/SKILL.md +45 -0
- package/skills/skills/compile-full-pipeline/SKILL.md +45 -0
- package/skills/skills/compile-func-def/SKILL.md +45 -0
- package/skills/skills/compile-if-then/SKILL.md +45 -0
- package/skills/skills/compile-logic-expr/SKILL.md +45 -0
- package/skills/skills/compile-recursive/SKILL.md +45 -0
- package/skills/skills/compile-scope/SKILL.md +45 -0
- package/skills/skills/compile-type-check/SKILL.md +45 -0
- package/skills/skills/compile-while/SKILL.md +45 -0
- package/skills/skills/compiler-0010c4bf/SKILL.md +45 -0
- package/skills/skills/compiler-0355bffb/SKILL.md +45 -0
- package/skills/skills/compiler-0361708a/SKILL.md +45 -0
- package/skills/skills/compiler-054a0414/SKILL.md +45 -0
- package/skills/skills/compiler-05a1691a/SKILL.md +45 -0
- package/skills/skills/compiler-05eeed1e/SKILL.md +45 -0
- package/skills/skills/compiler-0622a1f6/SKILL.md +45 -0
- package/skills/skills/compiler-08b54217/SKILL.md +45 -0
- package/skills/skills/compiler-0a62b70c/SKILL.md +45 -0
- package/skills/skills/compiler-0ab24d00/SKILL.md +45 -0
- package/skills/skills/compiler-0e093688/SKILL.md +45 -0
- package/skills/skills/compiler-0e82b966/SKILL.md +45 -0
- package/skills/skills/compiler-0ee9b9b9/SKILL.md +45 -0
- package/skills/skills/compiler-0f3787e6/SKILL.md +45 -0
- package/skills/skills/compiler-1028685f/SKILL.md +45 -0
- package/skills/skills/compiler-11897630/SKILL.md +45 -0
- package/skills/skills/compiler-16661b9b/SKILL.md +45 -0
- package/skills/skills/compiler-1f722303/SKILL.md +45 -0
- package/skills/skills/compiler-25be1262/SKILL.md +45 -0
- package/skills/skills/compiler-2a76ba07/SKILL.md +45 -0
- package/skills/skills/compiler-2dbea54a/SKILL.md +45 -0
- package/skills/skills/compiler-2df52f16/SKILL.md +45 -0
- package/skills/skills/compiler-2ec2c9d2/SKILL.md +45 -0
- package/skills/skills/compiler-2f8c8f39/SKILL.md +45 -0
- package/skills/skills/compiler-38378ac7/SKILL.md +45 -0
- package/skills/skills/compiler-39457d2e/SKILL.md +45 -0
- package/skills/skills/compiler-39fb5926/SKILL.md +45 -0
- package/skills/skills/compiler-47f4fbfa/SKILL.md +45 -0
- package/skills/skills/compiler-4a8cd1f1/SKILL.md +45 -0
- package/skills/skills/compiler-4b230b6b/SKILL.md +45 -0
- package/skills/skills/compiler-4cbbda95/SKILL.md +45 -0
- package/skills/skills/compiler-4d5a68ff/SKILL.md +45 -0
- package/skills/skills/compiler-56dc9bdd/SKILL.md +45 -0
- package/skills/skills/compiler-57e76ebe/SKILL.md +45 -0
- package/skills/skills/compiler-61ff016b/SKILL.md +45 -0
- package/skills/skills/compiler-63eae588/SKILL.md +45 -0
- package/skills/skills/compiler-64c4224b/SKILL.md +45 -0
- package/skills/skills/compiler-66377955/SKILL.md +45 -0
- package/skills/skills/compiler-674ab4f6/SKILL.md +45 -0
- package/skills/skills/compiler-6af76fd6/SKILL.md +45 -0
- package/skills/skills/compiler-6d979db2/SKILL.md +45 -0
- package/skills/skills/compiler-6de326c0/SKILL.md +45 -0
- package/skills/skills/compiler-6f1c0eea/SKILL.md +45 -0
- package/skills/skills/compiler-724d6c9b/SKILL.md +45 -0
- package/skills/skills/compiler-7690177f/SKILL.md +45 -0
- package/skills/skills/compiler-7b229a7d/SKILL.md +45 -0
- package/skills/skills/compiler-7f471b3a/SKILL.md +45 -0
- package/skills/skills/compiler-815cad08/SKILL.md +45 -0
- package/skills/skills/compiler-83c61634/SKILL.md +45 -0
- package/skills/skills/compiler-8c798c81/SKILL.md +45 -0
- package/skills/skills/compiler-8dd747ac/SKILL.md +45 -0
- package/skills/skills/compiler-90324d0a/SKILL.md +45 -0
- package/skills/skills/compiler-94b8d72d/SKILL.md +45 -0
- package/skills/skills/compiler-94f12231/SKILL.md +45 -0
- package/skills/skills/compiler-95937c16/SKILL.md +45 -0
- package/skills/skills/compiler-98a5625b/SKILL.md +45 -0
- package/skills/skills/compiler-98b4c42f/SKILL.md +45 -0
- package/skills/skills/compiler-98e3894a/SKILL.md +45 -0
- package/skills/skills/compiler-9bdfe4b8/SKILL.md +45 -0
- package/skills/skills/compiler-9d9b4e83/SKILL.md +45 -0
- package/skills/skills/compiler-9f7be5ad/SKILL.md +45 -0
- package/skills/skills/compiler-a6daf076/SKILL.md +45 -0
- package/skills/skills/compiler-a7995a0c/SKILL.md +45 -0
- package/skills/skills/compiler-a8399248/SKILL.md +45 -0
- package/skills/skills/compiler-aabbd099/SKILL.md +45 -0
- package/skills/skills/compiler-afe169d8/SKILL.md +45 -0
- package/skills/skills/compiler-b0678bda/SKILL.md +45 -0
- package/skills/skills/compiler-b09bd196/SKILL.md +45 -0
- package/skills/skills/compiler-b1396e23/SKILL.md +45 -0
- package/skills/skills/compiler-b9b31ce0/SKILL.md +45 -0
- package/skills/skills/compiler-c10264a7/SKILL.md +45 -0
- package/skills/skills/compiler-cb1e8e4b/SKILL.md +45 -0
- package/skills/skills/compiler-ccafd438/SKILL.md +45 -0
- package/skills/skills/compiler-cda9c262/SKILL.md +45 -0
- package/skills/skills/compiler-ce648068/SKILL.md +45 -0
- package/skills/skills/compiler-cf5776a4/SKILL.md +45 -0
- package/skills/skills/compiler-d974e5d3/SKILL.md +45 -0
- package/skills/skills/compiler-e3979fd3/SKILL.md +45 -0
- package/skills/skills/compiler-eb1cf2b5/SKILL.md +45 -0
- package/skills/skills/compiler-ecb30d5b/SKILL.md +45 -0
- package/skills/skills/compiler-f8c8b24b/SKILL.md +45 -0
- package/skills/skills/compiler-f99fedbe/SKILL.md +45 -0
- package/skills/skills/compiler-fa8ff5f7/SKILL.md +45 -0
- package/skills/skills/compiler-fe1b058d/SKILL.md +45 -0
- package/skills/skills/designer-perspective/SKILL.md +157 -0
- package/skills/skills/designer-perspective/references/01-observation-position.md +66 -0
- package/skills/skills/designer-perspective/references/02-structure-recognition.md +62 -0
- package/skills/skills/designer-perspective/references/03-direction-judgment.md +55 -0
- package/skills/skills/designer-perspective/references/04-qualification-verdict.md +72 -0
- package/skills/skills/designer-perspective/references/05-condition-attribution.md +74 -0
- package/skills/skills/designer-perspective/scripts/__pycache__/designer.cpython-310.pyc +0 -0
- package/skills/skills/designer-perspective/scripts/designer.py +527 -0
- package/skills/skills/designer-perspective/tests/cases.jsonl +17 -0
- package/skills/skills/designer-perspective/tests/selftest.py +60 -0
- package/skills/skills/graph-04cd431b/SKILL.md +45 -0
- package/skills/skills/graph-06e2b1f2/SKILL.md +45 -0
- package/skills/skills/graph-0de12477/SKILL.md +45 -0
- package/skills/skills/graph-0e564e68/SKILL.md +45 -0
- package/skills/skills/graph-10d58a7b/SKILL.md +45 -0
- package/skills/skills/graph-12cd830a/SKILL.md +45 -0
- package/skills/skills/graph-185f2cd2/SKILL.md +45 -0
- package/skills/skills/graph-19a6a301/SKILL.md +45 -0
- package/skills/skills/graph-1b266557/SKILL.md +45 -0
- package/skills/skills/graph-1b707621/SKILL.md +45 -0
- package/skills/skills/graph-1d73b597/SKILL.md +45 -0
- package/skills/skills/graph-2041fa98/SKILL.md +45 -0
- package/skills/skills/graph-2461bc41/SKILL.md +45 -0
- package/skills/skills/graph-2465dff8/SKILL.md +45 -0
- package/skills/skills/graph-2508389f/SKILL.md +45 -0
- package/skills/skills/graph-276d554d/SKILL.md +45 -0
- package/skills/skills/graph-299f4a32/SKILL.md +45 -0
- package/skills/skills/graph-2d455cd8/SKILL.md +45 -0
- package/skills/skills/graph-2fddf701/SKILL.md +45 -0
- package/skills/skills/graph-33385442/SKILL.md +45 -0
- package/skills/skills/graph-34a1dba7/SKILL.md +45 -0
- package/skills/skills/graph-3721be1c/SKILL.md +45 -0
- package/skills/skills/graph-3755dbc9/SKILL.md +45 -0
- package/skills/skills/graph-37a45d4b/SKILL.md +45 -0
- package/skills/skills/graph-3a4a984c/SKILL.md +45 -0
- package/skills/skills/graph-3aa4c941/SKILL.md +45 -0
- package/skills/skills/graph-3b69a528/SKILL.md +45 -0
- package/skills/skills/graph-3bc2eb69/SKILL.md +45 -0
- package/skills/skills/graph-3d255ed4/SKILL.md +45 -0
- package/skills/skills/graph-3d34961d/SKILL.md +45 -0
- package/skills/skills/graph-3e18a380/SKILL.md +45 -0
- package/skills/skills/graph-3f920bf3/SKILL.md +45 -0
- package/skills/skills/graph-40b7bf61/SKILL.md +45 -0
- package/skills/skills/graph-42187d5d/SKILL.md +45 -0
- package/skills/skills/graph-4361c60e/SKILL.md +45 -0
- package/skills/skills/graph-44e56113/SKILL.md +45 -0
- package/skills/skills/graph-4b363727/SKILL.md +45 -0
- package/skills/skills/graph-52e6e216/SKILL.md +45 -0
- package/skills/skills/graph-53fbfef5/SKILL.md +45 -0
- package/skills/skills/graph-54ac2988/SKILL.md +45 -0
- package/skills/skills/graph-580dadcd/SKILL.md +45 -0
- package/skills/skills/graph-5ca34baa/SKILL.md +45 -0
- package/skills/skills/graph-5cb7fbdf/SKILL.md +45 -0
- package/skills/skills/graph-5f894c05/SKILL.md +45 -0
- package/skills/skills/graph-656e7bd4/SKILL.md +45 -0
- package/skills/skills/graph-6dc48231/SKILL.md +45 -0
- package/skills/skills/graph-7186924a/SKILL.md +45 -0
- package/skills/skills/graph-72ce5342/SKILL.md +45 -0
- package/skills/skills/graph-7376a24e/SKILL.md +45 -0
- package/skills/skills/graph-7412a7cb/SKILL.md +45 -0
- package/skills/skills/graph-7becedf0/SKILL.md +45 -0
- package/skills/skills/graph-7c38fbf3/SKILL.md +45 -0
- package/skills/skills/graph-7dc36de7/SKILL.md +45 -0
- package/skills/skills/graph-7fe49de7/SKILL.md +45 -0
- package/skills/skills/graph-80d82194/SKILL.md +45 -0
- package/skills/skills/graph-85bf101e/SKILL.md +45 -0
- package/skills/skills/graph-8650548b/SKILL.md +45 -0
- package/skills/skills/graph-86583b09/SKILL.md +45 -0
- package/skills/skills/graph-8727827c/SKILL.md +45 -0
- package/skills/skills/graph-873fb505/SKILL.md +45 -0
- package/skills/skills/graph-89b11de0/SKILL.md +45 -0
- package/skills/skills/graph-8d7b569b/SKILL.md +45 -0
- package/skills/skills/graph-8e920d5d/SKILL.md +45 -0
- package/skills/skills/graph-8eb38e3d/SKILL.md +45 -0
- package/skills/skills/graph-94582f69/SKILL.md +45 -0
- package/skills/skills/graph-947355f7/SKILL.md +45 -0
- package/skills/skills/graph-9507aff7/SKILL.md +45 -0
- package/skills/skills/graph-95b86a8b/SKILL.md +45 -0
- package/skills/skills/graph-96b85e1f/SKILL.md +45 -0
- package/skills/skills/graph-97b22f09/SKILL.md +45 -0
- package/skills/skills/graph-9833cfda/SKILL.md +45 -0
- package/skills/skills/graph-9aa8a3f4/SKILL.md +45 -0
- package/skills/skills/graph-9f6665c0/SKILL.md +45 -0
- package/skills/skills/graph-a125d282/SKILL.md +45 -0
- package/skills/skills/graph-a49ef4f0/SKILL.md +45 -0
- package/skills/skills/graph-a5cd04ae/SKILL.md +45 -0
- package/skills/skills/graph-add9a63b/SKILL.md +45 -0
- package/skills/skills/graph-b00e3dc7/SKILL.md +45 -0
- package/skills/skills/graph-b33a7662/SKILL.md +45 -0
- package/skills/skills/graph-b76d15ee/SKILL.md +45 -0
- package/skills/skills/graph-b77fa05a/SKILL.md +45 -0
- package/skills/skills/graph-b912fc3b/SKILL.md +45 -0
- package/skills/skills/graph-baf61b7c/SKILL.md +45 -0
- package/skills/skills/graph-c1d5687b/SKILL.md +45 -0
- package/skills/skills/graph-c407bbed/SKILL.md +45 -0
- package/skills/skills/graph-c4676460/SKILL.md +45 -0
- package/skills/skills/graph-c4a59d80/SKILL.md +45 -0
- package/skills/skills/graph-c5815621/SKILL.md +45 -0
- package/skills/skills/graph-ccad55f1/SKILL.md +45 -0
- package/skills/skills/graph-d0677ce1/SKILL.md +45 -0
- package/skills/skills/graph-d1289b39/SKILL.md +45 -0
- package/skills/skills/graph-d15f39b1/SKILL.md +45 -0
- package/skills/skills/graph-d40691ca/SKILL.md +45 -0
- package/skills/skills/graph-d43b387a/SKILL.md +45 -0
- package/skills/skills/graph-d4dd02f4/SKILL.md +45 -0
- package/skills/skills/graph-d724ea18/SKILL.md +45 -0
- package/skills/skills/graph-d74d36fd/SKILL.md +45 -0
- package/skills/skills/graph-d9d3934c/SKILL.md +45 -0
- package/skills/skills/graph-ddf563ff/SKILL.md +45 -0
- package/skills/skills/graph-de00894f/SKILL.md +45 -0
- package/skills/skills/graph-df1ebb63/SKILL.md +45 -0
- package/skills/skills/graph-e2905c20/SKILL.md +45 -0
- package/skills/skills/graph-e4f8cefd/SKILL.md +45 -0
- package/skills/skills/graph-ea3150e7/SKILL.md +45 -0
- package/skills/skills/graph-eb4ac7dd/SKILL.md +45 -0
- package/skills/skills/graph-ee9f6dfa/SKILL.md +45 -0
- package/skills/skills/graph-f055b2ea/SKILL.md +45 -0
- package/skills/skills/graph-f1891287/SKILL.md +45 -0
- package/skills/skills/graph-f1bb5aa1/SKILL.md +45 -0
- package/skills/skills/graph-f56fa220/SKILL.md +45 -0
- package/skills/skills/graph-f729034f/SKILL.md +45 -0
- package/skills/skills/graph-f748a63f/SKILL.md +45 -0
- package/skills/skills/graph-f8c4a59e/SKILL.md +45 -0
- package/skills/skills/graph-fca3d129/SKILL.md +45 -0
- package/skills/skills/graph-fd02d934/SKILL.md +45 -0
- package/skills/skills/graph-fd51ece9/SKILL.md +45 -0
- package/skills/skills/graph-fd6a81ab/SKILL.md +45 -0
- package/skills/skills/lex-chinese-program/SKILL.md +45 -0
- package/skills/skills/lex-dao-de-jing/SKILL.md +45 -0
- package/skills/skills/lex-nine-chapters/SKILL.md +45 -0
- package/skills/skills/net-02090d29/SKILL.md +45 -0
- package/skills/skills/net-05937712/SKILL.md +45 -0
- package/skills/skills/net-059d072f/SKILL.md +45 -0
- package/skills/skills/net-080f6012/SKILL.md +45 -0
- package/skills/skills/net-08a2fc88/SKILL.md +45 -0
- package/skills/skills/net-0935edf1/SKILL.md +45 -0
- package/skills/skills/net-0e7f91e4/SKILL.md +45 -0
- package/skills/skills/net-0f2850e0/SKILL.md +45 -0
- package/skills/skills/net-107ab486/SKILL.md +45 -0
- package/skills/skills/net-111e79b0/SKILL.md +45 -0
- package/skills/skills/net-126876c1/SKILL.md +45 -0
- package/skills/skills/net-13eeb575/SKILL.md +45 -0
- package/skills/skills/net-14102d54/SKILL.md +45 -0
- package/skills/skills/net-14e9ad0d/SKILL.md +45 -0
- package/skills/skills/net-184175d3/SKILL.md +45 -0
- package/skills/skills/net-1da1c695/SKILL.md +45 -0
- package/skills/skills/net-240a14ec/SKILL.md +45 -0
- package/skills/skills/net-2784f98b/SKILL.md +45 -0
- package/skills/skills/net-292ef917/SKILL.md +45 -0
- package/skills/skills/net-3434e92f/SKILL.md +45 -0
- package/skills/skills/net-35019e6b/SKILL.md +45 -0
- package/skills/skills/net-3bbc6afb/SKILL.md +45 -0
- package/skills/skills/net-3bdf9d9d/SKILL.md +45 -0
- package/skills/skills/net-3dcb84d3/SKILL.md +45 -0
- package/skills/skills/net-431cccf9/SKILL.md +45 -0
- package/skills/skills/net-435a9f7f/SKILL.md +45 -0
- package/skills/skills/net-4508101f/SKILL.md +45 -0
- package/skills/skills/net-4585c9e7/SKILL.md +45 -0
- package/skills/skills/net-479612a0/SKILL.md +45 -0
- package/skills/skills/net-47a19838/SKILL.md +45 -0
- package/skills/skills/net-4e36e1e3/SKILL.md +45 -0
- package/skills/skills/net-509b8001/SKILL.md +45 -0
- package/skills/skills/net-51930c5e/SKILL.md +45 -0
- package/skills/skills/net-56dbd63f/SKILL.md +45 -0
- package/skills/skills/net-57387462/SKILL.md +45 -0
- package/skills/skills/net-5c115606/SKILL.md +45 -0
- package/skills/skills/net-5d27f392/SKILL.md +45 -0
- package/skills/skills/net-5f69c938/SKILL.md +45 -0
- package/skills/skills/net-5fa6c13b/SKILL.md +45 -0
- package/skills/skills/net-61580202/SKILL.md +45 -0
- package/skills/skills/net-61926703/SKILL.md +45 -0
- package/skills/skills/net-61f64fbc/SKILL.md +45 -0
- package/skills/skills/net-6200f3b2/SKILL.md +45 -0
- package/skills/skills/net-63c3eda3/SKILL.md +45 -0
- package/skills/skills/net-66e6119b/SKILL.md +45 -0
- package/skills/skills/net-68643014/SKILL.md +45 -0
- package/skills/skills/net-686632aa/SKILL.md +45 -0
- package/skills/skills/net-6967ff14/SKILL.md +45 -0
- package/skills/skills/net-6996f499/SKILL.md +45 -0
- package/skills/skills/net-6c3b02c2/SKILL.md +45 -0
- package/skills/skills/net-6eb37f63/SKILL.md +45 -0
- package/skills/skills/net-6f96c190/SKILL.md +45 -0
- package/skills/skills/net-6fb27488/SKILL.md +45 -0
- package/skills/skills/net-703559d0/SKILL.md +45 -0
- package/skills/skills/net-706d2692/SKILL.md +45 -0
- package/skills/skills/net-70a20e04/SKILL.md +45 -0
- package/skills/skills/net-7376158c/SKILL.md +45 -0
- package/skills/skills/net-74d647cb/SKILL.md +45 -0
- package/skills/skills/net-74e8a576/SKILL.md +45 -0
- package/skills/skills/net-7801c2c0/SKILL.md +45 -0
- package/skills/skills/net-78cae54d/SKILL.md +45 -0
- package/skills/skills/net-78ec0324/SKILL.md +45 -0
- package/skills/skills/net-7998097c/SKILL.md +45 -0
- package/skills/skills/net-7d81ae06/SKILL.md +45 -0
- package/skills/skills/net-7eabbbc8/SKILL.md +45 -0
- package/skills/skills/net-7ed4f2c5/SKILL.md +45 -0
- package/skills/skills/net-80b56cd6/SKILL.md +45 -0
- package/skills/skills/net-83447546/SKILL.md +45 -0
- package/skills/skills/net-8361fe5b/SKILL.md +45 -0
- package/skills/skills/net-85e3996c/SKILL.md +45 -0
- package/skills/skills/net-8897d5cc/SKILL.md +45 -0
- package/skills/skills/net-88ad93a6/SKILL.md +45 -0
- package/skills/skills/net-8e6f359e/SKILL.md +45 -0
- package/skills/skills/net-8edc4cdb/SKILL.md +45 -0
- package/skills/skills/net-8f6169e9/SKILL.md +45 -0
- package/skills/skills/net-91e00638/SKILL.md +45 -0
- package/skills/skills/net-96c61a3c/SKILL.md +45 -0
- package/skills/skills/net-99076a29/SKILL.md +45 -0
- package/skills/skills/net-998f3641/SKILL.md +45 -0
- package/skills/skills/net-a1d7228a/SKILL.md +45 -0
- package/skills/skills/net-a74da501/SKILL.md +45 -0
- package/skills/skills/net-ac57deb7/SKILL.md +45 -0
- package/skills/skills/net-b22d2f2b/SKILL.md +45 -0
- package/skills/skills/net-b2b29d8d/SKILL.md +45 -0
- package/skills/skills/net-b2ddce5d/SKILL.md +45 -0
- package/skills/skills/net-b4151e9a/SKILL.md +45 -0
- package/skills/skills/net-b873d6f7/SKILL.md +45 -0
- package/skills/skills/net-bd3d2d55/SKILL.md +45 -0
- package/skills/skills/net-c2a3f019/SKILL.md +45 -0
- package/skills/skills/net-c685b788/SKILL.md +45 -0
- package/skills/skills/net-c6c1fd79/SKILL.md +45 -0
- package/skills/skills/net-c74a1b5d/SKILL.md +45 -0
- package/skills/skills/net-cdac702d/SKILL.md +45 -0
- package/skills/skills/net-d12dff5c/SKILL.md +45 -0
- package/skills/skills/net-d3747882/SKILL.md +45 -0
- package/skills/skills/net-d5fefa59/SKILL.md +45 -0
- package/skills/skills/net-d67ec725/SKILL.md +45 -0
- package/skills/skills/net-d80c1c4c/SKILL.md +45 -0
- package/skills/skills/net-d9cb43b0/SKILL.md +45 -0
- package/skills/skills/net-da559517/SKILL.md +45 -0
- package/skills/skills/net-db4f414e/SKILL.md +45 -0
- package/skills/skills/net-dc09d67c/SKILL.md +45 -0
- package/skills/skills/net-e2d185de/SKILL.md +45 -0
- package/skills/skills/net-e2fc73f8/SKILL.md +45 -0
- package/skills/skills/net-e33ef0c2/SKILL.md +45 -0
- package/skills/skills/net-e346863c/SKILL.md +45 -0
- package/skills/skills/net-e6b3389a/SKILL.md +45 -0
- package/skills/skills/net-e9758fc0/SKILL.md +45 -0
- package/skills/skills/net-e9a9747a/SKILL.md +45 -0
- package/skills/skills/net-ea14aab8/SKILL.md +45 -0
- package/skills/skills/net-eba92ac1/SKILL.md +45 -0
- package/skills/skills/net-f29d91d2/SKILL.md +45 -0
- package/skills/skills/net-f314dd0d/SKILL.md +45 -0
- package/skills/skills/net-f332b629/SKILL.md +45 -0
- package/skills/skills/net-f7df127c/SKILL.md +45 -0
- package/skills/skills/net-fb9d8f5d/SKILL.md +45 -0
- package/skills/skills/net-fdec2c86/SKILL.md +45 -0
- package/skills/skills/os-0205cf9b/SKILL.md +45 -0
- package/skills/skills/os-027dc9be/SKILL.md +45 -0
- package/skills/skills/os-03c0d7d6/SKILL.md +45 -0
- package/skills/skills/os-040b5505/SKILL.md +45 -0
- package/skills/skills/os-06fa98ed/SKILL.md +45 -0
- package/skills/skills/os-0854291c/SKILL.md +45 -0
- package/skills/skills/os-0c7f14cb/SKILL.md +45 -0
- package/skills/skills/os-0d855af2/SKILL.md +45 -0
- package/skills/skills/os-0e87e997/SKILL.md +45 -0
- package/skills/skills/os-0f8ed882/SKILL.md +45 -0
- package/skills/skills/os-111ce1de/SKILL.md +45 -0
- package/skills/skills/os-1234eb00/SKILL.md +45 -0
- package/skills/skills/os-128f3820/SKILL.md +45 -0
- package/skills/skills/os-15796db5/SKILL.md +45 -0
- package/skills/skills/os-1898928a/SKILL.md +45 -0
- package/skills/skills/os-192b8ca9/SKILL.md +45 -0
- package/skills/skills/os-1d3bcf28/SKILL.md +45 -0
- package/skills/skills/os-1f224514/SKILL.md +45 -0
- package/skills/skills/os-26a4f86a/SKILL.md +45 -0
- package/skills/skills/os-29c96147/SKILL.md +45 -0
- package/skills/skills/os-2ea9a5ff/SKILL.md +45 -0
- package/skills/skills/os-300ef22c/SKILL.md +45 -0
- package/skills/skills/os-310dda5b/SKILL.md +45 -0
- package/skills/skills/os-313ef4ed/SKILL.md +45 -0
- package/skills/skills/os-329a2147/SKILL.md +45 -0
- package/skills/skills/os-34ad4b62/SKILL.md +45 -0
- package/skills/skills/os-350bc623/SKILL.md +45 -0
- package/skills/skills/os-35ee1a30/SKILL.md +45 -0
- package/skills/skills/os-3cd28220/SKILL.md +45 -0
- package/skills/skills/os-3d84e0c9/SKILL.md +45 -0
- package/skills/skills/os-3db42aac/SKILL.md +45 -0
- package/skills/skills/os-3e0aff42/SKILL.md +45 -0
- package/skills/skills/os-3e9405d2/SKILL.md +45 -0
- package/skills/skills/os-41d14544/SKILL.md +45 -0
- package/skills/skills/os-462f3ed4/SKILL.md +45 -0
- package/skills/skills/os-485833fa/SKILL.md +45 -0
- package/skills/skills/os-4a1cf781/SKILL.md +45 -0
- package/skills/skills/os-4bf77933/SKILL.md +45 -0
- package/skills/skills/os-4c14cec2/SKILL.md +45 -0
- package/skills/skills/os-4f05d577/SKILL.md +45 -0
- package/skills/skills/os-4f50ad0b/SKILL.md +45 -0
- package/skills/skills/os-509a4596/SKILL.md +45 -0
- package/skills/skills/os-512b1b6c/SKILL.md +45 -0
- package/skills/skills/os-5192621b/SKILL.md +45 -0
- package/skills/skills/os-55672763/SKILL.md +45 -0
- package/skills/skills/os-5582bce6/SKILL.md +45 -0
- package/skills/skills/os-5a096a1f/SKILL.md +45 -0
- package/skills/skills/os-5ca15108/SKILL.md +45 -0
- package/skills/skills/os-601663e1/SKILL.md +45 -0
- package/skills/skills/os-607f1963/SKILL.md +45 -0
- package/skills/skills/os-6158581b/SKILL.md +45 -0
- package/skills/skills/os-62f9278b/SKILL.md +45 -0
- package/skills/skills/os-63797b86/SKILL.md +45 -0
- package/skills/skills/os-6a1fe224/SKILL.md +45 -0
- package/skills/skills/os-6b0a68bf/SKILL.md +45 -0
- package/skills/skills/os-6e5cee67/SKILL.md +45 -0
- package/skills/skills/os-6fb1ff58/SKILL.md +45 -0
- package/skills/skills/os-71389592/SKILL.md +45 -0
- package/skills/skills/os-72e879a3/SKILL.md +45 -0
- package/skills/skills/os-7598748a/SKILL.md +45 -0
- package/skills/skills/os-80cc3283/SKILL.md +45 -0
- package/skills/skills/os-819f3093/SKILL.md +45 -0
- package/skills/skills/os-83670c2b/SKILL.md +45 -0
- package/skills/skills/os-878c18b3/SKILL.md +45 -0
- package/skills/skills/os-89ed7af1/SKILL.md +45 -0
- package/skills/skills/os-8cb7279d/SKILL.md +45 -0
- package/skills/skills/os-92276145/SKILL.md +45 -0
- package/skills/skills/os-955c4d66/SKILL.md +45 -0
- package/skills/skills/os-97aacf40/SKILL.md +45 -0
- package/skills/skills/os-9b6ed02c/SKILL.md +45 -0
- package/skills/skills/os-9c86a7a2/SKILL.md +45 -0
- package/skills/skills/os-a13ce4aa/SKILL.md +45 -0
- package/skills/skills/os-a568affe/SKILL.md +45 -0
- package/skills/skills/os-abd48f17/SKILL.md +45 -0
- package/skills/skills/os-b0416edc/SKILL.md +45 -0
- package/skills/skills/os-b6509cac/SKILL.md +45 -0
- package/skills/skills/os-b718657b/SKILL.md +45 -0
- package/skills/skills/os-b776ade1/SKILL.md +45 -0
- package/skills/skills/os-ba24fa08/SKILL.md +45 -0
- package/skills/skills/os-bd1fc177/SKILL.md +45 -0
- package/skills/skills/os-bda92711/SKILL.md +45 -0
- package/skills/skills/os-c0fa71bd/SKILL.md +45 -0
- package/skills/skills/os-c3d5cd44/SKILL.md +45 -0
- package/skills/skills/os-c6b6a763/SKILL.md +45 -0
- package/skills/skills/os-c7661eb1/SKILL.md +45 -0
- package/skills/skills/os-c76b5a43/SKILL.md +45 -0
- package/skills/skills/os-c7d35a30/SKILL.md +45 -0
- package/skills/skills/os-c980a25d/SKILL.md +45 -0
- package/skills/skills/os-c9f8df6e/SKILL.md +45 -0
- package/skills/skills/os-cc49ef2f/SKILL.md +45 -0
- package/skills/skills/os-cd9e686a/SKILL.md +45 -0
- package/skills/skills/os-cfa66a1b/SKILL.md +45 -0
- package/skills/skills/os-d237e500/SKILL.md +45 -0
- package/skills/skills/os-d39ef086/SKILL.md +45 -0
- package/skills/skills/os-d4f9e813/SKILL.md +45 -0
- package/skills/skills/os-d97915c0/SKILL.md +45 -0
- package/skills/skills/os-da0aadde/SKILL.md +45 -0
- package/skills/skills/os-da482caf/SKILL.md +45 -0
- package/skills/skills/os-dd4ff45e/SKILL.md +45 -0
- package/skills/skills/os-de0556c5/SKILL.md +45 -0
- package/skills/skills/os-e0ad3364/SKILL.md +45 -0
- package/skills/skills/os-e7612c68/SKILL.md +45 -0
- package/skills/skills/os-ea444e45/SKILL.md +45 -0
- package/skills/skills/os-ea6e7e0b/SKILL.md +45 -0
- package/skills/skills/os-ebc34d83/SKILL.md +45 -0
- package/skills/skills/os-ecbebbe3/SKILL.md +45 -0
- package/skills/skills/os-ecfceae7/SKILL.md +45 -0
- package/skills/skills/os-ed8de3a3/SKILL.md +45 -0
- package/skills/skills/os-f69c0b08/SKILL.md +45 -0
- package/skills/skills/os-f6ae6205/SKILL.md +45 -0
- package/skills/skills/os-f9bf8dd4/SKILL.md +45 -0
- package/skills/skills/os-fcdd828d/SKILL.md +45 -0
- package/skills/skills/pylang-01b23f80/SKILL.md +45 -0
- package/skills/skills/pylang-074fd698/SKILL.md +45 -0
- package/skills/skills/pylang-0b490bb2/SKILL.md +45 -0
- package/skills/skills/pylang-0ca7f08b/SKILL.md +45 -0
- package/skills/skills/pylang-10ce3e91/SKILL.md +45 -0
- package/skills/skills/pylang-15f76c64/SKILL.md +45 -0
- package/skills/skills/pylang-1703046f/SKILL.md +45 -0
- package/skills/skills/pylang-1aa3e939/SKILL.md +45 -0
- package/skills/skills/pylang-1bed54cf/SKILL.md +45 -0
- package/skills/skills/pylang-1dd35612/SKILL.md +45 -0
- package/skills/skills/pylang-24273d7b/SKILL.md +45 -0
- package/skills/skills/pylang-2853f59f/SKILL.md +45 -0
- package/skills/skills/pylang-2a6bc16e/SKILL.md +45 -0
- package/skills/skills/pylang-2ae78997/SKILL.md +45 -0
- package/skills/skills/pylang-2bc88f4c/SKILL.md +45 -0
- package/skills/skills/pylang-31f5b8db/SKILL.md +45 -0
- package/skills/skills/pylang-36d178bc/SKILL.md +45 -0
- package/skills/skills/pylang-38600583/SKILL.md +45 -0
- package/skills/skills/pylang-38e8f9ff/SKILL.md +45 -0
- package/skills/skills/pylang-395085ca/SKILL.md +45 -0
- package/skills/skills/pylang-399b317e/SKILL.md +45 -0
- package/skills/skills/pylang-39c72c78/SKILL.md +45 -0
- package/skills/skills/pylang-3a659480/SKILL.md +45 -0
- package/skills/skills/pylang-482be62b/SKILL.md +45 -0
- package/skills/skills/pylang-486a1e94/SKILL.md +45 -0
- package/skills/skills/pylang-49026041/SKILL.md +45 -0
- package/skills/skills/pylang-4963b28a/SKILL.md +45 -0
- package/skills/skills/pylang-4af9140e/SKILL.md +45 -0
- package/skills/skills/pylang-4ca283f2/SKILL.md +45 -0
- package/skills/skills/pylang-4ddf31f3/SKILL.md +45 -0
- package/skills/skills/pylang-50614726/SKILL.md +45 -0
- package/skills/skills/pylang-5102c069/SKILL.md +45 -0
- package/skills/skills/pylang-521b1bf8/SKILL.md +45 -0
- package/skills/skills/pylang-5880b7a1/SKILL.md +45 -0
- package/skills/skills/pylang-61a9102d/SKILL.md +45 -0
- package/skills/skills/pylang-621123dd/SKILL.md +45 -0
- package/skills/skills/pylang-642cd625/SKILL.md +45 -0
- package/skills/skills/pylang-65ca79b7/SKILL.md +45 -0
- package/skills/skills/pylang-672df225/SKILL.md +45 -0
- package/skills/skills/pylang-67d3368e/SKILL.md +45 -0
- package/skills/skills/pylang-6be54340/SKILL.md +45 -0
- package/skills/skills/pylang-70b2006f/SKILL.md +45 -0
- package/skills/skills/pylang-70b215f1/SKILL.md +45 -0
- package/skills/skills/pylang-730c3fe4/SKILL.md +45 -0
- package/skills/skills/pylang-733c1286/SKILL.md +45 -0
- package/skills/skills/pylang-79845f4d/SKILL.md +45 -0
- package/skills/skills/pylang-7c4cc6f8/SKILL.md +45 -0
- package/skills/skills/pylang-7c7193ad/SKILL.md +45 -0
- package/skills/skills/pylang-7d86ab5d/SKILL.md +45 -0
- package/skills/skills/pylang-7df8ca78/SKILL.md +45 -0
- package/skills/skills/pylang-8182681d/SKILL.md +45 -0
- package/skills/skills/pylang-81ad40ee/SKILL.md +45 -0
- package/skills/skills/pylang-8283d7c0/SKILL.md +45 -0
- package/skills/skills/pylang-82b73f3d/SKILL.md +45 -0
- package/skills/skills/pylang-8404bbde/SKILL.md +45 -0
- package/skills/skills/pylang-8584040d/SKILL.md +45 -0
- package/skills/skills/pylang-85d8617b/SKILL.md +45 -0
- package/skills/skills/pylang-886935a3/SKILL.md +45 -0
- package/skills/skills/pylang-88ab2f96/SKILL.md +45 -0
- package/skills/skills/pylang-8b6f071e/SKILL.md +45 -0
- package/skills/skills/pylang-8d6ec58a/SKILL.md +45 -0
- package/skills/skills/pylang-8fe98252/SKILL.md +45 -0
- package/skills/skills/pylang-9018c39a/SKILL.md +45 -0
- package/skills/skills/pylang-91277748/SKILL.md +45 -0
- package/skills/skills/pylang-943b9dcb/SKILL.md +45 -0
- package/skills/skills/pylang-961e9e43/SKILL.md +45 -0
- package/skills/skills/pylang-962954d9/SKILL.md +45 -0
- package/skills/skills/pylang-9dbd8e2b/SKILL.md +45 -0
- package/skills/skills/pylang-a02eac31/SKILL.md +45 -0
- package/skills/skills/pylang-a4d3d7b1/SKILL.md +45 -0
- package/skills/skills/pylang-a7c3d0e2/SKILL.md +45 -0
- package/skills/skills/pylang-a88db70d/SKILL.md +45 -0
- package/skills/skills/pylang-ab7dddc2/SKILL.md +45 -0
- package/skills/skills/pylang-ac2a4b38/SKILL.md +45 -0
- package/skills/skills/pylang-afaf67c0/SKILL.md +45 -0
- package/skills/skills/pylang-b00660e6/SKILL.md +45 -0
- package/skills/skills/pylang-b4d7616d/SKILL.md +45 -0
- package/skills/skills/pylang-b67b1878/SKILL.md +45 -0
- package/skills/skills/pylang-b8040e1c/SKILL.md +45 -0
- package/skills/skills/pylang-b880c6c6/SKILL.md +45 -0
- package/skills/skills/pylang-b8d45f76/SKILL.md +45 -0
- package/skills/skills/pylang-ba956e52/SKILL.md +45 -0
- package/skills/skills/pylang-bb18b1f9/SKILL.md +45 -0
- package/skills/skills/pylang-bb46f3f2/SKILL.md +45 -0
- package/skills/skills/pylang-be55a094/SKILL.md +45 -0
- package/skills/skills/pylang-beb47b63/SKILL.md +45 -0
- package/skills/skills/pylang-c017681a/SKILL.md +45 -0
- package/skills/skills/pylang-c1317cd9/SKILL.md +45 -0
- package/skills/skills/pylang-c36fabf7/SKILL.md +45 -0
- package/skills/skills/pylang-c42465ec/SKILL.md +45 -0
- package/skills/skills/pylang-c5c76a12/SKILL.md +45 -0
- package/skills/skills/pylang-c910ad31/SKILL.md +45 -0
- package/skills/skills/pylang-ca9332cf/SKILL.md +45 -0
- package/skills/skills/pylang-cce90fa0/SKILL.md +45 -0
- package/skills/skills/pylang-cd4234a5/SKILL.md +45 -0
- package/skills/skills/pylang-cf0fca1c/SKILL.md +45 -0
- package/skills/skills/pylang-d2001e1f/SKILL.md +45 -0
- package/skills/skills/pylang-d616eb28/SKILL.md +45 -0
- package/skills/skills/pylang-d8962e66/SKILL.md +45 -0
- package/skills/skills/pylang-db6214cd/SKILL.md +45 -0
- package/skills/skills/pylang-dcde3040/SKILL.md +45 -0
- package/skills/skills/pylang-dfad3dba/SKILL.md +45 -0
- package/skills/skills/pylang-dfd5aac2/SKILL.md +45 -0
- package/skills/skills/pylang-e1aa3818/SKILL.md +45 -0
- package/skills/skills/pylang-e476915b/SKILL.md +45 -0
- package/skills/skills/pylang-e88e31fd/SKILL.md +45 -0
- package/skills/skills/pylang-ecd569d2/SKILL.md +45 -0
- package/skills/skills/pylang-ecf27e0c/SKILL.md +45 -0
- package/skills/skills/pylang-f124f0e6/SKILL.md +45 -0
- package/skills/skills/pylang-f127a8d1/SKILL.md +45 -0
- package/skills/skills/pylang-f2d6ec27/SKILL.md +45 -0
- package/skills/skills/pylang-f2f40090/SKILL.md +45 -0
- package/skills/skills/pylang-f4aa9e65/SKILL.md +45 -0
- package/skills/skills/pylang-f4f820d4/SKILL.md +45 -0
- package/skills/skills/pylang-f5b34833/SKILL.md +45 -0
- package/skills/skills/pylang-f6ebb66e/SKILL.md +45 -0
- package/skills/skills/pylang-f78bdcd7/SKILL.md +45 -0
- package/skills/skills/pylang-f92bc49b/SKILL.md +45 -0
- package/skills/skills/pylang-fd7595f0/SKILL.md +45 -0
- package/skills/skills/pylang-fda87aa1/SKILL.md +45 -0
- package/skills/skills/vm-arithmetic/SKILL.md +45 -0
- package/skills/skills/vm-array-ops/SKILL.md +45 -0
- package/skills/skills/vm-closure-call/SKILL.md +45 -0
- package/skills/skills/vm-closure-create/SKILL.md +45 -0
- package/skills/skills/vm-compare/SKILL.md +45 -0
- package/skills/skills/vm-cond-jump/SKILL.md +45 -0
- package/skills/skills/vm-cond-space/SKILL.md +45 -0
- package/skills/skills/vm-exception/SKILL.md +45 -0
- package/skills/skills/vm-func-call/SKILL.md +45 -0
- package/skills/skills/vm-loop-run/SKILL.md +45 -0
- package/skills/skills/vm-profiling/SKILL.md +45 -0
- package/skills/skills/vm-refcount/SKILL.md +45 -0
- package/skills/skills/vm-run-loop/SKILL.md +45 -0
- package/skills/skills/vm-short-circuit/SKILL.md +45 -0
- package/skills/skills/vm-stack-guard/SKILL.md +45 -0
- package/skills/skills/vm-stack-ops/SKILL.md +45 -0
- package/skills/skills/vm-trust-accum/SKILL.md +45 -0
- package/src/bridge.ts +7 -7
- package/src/hooks.ts +78 -27
- package/src/index.ts +246 -66
- package/src/lib/datapath.ts +112 -0
- package/src/lib/mdcg_client.ts +329 -0
- package/src/lib/roleplay_web.ts +932 -0
- package/src/{llm_adapter.ts → lib/whitebox_llm.ts} +13 -7
- package/src/tools.ts +41 -55
- /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 '✘'}")
|