File size: 2,156 Bytes
536ba3d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from __future__ import annotations

import pandas as pd
import pytest

from src.data import loader


def test_parse_matlab_datevec():
    dt = loader._parse_matlab_datevec("[2010. 7. 21. 15. 0. 35.093]")
    assert dt.year == 2010 and dt.month == 7 and dt.day == 21
    assert loader._parse_matlab_datevec("[]") is None


def test_load_cycle_csv_missing(monkeypatch, tmp_path):
    monkeypatch.setattr(loader, "DATA_DIR", tmp_path)
    with pytest.raises(FileNotFoundError):
        loader.load_cycle_csv(1)


def test_load_discharge_capacities_and_battery_ids(monkeypatch):
    fake_meta = pd.DataFrame(
        {
            "battery_id": ["B1", "B1", "B2", "B2"],
            "type": ["discharge", "impedance", "discharge", "discharge"],
            "Capacity": [2.0, 0.0, 1.9, -1.0],
            "ambient_temperature": [24, 24, 43, 43],
            "test_id": [1, 2, 1, 2],
            "datetime": [None, None, None, None],
            "Re": [0.05, 0.06, 0.07, 0.08],
            "Rct": [0.08, 0.09, 0.1, 0.11],
        }
    )
    monkeypatch.setattr(loader, "load_metadata", lambda **kwargs: fake_meta.copy())

    dis = loader.load_discharge_capacities(drop_zero=True)
    assert set(dis["battery_id"]) == {"B1", "B2"}
    assert all(dis["Capacity"] > 0)

    ids = loader.get_battery_ids()
    assert ids == ["B1", "B2"]


def test_load_impedance_scalars(monkeypatch):
    fake_meta = pd.DataFrame(
        {
            "battery_id": ["B1", "B1", "B2"],
            "type": ["impedance", "impedance", "discharge"],
            "Capacity": [2.0, 1.9, 1.8],
            "ambient_temperature": [24, 24, 43],
            "test_id": [1, 2, 1],
            "datetime": [None, None, None],
            "Re": [0.05, 0.06, 0.07],
            "Rct": [0.08, 0.09, 0.1],
        }
    )
    monkeypatch.setattr(loader, "load_metadata", lambda **kwargs: fake_meta.copy())
    out = loader.load_impedance_scalars()
    assert list(out["battery_id"].unique()) == ["B1"]


def test_get_eol_threshold_default():
    assert loader.get_eol_threshold("B0005") in (loader.EOL_20PCT, loader.EOL_30PCT)
    assert loader.get_eol_threshold("UNKNOWN") == loader.EOL_30PCT