# 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
                       annotations={})


def argspec(*args, **kwonlyargs):
    """
    >>> 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={})
    >>> a = argspec('*, f=None', g=None)
    >>> a.kwonlyargs
    ['f', 'g']
    >>> sorted(a.kwonlydefaults.items())
    [('f', None), ('g', None)]
    >>> 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', 'd'], varargs=None, varkw=None,
                defaults=(1, None), kwonlyargs=[], kwonlydefaults={},
                annotations={})
    >>> argspec('')
    ... # doctest: +NORMALIZE_WHITESPACE
    FullArgSpec(args=[], varargs=None, varkw=None, defaults=None, kwonlyargs=[],
                kwonlydefaults={}, annotations={})
    >>> str(argspec('a, b, c=1, *d, **e, f=None'))
    'a, b, c=1, *d, **e, f=None'
    """

# 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

                       annotations={})


def argspec(*args, **kwonlyargs):
    """
    >>> 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={})
    >>> a = argspec('*, f=None', g=None)
    >>> a.kwonlyargs
    ['f', 'g']
    >>> sorted(a.kwonlydefaults.items())
    [('f', None), ('g', None)]
    >>> 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', 'd'], varargs=None, varkw=None,
                defaults=(1, None), kwonlyargs=[], kwonlydefaults={},
                annotations={})
    >>> argspec('')
    ... # doctest: +NORMALIZE_WHITESPACE
    FullArgSpec(args=[], varargs=None, varkw=None, defaults=None, kwonlyargs=[],
                kwonlydefaults={}, annotations={})
    >>> str(argspec('a, b, c=1, *d, **e, f=None'))
    'a, b, c=1, *d, **e, f=None'
    """

    if len(args) == 1 and isinstance(args[0], basestring):