コード例 #1
0
class Context(object):
    def __init__(self, *args, **kwargs):
        super(Context, self).__init__()
        self.signal = Signal()

    def connect(self, receiver, sender=None, weak=True, dispatch_uid=None):
        self.signal.connect(receiver, sender, weak, dispatch_uid)

    def disconnect(self,
                   receiver=None,
                   sender=None,
                   weak=True,
                   dispatch_uid=None):
        self.signal.disconnect(receiver, sender, weak, dispatch_uid)

    def send(self, sender, **named):
        self.signal.send(sender, **named)
コード例 #2
0
ファイル: textfield.py プロジェクト: zbx91/PyDataBindUI
class TextFieldWrapper(object):
    def __init__(self, node):
        self.node = node
        self.detect_signal = Signal()
        self.node.addEventListener(self._event)

    @property
    def text(self):
        return self.node.getString()

    @text.setter
    def text(self, t):
        self.node.setString(t)

    def connect_detect(self,
                       receiver,
                       sender=None,
                       weak=True,
                       dispatch_uid=None):
        self.detect_signal.connect(receiver, sender, weak, dispatch_uid)

    def _event(self, node, e):
        if e == const.EVENT_TYPE.TEXTFIELD_EVENT_DETACH_WITH_IME:
            self.detect_signal.send(sender=self)
コード例 #3
0
class ButtonWrapper(object):
    def __init__(self, node):
        self.node = node
        self.begin_singal = Signal()
        self.moved_singal = Signal()
        self.end_singal = Signal()
        self.node.addTouchEventListener(self._event)

    def _event(self, node, event):
        if event == 0:
            self.begin_singal.send(sender=self)
        elif event == 1:
            self.moved_singal.send(sender=self)
        elif event == 2:
            self.end_singal.send(sender=self)

    def connect_end(self, receiver, sender=None, weak=True, dispatch_uid=None):
        self.end_singal.connect(receiver, sender, weak, dispatch_uid)
