예제 #1
0
    def test_constructor_encode(self):
        fun = sys._getframe().f_code.co_name
        print("Run: %s.%s() " % (self.__class__.__name__, fun))
        dp = DecoderPool()
        spectrum = numpy.array([1234, 5678, 45, 345], dtype=numpy.uint32)
        image = numpy.array(
            [[2, 5, 4, 6], [3, 4, 3, 4], [3, 6, 7, 8]], dtype='uint8')

        arr = {
            "ScalarEncoded": [
                "UTF8", "DevEncoded",
                ("UTF8", b"Hello UTF8! Pr\xc3\xb3ba \xe6\xb5\x8b"),
                [1, 0], "SCALAR",
                b"Hello UTF8! Pr\xc3\xb3ba \xe6\xb5\x8b", "DevString"],
            "SpectrumEncoded": [
                "UINT32", "DevEncoded",
                ('INT32',
                 b'\xd2\x04\x00\x00.\x16\x00\x00-\x00\x00\x00Y\x01\x00\x00'),
                [4, 0], "SPECTRUM", spectrum, "DevULong"],
            "ImageEncoded": ["LIMA_VIDEO_IMAGE", "DevEncoded",
                             self.encodeImage(image),
                             list(image.shape), "IMAGE", image, "DevUChar"],
        }

        for a in arr:

            data = {"rank": "SCALAR",
                    "value": arr[a][2],
                    "tangoDType": arr[a][1],
                    "shape": [1, 0],
                    "encoding": arr[a][0],
                    "decoders": dp}
            el = DataHolder(**data)

            self.assertTrue(isinstance(el, object))
            self.assertEqual(el.format, arr[a][4])
            self.assertEqual(el.tangoDType, arr[a][6])
            self.assertEqual(el.shape, arr[a][3])
            self.assertEqual(el.encoding, data["encoding"])
            self.assertEqual(el.decoders, data["decoders"])

            if el.shape == [1, 0]:
                self.assertEqual(el.value, arr[a][5])
            elif len(el.shape) == 2 and el.shape[1] == 0:
                self.assertEqual(len(el.value), len(arr[a][5]))
                self.assertEqual(len(el.value), el.shape[0])
                for i in range(el.shape[0]):
                    self.assertEqual(el.value[i], arr[a][5][i])
            elif len(el.shape) == 2 and el.shape[1] != 0:
                self.assertEqual(len(el.value), len(arr[a][5]))
                self.assertEqual(len(el.value), el.shape[0])
                for i in range(el.shape[0]):
                    self.assertEqual(len(el.value[i]), len(arr[a][5][i]))
                    self.assertEqual(len(el.value[i]), el.shape[1])
                    for j in range(el.shape[1]):
                        self.assertEqual(el.value[i][j], arr[a][5][i][j])
            else:
                print("WARNING %s %s" % (a, "Case not supported"))
