File size: 1,790 Bytes
ef53368
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Tests for analysis/code/carbon_monoxide.py. The figure's claim is that MagNET tracks
DFT near the equilibrium bond length but drifts in the non-equilibrium tails; that is checked against
the shipped scan data, along with the loaders and the histogram helper."""
import os
import sys

import numpy as np
import pytest

HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)

import carbon_monoxide as co  # noqa: E402


def test_comparison_loads_and_is_sorted():
    df = co.load_comparison()
    assert len(df) == 81
    assert list(df.columns) == ["bond_length", "gaussian_c", "magnet_c", "delta_c",
                                "gaussian_o", "magnet_o", "delta_o"]
    assert df["bond_length"].is_monotonic_increasing
    assert df["bond_length"].min() == pytest.approx(0.70, abs=1e-3)
    assert df["bond_length"].max() == pytest.approx(1.50, abs=1e-3)
    # delta is exactly MagNET minus DFT
    assert np.allclose(df["delta_c"], df["magnet_c"] - df["gaussian_c"])


def test_histogram_helper():
    centers, counts, bin_width = co.load_bond_length_histogram()
    assert len(centers) == len(counts) == 100
    assert bin_width > 0
    assert counts.sum() > 0           # there is real bond-length support behind the error panel


def test_error_grows_away_from_equilibrium():
    """The published claim: the carbon error is small near the equilibrium bond length and much
    larger in the stretched/compressed tails the model never trained on."""
    near, tails = co.equilibrium_vs_extreme_error()
    assert near < 30.0                # near-equilibrium error stays modest (about 19 ppm)
    assert tails > 100.0              # tails blow up (about 185 ppm)
    assert tails > 5 * near           # the tails are far worse, which is the point of the figure