File size: 2,275 Bytes
1b63144
0483bf4
 
 
 
 
 
 
 
 
 
 
 
 
 
1b63144
 
0483bf4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b63144
0483bf4
 
 
 
 
 
 
 
1b63144
0483bf4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Headless tests: LabelSet (colorize, IO) and GridTarget (apply/undo/clear)."""

import numpy as np

from splasher import Grid
from splasher.core.labels import LabelClass, LabelSet
from splasher.core.target import GridTarget


def test_labelset_colorize_ignore_transparent():
    ls = LabelSet.default()
    raster = np.array([[0, 1], [2, 3]], dtype=np.int32)
    rgba = ls.colorize(raster)
    assert rgba.shape == (2, 2, 4)
    assert rgba[0, 0, 3] == 0  # ignore -> transparent
    assert tuple(rgba[0, 1, :3]) == (60, 200, 70)  # class 1
    assert rgba[1, 0, 3] == 255  # class 2 opaque


def test_labelset_json_roundtrip(tmp_path):
    ls = LabelSet([LabelClass(0, "void", (0, 0, 0)), LabelClass(5, "x", (1, 2, 3))], ignore_id=0)
    p = tmp_path / "labels.json"
    ls.save(p)
    back = LabelSet.load(p)
    assert back.ignore_id == 0
    assert back.name_of(5) == "x"
    assert back.color_of(5) == (1, 2, 3)


def test_gridtarget_apply_and_undo():
    g = Grid(0.0, 4.0, 0.0, 4.0, 1.0)
    t = GridTarget(g, ignore_id=0)
    assert not t.has(0)
    assert t.apply(0, (1.0, 1.0, 3.0, 3.0), class_id=2)
    r = t.raster(0)
    assert (r[1:3, 1:3] == 2).all()
    assert r[0, 0] == 0  # outside the rectangle
    t.undo(0)
    assert (t.raster(0) == 0).all()


def test_gridtarget_apply_mask_and_undo():
    g = Grid(0.0, 4.0, 0.0, 4.0, 1.0)  # 4x4
    t = GridTarget(g, ignore_id=0)
    mask = np.zeros((4, 4), dtype=bool)
    mask[0, 0] = mask[3, 3] = mask[1, 2] = True  # non-contiguous cells (selection)
    assert t.apply_mask(0, mask, class_id=3)
    r = t.raster(0)
    assert r[0, 0] == 3 and r[3, 3] == 3 and r[1, 2] == 3
    assert r[2, 2] == 0
    t.undo(0)
    assert (t.raster(0) == 0).all()


def test_gridtarget_apply_mask_empty_false():
    g = Grid(0.0, 4.0, 0.0, 4.0, 1.0)
    t = GridTarget(g)
    assert t.apply_mask(0, np.zeros((4, 4), dtype=bool), class_id=1) is False


def test_gridtarget_rect_outside_returns_false():
    g = Grid(0.0, 4.0, 0.0, 4.0, 1.0)
    t = GridTarget(g)
    assert t.apply(0, (100.0, 100.0, 200.0, 200.0), class_id=1) is False


def test_gridtarget_clear():
    g = Grid(0.0, 4.0, 0.0, 4.0, 1.0)
    t = GridTarget(g)
    t.apply(0, (0.0, 0.0, 4.0, 4.0), class_id=1)
    t.clear(0)
    assert (t.raster(0) == 0).all()