예제 #2
0
    def test_constructor_image(self):
        fun = sys._getframe().f_code.co_name
        print("Run: %s.%s() " % (self.__class__.__name__, fun))

        arr = {
            "ImageBoolean": ["bool", "DevBoolean", True, [1, 0]],
            "ImageUChar": ["uint8", "DevUChar", 23, [1, 0]],
            "ImageShort": ["int16", "DevShort", -123, [1, 0]],
            "ImageUShort": ["uint16", "DevUShort", 1234, [1, 0]],
            "ImageLong": ["int64", "DevLong", -124, [1, 0]],
            "ImageULong": ["uint64", "DevULong", 234, [1, 0]],
            "ImageLong64": ["int64", "DevLong64", 234, [1, 0]],
            "ImageULong64": ["uint64", "DevULong64", 23, [1, 0]],
            "ImageFloat": ["float32", "DevFloat", 12.234, [1, 0], 1e-5],
            "ImageDouble": ["float64", "DevDouble", -2.456673e+02, [1, 0],
                            1e-14],
            "ImageString": ["string", "DevString", "MyTrue", [1, 0]],
        }

        for k in arr:

            mlen = [self.__rnd.randint(1, 10), self.__rnd.randint(
                1, 10), self.__rnd.randint(0, 3)]
            if arr[k][1] != "DevBoolean":
                arr[k][2] = [[arr[k][2] * self.__rnd.randint(0, 3)
                              for r in range(mlen[1])] for c in range(mlen[0])]
            else:
                mlen = [self.__rnd.randint(1, 10), self.__rnd.randint(1, 10)]
                if arr[k][1] == 'DevBoolean':
                    arr[k][2] = [[(True if self.__rnd.randint(0, 1) else False)
                                  for c in range(mlen[1])]
                                 for r in range(mlen[0])]

            arr[k][3] = [mlen[0], mlen[1]]

        for a in arr:

            data = {"rank": "IMAGE",
                    "value": arr[a][2],
                    "tangoDType": arr[a][1],
                    "shape": arr[k][3],
                    "encoding": None,
                    "decoders": None}
            el = DataHolder(**data)

            self.assertTrue(isinstance(el, object))
            self.assertEqual(el.format, data["rank"])
            self.assertEqual(el.tangoDType, data["tangoDType"])
            self.assertEqual(el.shape, data["shape"])
            self.assertEqual(el.encoding, data["encoding"])
            self.assertEqual(el.decoders, data["decoders"])
            self.assertEqual(el.value, data["value"])
예제 #3
0
    def test_default_constructor(self):
        fun = sys._getframe().f_code.co_name
        print("Run: %s.%s() " % (self.__class__.__name__, fun))
        self._fname = '%s/%s%s.h5' % (
            os.getcwd(), self.__class__.__name__, fun)

        el = DataHolder(**self.__data)
        self.assertTrue(isinstance(el, object))
        self.assertEqual(el.format, self.__data["rank"])
        self.assertEqual(el.value, self.__data["value"])
        self.assertEqual(el.tangoDType, self.__data["tangoDType"])
        self.assertEqual(el.shape, self.__data["shape"])
        self.assertEqual(el.encoding, self.__data["encoding"])
        self.assertEqual(el.decoders, self.__data["decoders"])
예제 #4
0
    def test_constructor_encode_single(self):
        fun = sys._getframe().f_code.co_name
        print("Run: %s.%s() " % (self.__class__.__name__, fun))
        dp = DecoderPool()
        spectrum = numpy.array([1234], dtype=numpy.uint32)
        image = numpy.array([[2]], dtype='uint16')

        arr = {
            "ScalarEncoded": ["UTF8", "DevEncoded", ("UTF8", b"\xc3\xb3"),
                              [1, 0], "SCALAR", b"\xc3\xb3", "DevString"],
            "SpectrumEncoded": ["UINT32", "DevEncoded",
                                ('INT32', b'\xd2\x04\x00\x00'),
                                [1, 0], "SPECTRUM", spectrum, "DevULong"],
            "ImageEncoded": ["LIMA_VIDEO_IMAGE", "DevEncoded",
                             self.encodeImage(image),
                             list(image.shape), "IMAGE", image, "DevUShort"],
        }

        for a in arr:

            data = {"rank": "SCALAR",
                    "value": arr[a][2],
                    "tangoDType": arr[a][1],
                    "shape": [1, 0],
                    "encoding": arr[a][0],
                    "decoders": dp}
            el = DataHolder(**data)

            self.assertTrue(isinstance(el, object))
            self.assertEqual(el.format, arr[a][4])
            self.assertEqual(el.tangoDType, arr[a][6])
            self.assertEqual(el.shape, arr[a][3])
            self.assertEqual(el.encoding, data["encoding"])
            self.assertEqual(el.decoders, data["decoders"])

            self.assertEqual(el.value, arr[a][5])
