from mars.dataframe.datasource.dataframe import from_pandas from mars.dataframe.datasource.series import from_pandas as from_pandas_series from mars.dataframe.arithmetic.tests.test_arithmetic import comp_func binary_functions = dict( add=dict(func=operator.add, func_name='add', rfunc_name='radd'), subtract=dict(func=operator.sub, func_name='sub', rfunc_name='rsub'), multiply=dict(func=operator.mul, func_name='mul', rfunc_name='rmul'), floordiv=dict(func=operator.floordiv, func_name='floordiv', rfunc_name='rfloordiv'), truediv=dict(func=operator.truediv, func_name='truediv', rfunc_name='rtruediv'), power=dict(func=operator.pow, func_name='pow', rfunc_name='rpow'), equal=dict(func=comp_func('eq', 'eq'), func_name='eq', rfunc_name='eq'), not_equal=dict(func=comp_func('ne', 'ne'), func_name='ne', rfunc_name='ne'), greater=dict(func=comp_func('gt', 'lt'), func_name='gt', rfunc_name='lt'), less=dict(func=comp_func('lt', 'gt'), func_name='lt', rfunc_name='gt'), greater_equal=dict(func=comp_func('ge', 'le'), func_name='ge', rfunc_name='le'), less_equal=dict(func=comp_func('le', 'ge'), func_name='le', rfunc_name='ge'), logical_and=dict(func=operator.and_, func_name='__and__', rfunc_name='__rand__'), logical_or=dict(func=operator.or_, func_name='__or__',
from mars.dataframe.arithmetic.tests.test_arithmetic import comp_func from mars.tensor.datasource import array as from_array from mars.utils import dataslots @dataslots @dataclass class FunctionOptions: func: Callable func_name: str rfunc_name: str binary_functions = dict( add=FunctionOptions(func=operator.add, func_name='add', rfunc_name='radd'), equal=FunctionOptions(func=comp_func('eq', 'eq'), func_name='eq', rfunc_name='eq'), logical_and=FunctionOptions(func=operator.and_, func_name='__and__', rfunc_name='__rand__'), ) def to_boolean_if_needed(func_name, value, split_value=0.5): if func_name in ['__and__', '__or__', '__xor__']: return value > split_value else: return value @pytest.mark.parametrize('func_name, func_opts', binary_functions.items()) def test_without_shuffle_execution(setup, func_name, func_opts): if func_opts.func_name in ['__and__', '__or__', '__xor__']: # FIXME bitwise logical operators behave differently with pandas when index is not aligned.
import numpy as np import pandas as pd from mars.tests.core import TestBase, parameterized, ExecutorForTest from mars import tensor as mt from mars.tensor.datasource import array as from_array from mars.dataframe import to_datetime from mars.dataframe.datasource.dataframe import from_pandas from mars.dataframe.datasource.series import from_pandas as from_pandas_series from mars.dataframe.arithmetic.tests.test_arithmetic import comp_func binary_functions = dict( add=dict(func=operator.add, func_name='add', rfunc_name='radd'), equal=dict(func=comp_func('eq', 'eq'), func_name='eq', rfunc_name='eq'), logical_and=dict(func=operator.and_, func_name='__and__', rfunc_name='__rand__'), ) @parameterized(**binary_functions) class TestBinary(TestBase): def setUp(self): self.executor = ExecutorForTest() def to_boolean_if_needed(self, value, split_value=0.5): if self.func_name in ['__and__', '__or__', '__xor__']: return value > split_value else: return value