File size: 4,174 Bytes
e66cfb4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
"""
dashTest.py  ← 向下相容 shim
--------------------------------
原始 3443 行已拆分至以下六個模組(均放在同一 layout/ 資料夾下):

    dt_gemini.py        Gemini AI 用戶端 + 批改回饋
    dt_math.py          數學運算 + eq_answer
    dt_render_utils.py  渲染工具(顏色、數學、run 渲染,無 callback)
    dt_render_blocks.py Block 渲染元件
    dt_quiz.py          Quiz 題型渲染
    dt_callbacks.py     所有 Dash @callback

此 shim 重新匯出所有公開 API,確保現有程式碼不需要修改:

    from layout.dashTest import render_doc          ← 仍可用
    from layout.dashTest import install_callbacks_once ← 仍可用
"""

# ── Gemini / AI ──────────────────────────────────────────────────────────
from .dt_gemini import (                        # noqa: F401
    _gem_call, _gem_json,
    _first_json, _s, _get_api_key,
    _norm_model, _ai_log_fail,
    _repair_json_newlines, _loads_json_robust,
    _ai_generate_similar_quizzes_as_md,
    _parse_ai_md_to_quiz_nodes, _parse_options_md,
    _ai_feedback_fill_gemini,
    _ai_feedback_choice_gemini,
    _ai_feedback_multi_gemini,
    _prompt_md_to_runs,
    DEFAULT_NORMALIZE,
    _gem_client, _API_KEY,
)

# ── 數學 ──────────────────────────────────────────────────────────────────
from .dt_math import (                          # noqa: F401
    eq_answer,
    extract_param_function, extract_k_as_function,
    _normalize_text, _std_text, _apply_text_ops,
    _to_sympy, _symbolic_equal, _as_number, _numeric_close,
    _preprocess_math, _protect_funcs_and_consts, _unprotect,
    _insert_implicit_mul,
    x, y, z, k, m, n, c, g,
    XY, PARAMS, KNOWN_FUNCS, KNOWN_CONST,
)

# ── 渲染工具 ──────────────────────────────────────────────────────────────
from .dt_render_utils import (                  # noqa: F401
    HAS_PRISM, DashLatex, DEFAULT_TOL,
    _norm_hex, _hex_to_hsl, _hsl_to_hex,
    _to_dark_color, _themed_color_style,
    _as_css_color, _ensure_theme_colors,
    _parse_img_hints, _apply_img_size_style,
    _split_text_links_images,
    render_url, render_picture, render_inline_media,
    _strip_math_delims, _render_inline_math,
    render_math_inline, render_math_block, render_option_label,
    render_inline_runs, render_runs,
    _as_bool, _is_true,
    _runs_to_text_for_prompt,
)

# ── Block 渲染 ────────────────────────────────────────────────────────────
from .dt_render_blocks import (                 # noqa: F401
    render_doc, render_doc_section,
    build_content_and_toc, render_section_nav,
    render_paragraph, render_list, render_hr, render_comment,
    render_heading, render_heading_segment, _plain_text_for_heading,
    render_card, _merge_card_palette, _CARD_KIND_PALETTE,
    render_solution, _storage_type,
    render_flow, _make_flow_step_box,
    render_geogebra, maybe_render_paragraph_with_geogebra,
    render_code, render_pycall,
    _ggb_id_from_url, _px_or_raw,
    _attrs_to_dict, _load_func_from_path,
)

# ── Quiz 渲染 ─────────────────────────────────────────────────────────────
from .dt_quiz import (                          # noqa: F401
    render_quiz, render_quiz_order,
    _quiz_missing_answer_notice, _feedback_child,
)

# ── Callbacks(import 即掛載)────────────────────────────────────────────
from . import dt_callbacks                      # noqa: F401
from .dt_callbacks import install_callbacks_once  # noqa: F401