예제 #1
0
def test_search_by_index(builder):
    error = np.arange(9, dtype=float).reshape(3, 3)
    error[-1] = 7
    iarr = RawBinary.map(FloatArray.from_numpy(error))
    seq = Linear.flatten(0, iarr)
    space = builder.build_informationspace(seq)
    assert isinstance(space, IS)
예제 #2
0
 def transpose(obj, *order):
     if isinstance(order[0], tuple):
         order = order[0]
     if isinstance(obj, np.ndarray):
         newobj = transposeND(obj, order)
     elif isinstance(obj, xr.DataArray):
         newobj = transposeDA(obj, order)
     elif isinstance(obj, FloatArray):
         tmp = transposeND(obj.array, order)
         newobj = FloatArray(tmp)
     else:
         raise TypeError("Can't understand datatype of obj.")
     return newobj
예제 #3
0
 def subset(obj, size, error=.005):
     if isinstance(obj, np.ndarray):
         subs = SubsetSlices(obj.shape, size, error)
         result = obj[subs]
     elif isinstance(obj, xr.DataArray):
         subs = SubsetSlices(obj.values.shape, size, error)
         slices = {x: y for x, y in zip(obj.dims, subs)}
         result = obj.isel(**slices)
     elif isinstance(obj, FloatArray):
         subs = SubsetSlices(obj.array.shape, size, error)
         result = FloatArray(obj.array[subs])
     else:
         raise TypeError("Can't understand type.")
     return result
예제 #4
0
def test_floatarray_with_other_object(value):
    """Comparison with arbitary types."""
    with pytest.raises(TypeError) as err:
        _ = FloatArray(ARR) == value
    assert "Comparison failed" in str(err)
예제 #5
0
def test_floatarray_with_npndarray():
    """Comparison with related values."""
    assert FloatArray(ARR) == ARR
예제 #6
0
def test_equal_floatarray():
    """Comparison with itself."""
    assert FloatArray(ARR) == FloatArray(ARR)
예제 #7
0
def test_value_error(value):
    """Wrong input types."""
    with pytest.raises(TypeError) as err:
        FloatArray(value)
    assert "Expected np.nd" in str(err)
예제 #8
0
def test_raise_error(form):
    """Wrong np.dtypes of array."""
    with pytest.raises(TypeError) as err:
        FloatArray(ARR.astype(form))
    assert "Expected np.nd" in str(err)
예제 #9
0
def test_importtype():
    """"Correct initialisation."""
    assert isinstance(FloatArray(ARR), FloatArray)
예제 #10
0
# coding: utf-8
"""Testing mapper functions."""

from pasc.modifier import mapper
from pasc.objects.floatarray import FloatArray
from pasc.objects.integerarray import IntegerArray
import numpy as np
import pytest

MAPPER = [
    mapper.Lindstrom,
    mapper.RawBinary,
]

INPUTGROUP_VALID = [
    FloatArray(np.arange(24, dtype=np.float32)),
]

INPUTGROUP_INVALID = [
    IntegerArray(np.arange(24, dtype=np.int32)),
]


@pytest.mark.parametrize('mapmod', MAPPER)
@pytest.mark.parametrize('inputgroup', INPUTGROUP_VALID)
def test_map_function_output(inputgroup, mapmod):
    """Result of Mapper is an IntegerArray using map method."""
    mapfunc = mapmod.map(inputgroup)
    assert isinstance(mapfunc, IntegerArray)

예제 #11
0
    name = "Block"

    @staticmethod
    def flatten(startnode, integerarray, weights=None):
        default_weights = ()
        if not weights:
            weights = default_weights
        startnode, integerarray = _check_input(startnode, integerarray)
        shape = integerarray.array.shape

        _, seq = bfs.BFSBlos(shape=shape, startidx=int(startnode)-1, weights=weights)
        data = np.array([integerarray.array.flat[x] for x in seq])
        return IndexSequence(list(seq), shape, data)


if __name__ == '__main__':
    from pasc.objects.floatarray import FloatArray
    from pasc.modifier.mapper import RawBinary
    farr = FloatArray.from_data('pre', 'tas')
    # farr = FloatArray.from_numpy(np.arange(43, dtype=float))
    farr = FloatArray.from_numpy(farr.array[::, ::, ::])
    iarr = RawBinary.map(farr)
    startidx = 0
    print(ChequerboardC.name, ChequerboardC.flatten(startidx, iarr).sequence)
    print(BlossomC.name, BlossomC.flatten(startidx, iarr).sequence)
    print(BlockC.name, BlockC.flatten(startidx, iarr).sequence)
    print(Linear.name, Linear.flatten(startidx, iarr).sequence)
    print(Blossom.name, Blossom.flatten(startidx, iarr).sequence)
    print(Block.name, Block.flatten(startidx, iarr).sequence)
    print(Chequerboard.name, Chequerboard.flatten(startidx, iarr).sequence)
예제 #12
0
    def reset(self):
        self.builder = self.build(*self.args, **self.kwargs)

    def feed(self, seqobj):
        seqobj = _check_input(seqobj, BaseSequence)
        self.reset()

        for i in range(1, seqobj.sequence.size):
            t = seqobj.__class__(seqobj.sequence[:i], seqobj.shape,
                                 seqobj.data[:i])
            yield self.builder.build_informationspace(t)
        self.reset()


if __name__ == '__main__':
    from itertools import islice
    from pasc.objects.floatarray import FloatArray
    from pasc.modifier import mapper as mp, sequencer as sq, builder as bd
    farr = FloatArray.from_data('pre', 'tas', decode_times=False)
    farr = FloatArray.from_numpy(farr.array[0, ::, ::])
    iarr = mp.RawBinary.map(farr)
    seq = sq.Linear.flatten(0, iarr)
    builder = bd.RestrictedBuilder
    kwargs = dict(restriction=5)

    feeder = SpaceFeeder1DMA(builder, **kwargs)
    result = islice(feeder.feed(seq, restriction=4), 902)
    for IS in result:
        print(IS, end='\n\n\n\n')
예제 #13
0
 def to_floatarray(self, var):
     dataarray = getattr(self.data, var)
     return FloatArray(dataarray.values)