예제 #5
0
    def test_constructor_scalar(self):
        fun = sys._getframe().f_code.co_name
        print("Run: %s.%s() " % (self.__class__.__name__, fun))

        arr = {
            "ScalarBoolean": ["bool", "DevBoolean", True],
            "ScalarUChar": ["uint8", "DevUChar", 23],
            "ScalarShort": ["int16", "DevShort", -123],
            "ScalarUShort": ["uint16", "DevUShort", 1234],
            "ScalarLong": ["int64", "DevLong", -124],
            "ScalarULong": ["uint64", "DevULong", 234],
            "ScalarLong64": ["int64", "DevLong64", 234],
            "ScalarULong64": ["uint64", "DevULong64", 23],
            "ScalarFloat": ["float32", "DevFloat", 12.234, 1e-5],
            "ScalarDouble": ["float64", "DevDouble", -2.456673e+02, 1e-14],
            "ScalarString": ["string", "DevString", "MyTrue"],
            # "State":[ "string", "DevState", PyTango._PyTango.DevState.ON],
        }

        for a in arr:

            data = {"rank": "SCALAR",
                    "value": arr[a][2],
                    "tangoDType": arr[a][1],
                    "shape": [1, 0],
                    "encoding": None,
                    "decoders": None}
            el = DataHolder(**data)

            self.assertTrue(isinstance(el, object))
            self.assertEqual(el.format, data["rank"])
            self.assertEqual(el.value, data["value"])
            self.assertEqual(el.tangoDType, data["tangoDType"])
            self.assertEqual(el.shape, data["shape"])
            self.assertEqual(el.encoding, data["encoding"])
            self.assertEqual(el.decoders, data["decoders"])
예제 #6
0
    def test_cast_image(self):
        fun = sys._getframe().f_code.co_name
        print("Run: %s.%s() " % (self.__class__.__name__, fun))

        arrs = {}

        arrs["b"] = {
            "SpectrumBoolean": ["bool", "DevBoolean", True, [1, 0]],
        }

        arrs["i"] = {
            "SpectrumShort": ["int16", "DevShort", -13, [1, 0]],
            "SpectrumLong": ["int64", "DevLong", -14, [1, 0]],
            "SpectrumLong64": ["int64", "DevLong64", -24, [1, 0]],
        }

        arrs["u"] = {
            "SpectrumUChar": ["uint8", "DevUChar", 23, [1, 0]],
            "SpectrumULong": ["uint64", "DevULong", 2, [1, 0]],
            "SpectrumUShort": ["uint16", "DevUShort", 1, [1, 0]],
            "SpectrumULong64": ["uint64", "DevULong64", 3, [1, 0]],
        }

        arrs["f"] = {
            "SpectrumFloat": ["float32", "DevFloat", 12.234, [1, 0], 1e-5],
            "SpectrumDouble": ["float64", "DevDouble", -2.456673e+02, [1, 0],
                               1e-14],
        }

        arrs["s"] = {
            "SpectrumString": ["string", "DevString", "MyTrue", [1, 0]],
            #  "State":[ "string", "DevState", PyTango._PyTango.DevState.ON],
        }

        types = {}

        types["i"] = {"int": 0, "int8": 0, "int16": 0, "int32": 0, "int64": 0}
        types["u"] = {"uint": 0, "uint8": 0,
                      "uint16": 0, "uint32": 0, "uint64": 0}
        types["f"] = {"float": 1e-5, "float16":
                      1e-01, "float32": 1e-5, "float64": 1e-14}
        types["s"] = {"string": 0}
        types["b"] = {"bool": 0}

        ca = {
            "i": {"i": True, "u": True, "f": True, "s": False, "b": True},
            "u": {"i": True, "u": True, "f": True, "s": False, "b": True},
            "f": {"i": True, "u": True, "f": True, "s": False, "b": True},
            "s": {"i": True, "u": True, "f": True, "s": True, "b": True},
            "b": {"i": True, "u": True, "f": True, "s": True, "b": True}
        }

        for s in arrs:
            arr = arrs[s]

            for k in arr:

                mlen = [self.__rnd.randint(1, 10), self.__rnd.randint(
                    1, 10), self.__rnd.randint(0, 3)]
                if arr[k][1] != "DevBoolean":
                    arr[k][2] = [[arr[k][2] * self.__rnd.randint(0, 3)
                                  for r in range(mlen[1])]
                                 for c in range(mlen[0])]
                else:
                    mlen = [
                        self.__rnd.randint(1, 10), self.__rnd.randint(1, 10)]
                    if arr[k][1] == 'DevBoolean':
                        arr[k][2] = [[(True if self.__rnd.randint(0, 1)
                                       else False)
                                      for c in range(mlen[1])]
                                     for r in range(mlen[0])]

                arr[k][3] = [mlen[0], mlen[1]]

        for k in arrs:
            arr = arrs[k]
            for a in arr:
                data = {"rank": "IMAGE",
                        "value": arr[a][2],
                        "tangoDType": arr[a][1],
                        "shape": arr[a][3],
                        "encoding": None,
                        "decoders": None}
                el = DataHolder(**data)

                self.assertTrue(isinstance(el, object))
                self.assertEqual(el.format, data["rank"])
                self.assertEqual(el.value, data["value"])
                self.assertEqual(el.tangoDType, data["tangoDType"])
                self.assertEqual(el.shape, data["shape"])
                self.assertEqual(el.encoding, data["encoding"])
                self.assertEqual(el.decoders, data["decoders"])
                for c in ca:
                    for it in types[c]:
                        if ca[c][k] is True:
                            elc = el.cast(it)
                            evalue = numpy.array([[NTP.convert[it](e)
                                                   for e in row]
                                                  for row in el.value],
                                                 dtype=nptype(it))

                            for i in range(len(evalue)):
                                self.assertEqual(len(evalue[i]), len(elc[i]))
                                for j in range(len(evalue[i])):
                                    if types[c][it]:
                                        self.assertTrue(
                                            abs(evalue[i][j] - elc[i][j]) <=
                                            types[c][it])
                                    else:
                                        self.assertEqual(
                                            evalue[i][j], elc[i][j])
                        else:
                            self.myAssertRaise(Exception, el.cast, it)
