def add_model(self, model, initial=None):
        models = listify(model)
        if initial is None:
            if self.initial is None:
                raise ValueError("No initial state configured for machine, must specify when adding model.")
            initial = self.initial
        for mod in models:
            mod = self if mod is self.self_literal else mod
            if mod not in self.models:
                self._checked_assignment(mod, 'trigger', partial(self._get_trigger, mod))
                for trigger in self.events:
                    self._add_trigger_to_model(trigger, mod)
                for state in self.states.values():
                    self._add_model_to_state(state, mod)
                self.set_state(initial, model=mod)
                self.models.append(mod)
add_model(self=<transitions.core.Machine object at 0x7f8d024908b0>, model={}, initial=None, self._after_state_change=[], self._before_state_change=[], self._finalize_event=[], self._initial='A', self._on_exception=[], self._prepare_event=[], self._queued=False, self._transition_queue=deque([]), self.auto_transitions=True, self.events=OrderedDict([('to_A', <Event('to_A')@140243610262688>), ('to_B', <Event('to_B')@140243609452400>), ('to_C', <Event('to_C')@140243613074768>), ('to_D', <Event('to_D')@140243606142928>), ('to_E', <Event('to_E')@140243613380464>), ('to_F', <Event('to_F')@140243613805200>), ('advance', <Event('advance')@140243575260352>)]), self.ignore_invalid_triggers=None, self.model_attribute='state', self.models=[], self.name='Test Machine: ', self.send_event=False, self.states=OrderedDict([('A', <State('A')@140243613102032>), ('B', <State('B')@140243613097936>), ('C', <State('C')@140243613204928>), ('D', <State('D')@140243616748976>), ('E', <State('E')@140243616906352>), ('F', <State('F')@140243617136304>)]))

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>)}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A')}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B')}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C')}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D')}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E')}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E'), to_F=functools.partial(<bound method Event.trigger of <Event('to_F')@140243613805200>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_F=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_F')}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E'), to_F=functools.partial(<bound method Event.trigger of <Event('to_F')@140243613805200>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_F=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_F'), advance=functools.partial(<bound method Event.trigger of <Event('advance')@140243575260352>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_advance=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'advance')}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E'), to_F=functools.partial(<bound method Event.trigger of <Event('to_F')@140243613805200>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_F=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_F'), advance=functools.partial(<bound method Event.trigger of <Event('advance')@140243575260352>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_advance=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'advance'), is_A=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'A', <tests.test_add_remove.Dummy object at 0x7f8d02490880>)}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E'), to_F=functools.partial(<bound method Event.trigger of <Event('to_F')@140243613805200>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_F=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_F'), advance=functools.partial(<bound method Event.trigger of <Event('advance')@140243575260352>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_advance=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'advance'), is_A=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'A', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_B=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'B', <tests.test_add_remove.Dummy object at 0x7f8d02490880>)}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E'), to_F=functools.partial(<bound method Event.trigger of <Event('to_F')@140243613805200>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_F=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_F'), advance=functools.partial(<bound method Event.trigger of <Event('advance')@140243575260352>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_advance=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'advance'), is_A=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'A', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_B=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'B', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_C=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'C', <tests.test_add_remove.Dummy object at 0x7f8d02490880>)}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E'), to_F=functools.partial(<bound method Event.trigger of <Event('to_F')@140243613805200>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_F=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_F'), advance=functools.partial(<bound method Event.trigger of <Event('advance')@140243575260352>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_advance=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'advance'), is_A=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'A', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_B=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'B', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_C=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'C', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_D=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'D', <tests.test_add_remove.Dummy object at 0x7f8d02490880>)}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E'), to_F=functools.partial(<bound method Event.trigger of <Event('to_F')@140243613805200>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_F=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_F'), advance=functools.partial(<bound method Event.trigger of <Event('advance')@140243575260352>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_advance=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'advance'), is_A=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'A', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_B=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'B', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_C=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'C', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_D=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'D', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_E=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'E', <tests.test_add_remove.Dummy object at 0x7f8d02490880>)}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E'), to_F=functools.partial(<bound method Event.trigger of <Event('to_F')@140243613805200>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_F=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_F'), advance=functools.partial(<bound method Event.trigger of <Event('advance')@140243575260352>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_advance=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'advance'), is_A=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'A', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_B=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'B', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_C=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'C', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_D=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'D', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_E=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'E', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_F=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'F', <tests.test_add_remove.Dummy object at 0x7f8d02490880>)}

{trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), to_A=functools.partial(<bound method Event.trigger of <Event('to_A')@140243610262688>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_A=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_A'), to_B=functools.partial(<bound method Event.trigger of <Event('to_B')@140243609452400>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_B=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_B'), to_C=functools.partial(<bound method Event.trigger of <Event('to_C')@140243613074768>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_C=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_C'), to_D=functools.partial(<bound method Event.trigger of <Event('to_D')@140243606142928>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_D=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_D'), to_E=functools.partial(<bound method Event.trigger of <Event('to_E')@140243613380464>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_E=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_E'), to_F=functools.partial(<bound method Event.trigger of <Event('to_F')@140243613805200>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_to_F=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'to_F'), advance=functools.partial(<bound method Event.trigger of <Event('advance')@140243575260352>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>), may_advance=functools.partial(<bound method Machine._can_trigger of <transitions.core.Machine object at 0x7f8d024908b0>>, <tests.test_add_remove.Dummy object at 0x7f8d02490880>, 'advance'), is_A=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'A', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_B=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'B', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_C=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'C', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_D=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'D', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_E=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'E', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), is_F=functools.partial(<bound method Machine.is_state of <transitions.core.Machine object at 0x7f8d024908b0>>, 'F', <tests.test_add_remove.Dummy object at 0x7f8d02490880>), state='A'}

[<tests.test_add_remove.Dummy object at 0x7f8d02490880>]


def _process(self, event_data):
        self.machine.callbacks(self.machine.prepare_event, event_data)
        _LOGGER.debug("%sExecuted machine preparation callbacks before conditions.", self.machine.name)
        for trans in self.transitions[event_data.state.name]:
            event_data.transition = trans
            if trans.execute(event_data):
                event_data.result = True
                break
_process(self=<Event('advance')@140243575260352>, event_data=<EventData(<Event('advance')@140243575260352>, <State('A')@140243613102032>, None)@140243617257984>, self.machine=<transitions.core.Machine object at 0x7f8d024908b0>, self.name='advance', self.transitions=defaultdict(<class 'list'>, {'A': [<Transition('A', 'B')@140243575459744>], 'B': [<Transition('B', 'C')@140243606888304>], 'C': [<Transition('C', 'D')@140243617258896>]}))


def _change_state(self, event_data):
        event_data.machine.get_state(self.source).exit(event_data)
        event_data.machine.set_state(self.dest, event_data.model)
        event_data.update(getattr(event_data.model, event_data.machine.model_attribute))
        event_data.machine.get_state(self.dest).enter(event_data)
_change_state(self=<Transition('A', 'B')@140243575459744>, event_data=<EventData(<Event('advance')@140243575260352>, <State('A')@140243613102032>, <Transition('A', 'B')@140243575459744>)@140243617257984>, self.after=[], self.before=[], self.conditions=[], self.dest='B', self.prepare=[], self.source='A')


def _identify_callback(self, name):
        for callback in itertools.chain(self.state_cls.dynamic_methods, self.transition_cls.dynamic_methods):
            if name.startswith(callback):
                callback_type = callback
                break
        else:
            return None, None
        target = name[len(callback_type) + len(self.separator):]
        if target == '' or name[len(callback_type)] != self.separator:
            return None, None
        return callback_type, target
_identify_callback(self=<transitions.core.Machine object at 0x7f8d02925ca0>, name='before_move', self._after_state_change=[], self._before_state_change=[], self._finalize_event=[], self._initial='A', self._on_exception=[], self._prepare_event=[], self._queued=False, self._transition_queue=deque([]), self.auto_transitions=True, self.events=OrderedDict([('to_A', <Event('to_A')@140243613196192>), ('to_B', <Event('to_B')@140243610265152>), ('to_C', <Event('to_C')@140243610264480>), ('move', <Event('move')@140243575459744>)]), self.ignore_invalid_triggers=None, self.model_attribute='state', self.models=[<tests.utils.Stuff object at 0x7f8d00826f10>], self.name='', self.send_event=False, self.states=OrderedDict([('A', <State('A')@140243613077264>), ('B', <State('B')@140243613804816>), ('C', <State('C')@140243609784864>)]))


target = name[len(callback_type) + len(self.separator):]


def add_state(self, states, on_enter=None, on_exit=None, ignore_invalid_triggers=None, **kwargs):
        self.add_states(states=states, on_enter=on_enter, on_exit=on_exit,
                        ignore_invalid_triggers=ignore_invalid_triggers, **kwargs)
add_state(self=<transitions.core.Machine object at 0x7f8d000d6040>, states='X', on_enter=None, on_exit=None, ignore_invalid_triggers=None, kwargs={}, self._after_state_change=[], self._before_state_change=[], self._finalize_event=[], self._initial='A', self._on_exception=[], self._prepare_event=[], self._queued=False, self._transition_queue=deque([]), self.auto_transitions=True, self.events=OrderedDict([('to_A', <Event('to_A')@140243617470976>), ('to_B', <Event('to_B')@140243617471216>), ('to_C', <Event('to_C')@140243617469488>), ('to_D', <Event('to_D')@140243617469008>), ('to_E', <Event('to_E')@140243617469776>), ('to_F', <Event('to_F')@140243617471264>)]), self.ignore_invalid_triggers=None, self.model_attribute='state', self.models=[<tests.utils.Stuff object at 0x7f8d000d64c0>], self.name='Test Machine: ', self.send_event=False, self.states=OrderedDict([('A', <State('A')@140243617471600>), ('B', <State('B')@140243617470448>), ('C', <State('C')@140243617471072>), ('D', <State('D')@140243617470400>), ('E', <State('E')@140243617471024>), ('F', <State('F')@140243617469248>)]))


def __getattr__(self, name):
        if name.startswith('__'):
            raise AttributeError("'{}' does not exist on <Machine@{}>"
                                 .format(name, id(self)))
        callback_type, target = self._identify_callback(name)
        if callback_type is not None:
            if callback_type in self.transition_cls.dynamic_methods:
                if target not in self.events:
                    raise AttributeError("event '{}' is not registered on <Machine@{}>"
                                         .format(target, id(self)))
                return partial(self.events[target].add_callback, callback_type)
            if callback_type in self.state_cls.dynamic_methods:
                state = self.get_state(target)
                return partial(state.add_callback, callback_type[3:])
        try:
            return self.__getattribute__(name)
        except AttributeError:
            raise AttributeError("'{}' does not exist on <Machine@{}>".format(name, id(self)))
__getattr__(self=<transitions.core.Machine object at 0x7f8cfeae7e80>, name='to_A', self._after_state_change=[], self._before_state_change=[], self._finalize_event=[], self._initial='A', self._on_exception=[], self._prepare_event=[], self._queued=False, self._transition_queue=deque([]), self.auto_transitions=True, self.events=OrderedDict([('to_A', <Event('to_A')@140243544997408>), ('to_B', <Event('to_B')@140243541275984>), ('to_C', <Event('to_C')@140243541276224>)]), self.ignore_invalid_triggers=None, self.model_attribute='state', self.models=[], self.name='', self.send_event=False, self.states=OrderedDict([('A', <State('A')@140243544995968>), ('B', <State('B')@140243544995056>), ('C', <State('C')@140243544996784>)]), self.trigger=functools.partial(<bound method Machine._get_trigger of <transitions.core.Machine object at 0x7f8cfeae7e80>>, <transitions.core.Machine object at 0x7f8cfeae7e80>))


def config(_config=None, **kwargs):
    if _config is None:
        _config = {}
    _config.update(kwargs)
    def wrapper(func):
        func._config = _config
        return func
    return wrapper
config(_config=None, kwargs={'age': 864000})

<function config.<locals>.wrapper at 0x7f6a10388ee0>


def __new__(cls, name, bases, attrs):
        cron_jobs = []
        min_tick = 0
        for each in attrs.values():
            if inspect.isfunction(each) and getattr(each, 'is_cronjob', False):
                cron_jobs.append(each)
                min_tick = fractions.gcd(min_tick, each.tick)
        newcls = type.__new__(cls, name, bases, attrs)
        newcls._cron_jobs = cron_jobs
        newcls._min_tick = min_tick
        return newcls
__new__(cls=<class 'pyspider.libs.base_handler.BaseHandlerMeta'>, name='Handler', bases=(<class 'pyspider.libs.base_handler.BaseHandler'>,), attrs={'__module__': 'tests.data_fetcher_processor_handler', '__qualname__': 'Handler', 'not_send_status': <function Handler.not_send_status at 0x7f6a0ec3f160>, 'url_deduplicated': <function Handler.url_deduplicated at 0x7f6a0ec3f1f0>, 'catch_http_error': <function Handler.catch_http_error at 0x7f6a0ec3f040>, 'json': <function Handler.json at 0x7f6a0ec3f310>, 'html': <function Handler.html at 0x7f6a0ec3f3a0>, 'links': <function Handler.links at 0x7f6a0ec3f430>, 'cookies': <function Handler.cookies at 0x7f6a0ec3f4c0>, 'get_save': <function Handler.get_save at 0x7f6a0ec3f550>, 'get_process_save': <function Handler.get_process_save at 0x7f6a0ec3f5e0>, 'set_process_save': <function Handler.set_process_save at 0x7f6a0ec3f670>})


def quat_from_axis_angle(axis, angle):
        axis_ = np.array(axis, dtype=np.float64)
        half_angle = angle * 0.5
        ret = np.empty(4)
        ret[0] = math.cos(half_angle)
        ret[1:4] = math.sin(half_angle) * axis_
        return ret
quat_from_axis_angle(axis=[1.0, 0.0, 0.0], angle=6.1086523819801535)


def add_implicit_resolver(cls, tag, regexp, first):
        if not 'yaml_implicit_resolvers' in cls.__dict__:
            implicit_resolvers = {}
            for key in cls.yaml_implicit_resolvers:
                implicit_resolvers[key] = cls.yaml_implicit_resolvers[key][:]
            cls.yaml_implicit_resolvers = implicit_resolvers
        if first is None:
            first = [None]
        for ch in first:
            cls.yaml_implicit_resolvers.setdefault(ch, []).append((tag, regexp))
add_implicit_resolver(cls=<class 'invoke.vendor.yaml.resolver.Resolver'>, tag='tag:yaml.org,2002:bool', regexp=re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE), first=['y', 'Y', 'n', 'N', 't', 'T', 'f', 'F', 'o', 'O'])

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'Y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'Y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'n': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'Y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'n': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'N': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'Y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'n': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'N': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 't': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'Y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'n': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'N': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 't': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'T': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'Y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'n': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'N': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 't': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'T': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'f': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'Y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'n': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'N': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 't': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'T': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'f': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'F': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'Y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'n': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'N': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 't': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'T': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'f': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'F': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'o': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}

