test_assertions_rast3d.py 4.9 KB

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