Skip to content

Feat/v2 0 0#5

Merged
artuenric merged 35 commits into
mainfrom
feat/v2-0-0
Mar 13, 2026
Merged

Feat/v2 0 0#5
artuenric merged 35 commits into
mainfrom
feat/v2-0-0

Conversation

@artuenric
Copy link
Copy Markdown
Collaborator

Implementa nova versão 2.0.0 do simulador.

- 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()
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.
@artuenric artuenric merged commit d7d0a82 into main Mar 13, 2026
@artuenric artuenric deleted the feat/v2-0-0 branch March 13, 2026 01:22
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant