File size: 1,952 Bytes
19ee5f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from app.services.numeric_validator import (
    run_numeric_checks_for_demo_answer,
    validate_derivative,
)


def test_validate_derivative_success_sets_sympy_cas_fields() -> None:
    item = validate_derivative("x**2", "2*x")

    assert item.is_valid is True
    assert item.sympy_status == "ok"
    assert item.sympy_result == "2*x"
    assert item.wolfram_status == "not_run"
    assert item.wolfram_result is None
    assert item.cas_status == "SYMPY_ONLY"
    assert item.preferred_engine == "sympy"
    assert item.confidence_impact == "neutral"
    assert item.human_review_reason is None


def test_validate_derivative_failure_sets_review_reason() -> None:
    item = validate_derivative("x**2", "x")

    assert item.is_valid is False
    assert item.sympy_status == "ok"
    assert item.sympy_result == "2*x"
    assert item.wolfram_status == "not_run"
    assert item.cas_status == "SYMPY_ONLY"
    assert item.preferred_engine == "sympy"
    assert item.confidence_impact == "decrease"
    assert item.human_review_reason == "sympy_contradicts_expected_derivative"


def test_validate_derivative_unusable_expression_sets_no_cas_validation() -> None:
    item = validate_derivative("sin(", "2*x")

    assert item.is_valid is False
    assert item.sympy_status == "failed"
    assert item.sympy_result is None
    assert item.wolfram_status == "not_run"
    assert item.cas_status == "NO_CAS_VALIDATION"
    assert item.preferred_engine == "none"
    assert item.confidence_impact == "decrease"
    assert item.human_review_reason == "sympy_unusable_expression"


def test_demo_numeric_checks_keep_report_consistent() -> None:
    report = run_numeric_checks_for_demo_answer("On trouve f'(x)=2x.")

    assert len(report.checks) == 1
    assert report.checks[0].is_valid is True
    assert report.checks[0].cas_status == "SYMPY_ONLY"
    assert report.contradicted_by_numeric_check is False
    assert report.needs_human_review is False