# Path: snoop/utils.py
# def with_needed_parentheses(source):
#     if needs_parentheses(source):
#         return '({})'.format(source)
#     else:
#         return source
# 
# def my_cheap_repr(x):
#     return cheap_repr(x, target_length=REPR_TARGET_LENGTH)
# 
# def ensure_tuple(x, split=False):
#     if split and isinstance(x, six.string_types):
#         x = x.replace(',', ' ').split()
#     if not isinstance(x, (list, set, tuple)):
#         x = (x,)
#     return tuple(x)


import itertools
import six
from copy import deepcopy
from snoop.utils import with_needed_parentheses, my_cheap_repr, ensure_tuple
    from collections import Mapping, Sequence
    from collections.abc import Mapping, Sequence



if six.PY2:
else:


class BaseVariable(object):
    def __init__(self, source, exclude=()):
        self.source = source
        self.exclude = ensure_tuple(exclude)
        self.code = compile(source, '<variable>', 'eval')

# Path: snoop/utils.py
# def with_needed_parentheses(source):
#     if needs_parentheses(source):
#         return '({})'.format(source)
#     else:
#         return source
# 
# def my_cheap_repr(x):
#     return cheap_repr(x, target_length=REPR_TARGET_LENGTH)
# 
# def ensure_tuple(x, split=False):
#     if split and isinstance(x, six.string_types):
#         x = x.replace(',', ' ').split()
#     if not isinstance(x, (list, set, tuple)):
#         x = (x,)
#     return tuple(x)


# Path: snoop/variables.py
import itertools
import six
from copy import deepcopy
from snoop.utils import with_needed_parentheses, my_cheap_repr, ensure_tuple
    from collections import Mapping, Sequence
    from collections.abc import Mapping, Sequence




if six.PY2:
else:


class BaseVariable(object):
    def __init__(self, source, exclude=()):
        self.source = source
        self.exclude = ensure_tuple(exclude)
        self.code = compile(source, '<variable>', 'eval')

        self.unambiguous_source = with_needed_parentheses(source)