Esempio n. 1
0
    def test_mean_ndarray(self):
        for j, (x, xa) in enumerate([(self.x, self.xa), (self.xc, self.xca)]):
            ave = 0.0
            for val in x:
                ave += val
            ave = ave/float(len(x))

        for m in [function.mean(xa)]:
            if j == 0:
                self.assertTrue(equivalent(value(m), ave.x))
                self.assertTrue(equivalent(uncertainty(m), ave.u))
            else:
                self.assertTrue(equivalent_complex(value(m), ave.x))
                self.assertTrue(equivalent(uncertainty(m).real, ave.u.real))
                self.assertTrue(equivalent(uncertainty(m).imag, ave.u.imag))

        xa = xa.reshape(2, 3)

        for m in [function.mean(xa)]:
            if j == 0:
                self.assertTrue(equivalent(value(m), ave.x))
                self.assertTrue(equivalent(uncertainty(m), ave.u))
            else:
                self.assertTrue(equivalent_complex(value(m), ave.x))
                self.assertTrue(equivalent(uncertainty(m).real, ave.u.real))
                self.assertTrue(equivalent(uncertainty(m).imag, ave.u.imag))

        for m in [function.mean(xa, axis=0)]:
            aves = [(x[0] + x[3])/2.0, (x[1] + x[4])/2.0, (x[2] + x[5])/2.0]
            for idx in range(3):
                if j == 0:
                    self.assertTrue(equivalent(m[idx].x, aves[idx].x))
                    self.assertTrue(equivalent(m[idx].u, aves[idx].u))
                else:
                    self.assertTrue(equivalent_complex(m[idx].x, aves[idx].x))
                    self.assertTrue(equivalent(m[idx].u.real, aves[idx].u.real))
                    self.assertTrue(equivalent(m[idx].u.imag, aves[idx].u.imag))

        for m in [function.mean(xa, axis=1)]:
            aves = [(x[0] + x[1] + x[2])/3.0, (x[3] + x[4] + x[5])/3.0]
            for idx in range(2):
                if j == 0:
                    self.assertTrue(equivalent(m[idx].x, aves[idx].x))
                    self.assertTrue(equivalent(m[idx].u, aves[idx].u))
                else:
                    self.assertTrue(equivalent_complex(m[idx].x, aves[idx].x))
                    self.assertTrue(equivalent(m[idx].u.real, aves[idx].u.real))
                    self.assertTrue(equivalent(m[idx].u.imag, aves[idx].u.imag))
Esempio n. 2
0
def _isinf(number):
    val = value(number)
    if isinstance(val, Real):
        return isinf(val)
    elif isinstance(val, Complex):
        return cisinf(val)
    else:
        raise TypeError('cannot calculate isinf of type {}'.format(type(number)))
Esempio n. 3
0
    def value(self):
        """The result of :func:`~.core.value` for each element in the array.

        **Example**::

            >>> a = la.uarray([0.57, ureal(0.45, 0.12), ucomplex(1.1+0.68j, 0.19)])
            >>> a.value()
            uarray([0.57, 0.45, (1.1+0.68j)])

        :rtype: :class:`UncertainArray`
        """
        # Note: in the future we might allow different `dtype` values.
        # However, this needs some thought. Should `dtype=float`
        # return complex numbers as a pair of reals, for example?
        # What are the most likely use-cases?
        # :param dtype: The data type of the returned array.
        # :type dtype: :class:`numpy.dtype`
        arr, itemset, iterator = self._create_empty(dtype=None)
        for i, item in enumerate(iterator):
            itemset(i, value(item))
        return UncertainArray(arr)
Esempio n. 4
0
    def test_sum_ndarray(self):
        # 1D array
        xlist = [ureal(i, i*0.1) for i in range(100)]
        xarray = uarray(xlist)
        self.assertTrue(xarray.shape == (100,))

        b = 0
        for x in xlist:
            b += x
        for a in [function.sum(xarray)]:
            self.assertTrue(equivalent(value(a), b.x))
            self.assertTrue(equivalent(uncertainty(a), b.u))

        # 3D array
        xlist = [[[ureal(i*j*k, i*j*k*0.1) for k in range(1, 5)] for j in range(7, 10)] for i in range(3, 9)]
        xarray = uarray(xlist)
        self.assertTrue(xarray.shape == (6, 3, 4))

        axis_none = 0.0
        axis_0 = [[0.0 for i in range(4)] for j in range(3)]
        axis_1 = [[0.0 for i in range(4)] for j in range(6)]
        axis_2 = [[0.0 for i in range(3)] for j in range(6)]
        for i in range(6):
            for j in range(3):
                for k in range(4):
                    _value = xlist[i][j][k]
                    axis_none += _value
                    axis_0[j][k] += _value
                    axis_1[i][k] += _value
                    axis_2[i][j] += _value

        # axis=None
        for a in [function.sum(xarray)]:
            self.assertTrue(equivalent(value(a), axis_none.x))
            self.assertTrue(equivalent(uncertainty(a), axis_none.u))

        # axis=0
        m, n = len(axis_0), len(axis_0[0])
        for a in [function.sum(xarray, axis=0)]:
            self.assertTrue(a.shape == (m, n))
            for j in range(m):
                for k in range(n):
                    self.assertTrue(equivalent(a[j, k].x, axis_0[j][k].x))
                    self.assertTrue(equivalent(a[j, k].u, axis_0[j][k].u))

        # axis=1
        m, n = len(axis_1), len(axis_1[0])
        for a in [function.sum(xarray, axis=1)]:
            self.assertTrue(a.shape == (m, n))
            for i in range(m):
                for k in range(n):
                    self.assertTrue(equivalent(a[i, k].x, axis_1[i][k].x))
                    self.assertTrue(equivalent(a[i, k].u, axis_1[i][k].u))

        # axis=2
        m, n = len(axis_2), len(axis_2[0])
        for a in [function.sum(xarray, axis=2)]:
            self.assertTrue(a.shape == (m, n))
            for i in range(m):
                for j in range(n):
                    self.assertTrue(equivalent(a[i, j].x, axis_2[i][j].x))
                    self.assertTrue(equivalent(a[i, j].u, axis_2[i][j].u))