Coverage for test_layer.py: 100%

78 statements  

« prev     ^ index     » next       coverage.py v7.5.1, created at 2024-05-08 14:15 +0200

1import numpy as np 

2import pytest 

3from pytest_cases import parametrize_with_cases 

4 

5from imod.prepare import ( 

6 get_lower_active_grid_cells, 

7 get_lower_active_layer_number, 

8 get_upper_active_grid_cells, 

9 get_upper_active_layer_number, 

10) 

11from imod.typing.grid import ones_like 

12 

13 

14@pytest.fixture(scope="function") 

15def active_structured(basic_dis): 

16 idomain, _, _ = basic_dis 

17 return idomain == 1 

18 

19 

20@pytest.fixture(scope="function") 

21def active_unstructured(basic_unstructured_dis): 

22 idomain, _, _ = basic_unstructured_dis 

23 return idomain == 1 

24 

25 

26@pytest.fixture(scope="function") 

27def layer(basic_dis): 

28 idomain, _, _ = basic_dis 

29 return idomain.coords["layer"] 

30 

31 

32class ActiveLayerCases: 

33 def case_all_active_structured(self, active_structured): 

34 upper_layer_number = ones_like(active_structured.sel(layer=1)).astype(int) 

35 lower_layer_number = upper_layer_number + 2 

36 return active_structured, upper_layer_number, lower_layer_number 

37 

38 def case_all_active_unstructured(self, active_unstructured): 

39 upper_layer_number = ones_like(active_unstructured.sel(layer=1)).astype(int) 

40 lower_layer_number = upper_layer_number + 2 

41 return active_unstructured, upper_layer_number, lower_layer_number 

42 

43 def case_structured(self, active_structured): 

44 active_structured[0, :, 1] = False 

45 active_structured[1, :, 2] = False 

46 active_structured[0, :, 3] = False 

47 active_structured[1, :, 3] = False 

48 active_structured[1, :, 4] = False 

49 active_structured[2, :, 4] = False 

50 active_structured[2, :, 5] = False 

51 upper_layer_number = ones_like(active_structured.sel(layer=1)).astype(int) 

52 lower_layer_number = upper_layer_number + 2 

53 upper_layer_number[:, 1] = 2 

54 upper_layer_number[:, 3] = 3 

55 lower_layer_number[:, 4] = 1 

56 lower_layer_number[:, 5] = 2 

57 return active_structured, upper_layer_number, lower_layer_number 

58 

59 def case_unstructured(self, active_unstructured): 

60 active_unstructured[0, 1] = False 

61 active_unstructured[1, 2] = False 

62 active_unstructured[0, 3] = False 

63 active_unstructured[1, 3] = False 

64 active_unstructured[1, 4] = False 

65 active_unstructured[2, 4] = False 

66 active_unstructured[2, 5] = False 

67 upper_layer_number = ones_like(active_unstructured.sel(layer=1)).astype(int) 

68 lower_layer_number = upper_layer_number + 2 

69 upper_layer_number[1] = 2 

70 upper_layer_number[3] = 3 

71 lower_layer_number[4] = 1 

72 lower_layer_number[5] = 2 

73 return active_unstructured, upper_layer_number, lower_layer_number 

74 

75 

76@parametrize_with_cases("active_case", cases=ActiveLayerCases) 

77def test_get_lower_active_grid(active_case, layer): 

78 active, _, expected_lower_layer_nr = active_case 

79 is_lower_active = get_lower_active_grid_cells(active) 

80 

81 expected_lower_active = layer == expected_lower_layer_nr 

82 

83 np.testing.assert_array_equal(is_lower_active.values, expected_lower_active.values) 

84 

85 

86@parametrize_with_cases("active_case", cases=ActiveLayerCases) 

87def test_get_upper_active_grid(active_case, layer): 

88 active, expected_upper_layer_nr, _ = active_case 

89 is_upper_active = get_upper_active_grid_cells(active) 

90 

91 expected_upper_active = layer == expected_upper_layer_nr 

92 

93 np.testing.assert_array_equal(is_upper_active.values, expected_upper_active.values) 

94 

95 

96@parametrize_with_cases("active_case", cases=ActiveLayerCases) 

97def test_get_lower_layer_number(active_case): 

98 active, _, expected_lower_layer_nr = active_case 

99 is_lower_active = get_lower_active_layer_number(active) 

100 

101 np.testing.assert_array_equal( 

102 is_lower_active.values, expected_lower_layer_nr.values 

103 ) 

104 

105 

106@parametrize_with_cases("active_case", cases=ActiveLayerCases) 

107def test_get_upper_layer_number(active_case): 

108 active, expected_upper_layer_nr, _ = active_case 

109 is_upper_active = get_upper_active_layer_number(active) 

110 

111 np.testing.assert_array_equal( 

112 is_upper_active.values, expected_upper_layer_nr.values 

113 )