# Path: liam2/compat.py
# PY2 = sys.version_info[0] == 2
# def with_metaclass(meta, *bases):
#         def __new__(cls, name, this_bases, d):
# def csv_open(filename, mode='r'):
#     class metaclass(meta):
# 
# Path: liam2/config.py



import ast
import itertools
import math
import re
import sys
import time
import warnings
import numpy as np
import numexpr as ne
import larray as la
from collections import defaultdict, deque, namedtuple
from textwrap import wrap
from liam2.compat import zip, basestring
from liam2 import config
    from liam2.data import ColumnArray
    from cutils import fromiter
        if self.varargs:
            l.append('*' + self.varargs)
        if self.varkw:
            l.append('**' + self.varkw)
        if self.kwonlyargs:
            l.extend([k + '=' + repr(self.kwonlydefaults[k])
                      for k in self.kwonlyargs])
        return ', '.join(l)


def _argspec(*args, **kwonlyargs):
    """
    args = argument names. Arguments with a default value must be given as a
    ('name', value) tuple. varargs and varkw argument names, if any, should be
    prefixed with '*' and '**' respectively and must be the last positional
    arguments.
    >>> _argspec('a', 'b', ('c', 1), '*d', '**e', f=None)
    ... # doctest: +NORMALIZE_WHITESPACE
    FullArgSpec(args=['a', 'b', 'c'], varargs='d', varkw='e', defaults=(1,),
                kwonlyargs=['f'], kwonlydefaults={'f': None}, annotations={})
    >>> _argspec('a', '*', '**b', c=None)
    ... # doctest: +NORMALIZE_WHITESPACE
    FullArgSpec(args=['a'], varargs=None, varkw='b', defaults=None,
                kwonlyargs=['c'], kwonlydefaults={'c': None}, annotations={})
    >>> _argspec('a', 'b', ('c', 1), d=None)
    ... # doctest: +NORMALIZE_WHITESPACE
    FullArgSpec(args=['a', 'b', 'c'], varargs=None, varkw=None, defaults=(1,),
                kwonlyargs=['d'], kwonlydefaults={'d': None}, annotations={})
    """
    def lastitem_startswith(l, s):

# Path: liam2/compat.py
# PY2 = sys.version_info[0] == 2
# def with_metaclass(meta, *bases):
#         def __new__(cls, name, this_bases, d):
# def csv_open(filename, mode='r'):
#     class metaclass(meta):
# 
# Path: liam2/config.py



# Path: liam2/utils.py
import ast
import itertools
import math
import re
import sys
import time
import warnings
import numpy as np
import numexpr as ne
import larray as la
from collections import defaultdict, deque, namedtuple
from textwrap import wrap
from liam2.compat import zip, basestring
from liam2 import config
    from liam2.data import ColumnArray
    from cutils import fromiter

        if self.varargs:
            l.append('*' + self.varargs)
        if self.varkw:
            l.append('**' + self.varkw)
        if self.kwonlyargs:
            l.extend([k + '=' + repr(self.kwonlydefaults[k])
                      for k in self.kwonlyargs])
        return ', '.join(l)


def _argspec(*args, **kwonlyargs):
    """
    args = argument names. Arguments with a default value must be given as a
    ('name', value) tuple. varargs and varkw argument names, if any, should be
    prefixed with '*' and '**' respectively and must be the last positional
    arguments.
    >>> _argspec('a', 'b', ('c', 1), '*d', '**e', f=None)
    ... # doctest: +NORMALIZE_WHITESPACE
    FullArgSpec(args=['a', 'b', 'c'], varargs='d', varkw='e', defaults=(1,),
                kwonlyargs=['f'], kwonlydefaults={'f': None}, annotations={})
    >>> _argspec('a', '*', '**b', c=None)
    ... # doctest: +NORMALIZE_WHITESPACE
    FullArgSpec(args=['a'], varargs=None, varkw='b', defaults=None,
                kwonlyargs=['c'], kwonlydefaults={'c': None}, annotations={})
    >>> _argspec('a', 'b', ('c', 1), d=None)
    ... # doctest: +NORMALIZE_WHITESPACE
    FullArgSpec(args=['a', 'b', 'c'], varargs=None, varkw=None, defaults=(1,),
                kwonlyargs=['d'], kwonlydefaults={'d': None}, annotations={})
    """
    def lastitem_startswith(l, s):

        return l and isinstance(l[-1], basestring) and l[-1].startswith(s)