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))
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)))
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)
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))