Feat/v2 0 0#5
Merged
Merged
Conversation
- Fix AttributeError in physical_layer.py: self._network.edges → self._network.graph.edges (echp_on_demand/echp_on_replay) - Fix fidelity not updating in transport_layer.py: qubit.fidelity → qubit.set_current_fidelity() - Fix trailing comma in host.py creating tuple instead of appending value - Fix EPR initial/current fidelity getting different random values in epr.py
- apply_hadamard() agora usa marcadores de superposição (|+⟩, |−⟩) garantindo H(H|ψ⟩) = |ψ⟩; colapso movido para measure() - get_last_qubit() renomeado para consume_last_qubit() com uso de pop()
…me invalido em set_ready_topology
…set_ready_topology
A inconsistencia onde EPRs tinham decoerencia aplicada sem verificar timeslot ja foi resolvida pela refatoracao para avaliacao lazy. Renomeia set_fidelity() para set_current_fidelity() em Epr, alinhando com a nomenclatura de Qubit.
….request Substitui lista global _failed_requests por contador local por requisicao (failures) e contador global _failed_request_count para metricas. A decisao de purificacao agora considera apenas falhas da requisicao corrente.
Imports absolutos substituidos por imports relativos em link_layer.py, network_layer.py, transport_layer.py e application_layer.py, eliminando inconsistencia com physical_layer.py e garantindo que o pacote funcione independente do nome com que for importado.
Metodos get_current_fidelity(), set_current_fidelity() e get_initial_fidelity() substituidos por @Property current_fidelity (com setter) e @Property initial_fidelity em Qubit e Epr, alinhando com o estilo idiomatico Python ja adotado em Host. Todos os callers atualizados em physical_layer, link_layer, network_layer e transport_layer.
Removidos os atributos used_eprs e used_qubits (contadores inteiros) e os metodos get_used_eprs()/get_used_qubits() de todas as camadas (Physical, Link, Network, Transport, Application), eliminando codigo 100% duplicado. Cada incremento self.used_eprs += N e self.used_qubits += N foi substituido por self.logger.log() com a mesma informacao. Removidos tambem get_total_used_eprs() e get_total_used_qubits() de network.py e as entradas correspondentes em get_metrics(). Notebooks atualizados para remover chamadas a esses metodos.
…as e remove excecoes que interrompiam a simulacao Criado modulo exceptions.py com hierarquia: QuantumNetError (base), SingletonError, HostNotFoundError, DuplicateHostError e TopologyError. Cada raise Exception(...) substituido pela excecao semantica correspondente. Removidas HostMemoryError e EprNotFoundError que interrompiam a simulacao em situacoes normais da rede. consume_last_qubit() agora retorna None, e os callers na physical_layer (_do_heralding, _do_on_demand, _do_on_replay) tratam graciosamente via log + on_complete(success=False). remove_epr() tambem retorna None em vez de lancar excecao.
…perda silenciosa Nos metodos _do_heralding, _do_on_demand e _do_on_replay, a verificacao de memoria vazia agora ocorre ANTES de chamar consume_last_qubit(). Isso evita que, quando apenas um dos dois hosts esta sem qubits, o qubit do outro host seja consumido e descartado silenciosamente. O log de "2 qubits used" tambem foi movido para apos a verificacao, ja que nenhum qubit e realmente consumido quando a operacao falha.
…delidade Removidas listas created_eprs de PhysicalLayer, LinkLayer e TransportLayer, eliminando o padrao fragil de transferencia manual (extend + clear em 3 lugares da LinkLayer). _do_heralding() agora propaga epr_fidelity no callback on_complete, e a LinkLayer acumula _epr_fidelity_sum e _epr_count diretamente em on_heralding_done. avg_fidelity_on_linklayer() usa os acumuladores. Em TransportLayer, created_eprs era codigo morto (nunca populado nem lido).
… echp(mode) echp_on_demand() e echp_on_replay() removidos. Substituidos por echp(alice_host_id, bob_host_id, mode) e _do_echp(). mode='on_demand' usa costs.on_demand e prob_on_demand_epr_create; mode='on_replay' usa costs.replay e prob_replay_epr_create. Eventos emitidos preservados via f-string com o mode. Notebook e clock_ticks.md atualizados.
… host e epr 4.1 - purification_calculator em link_layer.py: parametros f1 e f2 corrigidos de int para float, pois representam fidelidades (valores entre 0 e 1). Docstring atualizada. 4.2 - Host.add_connection em host.py: substituido type(x) != int por not isinstance(x, int), aceitando subclasses de int como numpy.int64 usadas pelo NetworkX. 4.3 - Host.info() em host.py: comparacao self.routing_table == None substituida por self.routing_table is None, seguindo a convencao PEP 8. 4.4 - Epr.__init__ em epr.py: epr_id anotado como Union[int, tuple] para refletir os dois usos reais: int em physical_layer e tuple (alice_id, bob_id) em link_layer e network_layer.
…h em Qubit e Epr 6.4 - Nao aplicavel: set_current_fidelity() ja foi removido na correcao 2.2 (substituido por @Property setter). 6.5 - Parametros Alice e Bob em network_layer.py renomeados para alice e bob (snake_case), nas assinaturas e corpos de short_route_valid() e entanglement_swapping(). Docstrings atualizadas. 6.6 - __repr__ adicionado a Qubit e Epr, expondo id, estado(qubit) e fidelidade atual com 4 casas decimais. 6.7 - __eq__ e __hash__ adicionados a Qubit e Epr com base no respectivo id, tornando colecoes e list.remove() dependentes de valor em vez de identidade de objeto.
Remove o sistema antigo de metricas em memoria (listas nas camadas, get_metrics(), acumuladores de fidelidade) e substitui por MetricsCollector (quantumnet/utils/metrics.py): um coletor orientado a eventos que abre o CSV uma unica vez, escreve cada evento diretamente em disco (O(1) RAM) e nunca armazena referencias a objetos Python, eliminando o memory leak. Clock ganhou listen_all() para ouvintes wildcard disparados em todo emit() sem avançar o timeslot. Eventos enriquecidos: link_request_success agora inclui fidelity; qubit_teleported inclui fidelity_alice, fidelity_route e route_len; novo evento route_found emitido em short_route_valid(). Schema CSV: clock_tick, event_type, source_node, target_node, value, details.
… nativos - Remove FORMAT e logging.basicConfig() globais que vazavam configuracoes para outras bibliotecas - Remove atributo de classe DISABLED; controle de estado delegado ao modulo logging - Construtor limpa handlers herdados e adiciona NullHandler por padrao (mensagens descartadas silenciosamente) - activate() aceita level, console, file_log e filename; gera nome de arquivo com timestamp se omitido - Metodos warn/error/log/debug agora delegam diretamente ao self.logger sem condicional DISABLED
…rquitetura do simulador
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implementa nova versão 2.0.0 do simulador.