# Path: plydata/operators.py
# class DataOperator(metaclass=OptionalSingleDataFrameArgument):
#     """
#     Base class for all verbs that operate on data
#     """
#     data = None
#     env = None
# 
#     def set_env_from_verb_init(self):
#         """
#         Capture users enviroment
# 
#         Should be called from direct subclasses of this class
#         """
#         # Prevent capturing of wrong environment for when
#         # the verb class inherits and calls superclass init
#         if not self.env:
#             # 0 - local environment
#             # 1 - verb init environment
#             # 2 - metaclass.__call__ environment
#             # 3 - user environment
#             self.env = EvalEnvironment.capture(3)
# 
#     def __rrshift__(self, other):
#         """
#         Overload the >> operator
#         """
#         # Makes verb reuseable
#         self = copy(self)
#         self.data = other
#         func = get_verb_function(self.data, self.__class__.__name__)
#         return func(self)
# 
#     def __call__(self, data):
#         # This is an undocumented feature, it allows for
#         # verb(*args, **kwargs)(df)
#         self = copy(self)
#         func = get_verb_function(data, self.__class__.__name__)
#         with temporary_attr(self, 'data', data):
#             result = func(self)
#         return result
# 
# Path: plydata/expressions.py
# def Expression(*args, **kwargs):
#     """
#     Return an appropriate Expression given the arguments
# 
#     Parameters
#     ----------
#     args : tuple
#         Positional arguments passed to the Expression class
#     kwargs : dict
#         Keyword arguments passed to the Expression class
#     """
#     # dispatch
#     if not hasattr(args[0], '_Expression'):
#         return BaseExpression(*args, *kwargs)
#     else:
#         return args[0]._Expression(*args, **kwargs)


import itertools
from .operators import DataOperator
from .expressions import Expression
        from .helper_verbs import select_all, select_at, select_if
        an *interable* with the same number of elements as the
        dataframe.
    kwargs : dict, optional
        ``{name: expression}`` pairs.

    kwargs : dict, optional
        ``{name: expression}`` pairs.

    Examples
    --------
    >>> import pandas as pd
    >>> df = pd.DataFrame({'x': [1, 2, 3]})
    >>> df >> create(x_sq='x**2')
       x_sq
    0     1
    1     4
    2     9
    >>> df >> create(('x*2', 'x*2'), ('x*3', 'x*3'), x_cubed='x**3')
       x*2  x*3  x_cubed
    0    2    3        1
    1    4    6        8
    2    6    9       27
    >>> df >> create('x*4')
       x*4
    0    4
    1    8
    2   12
    """



# Path: plydata/operators.py
# class DataOperator(metaclass=OptionalSingleDataFrameArgument):
#     """
#     Base class for all verbs that operate on data
#     """
#     data = None
#     env = None
# 
#     def set_env_from_verb_init(self):
#         """
#         Capture users enviroment
# 
#         Should be called from direct subclasses of this class
#         """
#         # Prevent capturing of wrong environment for when
#         # the verb class inherits and calls superclass init
#         if not self.env:
#             # 0 - local environment
#             # 1 - verb init environment
#             # 2 - metaclass.__call__ environment
#             # 3 - user environment
#             self.env = EvalEnvironment.capture(3)
# 
#     def __rrshift__(self, other):
#         """
#         Overload the >> operator
#         """
#         # Makes verb reuseable
#         self = copy(self)
#         self.data = other
#         func = get_verb_function(self.data, self.__class__.__name__)
#         return func(self)
# 
#     def __call__(self, data):
#         # This is an undocumented feature, it allows for
#         # verb(*args, **kwargs)(df)
#         self = copy(self)
#         func = get_verb_function(data, self.__class__.__name__)
#         with temporary_attr(self, 'data', data):
#             result = func(self)
#         return result
# 
# Path: plydata/expressions.py
# def Expression(*args, **kwargs):
#     """
#     Return an appropriate Expression given the arguments
# 
#     Parameters
#     ----------
#     args : tuple
#         Positional arguments passed to the Expression class
#     kwargs : dict
#         Keyword arguments passed to the Expression class
#     """
#     # dispatch
#     if not hasattr(args[0], '_Expression'):
#         return BaseExpression(*args, *kwargs)
#     else:
#         return args[0]._Expression(*args, **kwargs)


# Path: plydata/one_table_verbs.py
import itertools
from .operators import DataOperator
from .expressions import Expression
        from .helper_verbs import select_all, select_at, select_if

        an *interable* with the same number of elements as the
        dataframe.
    kwargs : dict, optional
        ``{name: expression}`` pairs.

    kwargs : dict, optional
        ``{name: expression}`` pairs.

    Examples
    --------
    >>> import pandas as pd
    >>> df = pd.DataFrame({'x': [1, 2, 3]})
    >>> df >> create(x_sq='x**2')
       x_sq
    0     1
    1     4
    2     9
    >>> df >> create(('x*2', 'x*2'), ('x*3', 'x*3'), x_cubed='x**3')
       x*2  x*3  x_cubed
    0    2    3        1
    1    4    6        8
    2    6    9       27
    >>> df >> create('x*4')
       x*4
    0    4
    1    8
    2   12
    """



class sample_n(DataOperator):