Beispiel #1
0
def test_subclasses():
    # test that subclass is preserved only if subok=True
    a = VerySimpleSubClass([1, 2, 3, 4])
    assert_(type(a) is VerySimpleSubClass)
    a_view = as_strided(a, shape=(2,), strides=(2 * a.itemsize,))
    assert_(type(a_view) is np.ndarray)
    a_view = as_strided(a, shape=(2,), strides=(2 * a.itemsize,), subok=True)
    assert_(type(a_view) is VerySimpleSubClass)
    # test that if a subclass has __array_finalize__, it is used
    a = SimpleSubClass([1, 2, 3, 4])
    a_view = as_strided(a, shape=(2,), strides=(2 * a.itemsize,), subok=True)
    assert_(type(a_view) is SimpleSubClass)
    assert_(a_view.info == 'simple finalized')

    # similar tests for broadcast_arrays
    b = np.arange(len(a)).reshape(-1, 1)
    a_view, b_view = broadcast_arrays(a, b)
    assert_(type(a_view) is np.ndarray)
    assert_(type(b_view) is np.ndarray)
    assert_(a_view.shape == b_view.shape)
    a_view, b_view = broadcast_arrays(a, b, subok=True)
    assert_(type(a_view) is SimpleSubClass)
    assert_(a_view.info == 'simple finalized')
    assert_(type(b_view) is np.ndarray)
    assert_(a_view.shape == b_view.shape)

    # and for broadcast_to
    shape = (2, 4)
    a_view = broadcast_to(a, shape)
    assert_(type(a_view) is np.ndarray)
    assert_(a_view.shape == shape)
    a_view = broadcast_to(a, shape, subok=True)
    assert_(type(a_view) is SimpleSubClass)
    assert_(a_view.info == 'simple finalized')
    assert_(a_view.shape == shape)
def test_writeable():
    # broadcast_to should return a readonly array
    original = np.array([1, 2, 3])
    result = broadcast_to(original, (2, 3))
    assert_equal(result.flags.writeable, False)
    assert_raises(ValueError, result.__setitem__, slice(None), 0)

    # but the result of broadcast_arrays needs to be writeable (for now), to
    # preserve backwards compatibility
    for results in [broadcast_arrays(original),
                    broadcast_arrays(0, original)]:
        for result in results:
            assert_equal(result.flags.writeable, True)
    # keep readonly input readonly
    original.flags.writeable = False
    _, result = broadcast_arrays(0, original)
    assert_equal(result.flags.writeable, False)

    # regression test for GH6491
    shape = (2,)
    strides = [0]
    tricky_array = as_strided(np.array(0), shape, strides)
    other = np.zeros((1,))
    first, second = broadcast_arrays(tricky_array, other)
    assert_(first.shape == second.shape)
Beispiel #3
0
def test_broadcast_kwargs():
    # ensure that a TypeError is appropriately raised when
    # np.broadcast_arrays() is called with any keyword
    # argument other than 'subok'
    x = np.arange(10)
    y = np.arange(10)

    with assert_raises_regex(TypeError,
                             r'broadcast_arrays\(\) got an unexpected keyword*'):
        broadcast_arrays(x, y, dtype='float64')
Beispiel #4
0
    def __init__(self, a, N=2):
        arrays = a
        if all(isinstance(x, _hfarray) for x in a):
            arrays = make_same_dims_list(arrays)
        else:
            raise Exception("Can only broadcast hfarrays")
        try:
            N[0]
        except TypeError:
            N = [N] * len(a)
        self.Nlist = Nlist = N

        _matrixshapes = [get_shape_helper(x.shape, Nelem)
                                              for x, Nelem in zip(arrays, Nlist)]
        _matrixstrides = [get_shape_helper(x.strides, Nelem)
                                                for x, Nelem in zip(arrays, Nlist)]
        self._matrixshapes = _matrixshapes
        self._matrixstrides = _matrixstrides
        dimslist = [x.dims for x, Nelem in zip(arrays, Nlist)]

        firstelems = broadcast_arrays(*[firstpos(x, Nelem)
                                        for x, Nelem in zip(arrays, Nlist)])
        self._broadcasted = broadcasted = []
        for o, endshapes, endstrides, dims in zip(firstelems, _matrixshapes,
                                                  _matrixstrides, dimslist):
            x = as_strided(o, o.shape + endshapes, o.strides + endstrides)
            broadcasted.append(hfarray(x, dims=dims, copy=False))

        self.outershape = broadcasted[0].shape[:-Nlist[0]]
