コード例 #1
0
    def test_eval_fail(self):

        data = numpy.zeros(5, dtype=[('mass', 'f8')])
        data['mass'][0] = numpy.nan

        with pytest.raises(SelectionError):
            q = Query("mass < missing_func(0.3)")
            m = q.get_mask(data)
コード例 #2
0
    def test_missing_op(self):

        data = numpy.zeros(5, dtype=[('mass', 'f8')])
        data['mass'][0] = numpy.nan

        with pytest.raises(SelectionError):
            q = Query("mass isnot 4)")
            m = q.get_mask(data)
コード例 #3
0
    def test_indexing_single_dimension(self):

        data = numpy.zeros(5, dtype=[('mass', 'f8')])
        data['mass'][0] = numpy.nan

        with pytest.raises(SelectionError):
            q = Query("mass[:,0] is nan")
            m = q.get_mask(data)
コード例 #4
0
    def test_indexing_out_of_range(self):

        data = numpy.zeros(10, dtype=[('Position', (float, 3))])
        data['Position'] = numpy.random.random(size=(10, 3))

        with pytest.raises(SelectionError):
            q = Query("Position[:,4] is nan")
            m = q.get_mask(data)
コード例 #5
0
    def test_missing_column(self):

        data = numpy.zeros(5, dtype=[('mass', 'f8')])
        data['mass'][0] = numpy.nan

        with pytest.raises(SelectionError):
            q = Query("velocity is nan")
            m = q.get_mask(data)
コード例 #6
0
    def test_not_inf(self):

        data = numpy.zeros(5, dtype=[('mass', 'f8')])
        data['mass'][0] = numpy.inf
        q = Query("mass is not inf")
        m = q.get_mask(data)

        self.assertTrue(m.sum() == len(data) - 1)
        self.assertTrue(m[0] == False)
コード例 #7
0
    def test_slice_index_fail(self):

        data = numpy.zeros(100, dtype=[('Position', (float, 3))])
        data['Position'] = numpy.random.random(size=(100, 3))

        # output index must be 1D or same dimension as input
        with pytest.raises(SelectionError):
            q = Query("Position[:,:2] < 0.5")
            mask = q.get_mask(data)
コード例 #8
0
    def test_exp(self):

        data = numpy.zeros(100, dtype=[('mass', float)])
        data['mass'] = numpy.random.random(size=100)
        ans = (data['mass'] < numpy.exp(-0.9))

        q = Query("mass < exp(-0.9))")
        mask = q.get_mask(data)
        self.assertTrue(numpy.all(ans == mask))
コード例 #9
0
    def test_compound_log(self):

        data = numpy.zeros(100, dtype=[('mass', float)])
        data['mass'] = numpy.random.random(size=100)
        ans = (data['mass'] < 0.5 * numpy.log(2.))

        q = Query("mass < 0.5*log(2)")
        mask = q.get_mask(data)
        self.assertTrue(numpy.all(ans == mask))
コード例 #10
0
    def test_minus(self):

        data = numpy.zeros(100, dtype=[('mass', float)])
        data['mass'] = numpy.random.random(size=100)
        ans = (data['mass'] < 0.25)

        q = Query("mass < 0.5-0.125-0.125")
        mask = q.get_mask(data)
        self.assertTrue(numpy.all(ans == mask))
コード例 #11
0
    def test_is_not(self):

        data = numpy.zeros(5, dtype=[('mass', 'int')])
        data['mass'][0] = 1
        q = Query("mass is not 0")
        m = q.get_mask(data)

        self.assertTrue(m.sum() == 1)
        self.assertTrue(m[0] == True)
コード例 #12
0
    def test_index(self):

        data = numpy.zeros(100, dtype=[('Position', (float, 3))])
        data['Position'] = numpy.random.random(size=(100, 3))
        ans = (data['Position'][:, 0] < 0.5) & (data['Position'][:, -1] >= 0.7)

        q = Query("Position[:,0] < 0.5 and Position[:,-1] >= 0.7")
        mask = q.get_mask(data)
        self.assertTrue(numpy.all(ans == mask))