예제 #7
0
    def test_cast_scalar_from_string(self):
        fun = sys._getframe().f_code.co_name
        print("Run: %s.%s() " % (self.__class__.__name__, fun))

        arrs = {}

        arrs["f"] = {
            "ScalarString1": ["string", "DevString", "12.3243"],
            "ScalarString2": ["string", "DevString", "-12.3243"],
            "ScalarString3": ["string", "DevString", "12.3243"],
        }

        arrs["i"] = {
            "ScalarString1": ["string", "DevString", "-1"],
            "ScalarString2": ["string", "DevString", "-125"],
            "ScalarString3": ["string", "DevString", "-124"],
        }

        arrs["u"] = {
            "ScalarString1": ["string", "DevString", "-1"],
            "ScalarString2": ["string", "DevString", "-125"],
            "ScalarString3": ["string", "DevString", "-124"],
        }

        arrs["s"] = {
            "ScalarString1": ["string", "DevString", "bnle"],
            "ScalarString2": ["string", "DevString", "What"],
            "ScalarString3": ["string", "DevString", "Cos"],
        }

        arrs["b"] = {
            "ScalarString1": ["string", "DevString", "True"],
            "ScalarString2": ["string", "DevString", "False"],
            "ScalarString3": ["string", "DevString", "true"],
        }

        types = {}

        types["i"] = ["int", "int8", "int16", "int32", "int64"]
        types["u"] = ["uint", "uint8", "uint16", "uint32", "uint64"]
        types["f"] = ["float", "float16", "float32", "float64"]
        types["s"] = ["string"]
        types["b"] = ["bool"]

        ca = {
            "i": {"i": True, "u": True, "f": False, "s": False, "b": False},
            "u": {"i": True, "u": True, "f": False, "s": False, "b": False},
            "f": {"i": True, "u": True, "f": True, "s": False, "b": False},
            "s": {"i": True, "u": True, "f": True, "s": True, "b": True},
            "b": {"i": True, "u": True, "f": True, "s": True, "b": True}
        }

        for k in arrs:
            arr = arrs[k]
            for a in arr:
                data = {"rank": "SCALAR",
                        "value": arr[a][2],
                        "tangoDType": arr[a][1],
                        "shape": [1, 0],
                        "encoding": None,
                        "decoders": None}
                el = DataHolder(**data)

                self.assertTrue(isinstance(el, object))
                self.assertEqual(el.format, data["rank"])
                self.assertEqual(el.value, data["value"])
                self.assertEqual(el.tangoDType, data["tangoDType"])
                self.assertEqual(el.shape, data["shape"])
                self.assertEqual(el.encoding, data["encoding"])
                self.assertEqual(el.decoders, data["decoders"])
                for c in ca:
                    for it in types[c]:
                        if ca[c][k] is True:
                            self.assertEqual(
                                NTP.convert[it](el.value), el.cast(it))
                        else:
                            self.myAssertRaise(ValueError, el.cast, it)