コード例 #4
0
class Modelo(SimulationStep):
    
    def __init__(self, nrCaminhoes=10, tempoSimulacao=sys.maxint, maxViagens=None):
        Simulation.__init__(self)
        self.nrCaminhoes_changed = Signal(providing_args=['nrCaminhoes'])
        self.nrCaminhoes = nrCaminhoes
        self.tempoSimulacao = tempoSimulacao
        self.maxViagens = maxViagens
        self.caminhoes = list()

        self.fila_carregadores_changed = Signal(providing_args=['tam'])
        self.carregadores_ativos_changed = Signal(providing_args=['tam'])
        self.fila_balanca_changed = Signal(providing_args=['tam'])
        self.balanca_ativo_changed = Signal(providing_args=['tam'])

        self._carregamento_va = None
        self._pesagem_va = None
        self._viagem_va = None
        self.nrViagensRealizadas_changed = Signal(providing_args=['nrViagensRealizadas'])
        def default_handler(sender, **kwargs):
            pass
        self.caminhao_changed_handler = default_handler
        self._nrViagensRealizadas = 0
        self._inicializado = False

    def _nroTotalDeViagensForamRealizadas(self):
        if self.maxViagens is None:
            return False

        return self.nrViagensRealizadas == self.maxViagens

    @property
    def nrCaminhoes(self):
        return self._nrCaminhoes

    @nrCaminhoes.setter
    def nrCaminhoes(self, value):
        self._nrCaminhoes = value
        self.nrCaminhoes_changed.send(sender=self, nrCaminhoes=self._nrCaminhoes)

    @property
    def nrViagensRealizadas(self):
        return self._nrViagensRealizadas

    @nrViagensRealizadas.setter
    def nrViagensRealizadas(self, value):
        self._nrViagensRealizadas = value
        self.nrViagensRealizadas_changed.send(sender=self, nrViagensRealizadas=self._nrViagensRealizadas)
        
        if self._nroTotalDeViagensForamRealizadas():
            self.stopSimulation()

    @property
    def carregamento_va(self):
        return self._carregamento_va

    @carregamento_va.setter
    def carregamento_va(self, value):
        self._carregamento_va = value

    @property
    def pesagem_va(self):
        return self._pesagem_va

    @pesagem_va.setter
    def pesagem_va(self, value):
        self._pesagem_va = value

    @property
    def viagem_va(self):
        return self._viagem_va
        
    @viagem_va.setter
    def viagem_va(self, value):
        self._viagem_va = value

    def inicializar(self):
        if self.maxViagens is None and self.tempoSimulacao is None:
            raise ModeloError('Número máximo de viagens e o tempo de simulação não foram informados. Ao menos um deles deve ser informado')

        self.nrViagensRealizadas = 0
        self.initialize()

        car_name = 'Carregadores'
        self.carregadores = Resource(name=car_name, unitName='carregador', capacity=2, monitored=True, sim=self)
        carWaitMon = NotifyMonitor(signal= self.fila_carregadores_changed,
                                   name = 'Wait Queue Monitor %s'%car_name,
                                   ylab = 'nr in queue', tlab = 'time',
                                   sim = self)
        print len(self.carregadores.waitQ)
        carWaitMon.observe(t=self.now(), y=len(self.carregadores.waitQ))
        self.carregadores.waitMon = carWaitMon

        carActMon = NotifyMonitor(signal=self.carregadores_ativos_changed,
                                  name = 'Active Queue Monitor %s'%car_name,
                                  ylab = 'nr in queue', tlab = 'time',
                                  sim = self)
        carActMon.observe(t=self.now(), y=len(self.carregadores.activeQ))
        self.carregadores.actMon = carActMon

        bal_name = 'Balança'
        self.balanca = Resource(name=bal_name, unitName='balança', capacity=1, monitored=True, sim=self)
        balWaitMon = NotifyMonitor(signal=self.fila_balanca_changed,
                                   name = 'Wait Queue Monitor %s'%bal_name,
                                   ylab = 'nr in queue', tlab = 'time',
                                   sim = self)
        balWaitMon.observe(t=self.now(), y=len(self.balanca.waitQ))
        self.balanca.waitMon = balWaitMon

        balActMon = NotifyMonitor(signal=self.balanca_ativo_changed,
                                  name = 'Active Queue Monitor %s'%bal_name,
                                  ylab = 'nr in queue', tlab = 'time',
                                  sim = self)
        balActMon.observe(t=self.now(), y=len(self.balanca.activeQ))
        self.balanca.actMon = balActMon

        for i in range(self._nrCaminhoes):
            caminhao = Caminhao(name='caminhao_%s'%i, sim=self)
            caminhao.property_changed.connect(self.caminhao_changed_handler)
            self.caminhoes.append(caminhao)
            self.activate(caminhao, caminhao.rodar())

        self._inicializado = True
        
    def inicializado(self):
        return self._inicializado

    def rodar(self, step=False):
        if not self.inicializado():
            self.inicializar()

#        pdb.set_trace()
# TODO: usar variavel self.stop_l setada com um Lock
#       while not self.stop_l and self.has_events():
        while self.has_events():
            self.simulateStep(until=self.tempoSimulacao)