コード例 #13
0
    def test_nan(self):

        data = numpy.zeros(5, dtype=[('mass', 'f8')])
        data['mass'][0] = numpy.nan
        q = Query("mass is nan")
        m = q.get_mask(data)

        self.assertTrue(m.sum() == 1)
        self.assertTrue(m[0] == True)
コード例 #14
0
    def test_column_log10(self):

        data = numpy.zeros(100, dtype=[('mass', float)])
        data['mass'] = numpy.random.random(size=100)
        ans = numpy.log10(data['mass']) > -0.5

        q = Query("log10(mass) > -0.5")
        mask = q.get_mask(data)
        self.assertTrue(numpy.all(ans == mask))
コード例 #15
0
    def test_compound_andnot(self):

        data = numpy.zeros(100, dtype=[('mass', int), ('velocity', int)])
        data['mass'] = numpy.random.choice([0, 1, 2], size=100)
        data['velocity'] = numpy.random.choice([0, 1, 2], size=100)
        ans = (data['mass'] == 0) & ((data['velocity'] == 1))

        q = Query("mass == 0 and not velocity != 1")
        mask = q.get_mask(data)
        self.assertTrue(numpy.all(ans == mask))
コード例 #16
0
    def test_gt(self):

        data = numpy.zeros(5, dtype=[('mass', 'int')])
        data['mass'][0] = 1
        data['mass'][1] = 2
        q = Query("mass > 1")
        m = q.get_mask(data)

        self.assertTrue(m.sum() == 1)
        self.assertTrue(m[1] == True)
コード例 #17
0
    def test_lt(self):

        data = numpy.zeros(5, dtype=[('mass', 'int')])
        data['mass'][0] = 1
        data['mass'][1] = 2
        q = Query("mass < 1")
        m = q.get_mask(data)

        self.assertTrue(m.sum() == len(data) - 2)
        self.assertTrue((m[0] == False) and (m[1] == False))
コード例 #18
0
    def test_compound_index(self):

        data = numpy.zeros(100,
                           dtype=[('Position', (float, 3)), ('velocity', int)])
        data['Position'] = numpy.random.random(size=(100, 3))
        data['velocity'] = numpy.random.choice([0, 1, 2], size=100)
        ans = (data['Position'][:, 1] < 0.5) | (data['velocity'] == 2)

        q = Query("Position[:,1] < 0.5 or velocity == 2")
        mask = q.get_mask(data)
        self.assertTrue(numpy.all(ans == mask))
コード例 #19
0
    def test_not(self):

        data = numpy.zeros(100, dtype=[('mass', int), ('velocity', int)])
        data['mass'] = numpy.random.choice([0, 1, 2], size=100)
        ans = data['mass'] >= 1

        q = Query("not mass < 1")
        mask = q.get_mask(data)
        self.assertTrue(numpy.all(ans == mask))

        q = Query("not (mass < 1)")
        mask = q.get_mask(data)
        self.assertTrue(numpy.all(ans == mask))
コード例 #20
0
    def test_compound_and(self):

        data = numpy.zeros(100, dtype=[('mass', float), ('velocity', float)])
        data['mass'] = numpy.random.random(size=100)
        data['velocity'] = numpy.random.random(size=100)

        q = Query("mass < 0.5 and velocity > 0.5")
        sliced = data[q.get_mask(data)]
        self.assertTrue(numpy.alltrue(sliced['mass'] < 0.5))
        self.assertTrue(numpy.alltrue(sliced['velocity'] > 0.5))

        q = Query("(mass < 0.5) and (velocity > 0.5)")
        sliced = data[q.get_mask(data)]
        self.assertTrue(numpy.alltrue(sliced['mass'] < 0.5))
        self.assertTrue(numpy.alltrue(sliced['velocity'] > 0.5))