예제 #8
0
    def test_cast_scalar(self):
        fun = sys._getframe().f_code.co_name
        print("Run: %s.%s() " % (self.__class__.__name__, fun))

        arrs = {}

        arrs["b"] = {
            "ScalarBoolean": ["bool", "DevBoolean", True],
        }

        arrs["i"] = {
            "ScalarShort": ["int16", "DevShort", -123],
            "ScalarLong": ["int64", "DevLong", -124],
            "ScalarLong64": ["int64", "DevLong64", 234],
        }

        arrs["u"] = {
            "ScalarUChar": ["uint8", "DevUChar", 23],
            "ScalarUShort": ["uint16", "DevUShort", 1234],
            "ScalarULong": ["uint64", "DevULong", 234],
            "ScalarULong64": ["uint64", "DevULong64", 23],
        }

        arrs["f"] = {
            "ScalarFloat": ["float32", "DevFloat", 12.234, 1e-5],
            "ScalarDouble": ["float64", "DevDouble", -2.456673e+02, 1e-14],
        }

        arrs["s"] = {
            "ScalarString": ["string", "DevString", "MyTrue"],
            # "State":[ "string", "DevState", PyTango._PyTango.DevState.ON],
        }

        types = {}

        types["i"] = ["int", "int8", "int16", "int32", "int64"]
        types["u"] = ["uint", "uint8", "uint16", "uint32", "uint64"]
        types["f"] = ["float", "float16", "float32", "float64"]
        types["s"] = ["string"]
        types["b"] = ["bool"]

        ca = {
            "i": {"i": True, "u": True, "f": True, "s": False, "b": True},
            "u": {"i": True, "u": True, "f": True, "s": False, "b": True},
            "f": {"i": True, "u": True, "f": True, "s": False, "b": True},
            "s": {"i": True, "u": True, "f": True, "s": True, "b": True},
            "b": {"i": True, "u": True, "f": True, "s": True, "b": True}
        }

        for k in arrs:
            arr = arrs[k]
            for a in arr:
                data = {"rank": "SCALAR",
                        "value": arr[a][2],
                        "tangoDType": arr[a][1],
                        "shape": [1, 0],
                        "encoding": None,
                        "decoders": None}
                el = DataHolder(**data)

                self.assertTrue(isinstance(el, object))
                self.assertEqual(el.format, data["rank"])
                self.assertEqual(el.value, data["value"])
                self.assertEqual(el.tangoDType, data["tangoDType"])
                self.assertEqual(el.shape, data["shape"])
                self.assertEqual(el.encoding, data["encoding"])
                self.assertEqual(el.decoders, data["decoders"])
                for c in ca:
                    if ca[c][k] is True:
                        for it in types[c]:

                            self.assertEqual(
                                NTP.convert[it](el.value), el.cast(it))
                    else:
                        for it in types[c]:
                            self.myAssertRaise(ValueError, el.cast, it)