コード例 #5
0
class Estatisticas:

    class MinMaxMedia:
        def __init__(self, property_changed):
            self._min = 0.0
            self._max = 0.0
            self._media = 0.0
            self._count = 0
            self.property_changed = property_changed

        def verify_and_notify(self, attr_name, value):
            if getattr(self, attr_name) != value:
                setattr(self, attr_name, value)
                self.property_changed.send(sender=self, property_name=attr_name[1:])

        def update_properties(self, val, average=None):
            self.min = min(self.min, val)
            self.max = max(self.max, val)
            self._count += 1
            if average is None:
                self.media = (self.media + val) / self._count
            else:
                self.media = average

        @property
        def min(self):
            return self._min

        @min.setter
        def min(self, value):
            self.verify_and_notify('_min', value)

        @property
        def max(self):
            return self._max

        @max.setter
        def max(self, value):
            self.verify_and_notify('_max', value)

        @property
        def media(self):
            return self._media

        @media.setter
        def media(self, value):
            self._media = value
            self.property_changed.send(sender=self, property_name='media')



    def __init__(self, modelo):
        self.property_changed = Signal(providing_args=['property_name'])

        self._tam_fila_carregadores = MinMaxMedia(self.property_changed)
        modelo.fila_carregadores_changed.connect(fila_carregadores_changed)

        self._tam_fila_balanca = MinMaxMedia(self.property_changed)
        modelo.fila_balanca_changed.connect(fila_balanca_changed)

        self._ocupacao_media_car = 0.0
        modelo.carregadores_ativos_changed.connect(carregadores_ativos_changed)
        self._ocupacao_media_bal = 0.0
        modelo.balanca_ativo_changed.connect(balanca_ativo_changed)

        modelo.caminhao_changed_handler = self.caminhao_changed_handler
        self._tempo_fila_carregador = MinMaxMedia(self.property_changed)
        self._tempo_fila_balanca = MinMaxMedia(self.property_changed)
        self._tempo_ciclo = MinMaxMedia(self.property_changed)

    @property
    def ocupacao_media_car(self):
        return self._ocupacao_media_car

    @ocupacao_media_car.setter
    def ocupacao_media_car(self, value):
        self._ocupacao_media_car = value
        self.property_changed.send(sender=self, property_changed='ocupacao_media_car')

    @property
    def ocupacao_media_bal(self):
        return self._ocupacao_media_bal

    @ocupacao_media_bal.setter
    def ocupacao_media_bal(self, value):
        self._ocupacao_media_bal = value
        self.property_changed.send(sender=self, property_changed='ocupacao_media_bal')

    def caminhao_changed_handler(self, sender, **kwargs):
        property_changed_name = kwargs['property_name']
        property_value = getattr(sender, property_changed_name)
        if property_changed_name == 't_fila_car':
            self._tempo_fila_carregador.update_properties(property_value)
        elif property_changed_name == 't_fila_bal':
            self._tempo_fila_balanca.update_properties(property_value)
        elif property_changed_name == 't_ciclo':
            self._tempo_ciclo.update_properties(property_value)

    def fila_carregadores_changed(self, sender, **kwargs):
        tam_atual = kwargs['tam']
        average = sender.timeaverage()
        self._tam_fila_carregadores.update_properties(tam_atual, average)
            
    def fila_balanca_changed(self, sender, **kwargs):
        tam_atual = kwargs['tam']
        average = sender.timeaverage()
        self._tam_fila_balanca.update_properties(tam_atual, average)

    def carregadores_ativos_changed(self, sender, **kwargs):
        self.ocupacao_media_car = sender.timeaverage()
        
    def balanca_ativo_changed(self, sender, **kwargs):
        self.ocupacao_media_bal = sender.timeaverage()
コード例 #6
0
class Caminhao(Process):

    def __init__(self, name, sim):
        Process.__init__(self, name, sim)
        self.property_changed = Signal(providing_args=['property_name'])
        self._t_fila_car = 0.0
        self._t_fila_bal = 0.0
        self._t_ciclo = 0.0


    @property
    def t_fila_car(self):
        return self._t_fila_car

    @t_fila_car.setter
    def t_fila_car(self, value):
        self._t_fila_car = value
        self.property_changed.send(sender=self, property_name='t_fila_car')

    @property
    def t_fila_bal(self):
        return self._t_fila_bal

    @t_fila_bal.setter
    def t_fila_bal(self, value):
        self._t_fila_bal = value
        self.property_changed.send(sender=self, property_name='t_fila_bal')

    @property
    def t_ciclo(self):
        return self._t_ciclo

    @t_ciclo.setter
    def t_ciclo(self, value):
        self._t_ciclo = value
        self.property_changed.send(sender=self, property_name='t_ciclo')
    
    def rodar(self):
        while True:
            # carregando o caminhão
            espera_inicio = self.sim.now()
            yield request, self, self.sim.carregadores
            espera_fim = self.sim.now()
            self.t_fila_car = espera_fim - espera_inicio

            t_carregamento = self.sim.carregamento_va()
            yield hold, self, t_carregamento
            yield release, self, self.sim.carregadores

            # pesagem
            espera_inicio = self.sim.now()
            yield request, self, self.sim.balanca
            espera_fim = self.sim.now()
            self.t_fila_bal = espera_fim - espera_inicio

            t_pesagem = self.sim.pesagem_va()
            yield hold, self, t_pesagem
            yield release, self, self.sim.balanca

            # delay da viagem
            t_viagem = self.sim.viagem_va()
            yield hold, self, t_viagem
            self.t_ciclo = self.t_fila_car + t_carregamento + self.t_fila_bal + t_pesagem + t_viagem
            
            self.sim.nrViagensRealizadas +=1