# Path: pythoscope/store.py
# class Function(Definition, Callable):
#     def __init__(self, name, args=None, code=None, calls=None, is_generator=False, module=None):
#         Definition.__init__(self, name, args=args, code=code, is_generator=is_generator)
#         Callable.__init__(self, calls)
#         self.module = module
#         if is_generator:
#             self.calls_type = GeneratorObject
#         else:
#             self.calls_type = FunctionCall
# 
#     def get_unique_calls(self):
#         return set(self.calls)
# 
#     def __repr__(self):
#         return "Function(name=%s, args=%r, calls=%r)" % (self.name, self.args, self.calls)
# 
# Path: pythoscope/event.py
# class Event(object):
#     _last_timestamp = 0
# 
#     def __init__(self):
#         self.timestamp = Event.next_timestamp()
# 
#     def next_timestamp(cls):
#         cls._last_timestamp += 1
#         return cls._last_timestamp
#     next_timestamp = classmethod(next_timestamp)
# 
#     def __eq__(self, other):
#         return isinstance(other, Event) and \
#             self.timestamp == other.timestamp
# 
#     def __hash__(self):
#         return hash(self.timestamp)


from pythoscope.store import Function
from pythoscope.event import Event

    def args_mapping(self):
        return dict(zip(self.definition.args, self.args))

class ListAppend(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'append')
    definition = Function('append', ['object'])

class ListExtend(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'extend')
    definition = Function('extend', ['iterable'])

class ListInsert(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'insert')
    definition = Function('insert', ['index', 'object'])

class ListPop(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'pop')
    definition = Function('pop', ['index'])

class ListRemove(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'remove')
    definition = Function('remove', ['value'])

class ListReverse(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'reverse')
    definition = Function('reverse', [])

class ListSort(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'sort')

# Path: pythoscope/store.py
# class Function(Definition, Callable):
#     def __init__(self, name, args=None, code=None, calls=None, is_generator=False, module=None):
#         Definition.__init__(self, name, args=args, code=code, is_generator=is_generator)
#         Callable.__init__(self, calls)
#         self.module = module
#         if is_generator:
#             self.calls_type = GeneratorObject
#         else:
#             self.calls_type = FunctionCall
# 
#     def get_unique_calls(self):
#         return set(self.calls)
# 
#     def __repr__(self):
#         return "Function(name=%s, args=%r, calls=%r)" % (self.name, self.args, self.calls)
# 
# Path: pythoscope/event.py
# class Event(object):
#     _last_timestamp = 0
# 
#     def __init__(self):
#         self.timestamp = Event.next_timestamp()
# 
#     def next_timestamp(cls):
#         cls._last_timestamp += 1
#         return cls._last_timestamp
#     next_timestamp = classmethod(next_timestamp)
# 
#     def __eq__(self, other):
#         return isinstance(other, Event) and \
#             self.timestamp == other.timestamp
# 
#     def __hash__(self):
#         return hash(self.timestamp)


# Path: pythoscope/side_effect.py
from pythoscope.store import Function
from pythoscope.event import Event


    def args_mapping(self):
        return dict(zip(self.definition.args, self.args))

class ListAppend(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'append')
    definition = Function('append', ['object'])

class ListExtend(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'extend')
    definition = Function('extend', ['iterable'])

class ListInsert(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'insert')
    definition = Function('insert', ['index', 'object'])

class ListPop(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'pop')
    definition = Function('pop', ['index'])

class ListRemove(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'remove')
    definition = Function('remove', ['value'])

class ListReverse(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'reverse')
    definition = Function('reverse', [])

class ListSort(BuiltinMethodWithPositionArgsSideEffect):
    trigger = (list, 'sort')

    definition = Function('sort', [])