Removed 8&16-bit blocking jenkins-bRopo-61
authorAnders Henja <anders@baltrad.eu>
Thu, 4 Jul 2019 15:17:59 +0000 (17:17 +0200)
committerAnders Henja <anders@baltrad.eu>
Thu, 4 Jul 2019 15:17:59 +0000 (17:17 +0200)
pyropo/pyfmiimage.c
ropo/rave_fmi_image.c
test/pytest/PyRopoGeneratorTest.py

index b065bf8..13a6b78 100644 (file)
@@ -187,6 +187,8 @@ static PyObject* _pyfmiimage_fromRave(PyObject* self, PyObject* args)
 
   if (fmiimage != NULL) {
     result = PyFmiImage_New(fmiimage, 0, 0);
+  } else {
+    PyErr_SetString(PyExc_RuntimeError, "Could not convert rave object into fmiimage");
   }
 
   RAVE_OBJECT_RELEASE(fmiimage);
@@ -218,6 +220,8 @@ static PyObject* _pyfmiimage_fromRaveVolume(PyObject* self, PyObject* args)
 
   if (fmiimage != NULL) {
     result = PyFmiImage_New(fmiimage, 0, 0);
+  } else {
+    PyErr_SetString(PyExc_RuntimeError, "Could not convert rave object into fmiimage");
   }
 
   RAVE_OBJECT_RELEASE(fmiimage);
index 2acfb00..cef39a4 100644 (file)
@@ -158,13 +158,6 @@ static int RaveFmiImageInternal_scanToFmiImage(PolarScan_t* scan, const char* qu
     RAVE_WARNING1("Failed to extract parameter %s from scan", quantity);
     goto done;
   }
-  if (PolarScanParam_getDataType(param) != RaveDataType_CHAR &&
-      PolarScanParam_getDataType(param) != RaveDataType_UCHAR &&
-      PolarScanParam_getDataType(param) != RaveDataType_SHORT &&
-      PolarScanParam_getDataType(param) != RaveDataType_USHORT) {
-    RAVE_WARNING0("FmiImages can only support 8 and 16-bit data");
-    goto done;
-  }
 
   gain = PolarScanParam_getGain(param);
   offset = PolarScanParam_getOffset(param);
@@ -226,13 +219,6 @@ static int RaveFmiImageInternal_fieldToFmiImage(RaveField_t* field, FmiImage* im
   image->channels=1;
   initialize_image(image);
 
-  if (RaveField_getDataType(field) != RaveDataType_CHAR &&
-      RaveField_getDataType(field) != RaveDataType_UCHAR &&
-      RaveField_getDataType(field) != RaveDataType_SHORT &&
-      RaveField_getDataType(field) != RaveDataType_USHORT) {
-    RAVE_WARNING0("FmiImages can only support 8 and 16-bit data");
-    goto done;
-  }
   attr = RaveField_getAttribute(field, "what/gain");
   if (attr != NULL) {
     RaveAttribute_getDouble(attr, &gain);
index f7ba346..4e47260 100644 (file)
@@ -334,6 +334,29 @@ class PyRopoGeneratorTest(unittest.TestCase):
     # Verifications is done as absolute(a - b) <= (atol + rtol * absolute(b)) which means that this verifies that
     # abs(8bit - 16bit) is < 3 
     self.assertTrue(numpy.allclose(result8bit.astype(numpy.int16), result16bit.astype(numpy.int16), atol=3.0, rtol=0.0)) # If not having values in short range, there might be wrap around. E.g. -1 => 255 which is out of range 3
+
+  def testChainCompare_8bit_and_32bit_Restore(self):
+    a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0)
+    b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH"))
+    result8bit = b.speckNormOld(-20,24,8).emitter2(-30,3,3).softcut(5,170,180).ship(20,8).speck(-30,12).restore(108).toPolarScan().getParameter("DBZH").getData()
+    
+    # Adjust the 8 bit data to be 16 bit instead
+    p = a.getParameter("DBZH")
+    d = p.getData().astype(numpy.int32)
+    p.setData(d)
+    p.undetect = 0.0
+    p.nodata = 255.0
+    a.addParameter(p)
+    
+    b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH"))
+    result32bit = b.speckNormOld(-20,24,8).emitter2(-30,3,3).softcut(5,170,180).ship(20,8).speck(-30,12).restore(108).toPolarScan().getParameter("DBZH").getData()
+    
+    self.assertEqual(numpy.int32, result32bit.dtype) # Result should be same type as when created
+    
+    result32bit=result32bit.astype(numpy.uint8)
+    
+    self.assertTrue(numpy.array_equal(result8bit.astype(numpy.int32),result32bit.astype(numpy.int32)))
+
   
   # Simple way to ensure that a file is exported properly
   #