Beispiel #1
0
 def test_unary(self):
     self.assertEqual(transpile_expr('-(-+(-x))'), '--+-x')
     self.assertEqual(transpile_expr('-((a-b)-c)'), '-(a - b - c)')
     self.assertEqual(transpile_expr('not x'), 'np.logical_not(x)')
     self.assertEqual(transpile_expr('not -x'), 'np.logical_not(-x)')
     self.assertEqual(transpile_expr('not not x'),
                      'np.logical_not(np.logical_not(x))')
Beispiel #2
0
 def test_conditional(self):
     # The following conditional expr looks wrong but this is how it looks like after translating
     # from SNAP expression 'a >= 0.0 ? a : NaN'
     self.assertEqual(transpile_expr('a >= 0.0 if a else NaN'),
                      'np.where(a >= 0.0, a, NaN)')
     self.assertEqual(transpile_expr('a >= 0.0 if a else b >= 0.0 if b else NaN'),
                      'np.where(a >= 0.0, a, np.where(b >= 0.0, b, NaN))')
Beispiel #3
0
 def test_where(self):
     self.assertEqual(transpile_expr('where(a >= 0.0, a, NaN)'),
                      'xr.where(a >= 0.0, a, NaN)')
     self.assertEqual(transpile_expr('xr.where(a >= 0.0, a, NaN)'),
                      'xr.where(a >= 0.0, a, NaN)')
     self.assertEqual(transpile_expr('np.where(a >= 0.0, a, NaN)'),
                      'np.where(a >= 0.0, a, NaN)')
     # xarray.DataArray.where() method:
     self.assertEqual(transpile_expr('a.where(a.x >= 0.0)'),
                      'a.where(a.x >= 0.0)')
Beispiel #4
0
    def test_compare(self):
        self.assertEqual(transpile_expr('a < 2'), 'a < 2')
        self.assertEqual(transpile_expr('a != 2'), 'a != 2')
        self.assertEqual(transpile_expr('a == NaN'), 'np.isnan(a)')
        self.assertEqual(transpile_expr('a != NaN'), 'np.logical_not(np.isnan(a))')
        self.assertEqual(transpile_expr('a is not Null'), 'a is not Null')
        self.assertEqual(transpile_expr('a in data'), 'a in data')

        with self.assertRaises(ValueError) as cm:
            transpile_expr('a >= 2 == b')
        self.assertEqual(str(cm.exception),
                         'expression "a >= 2 == b" uses an n-ary comparison, but only binary are supported')

        with self.assertRaises(ValueError) as cm:
            transpile_expr('0 < x <= 1')
        self.assertEqual(str(cm.exception),
                         'expression "0 < x <= 1" uses an n-ary comparison, but only binary are supported')
Beispiel #5
0
    def test_mixed(self):
        self.assertEqual('a + np.sin(x + 2.8)',
                         transpile_expr('a+sin(x + 2.8)'))
        self.assertEqual('a + np.fmax(1, np.sin(x + 2.8), np.power(x, 0.5))',
                         transpile_expr('a+max(1, sin(x+2.8), x**0.5)'))

        expr = (
            '(not quality_flags.invalid'
            ' and not pixel_classif_flags.IDEPIX_CLOUD'
            ' and not pixel_classif_flags.IDEPIX_CLOUD_BUFFER'
            ' and not pixel_classif_flags.IDEPIX_CLOUD_SHADOW'
            ' and not pixel_classif_flags.IDEPIX_SNOW_ICE'
            ' and not (c2rcc_flags.Rtosa_OOS and conc_chl > 1.0)'
            ' and not c2rcc_flags.Rtosa_OOR'
            ' and not c2rcc_flags.Rhow_OOR'
            ' and not (c2rcc_flags.Cloud_risk and immersed_cyanobacteria == 0)'
            ' and floating_vegetation == 0'
            ' and conc_chl > 0.01'
            ' and not (floating_cyanobacteria == 1 or chl_pitarch > 500))')

        self.assertEqual(
            'np.logical_and(np.logical_and('
            'np.logical_and(np.logical_and('
            'np.logical_and(np.logical_and('
            'np.logical_and(np.logical_and('
            'np.logical_and(np.logical_and('
            'np.logical_and('
            'np.logical_not(quality_flags.invalid), '
            'np.logical_not(pixel_classif_flags.IDEPIX_CLOUD)), '
            'np.logical_not(pixel_classif_flags.IDEPIX_CLOUD_BUFFER)), '
            'np.logical_not(pixel_classif_flags.IDEPIX_CLOUD_SHADOW)), '
            'np.logical_not(pixel_classif_flags.IDEPIX_SNOW_ICE)), '
            'np.logical_not('
            'np.logical_and(c2rcc_flags.Rtosa_OOS, conc_chl > 1.0))), '
            'np.logical_not(c2rcc_flags.Rtosa_OOR)), '
            'np.logical_not(c2rcc_flags.Rhow_OOR)), '
            'np.logical_not('
            'np.logical_and(c2rcc_flags.Cloud_risk, immersed_cyanobacteria == 0))),'
            ' floating_vegetation == 0), conc_chl > 0.01), '
            'np.logical_not('
            'np.logical_or(floating_cyanobacteria == 1, chl_pitarch > 500)))',
            transpile_expr(expr))
Beispiel #6
0
    def test_bool(self):
        self.assertEqual(transpile_expr('a and b and c'), 'np.logical_and(np.logical_and(a, b), c)')
        self.assertEqual(transpile_expr('(a and b) and c'), 'np.logical_and(np.logical_and(a, b), c)')
        self.assertEqual(transpile_expr('a and (b and c)'), 'np.logical_and(a, np.logical_and(b, c))')
        self.assertEqual(transpile_expr('(a or b) and not (c or not d)'),
                         'np.logical_and(np.logical_or(a, b), np.logical_not(np.logical_or(c, np.logical_not(d))))')

        self.assertEqual(transpile_expr('a and b or c and d'),
                         'np.logical_or(np.logical_and(a, b), np.logical_and(c, d))')
        self.assertEqual(transpile_expr('a or b and c or d'),
                         'np.logical_or(np.logical_or(a, np.logical_and(b, c)), d)')
        self.assertEqual(transpile_expr('(a or b) and (c or d)'),
                         'np.logical_and(np.logical_or(a, b), np.logical_or(c, d))')
Beispiel #7
0
    def test_binary(self):
        self.assertEqual(transpile_expr('a-b-c-d'), 'a - b - c - d')
        self.assertEqual(transpile_expr('(a-b)-c-d'), 'a - b - c - d')
        self.assertEqual(transpile_expr('(a-b-c)-d'), 'a - b - c - d')
        self.assertEqual(transpile_expr('a-(b-c)-d'), 'a - (b - c) - d')
        self.assertEqual(transpile_expr('a-(b-c-d)'), 'a - (b - c - d)')
        self.assertEqual(transpile_expr('a-b-(c-d)'), 'a - b - (c - d)')
        self.assertEqual(transpile_expr('a-(b-(c-d))'), 'a - (b - (c - d))')
        self.assertEqual(transpile_expr('(a-(b-c))-d'), 'a - (b - c) - d')

        self.assertEqual(transpile_expr('a----b'), 'a - ---b')
        self.assertEqual(transpile_expr('---a-b'), '---a - b')

        self.assertEqual(transpile_expr('a*b+c/d'), 'a * b + c / d')
        self.assertEqual(transpile_expr('a+b*c-d'), 'a + b * c - d')
        self.assertEqual(transpile_expr('(a+b)*(c-d)'), '(a + b) * (c - d)')

        self.assertEqual(transpile_expr('a ** b'), 'np.power(a, b)')
Beispiel #8
0
 def test_mixed(self):
     self.assertEqual(transpile_expr('a+sin(x + 2.8)'),
                      'a + np.sin(x + 2.8)')
     self.assertEqual(transpile_expr('a+max(1, sin(x+2.8), x**0.5)'),
                      'a + np.fmax(1, np.sin(x + 2.8), np.power(x, 0.5))')
Beispiel #9
0
 def test_functions(self):
     self.assertEqual(transpile_expr('sin(x)'), 'np.sin(x)')
     self.assertEqual(transpile_expr('min(x, y)'), 'np.fmin(x, y)')
     self.assertEqual(transpile_expr('max(x, y)'), 'np.fmax(x, y)')
     self.assertEqual(transpile_expr('isnan(x, y)'), 'np.isnan(x, y)')
Beispiel #10
0
 def test_attributes(self):
     self.assertEqual(transpile_expr('a.b'), 'a.b')
Beispiel #11
0
    def test_compare(self):
        self.assertEqual('a < 2', transpile_expr('a < 2'))
        self.assertEqual('a != 2', transpile_expr('a != 2'))
        self.assertEqual('np.isnan(a)', transpile_expr('a == NaN'))
        self.assertEqual('np.logical_not(np.isnan(a))',
                         transpile_expr('a != NaN'))
        self.assertEqual('np.isnan(a)', transpile_expr('NaN == a'))
        self.assertEqual('np.logical_not(np.isnan(a))',
                         transpile_expr('NaN != a'))
        self.assertEqual('a is not Null', transpile_expr('a is not Null'))
        self.assertEqual('a in data', transpile_expr('a in data'))

        with self.assertRaises(ValueError) as cm:
            transpile_expr('a >= 2 == b')
        x8 = str(cm.exception)
        self.assertEqual(
            'expression "a >= 2 == b" uses an n-ary '
            'comparison, but only binary are supported', x8)

        with self.assertRaises(ValueError) as cm:
            transpile_expr('0 < x <= 1')
        x9 = str(cm.exception)
        self.assertEqual(
            'expression "0 < x <= 1" uses an n-ary '
            'comparison, but only binary are supported', x9)