test_assertions_rast3d.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. """
  2. Tests assertion methods for 3D rasters.
  3. """
  4. from grass.exceptions import CalledModuleError
  5. from grass.gunittest.case import TestCase
  6. from grass.gunittest.main import test
  7. class TestRaster3dMapAssertions(TestCase):
  8. # pylint: disable=R0904
  9. constant_map = "raster3d_assertions_constant"
  10. rcd_increasing_map = "raster3d_assertions_rcd_increasing"
  11. @classmethod
  12. def setUpClass(cls):
  13. cls.use_temp_region()
  14. # TODO: here we should actually not call self.runModule but call_module
  15. cls.runModule("g.region", n=200, s=100, e=400, w=200, t=500, b=450, res3=1)
  16. cls.runModule("r3.mapcalc", expression="%s = 155" % cls.constant_map)
  17. cls.runModule(
  18. "r3.mapcalc",
  19. expression="%s = row() + col() + depth()" % cls.rcd_increasing_map,
  20. )
  21. @classmethod
  22. def tearDownClass(cls):
  23. cls.del_temp_region()
  24. # TODO: input as list does not work, why?
  25. cls.runModule(
  26. "g.remove",
  27. flags="f",
  28. type="raster_3d",
  29. name=",".join([cls.constant_map, cls.rcd_increasing_map]),
  30. )
  31. def test_assertRaster3dFitsUnivar(self):
  32. reference = dict(
  33. n=1000000,
  34. null_cells=0,
  35. cells=1000000,
  36. min=155,
  37. max=155,
  38. range=0,
  39. mean=155,
  40. mean_of_abs=155,
  41. stddev=0,
  42. variance=0,
  43. coeff_var=0,
  44. sum=155000000,
  45. )
  46. self.assertRaster3dFitsUnivar(
  47. self.constant_map, reference=reference, precision=0.000001
  48. )
  49. self.assertRaises(
  50. self.failureException,
  51. self.assertRaster3dFitsUnivar,
  52. self.rcd_increasing_map,
  53. reference=reference,
  54. precision=1,
  55. )
  56. self.assertRaises(
  57. ValueError,
  58. self.assertRaster3dFitsUnivar,
  59. self.constant_map,
  60. reference=dict(a=4, b=5, c=6),
  61. )
  62. self.assertRaises(
  63. CalledModuleError,
  64. self.assertRaster3dFitsUnivar,
  65. "does_not_exists",
  66. reference=dict(a=4, b=5, c=6),
  67. )
  68. def test_assertRaster3dFitsInfo(self):
  69. reference = dict(
  70. north=200,
  71. south=100,
  72. east=400,
  73. west=200,
  74. bottom=450,
  75. top=500,
  76. nsres=1,
  77. ewres=1,
  78. tbres=1,
  79. rows=100,
  80. cols=200,
  81. depths=50,
  82. )
  83. self.assertRaster3dFitsInfo(self.constant_map, reference=reference)
  84. reference["north"] = 500
  85. self.assertRaises(
  86. self.failureException,
  87. self.assertRaster3dFitsInfo,
  88. self.constant_map,
  89. reference=reference,
  90. )
  91. self.assertRaises(
  92. ValueError,
  93. self.assertRaster3dFitsInfo,
  94. self.constant_map,
  95. reference=dict(a=5),
  96. )
  97. def test_common_values_info_univar(self):
  98. minmax = dict(min=3, max=350)
  99. self.assertRaster3dFitsUnivar(self.rcd_increasing_map, minmax, precision=0.01)
  100. self.assertRaster3dFitsInfo(self.rcd_increasing_map, minmax, precision=0.01)
  101. def test_string_as_parameter(self):
  102. self.assertRaster3dFitsInfo(self.constant_map, reference="max=155", precision=1)
  103. self.assertRaster3dFitsUnivar(
  104. self.rcd_increasing_map, reference="n=1000000", precision=0
  105. )
  106. def test_assertRasters3dNoDifference(self):
  107. """Test basic usage of assertRastersNoDifference"""
  108. # precision might need to be increased
  109. self.assertRasters3dNoDifference(
  110. actual=self.rcd_increasing_map,
  111. reference=self.rcd_increasing_map,
  112. precision=0,
  113. msg="The same maps should have no difference",
  114. )
  115. self.assertRaises(
  116. self.failureException,
  117. self.assertRasters3dNoDifference,
  118. actual=self.constant_map,
  119. reference=self.rcd_increasing_map,
  120. precision=1,
  121. msg="Different maps should have difference",
  122. )
  123. def test_assertRasters3dNoDifference_mean(self):
  124. """Test usage of assertRastersNoDifference with mean"""
  125. self.assertRasters3dNoDifference(
  126. actual=self.rcd_increasing_map,
  127. reference=self.rcd_increasing_map,
  128. precision=0, # this might need to be increased
  129. statistics=dict(mean=0),
  130. msg="The difference of same maps should have small mean",
  131. )
  132. self.assertRaises(
  133. self.failureException,
  134. self.assertRasters3dNoDifference,
  135. actual=self.constant_map,
  136. reference=self.rcd_increasing_map,
  137. precision=1,
  138. statistics=dict(mean=0),
  139. msg="The difference of different maps should have huge mean",
  140. )
  141. if __name__ == "__main__":
  142. test()