{'y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'Y': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'n': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'N': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 't': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'T': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'f': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'F': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'o': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))], 'O': [('tag:yaml.org,2002:bool', re.compile('^(?:yes|Yes|YES|no|No|NO\n                    |true|True|TRUE|false|False|FALSE\n                    |on|On|ON|off|Off|OFF)$', re.VERBOSE))]}


def _add_object(self, obj: Any, name: Optional[str] = None) -> None:
        method: Callable
        if isinstance(obj, Task):
            method = self.add_task
        elif isinstance(obj, (Collection, ModuleType)):
            method = self.add_collection
        else:
            raise TypeError("No idea how to insert {!r}!".format(type(obj)))
        method(obj, name=name)
_add_object(self=<Collection None: >, obj=<Task 'make_sudouser'>, name=None, self._configuration={}, self.auto_dash_names=True, self.collections={}, self.default=None, self.loaded_from=None, self.name=None, self.tasks={})

<bound method Collection.add_task of <Collection None: >>

<bound method Collection.add_task of <Collection None: make-sudouser>>


def unaliased(d, key, value):
            super(AliasDict, d).__setitem__(key, value)
unaliased(d={}, key='make-sudouser', value=<Task 'make_sudouser'>, __class__=<class 'invoke.vendor.lexicon.alias_dict.AliasDict'>)


def _transform_lexicon(self, old: Lexicon) -> Lexicon:
        new = Lexicon()
        for key, value in old.items():
            new[self.transform(key)] = copy.deepcopy(value)
        for key, value in old.aliases.items():
            new.alias(from_=self.transform(key), to=self.transform(value))
        return new
_transform_lexicon(self=<Collection 'docs': >, old={'clean': <Task 'clean'>, 'browse': <Task 'browse'>, 'build': <Task 'build'>, 'tree': <Task 'tree'>, 'doctest': <Task 'doctest'>}, self.__doc__='\nTasks for managing Sphinx documentation trees.\n', self._configuration={}, self.auto_dash_names=True, self.collections={}, self.default=None, self.loaded_from=None, self.name='docs', self.tasks={})

{'clean': <Task 'clean'>, 'browse': <Task 'browse'>}

{'clean': <Task 'clean'>, 'browse': <Task 'browse'>, 'build': <Task 'build'>}

{'clean': <Task 'clean'>, 'browse': <Task 'browse'>, 'build': <Task 'build'>, 'tree': <Task 'tree'>}


def base64url_decode(input: Union[bytes, str]) -> bytes:
    input_bytes = force_bytes(input)
    rem = len(input_bytes) % 4
    if rem > 0:
        input_bytes += b"=" * (4 - rem)
    return base64.urlsafe_b64decode(input_bytes)
base64url_decode(input='hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg')


def test_hmac_to_jwk_returns_correct_values(self, as_dict):
        algo = HMACAlgorithm(HMACAlgorithm.SHA256)
        key: Any = algo.to_jwk("secret", as_dict=as_dict)
        if not as_dict:
            key = json.loads(key)
        assert key == {"kty": "oct", "k": "c2VjcmV0"}
test_hmac_to_jwk_returns_correct_values(self=<tests.test_algorithms.TestAlgorithms object at 0x7fd0ce2894c0>, as_dict=False)


key: Any = algo.to_jwk("secret", as_dict=as_dict)


def _load(self, jwt: str | bytes) -> tuple[bytes, bytes, dict[str, Any], bytes]:
        if isinstance(jwt, str):
            jwt = jwt.encode("utf-8")
        if not isinstance(jwt, bytes):
            raise DecodeError(f"Invalid token type. Token must be a {bytes}")
        try:
            signing_input, crypto_segment = jwt.rsplit(b".", 1)
            header_segment, payload_segment = signing_input.split(b".", 1)
        except ValueError as err:
            raise DecodeError("Not enough segments") from err
        try:
            header_data = base64url_decode(header_segment)
        except (TypeError, binascii.Error) as err:
            raise DecodeError("Invalid header padding") from err
        try:
            header = json.loads(header_data)
        except ValueError as e:
            raise DecodeError(f"Invalid header string: {e}") from e
        if not isinstance(header, dict):
            raise DecodeError("Invalid header string: must be a json object")
        try:
            payload = base64url_decode(payload_segment)
        except (TypeError, binascii.Error) as err:
            raise DecodeError("Invalid payload padding") from err
        try:
            signature = base64url_decode(crypto_segment)
        except (TypeError, binascii.Error) as err:
            raise DecodeError("Invalid crypto padding") from err
        return (payload, signing_input, header, signature)
_load(self=<jwt.api_jws.PyJWS object at 0x7fd0cdf477c0>, jwt='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.aGVsbG8gd29ybGQ.SIr03zM64awWRdPrAM_61QWsZchAtgDV3pphfHPPWkI', self._algorithms={'none': <jwt.algorithms.NoneAlgorithm object at 0x7fd0cdf479a0>, 'HS256': <jwt.algorithms.HMACAlgorithm object at 0x7fd0cdf474f0>, 'HS384': <jwt.algorithms.HMACAlgorithm object at 0x7fd0cdf47dc0>, 'HS512': <jwt.algorithms.HMACAlgorithm object at 0x7fd0cdf47190>}, self._valid_algs={'HS256', 'HS512', 'none', 'HS384'}, self.options={'verify_signature': True})


header_segment, payload_segment = signing_input.split(b".", 1)


def to_base64url_uint(val: int) -> bytes:
    if val < 0:
        raise ValueError("Must be a positive integer")
    int_bytes = bytes_from_int(val)
    if len(int_bytes) == 0:
        int_bytes = b"\x00"
    return base64url_encode(int_bytes)
to_base64url_uint(val=0)


def bytes_from_int(val: int) -> bytes:
    remaining = val
    byte_length = 0
    while remaining != 0:
        remaining >>= 8
        byte_length += 1
    return val.to_bytes(byte_length, "big", signed=False)
bytes_from_int(val=0)


def get_output(self):
        if self.pid.poll() is None:
            self.pid.wait()
        if self.out is None:
            (self.out, self.err) = self.pid.communicate()
        if type(self.out) is bytes:
            self.out = self.out.decode('utf-8')
        if type(self.err) is bytes:
            self.err = self.err.decode('utf-8')
        return (self.out, self.err)
get_output(self=<wifite.util.process.Process object at 0x7ff2ae491790>, self.command=['which', 'tshark'], self.err=None, self.out=None, self.pid=<Popen: returncode: None args: ['which', 'tshark']>, self.start_time=1712199430.9088733)

<Popen: returncode: 1 args: ['which', 'tshark']>


def get_targets_from_csv(csv_filename):
        targets = []
        import csv
        with open(csv_filename, 'r') as csvopen:
            lines = []
            for line in csvopen:
                line = line.replace('\0', '')
                lines.append(line)
            csv_reader = csv.reader(lines,
                    delimiter=',',
                    quoting=csv.QUOTE_ALL,
                    skipinitialspace=True,
                    escapechar='\\')
            hit_clients = False
            for row in csv_reader:
                if len(row) == 0: continue
                if row[0].strip() == 'BSSID':
                    hit_clients = False
                    continue
                elif row[0].strip() == 'Station MAC':
                    hit_clients = True
                    continue
                if hit_clients:
                    try:
                        client = Client(row)
                    except (IndexError, ValueError) as e:
                        continue
                    if 'not associated' in client.bssid:
                        continue
                    for t in targets:
                        if t.bssid == client.bssid:
                            t.clients.append(client)
                            break
                else:
                    try:
                        target = Target(row)
                        targets.append(target)
                    except Exception:
                        continue
        return targets
get_targets_from_csv(csv_filename='/local/rcs/XXX/code/pytrace-collector/logs/self_collected/tried/derv82+wifite2/derv82+wifite2/tests/files/airodump-weird-ssids.csv')

[<wifite.model.target.Target object at 0x7ff2ae4e23d0>]

[<wifite.model.target.Target object at 0x7ff2ae4e23d0>, <wifite.model.target.Target object at 0x7ff2ae4e2310>]

[<wifite.model.target.Target object at 0x7ff2ae4e23d0>, <wifite.model.target.Target object at 0x7ff2ae4e2310>, <wifite.model.target.Target object at 0x7ff2ae4e2a30>]

[<wifite.model.target.Target object at 0x7ff2ae4e23d0>, <wifite.model.target.Target object at 0x7ff2ae4e2310>, <wifite.model.target.Target object at 0x7ff2ae4e2a30>, <wifite.model.target.Target object at 0x7ff2ae4e2df0>]

[<wifite.model.target.Target object at 0x7ff2ae4e23d0>, <wifite.model.target.Target object at 0x7ff2ae4e2310>, <wifite.model.target.Target object at 0x7ff2ae4e2a30>, <wifite.model.target.Target object at 0x7ff2ae4e2df0>, <wifite.model.target.Target object at 0x7ff2ae4e2af0>]

<module 'csv' from '/local/rcs/XXX/miniforge3/envs/derv82+wifite2/lib/python3.9/csv.py'>

['\n', 'BSSID, First time seen, Last time seen, channel, Speed, Privacy, Cipher, Authentication, Power, # beacons, # IV, LAN IP, ID-length, ESSID, Key\n']

['\n', 'BSSID, First time seen, Last time seen, channel, Speed, Privacy, Cipher, Authentication, Power, # beacons, # IV, LAN IP, ID-length, ESSID, Key\n', 'AA:BB:CC:DD:EE:FF, 2018-04-06 18:21:23, 2018-04-06 18:21:24, 10,  54, WPA2, CCMP,PSK, -34,        5,        0,   0.  0.  0.  0,  24, Comma\\, no trailing space, \n']

['\n', 'BSSID, First time seen, Last time seen, channel, Speed, Privacy, Cipher, Authentication, Power, # beacons, # IV, LAN IP, ID-length, ESSID, Key\n', 'AA:BB:CC:DD:EE:FF, 2018-04-06 18:21:23, 2018-04-06 18:21:24, 10,  54, WPA2, CCMP,PSK, -34,        5,        0,   0.  0.  0.  0,  24, Comma\\, no trailing space, \n', 'AA:BB:CC:DD:EE:FF, 2018-04-06 18:19:17, 2018-04-06 18:19:19, 10,  54, WPA2, CCMP,PSK, -35,       18,        0,   0.  0.  0.  0,  20, \\"Quoted ESSID\\, Comma\\, no trailing spaces.   \\", \n']

'Station MAC, First time seen, Last time seen, Power, # packets, BSSID, Probed ESSIDs\n'

['BSSID', 'First time seen', 'Last time seen', 'channel', 'Speed', 'Privacy', 'Cipher', 'Authentication', 'Power', '# beacons', '# IV', 'LAN IP', 'ID-length', 'ESSID', 'Key']

['Station MAC', 'First time seen', 'Last time seen', 'Power', '# packets', 'BSSID', 'Probed ESSIDs']

{bssid='AA:BB:CC:DD:EE:FF', channel='10', encryption='WPA', power=66, beacons=5, ivs=0, essid_known=True, essid_len=24, essid='Comma, no trailing space', wps=3, decloaked=False, clients=[]}

{bssid='AA:BB:CC:DD:EE:FF', channel='10', encryption='WPA', power=65, beacons=18, ivs=0, essid_known=True, essid_len=20, essid='"Quoted ESSID, Comma, no trailing spaces.   "', wps=3, decloaked=False, clients=[]}

{bssid='AA:BB:CC:DD:EE:FF', channel='10', encryption='WPA', power=69, beacons=12, ivs=0, essid_known=True, essid_len=22, essid='Comma, Trailing space ', wps=3, decloaked=False, clients=[]}

{bssid='AA:BB:CC:DD:EE:FF', channel='10', encryption='WPA', power=71, beacons=15, ivs=0, essid_known=True, essid_len=30, essid='"quote" comma, trailing space ', wps=3, decloaked=False, clients=[]}

{bssid='AA:BB:CC:DD:EE:FF', channel='10', encryption='WPA', power=80, beacons=43, ivs=0, essid_known=False, essid_len=19, essid=None, wps=3, decloaked=False, clients=[]}


with open(csv_filename, 'r') as csvopen:


def _transform(self, *transforms):
        sequence = None
        for transform in transforms:
            if sequence:
                sequence = Sequence(sequence, transform=transform)
            else:
                sequence = Sequence(self, transform=transform)
        return sequence
_transform(self=[1, 2, 3], transforms=(Transformation(name='map(<lambda>)', function=functools.partial(<class 'map'>, <function TestPipeline.test_add.<locals>.<lambda> at 0x7f52e7bf7280>), execution_strategies=None),), self._base_sequence=[1, 2, 3], self._lineage=Lineage: sequence)


def apply(self, transform):
        self.transformations.append(transform)
apply(self=Lineage: sequence, transform=Transformation(name='map(<lambda>)', function=functools.partial(<class 'map'>, <function TestPipeline.test_add.<locals>.<lambda> at 0x7f52e7bf7280>), execution_strategies=None), self.transformations=[])

[Transformation(name='map(<lambda>)', function=functools.partial(<class 'map'>, <function TestPipeline.test_add.<locals>.<lambda> at 0x7f52e7bf7280>), execution_strategies=None)]


def f(e):
            result.append(e)
f(e=1, result=[])


def get_headers(self) -> HTTPHeaderDict:
        headers = HTTPHeaderDict()
        if self.content_type and (
            not self.headers or "Content-Type" not in self.headers
        ):
            headers["Content-Type"] = self.content_type
        if self.headers:
            headers.extend(self.headers)
        return headers
get_headers(self=<Response(url='http://example.com/?test=1&foo=bar' status=200 content_type='text/plain' headers='null')>, self._calls=<responses.CallList object at 0x7f6849b51b80>, self.auto_calculate_content_length=False, self.body=b'test', self.content_type='text/plain', self.headers=None, self.match=(<function query_string_matcher.<locals>.match at 0x7f6849b3d940>, <function query_string_matcher.<locals>.match at 0x7f6849b3de50>), self.method='GET', self.passthrough=False, self.status=200, self.stream=None, self.url='http://example.com/?test=1&foo=bar')

headers = HTTPHeaderDict()  # Duplicate headers are legal


def __exit__(self, type: Any, value: Any, traceback: Any) -> bool:
        success = type is None
        try:
            self.stop(allow_assert=success)
        finally:
            self.reset()
        return success
__exit__(self=<responses.RequestsMock object at 0x7f6849d999d0>, type=None, value=None, traceback=None, self._calls=<responses.CallList object at 0x7f6849d99dc0>, self._patcher=<unittest.mock._patch object at 0x7f6849b51580>, self._real_send=<function HTTPAdapter.send at 0x7f684b33c550>, self._registry=<responses.registries.FirstMatchRegistry object at 0x7f6849d99ca0>, self._thread_lock=<unlocked _thread.lock object at 0x7f6849d99f60>, self.assert_all_requests_are_fired=None, self.passthru_prefixes=(), self.response_callback=None, self.target='requests.adapters.HTTPAdapter.send')

<responses.registries.FirstMatchRegistry object at 0x7f684a5a4c10>


def stop(self, allow_assert: bool = True) -> None:
        if self._patcher:
            self._patcher.stop()
            self._patcher = None
        if not self.assert_all_requests_are_fired:
            return
        if not allow_assert:
            return
        not_called = [m for m in self.registered() if m.call_count == 0]
        if not_called:
            raise AssertionError(
                "Not all requests have been executed {!r}".format(
                    [(match.method, match.url) for match in not_called]
                )
            )
stop(self=<responses.RequestsMock object at 0x7f6849d999d0>, allow_assert=True, self._calls=<responses.CallList object at 0x7f6849d99dc0>, self._patcher=<unittest.mock._patch object at 0x7f6849b51580>, self._real_send=<function HTTPAdapter.send at 0x7f684b33c550>, self._registry=<responses.registries.FirstMatchRegistry object at 0x7f6849d99ca0>, self._thread_lock=<unlocked _thread.lock object at 0x7f6849d99f60>, self.assert_all_requests_are_fired=None, self.passthru_prefixes=(), self.response_callback=None, self.target='requests.adapters.HTTPAdapter.send')


def test_multithreading_lock(execution_number):
    n_threads = 10
    n_requests = 30
    with responses.RequestsMock() as m:
        for j in range(n_threads):
            for i in range(n_requests):
                m.add(url=f"http://example.com/example{i}", method="GET")
        def fun():
            for req in range(n_requests):
                requests.get(f"http://example.com/example{req}")
        threads = [
            threading.Thread(name=f"example{i}", target=fun) for i in range(n_threads)
        ]
        for thread in threads:
            thread.start()
        for thread in threads:
            thread.join()
test_multithreading_lock(execution_number=0)

{_calls=<responses.CallList object at 0x7f684a53bee0>, _registry=<responses.registries.FirstMatchRegistry object at 0x7f684a53be80>, passthru_prefixes=(), assert_all_requests_are_fired=True, response_callback=None, target='requests.adapters.HTTPAdapter.send', _patcher=<unittest.mock._patch object at 0x7f6849be1af0>, _thread_lock=<unlocked _thread.lock object at 0x7f684a53b390>}

{_calls=<responses.CallList object at 0x7f684a53bee0>, _registry=<responses.registries.FirstMatchRegistry object at 0x7f684a53be80>, passthru_prefixes=(), assert_all_requests_are_fired=True, response_callback=None, target='requests.adapters.HTTPAdapter.send', _patcher=<unittest.mock._patch object at 0x7f6849be1af0>, _thread_lock=<locked _thread.lock object at 0x7f684a53b390>}

{_calls=<responses.CallList object at 0x7f684a53bee0>, _registry=<responses.registries.FirstMatchRegistry object at 0x7f6838645a60>, passthru_prefixes=(), assert_all_requests_are_fired=True, response_callback=None, target='requests.adapters.HTTPAdapter.send', _patcher=None, _thread_lock=<unlocked _thread.lock object at 0x7f684a53b390>}

<function test_multithreading_lock.<locals>.fun at 0x7f683d0139d0>

[<Thread(example0, initial)>, <Thread(example1, initial)>, <Thread(example2, initial)>, <Thread(example3, initial)>, <Thread(example4, initial)>, <Thread(example5, initial)>, <Thread(example6, initial)>, <Thread(example7, initial)>, <Thread(example8, initial)>, <Thread(example9, initial)>]

[<Thread(example0, started 140085666891328)>, <Thread(example1, initial)>, <Thread(example2, initial)>, <Thread(example3, initial)>, <Thread(example4, initial)>, <Thread(example5, initial)>, <Thread(example6, initial)>, <Thread(example7, initial)>, <Thread(example8, initial)>, <Thread(example9, initial)>]

[<Thread(example0, started 140085666891328)>, <Thread(example1, started 140085658236480)>, <Thread(example2, initial)>, <Thread(example3, initial)>, <Thread(example4, initial)>, <Thread(example5, initial)>, <Thread(example6, initial)>, <Thread(example7, initial)>, <Thread(example8, initial)>, <Thread(example9, initial)>]

[<Thread(example0, started 140085666891328)>, <Thread(example1, started 140085658236480)>, <Thread(example2, started 140085649843776)>, <Thread(example3, initial)>, <Thread(example4, initial)>, <Thread(example5, initial)>, <Thread(example6, initial)>, <Thread(example7, initial)>, <Thread(example8, initial)>, <Thread(example9, initial)>]

[<Thread(example0, started 140085666891328)>, <Thread(example1, started 140085658236480)>, <Thread(example2, started 140085649843776)>, <Thread(example3, started 140085641451072)>, <Thread(example4, initial)>, <Thread(example5, initial)>, <Thread(example6, initial)>, <Thread(example7, initial)>, <Thread(example8, initial)>, <Thread(example9, initial)>]

[<Thread(example0, started 140085666891328)>, <Thread(example1, started 140085658236480)>, <Thread(example2, started 140085649843776)>, <Thread(example3, started 140085641451072)>, <Thread(example4, started 140085633058368)>, <Thread(example5, initial)>, <Thread(example6, initial)>, <Thread(example7, initial)>, <Thread(example8, initial)>, <Thread(example9, initial)>]

[<Thread(example0, started 140085666891328)>, <Thread(example1, started 140085658236480)>, <Thread(example2, started 140085649843776)>, <Thread(example3, started 140085641451072)>, <Thread(example4, started 140085633058368)>, <Thread(example5, started 140085624665664)>, <Thread(example6, initial)>, <Thread(example7, initial)>, <Thread(example8, initial)>, <Thread(example9, initial)>]

[<Thread(example0, started 140085666891328)>, <Thread(example1, started 140085658236480)>, <Thread(example2, started 140085649843776)>, <Thread(example3, started 140085641451072)>, <Thread(example4, started 140085633058368)>, <Thread(example5, started 140085624665664)>, <Thread(example6, started 140085616272960)>, <Thread(example7, initial)>, <Thread(example8, initial)>, <Thread(example9, initial)>]

[<Thread(example0, started 140085666891328)>, <Thread(example1, started 140085658236480)>, <Thread(example2, started 140085649843776)>, <Thread(example3, started 140085641451072)>, <Thread(example4, started 140085633058368)>, <Thread(example5, started 140085624665664)>, <Thread(example6, started 140085616272960)>, <Thread(example7, started 140085607880256)>, <Thread(example8, initial)>, <Thread(example9, initial)>]


def _add_from_file(self, file_path: "Union[str, bytes, os.PathLike[Any]]") -> None:
        data = self._parse_response_file(file_path)
        for rsp in data["responses"]:
            rsp = rsp["response"]
            self.add(
                method=rsp["method"],
                url=rsp["url"],
                body=rsp["body"],
                status=rsp["status"],
                content_type=rsp["content_type"],
                auto_calculate_content_length=rsp["auto_calculate_content_length"],
            )
_add_from_file(self=<responses.RequestsMock object at 0x7f6849d999d0>, file_path=PosixPath('response_record'), self._calls=<responses.CallList object at 0x7f6849d99dc0>, self._patcher=<unittest.mock._patch object at 0x7f67afb7efd0>, self._real_send=<function HTTPAdapter.send at 0x7f684b33c550>, self._registry=<responses.registries.FirstMatchRegistry object at 0x7f6849031f70>, self._thread_lock=<unlocked _thread.lock object at 0x7f6849d99f60>, self.assert_all_requests_are_fired=None, self.passthru_prefixes=(), self.response_callback=None, self.target='requests.adapters.HTTPAdapter.send')

{'responses': [{'response': {'auto_calculate_content_length': False, 'body': '404 Not Found', 'content_type': 'text/plain', 'method': 'GET', 'status': 404, 'url': 'http://example.com:8080/404'}}, {'response': {'auto_calculate_content_length': False, 'body': 'Invalid status code', 'content_type': 'text/plain', 'method': 'GET', 'status': 400, 'url': 'http://example.com:8080/status/wrong'}}, {'response': {'auto_calculate_content_length': False, 'body': '500 Internal Server Error', 'content_type': 'text/plain', 'method': 'GET', 'status': 500, 'url': 'http://example.com:8080/500'}}, {'response': {'auto_calculate_content_length': False, 'body': 'OK', 'content_type': 'text/plain', 'method': 'PUT', 'status': 202, 'url': 'http://example.com:8080/202'}}]}


def remove(self, response: "BaseResponse") -> List["BaseResponse"]:
        removed_responses = []
        while response in self.registered:
            self.registered.remove(response)
            removed_responses.append(response)
        return removed_responses
remove(self=<responses.registries.FirstMatchRegistry object at 0x7f67afb4d460>, response={method='GET', url='http://example.com/two', match=(), _calls=<responses.CallList object at 0x7f67afb54700>, passthrough=False, status=200, body=''}, self._responses=[<Response(url='http://example.com/zero' status=200 content_type='text/plain' headers='null')>, <Response(url='http://example.com/one' status=200 content_type='text/plain' headers='null')>, <Response(url='http://example.com/two' status=200 content_type='text/plain' headers='null')>, <Response(url='re.compile('http://example\\.com/three')' status=200 content_type='text/plain' headers='null')>, <Response(url='re.compile('http://example\\.com/four')' status=200 content_type='text/plain' headers='null')>])

Response: {method='GET', url='http://example.com/two', match=(), _calls=<responses.CallList object at 0x7f67afb54700>, passthrough=False, status=200, body=''}

Response: {method='GET', url='http://example.com/two', match=(), _calls=<responses.CallList object at 0x7f67afb54700>, passthrough=False, status=200, body=''}

[<Response(url='http://example.com/zero' status=200 content_type='text/plain' headers='null')>, <Response(url='http://example.com/one' status=200 content_type='text/plain' headers='null')>, <Response(url='re.compile('http://example\\.com/three')' status=200 content_type='text/plain' headers='null')>, <Response(url='re.compile('http://example\\.com/four')' status=200 content_type='text/plain' headers='null')>]

[<responses.BaseResponse object at 0x7f67afb54160>]


Response: {method='GET', url='http://example.com/two', match=(), _calls=<responses.CallList object at 0x7f67afb54700>, passthrough=False, status=200, body=''}

[<Response(url='http://example.com/zero' status=200 content_type='text/plain' headers='null')>, <Response(url='http://example.com/one' status=200 content_type='text/plain' headers='null')>, <Response(url='re.compile('http://example\\.com/three')' status=200 content_type='text/plain' headers='null')>, <Response(url='re.compile('http://example\\.com/four')' status=200 content_type='text/plain' headers='null')>]

Response: {method='GET', url='http://example.com/two', match=(), _calls=<responses.CallList object at 0x7f67afb54700>, passthrough=False, status=200, body=''}


def patched_init(self, *args, **kwargs):
        kwargs["enforce_content_length"] = True
        original_init(self, *args, **kwargs)
patched_init(self=<urllib3.response.HTTPResponse object at 0x7f67afb4d580>, args=(), kwargs={'body': <_io.BytesIO object at 0x7f679c171a90>, 'msg': HTTPHeaderDict({'Content-Type': 'application/json', 'content-length': '2'}), 'preload_content': False}, original_init=<function HTTPResponse.__init__ at 0x7f684a1deee0>)

{'body': <_io.BytesIO object at 0x7f679c171a90>, 'msg': HTTPHeaderDict({'Content-Type': 'application/json', 'content-length': '2'}), 'preload_content': False, 'enforce_content_length': True}

<urllib3.response.BytesQueueBuffer object at 0x7f67afac4220>


def class_to_tg(sub_class: str):
    trans = {"Online": "_online", "Offline": "_offline"}
    for upper, lower in trans.items():
        sub_class = sub_class.replace(upper, lower)
    return sub_class.lower()
class_to_tg(sub_class='YYeTsOffline')

{'Online': '_online', 'Offline': '_offline'}


sub_class = sub_class.replace(upper, lower)


def test_repo():
    def log(arguments):
        return test_logs
    repo = Mock(log=log)
    githeat = Githeat(repo)
    githeat.parse_commits()
    githeat.init_daily_contribution_map()
    githeat.compute_daily_contribution_map()
    githeat.normalize_daily_contribution_map()
    return githeat
test_repo()

<function test_repo.<locals>.log at 0x7f20eb5ed670>

{git_repo=<Mock id='139779364003552'>, gtype='block', width='  ', days=[], days_toggle=[False, False, False, False, False, False, False], months=[], display_months=[], display_months_toggle=[], colors_iterator=<itertools.cycle object at 0x7f20eb57f0c0>, colors=[0, 22, 28, 34, 40, 46], stat=False, stat_number=5, block_separation_show=' ', month_merge=False, hide_legend=False, author=None, grep=None, config=None, commits_db=None, daily_contribution_map=None}

{git_repo=<Mock id='139779364003552'>, gtype='block', width='  ', days=[], days_toggle=[False, False, False, False, False, False, False], months=[datetime.date(2023, 4, 1), datetime.date(2023, 5, 1), datetime.date(2023, 6, 1), datetime.date(2023, 7, 1), datetime.date(2023, 8, 1), datetime.date(2023, 9, 1), datetime.date(2023, 10, 1), datetime.date(2023, 11, 1), datetime.date(2023, 12, 1), datetime.date(2024, 1, 1), datetime.date(2024, 2, 1), datetime.date(2024, 3, 1), datetime.date(2024, 4, 1)], display_months=[], display_months_toggle=[False, False, False, False, False, False, False, False, False, False, False, False, False], colors_iterator=<itertools.cycle object at 0x7f20eb57f0c0>, colors=[0, 22, 28, 34, 40, 46], stat=False, stat_number=5, block_separation_show=' ', month_merge=False, hide_legend=False, author=None, grep=None, config=None, commits_db=defaultdict(<class 'list'>, {datetime.date(2015, 12, 5): [Katrina Grimes on 2015-12-05 04:27:33, Susan Patton on 2015-12-05 23:36:49, Marc Black on 2015-12-05 04:05:27, Cynthia Johnson on 2015-12-05 13:12:56, Michael Bishop on 2015-12-05 14:47:45, Vanessa Hoover on 2015-12-05 17:58:39, Christie Jackson on 2015-12-05 22:09:26, Scott Ruiz on 2015-12-05 15:40:17, Ryan Rodriguez on 2015-12-05 16:24:16], datetime.date(2015, 7, 7): [Jennifer Brady on 2015-07-07 20:26:11, Mario Bryant on 2015-07-07 01:38:26, James Aguirre on 2015-07-07 05:23:46, Nicole Clarke on 2015-07-07 19:16:09, Jennifer Morris on 2015-07-07 16:28:02, Tammy Torres on 2015-07-07 00:07:27, Parker Hays on 2015-07-07 21:08:44, Jennifer Guzman on 2015-07-07 12:39:14, Mitchell Wright on 2015-07-07 16:58:27], datetime.date(2015, 8, 15): [Stephanie York on 2015-08-15 00:24:17, Maria Roman on 2015-08-15 16:13:48, Rebecca Kennedy on 2015-08-15 07:02:54, Tamara Morris on 2015-08-15 18:26:50, Matthew Potter on 2015-08-15 14:20:50, Victoria Kelly on 2015-08-15 16:02:39, Matthew Weber on 2015-08-15 04:00:21, Evan Bennett on 2015-08-15 17:56:37, Alisha Koch on 2015-08-15 15:38:52], datetime.date(2016, 4, 30): [Amber Powell on 2016-04-30 21:40:06, Kelly Moore on 2016-04-30 09:35:19, Alison Smith on 2016-04-30 08:34:43, Mario Woods on 2016-04-30 02:19:33, Richard Sanchez on 2016-04-30 01:03:15], datetime.date(2015, 11, 11): [Kristina Ellis on 2015-11-11 03:42:19, Samantha Phillips on 2015-11-11 15:33:52, Matthew Johnson on 2015-11-11 11:54:48, Heather Ryan on 2015-11-11 06:27:41, Jonathan Hansen on 2015-11-11 11:28:10, Craig Ponce on 2015-11-11 05:55:01, Lauren Gutierrez on 2015-11-11 10:25:13], datetime.date(2015, 8, 3): [Aaron Cruz on 2015-08-03 08:28:11, Curtis Roman on 2015-08-03 00:52:54, Donald Dawson on 2015-08-03 12:19:31, Tammie Jordan on 2015-08-03 09:27:19, Joshua West on 2015-08-03 23:05:36, Victoria Scott on 2015-08-03 13:37:15, Colleen Boyd on 2015-08-03 16:45:40, Kimberly Johnson on 2015-08-03 17:36:14, Dana Brewer on 2015-08-03 08:28:56, Joseph Gonzalez on 2015-08-03 17:33:27, David Turner on 2015-08-03 18:28:25], datetime.date(2015, 11, 7): [Kevin Ayala on 2015-11-07 01:17:48, Alvin Mcdonald on 2015-11-07 23:52:57, Anna Johnson on 2015-11-07 08:58:39, Tyler Brown MD on 2015-11-07 05:19:42, Tiffany Cruz on 2015-11-07 12:35:23, Jacob Carey on 2015-11-07 03:10:55, Dr. Melanie Simmons DDS on 2015-11-07 07:37:10, Cory Mitchell on 2015-11-07 22:58:13, Drew Morris on 2015-11-07 07:06:36, Devin Navarro on 2015-11-07 11:29:56], datetime.date(2016, 3, 26): [Angela Boyer on 2016-03-26 18:13:02, Paige Lewis on 2016-03-26 16:03:06, Daniel Long on 2016-03-26 19:20:24, Monica Hunt on 2016-03-26 18:36:36, Roy Reed on 2016-03-26 02:49:37, Jeffery Gonzalez on 2016-03-26 05:38:08, Samuel Robinson on 2016-03-26 17:35:21, Lynn Fitzgerald on 2016-03-26 04:22:49, Jeremy Walker on 2016-03-26 13:50:17, April Sloan on 2016-03-26 06:22:40, Dr. Reginald Pace on 2016-03-26 02:01:01, Amanda Lopez on 2016-03-26 19:45:29], datetime.date(2016, 6, 29): [Keith Parker on 2016-06-29 07:51:14, Tara Patton on 2016-06-29 01:23:42, James Vasquez on 2016-06-29 22:25:48, Stacy Greene on 2016-06-29 08:29:47, Thomas Mack on 2016-06-29 18:33:19, Chri... 1): 0.0, datetime.date(2023, 12, 2): 0.0, datetime.date(2023, 12, 3): 0.0, datetime.date(2023, 12, 4): 0.0, datetime.date(2023, 12, 5): 0.0, datetime.date(2023, 12, 6): 0.0, datetime.date(2023, 12, 7): 0.0, datetime.date(2023, 12, 8): 0.0, datetime.date(2023, 12, 9): 0.0, datetime.date(2023, 12, 10): 0.0, datetime.date(2023, 12, 11): 0.0, datetime.date(2023, 12, 12): 0.0, datetime.date(2023, 12, 13): 0.0, datetime.date(2023, 12, 14): 0.0, datetime.date(2023, 12, 15): 0.0, datetime.date(2023, 12, 16): 0.0, datetime.date(2023, 12, 17): 0.0, datetime.date(2023, 12, 18): 0.0, datetime.date(2023, 12, 19): 0.0, datetime.date(2023, 12, 20): 0.0, datetime.date(2023, 12, 21): 0.0, datetime.date(2023, 12, 22): 0.0, datetime.date(2023, 12, 23): 0.0, datetime.date(2023, 12, 24): 0.0, datetime.date(2023, 12, 25): 0.0, datetime.date(2023, 12, 26): 0.0, datetime.date(2023, 12, 27): 0.0, datetime.date(2023, 12, 28): 0.0, datetime.date(2023, 12, 29): 0.0, datetime.date(2023, 12, 30): 0.0, datetime.date(2023, 12, 31): 0.0, datetime.date(2024, 1, 1): 0.0, datetime.date(2024, 1, 2): 0.0, datetime.date(2024, 1, 3): 0.0, datetime.date(2024, 1, 4): 0.0, datetime.date(2024, 1, 5): 0.0, datetime.date(2024, 1, 6): 0.0, datetime.date(2024, 1, 7): 0.0, datetime.date(2024, 1, 8): 0.0, datetime.date(2024, 1, 9): 0.0, datetime.date(2024, 1, 10): 0.0, datetime.date(2024, 1, 11): 0.0, datetime.date(2024, 1, 12): 0.0, datetime.date(2024, 1, 13): 0.0, datetime.date(2024, 1, 14): 0.0, datetime.date(2024, 1, 15): 0.0, datetime.date(2024, 1, 16): 0.0, datetime.date(2024, 1, 17): 0.0, datetime.date(2024, 1, 18): 0.0, datetime.date(2024, 1, 19): 0.0, datetime.date(2024, 1, 20): 0.0, datetime.date(2024, 1, 21): 0.0, datetime.date(2024, 1, 22): 0.0, datetime.date(2024, 1, 23): 0.0, datetime.date(2024, 1, 24): 0.0, datetime.date(2024, 1, 25): 0.0, datetime.date(2024, 1, 26): 0.0, datetime.date(2024, 1, 27): 0.0, datetime.date(2024, 1, 28): 0.0, datetime.date(2024, 1, 29): 0.0, datetime.date(2024, 1, 30): 0.0, datetime.date(2024, 1, 31): 0.0, datetime.date(2024, 2, 1): 0.0, datetime.date(2024, 2, 2): 0.0, datetime.date(2024, 2, 3): 0.0, datetime.date(2024, 2, 4): 0.0, datetime.date(2024, 2, 5): 0.0, datetime.date(2024, 2, 6): 0.0, datetime.date(2024, 2, 7): 0.0, datetime.date(2024, 2, 8): 0.0, datetime.date(2024, 2, 9): 0.0, datetime.date(2024, 2, 10): 0.0, datetime.date(2024, 2, 11): 0.0, datetime.date(2024, 2, 12): 0.0, datetime.date(2024, 2, 13): 0.0, datetime.date(2024, 2, 14): 0.0, datetime.date(2024, 2, 15): 0.0, datetime.date(2024, 2, 16): 0.0, datetime.date(2024, 2, 17): 0.0, datetime.date(2024, 2, 18): 0.0, datetime.date(2024, 2, 19): 0.0, datetime.date(2024, 2, 20): 0.0, datetime.date(2024, 2, 21): 0.0, datetime.date(2024, 2, 22): 0.0, datetime.date(2024, 2, 23): 0.0, datetime.date(2024, 2, 24): 0.0, datetime.date(2024, 2, 25): 0.0, datetime.date(2024, 2, 26): 0.0, datetime.date(2024, 2, 27): 0.0, datetime.date(2024, 2, 28): 0.0, datetime.date(2024, 2, 29): 0.0, datetime.date(2024, 3, 1): 0.0, datetime.date(2024, 3, 2): 0.0, datetime.date(2024, 3, 3): 0.0, datetime.date(2024, 3, 4): 0.0, datetime.date(2024, 3, 5): 0.0, datetime.date(2024, 3, 6): 0.0, datetime.date(2024, 3, 7): 0.0, datetime.date(2024, 3, 8): 0.0, datetime.date(2024, 3, 9): 0.0, datetime.date(2024, 3, 10): 0.0, datetime.date(2024, 3, 11): 0.0, datetime.date(2024, 3, 12): 0.0, datetime.date(2024, 3, 13): 0.0, datetime.date(2024, 3, 14): 0.0, datetime.date(2024, 3, 15): 0.0, datetime.date(2024, 3, 16): 0.0, datetime.date(2024, 3, 17): 0.0, datetime.date(2024, 3, 18): 0.0, datetime.date(2024, 3, 19): 0.0, datetime.date(2024, 3, 20): 0.0, datetime.date(2024, 3, 21): 0.0, datetime.date(2024, 3, 22): 0.0, datetime.date(2024, 3, 23): 0.0, datetime.date(2024, 3, 24): 0.0, datetime.date(2024, 3, 25): 0.0, datetime.date(2024, 3, 26): 0.0, datetime.date(2024, 3, 27): 0.0, datetime.date(2024, 3, 28): 0.0, datetime.date(2024, 3, 29): 0.0, datetime.date(2024, 3, 30): 0.0, datetime.date(2024, 3, 31): 0.0, datetime.date(2024, 4, 1): 0.0, datetime.date(2024, 4, 2): 0.0, datetime.date(2024, 4, 3): 0.0})}