Beispiel #5
0
    def __init__(self, a, N=2):
        arrays = a
        if all(isinstance(x, _hfarray) for x in a):
            arrays = make_same_dims_list(arrays)
        else:
            raise Exception("Can only broadcast hfarrays")
        try:
            N[0]
        except TypeError:
            N = [N] * len(a)
        self.Nlist = Nlist = N

        _matrixshapes = [get_shape_helper(x.shape, Nelem)
                                              for x, Nelem in zip(arrays, Nlist)]
        _matrixstrides = [get_shape_helper(x.strides, Nelem)
                                                for x, Nelem in zip(arrays, Nlist)]
        self._matrixshapes = _matrixshapes
        self._matrixstrides = _matrixstrides
        dimslist = [x.dims for x, Nelem in zip(arrays, Nlist)]

        firstelems = broadcast_arrays(*[firstpos(x, Nelem)
                                        for x, Nelem in zip(arrays, Nlist)])
        self._broadcasted = broadcasted = []
        for o, endshapes, endstrides, dims in zip(firstelems, _matrixshapes,
                                                  _matrixstrides, dimslist):
            x = as_strided(o, o.shape + endshapes, o.strides + endstrides)
            broadcasted.append(hfarray(x, dims=dims, copy=False))

        self.outershape = broadcasted[0].shape[:-Nlist[0]]
Beispiel #6
0
def test_one_off():
    x = np.array([[1, 2, 3]])
    y = np.array([[1], [2], [3]])
    bx, by = broadcast_arrays(x, y)
    bx0 = np.array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
    by0 = bx0.T
    assert_array_equal(bx0, bx)
    assert_array_equal(by0, by)
Beispiel #7
0
def test_reference_types():
    input_array = np.array('a', dtype=object)
    expected = np.array(['a'] * 3, dtype=object)
    actual = broadcast_to(input_array, (3,))
    assert_array_equal(expected, actual)

    actual, _ = broadcast_arrays(input_array, np.ones(3))
    assert_array_equal(expected, actual)
Beispiel #8
0
def test_writeable():
    # broadcast_to should return a readonly array
    original = np.array([1, 2, 3])
    result = broadcast_to(original, (2, 3))
    assert_equal(result.flags.writeable, False)
    assert_raises(ValueError, result.__setitem__, slice(None), 0)

    # but the result of broadcast_arrays needs to be writeable (for now), to
    # preserve backwards compatibility
    for results in [broadcast_arrays(original),
                    broadcast_arrays(0, original)]:
        for result in results:
            assert_equal(result.flags.writeable, True)
    # keep readonly input readonly
    original.flags.writeable = False
    _, result = broadcast_arrays(0, original)
    assert_equal(result.flags.writeable, False)
Beispiel #9
0
def assert_shapes_correct(input_shapes, expected_shape):
    # Broadcast a list of arrays with the given input shapes and check the
    # common output shape.

    inarrays = [np.zeros(s) for s in input_shapes]
    outarrays = broadcast_arrays(*inarrays)
    outshapes = [a.shape for a in outarrays]
    expected = [expected_shape] * len(inarrays)
    assert_equal(outshapes, expected)
Beispiel #10
0
def assert_same_as_ufunc(shape0, shape1, transposed=False, flipped=False):
    # Broadcast two shapes against each other and check that the data layout
    # is the same as if a ufunc did the broadcasting.

    x0 = np.zeros(shape0, dtype=int)
    # Note that multiply.reduce's identity element is 1.0, so when shape1==(),
    # this gives the desired n==1.
    n = int(np.multiply.reduce(shape1))
    x1 = np.arange(n).reshape(shape1)
    if transposed:
        x0 = x0.T
        x1 = x1.T
    if flipped:
        x0 = x0[::-1]
        x1 = x1[::-1]
    # Use the add ufunc to do the broadcasting. Since we're adding 0s to x1, the
    # result should be exactly the same as the broadcasted view of x1.
    y = x0 + x1
    b0, b1 = broadcast_arrays(x0, x1)
    assert_array_equal(y, b1)
Beispiel #11
0
    def integrate(self, min, max, attr=None, info={}):
        """ Calculate the total number of points between [min, max).

            If attr is given, also calculate the sum of the weight.

            This is a M log(N) operation, where M is the number of min/max
            queries and N is number of points.

        """
        if numpy.isscalar(min):
            min = [min for i in range(self.ndims)]
        if numpy.isscalar(max):
            max = [max for i in range(self.ndims)]

        min = numpy.array(min, dtype='f8', order='C')
        max = numpy.array(max, dtype='f8', order='C')

        if (min).shape[-1] != self.ndims:
            raise ValueError("dimension of min does not match Node")
        if (max).shape[-1] != self.ndims:
            raise ValueError("dimension of max does not match Node")
        min, max = broadcast_arrays(min, max)
        return _core.KDNode.integrate(self, min, max, attr, info)
Beispiel #12
0
def test_same():
    x = np.arange(10)
    y = np.arange(10)
    bx, by = broadcast_arrays(x, y)
    assert_array_equal(x, bx)
    assert_array_equal(y, by)