Azimlib0.3.0 · documentation

Progresso da Azimlib 0.3.0

Status: 0.3.0 publicada e verificada no PyPI e GitHub. Registro final, commit, CI e hashes. As seções de lotes abaixo são snapshots históricos dos respectivos estados. Esta é a checklist operacional única; os IDs são estáveis. O registro da 0.2.0 permanece separado.

80 concluídos / 0 pendentes. Contagem por subpassos, não por frentes amplas.

Regras de conclusão

Marcar um subpasso somente após implementação, testes de contrato/regressão e documentação. Recursos visuais exigem exemplo reproduzível e exportação inspecionada. Novos formatos/datasets exigem proveniência/licença, limites declarados e testes de dados inválidos. A conclusão do passo exige integração entre seus subpassos; não basta uma API vazia ou um screenshot. O estado de Python/plataformas só será atualizado a partir da CI efetivamente executada. Matplotlib pode ser uma referência de comportamento em ferramentas de comparação; o runtime continua independente e os componentes cartográficos permanecem opcionais.

O escopo é o corte verificável descrito abaixo, não a promessa de implementar todos os toolkits/CRS/formatos do mercado. API 3D será experimental e própria. Mudanças de escopo devem ser registradas aqui, com motivo, sem apagar IDs nem reduzir silenciosamente o total.

Ordem dos lotes

Começar por 1; seguir com 2 e 3. O núcleo do passo 4 sustenta 5–9. Acabamento/performance/licenças entram em cada lote; o passo 10 consolida os gates. A numeração não impede corrigir uma regressão imediatamente.

1. Dados e fundação urbana

2. Formatos, dados reais e proveniência

3. CRS, geodesia e robustez cartográfica

4. Transforms, Artists, escalas e composição

5. Raster, terreno e mapas científicos 2D

6. Acabamento visual, texto e exportação

7. Interação, integração e desempenho

8. Terreno 3D experimental verdadeiro

9. Mapas temporais e atlas

10. Documentação, compatibilidade e entrega

Evidências por lote

Nenhum subpasso é declarado concluído apenas por constar no plano. Evidências dos lotes executados serão acrescentadas abaixo com arquivos, testes e limitações.

Lote 1 — dados e camadas urbanas (0.3.0.dev0)

1.01–1.08 concluídos. Código em geometry.py, tabular.py, io.py e axes.py; documentação no guia urbano; script em examples/urban.py. Os dados do atlas são inteiramente sintéticos. A imagem e seu manifest foram inspecionados em PNG/SVG com o renderer próprio; nenhum motor cartográfico externo foi usado.

Leitores adicionais, bases urbanas reais, picking, largura em metros, extrusão 3D e roteamento não foram declarados implementados por este lote. O passo 1 encerra a fundação descrita; não encerra a frente urbana inteira. Ao final daquele lote, os passos 2–10 ainda estavam pendentes; o lote seguinte está registrado abaixo. Versão de desenvolvimento apenas local, sem PyPI.

Lote 2 — formatos, dados reais e proveniência (0.3.0.dev0)

2.01–2.08 concluídos no corte delimitado. Implementação independente em shapefile.py, xmlio.py, raster.py, catalog.py e _readers.py, integrada em azimlib, azimlib.io e MapAxes.raster. O guia de formatos declara variantes, CRS, geometrias, entradas rejeitadas e limites de tamanho; o guia de dados opcionais descreve catálogo e atribuição.

Este lote não implementa leitor universal, OSM PBF, CRS além de 4326/3857, reparo topológico, raster RGB, resampling ou desenho de affines rotacionadas. Esses limites aparecem na API/documentação; não são simulados nem delegados a outro motor. Os próximos passos mantêm os IDs e o total de 80. Nenhum upload, push ou alteração da versão estável 0.2.0 foi feito por este lote.

Lote 3 — CRS, geodesia e robustez cartográfica (0.3.0.dev0)

3.01–3.08 concluídos no corte regional explicitamente documentado. Implementação própria em geodesy.py, transverse.py, topology.py, integrada em CRS, projeções, readers, rotas, viewport, cache, renderização e navegação. O guia do núcleo descreve modelos, erros, tolerâncias, entrada explícita e limites. Funções esféricas anteriores foram preservadas.

Limites: datum shifts/epochs/grids e CRS universais não implementados; TM não é global; novas azimutais são esféricas. Raster UTM é representável e lido, mas plotting curvilíneo é rejeitado até seu lote. Topologia é planar lon/lat regional; recorte esférico não aceita todos os interiores globais/degenerações. Autoscala Cartesian legada continua; fit circular é opt-in. Reprojeção portátil viva nas projeções não cilíndricas permanece no passo 7. Nenhum push/upload/publicação ou modificação de main/0.2.0 foi feito. Checklist: 24/80, 56 pendentes.

Corte explicitamente reservado à 0.4.0

Recurso Razão técnica O que a 0.3.0 entrega antes
Volumes 3D, nuvens volumétricas e GPU Exigem pipeline volumétrico/paralelo além de superfícies e depth buffer Câmera, terreno e extrusão experimental CPU
OSM PBF completo e planet-scale streaming Codec binário, referências em blocos e consumo limitado de memória precisam de validação própria OSM XML local validado e benchmarks urbanos
CRS universais e datum por grids oficiais Catálogo, grids licenciados, inversão e tolerâncias são uma fundação adicional Elipsoide, UTM e CRS/projeções explicitamente suportados
Overlay/union globais de topologia arbitrária Robustez numérica/topológica global não pode ser inferida de clipping Validação/interseções básicas e recorte esférico delimitado
Geocodificação e roteamento urbano completos Dependem de índices de endereços, grafos/restrições de trânsito e licenças de bases reais Leitores/camadas urbanas, seleção e picking
TeX completo e shaping internacional complexo Requerem motor de composição e fontes/cobertura adicionais auditados Tipografia/labels aprimorados e expressões simples próprias

Estas reservas não substituem urbano, 3D e tempo: os três estão no corte 0.3.0. Não há data prometida; 80 subpassos representam trabalho substancial. Novas funções só serão anunciadas como disponíveis quando passarem pelos respectivos gates.

Lote 4 — transforms, Artists, escalas e composição (0.3.0.dev0)

4.01–4.08 concluídos no corte documentado. Implementações próprias em transforms.py, path.py, patches.py, collections.py, dates.py, scale.py, subfigure.py, legend_handler.py, viewport/render/layout. Veja contratos e limites e a recomendação de visualização clara.

Limites explícitos: inversas mistas exigem separabilidade; Beziers usam flattening determinístico, não adaptativo. Layout múltiplo exige regiões disjuntas; compressed compacta grids completos sem spans/aninhamento. Textos livres/cax reservam faixas de borda, sem solver universal de colisões interiores. Datas/logs são números escalares, não eixos de latitude logarítmica. Handlers customizados desenham PathPatch próprios. Bearing é rotação 2D isotrópica; norte/rosa seguem a direção local da projeção e mantêm componentes independentes. HTML rotacionado/curvo continua snapshot sem recomposição Python, conforme limites do viewer; ponte viva permanece em 7.03.

O lote seguinte a este registro foi 5.01–5.08: raster/terreno e mapas científicos 2D. 3D, animação, Qt e demais IDs permanecem pendentes; versão estável/main 0.2.0 preservada. Nenhum push, release ou upload PyPI é parte deste lote.

Lote 5 — raster, terreno e mapas científicos 2D (0.3.0.dev0)

5.01–5.08 concluídos no corte documentado. Contratos, unidades e limites. Implementações próprias em scientific.py, scientific_artists.py, tri.py, raster.py, campos/axes/cores e integração renderer/colorbar/legenda existente.

36 testes novos verificam planos analíticos, triângulos/circumcírculos, áreas/furos, conservação de pesos, alpha e pixels exportados, edição sem mutação inválida, máscaras, classes e lifecycle. Wheel instalado: 827 testes / 18.757 subtests, zero falhas/erros; os mesmos cinco skips opcionais/permissionais nomeados do lote anterior. Runtime e runner conferidos por hash contra a fonte. Windows/CPython 3.14.4, Pillow/NumPy, sem aggdraw/Numba nem importação de Matplotlib/GIS. Resultado local, não uma CI nova de três plataformas.

Desktop instalado: dois smokes reais Tk em janelas ocultas, incluindo novas edições científicas e composição rotacionada; input sintético, sem novo aceite visual/input humano. O runner da futura CI inclui o novo smoke. Instalação offline nova sem extras também executa SVG, RGB/contourf/interpolação/resampling e preserva os contratos anteriores. 503 casos próprios de interpolação/conservação e exportação estrutural; erro máximo observado 1,78e-15 nas fixtures, não um oracle externo nem tolerância universal. Galeria sintética em PNG/SVG/HTML, PNGs instalados inspecionados e manifests/proveniência. Atlas de composição regenerado com a legenda corrigida.

Wheel/sdist de desenvolvimento reconstruídos; notices, recursos upstream, licenças, exclusão do dado ODbL opcional, conteúdo/metadata, twine strict, documentação e scanner de privacidade/refs locais fazem parte dos gates do lote. Nenhuma nova base/font/ícone/paleta de terceiros foi incorporada.

Limites: representação por células vetoriais, não textura GPU; amostragem in-memory; triangulação planar regional limitada e sem constrained/spherical mesh. contourf é linear SW–NE, não idêntico ao interpolador bilinear de contour. Density em graus², não população/km². Terreno iluminado é snapshot 2D, não 3D; recompute para mudar iluminação/elevação. Malha curvilínea direta, mosaico, satélite volumoso, hidrologia, graph routing e flow bundling não fazem parte deste corte. Níveis exteriores de contourf não são preenchidos implicitamente.

Próximo lote: 6.01–6.08, acabamento visual, texto e exportação. Os passos 6–10 permanecem pendentes (40 subpassos); main/estável 0.2.0 preservados. Nenhum push, release ou upload PyPI é parte deste lote.

Lote 6 — acabamento, texto e exportação (0.3.0.dev0)

6.01–6.08 concluídos no corte delimitado. Contratos completos e galeria original com proveniência/hashes. Implementações próprias em path.py, polygon_labels.py, curved_text.py, mathtext.py, font_outline.py, patterns.py, icons.py e renderers/pdf.py. PNG/SVG/Tk preservam a arquitetura; savefig PDF estático também integra Save nativo. Componentes continuam opcionais e a versão publicada não é alterada.

Limites explícitos: contornos PDF sem texto pesquisável, uma página, famílias DejaVu incorporadas; raster 2D em cells pode gerar PDF grande. Expressões simples não são TeX/MathText completo; hinting subpixel/shaping generalizado, SVG completo e fonts variáveis não são prometidos. Curved names simples, prioridade/colisão conservadoras, budget interior e snapshot HTML documentados. Etapas 7–10 permanecem pendentes: 32 subpassos; nenhum ID foi eliminado.

Lote 7 — interação, integração e desempenho (0.3.0.dev0)

7.01–7.07 concluídos no corte documentado; 7.08 permanece pendente por plataforma. Implementação própria em picking.py, widgets.py, interaction.py, simplify.py, backends/live.py, backends/qt.py e backends/notebook.py. Guia e limites, galeria original inspecionada, auditor de evidências.

Falta em 7.08: executar Tk/Qt em Linux e macOS e registrar seus resultados nativos. A CI foi estendida com Qt/IPython e fixture Node (27 jobs expandidos), mas não foi executada remotamente neste lote. Windows programático/pintura está validado; não equivale a novo aceite humano de fluidez em três sistemas. Nenhuma publicação, push ou mudança do main/versão estável 0.2.0 faz parte deste lote.

Lote 8 — terreno 3D experimental (0.3.0.dev0)

8.01–8.08 concluídos no contrato experimental; 7.08 continua pendente. Guia e limites, galeria original, 37 contratos e auditor das evidências.

Relatórios das etapas anteriores são snapshots preservados de seus runtimes; nunca recebem hashes falsamente atualizados. A referência corrente desta etapa é verificada por audit_terrain3d.py. Restam 17 subpassos: 7.08 e etapas 9–10. Nenhuma publicação, push, mudança do main ou lançamento 0.3.0 neste lote.

Lote 9 — mapas temporais e atlas (0.3.0.dev0)

9.01–9.08 concluídos; 7.08 permanece pendente. Guia, 53 testes de contrato, galeria original e auditor corrente.

Restam 9 subpassos: 7.08 e 10.01–10.08. Sem push, mudança do main, PyPI ou lançamento 0.3.0 neste lote. Budgets/limites da API inicial estão no guia; não é animação infinita, compilador de vídeo incorporado nem compatibilidade integral com todos os escritores/encoders/callbacks de outro framework.

Lote 10 — documentação e gates de entrega (0.3.0.dev0)

10.01–10.07 concluídos para os artefatos de desenvolvimento. 10.08 (aceite/publicação final) permanece pendente, assim como 7.08.

Os relatórios antigos são snapshots preservados. A versão permanece 0.3.0.dev0; este lote não autoriza uma publicação automática 0.3.0 nem trata CI como aceite humano Linux/macOS. Contagem final e evidência hospedada serão registradas ao passar seus gates, sem reescrever resultados anteriores.

Documentação de desenvolvimento hospedada por HTTPS: prova de hospedagem, 389 arquivos revisados, 9 PDFs decodificados e 33 metadados de imagens examinados; nenhum caminho pessoal, marcador de conversa ou credencial encontrado no escopo verificado. Amostras HTTPS conferidas byte a byte contra o site auditado. Dois relatórios antigos preservam versões/testes e usam caminhos portáveis de ambiente. O repositório principal e a versão PyPI permanecem inalterados.

A comparação raster conserva os hashes exatos de geometria/texto/estilo. Somente caixas de texto têm comparação bidirecional com vizinhança de dois pixels, para variações RAQM/FreeType. Diferenças brutas são registradas; desaparecimento de texto, mudança de cor e tolerância fora de textos têm regressões negativas.

CI hospedada 28/28 aprovada: auditoria dos 28 artefatos, 1.000 testes em cada um dos 15 jobs de Python/sistema, 19 integrações Tk por sistema, Qt 2D/3D/temporal e notebook em três sistemas, seis jobs com acelerador e documentação executável. Hashes instalados conferidos contra os blobs exatos do commit testado; as diferenças locais registradas são somente transporte LF/CRLF. Logs ZIP/CRC e report hashes foram conferidos, incluindo licenças/privacidade/distribuição.

Restam 2 subpassos: 7.08 e 10.08. CI programática nativa não substitui conferência visual/input humana Linux/macOS. Não houve publicação 0.3.0 no PyPI.

Rodada visual 7.08 — aguardando aprovação humana

Procedimento e checklist: artifacts separados Ubuntu/macOS, 14 cenas PNG/SVG, referências próprias Windows, 100/200 dpi e capturas nativas Tk/Qt (urban/pan/Home/Subplots/3D/temporal). O workflow gera material de revisão; seu sucesso não equivale a aceite humano. 7.08 e 10.08 continuam pendentes. Nenhuma publicação de site, release ou pacote é executada por esse workflow.

Aceite humano 7.08 — Linux e macOS

7.08 concluído. Registro técnico de aceite identifica o commit 1420e74ea3337f3a74cdc90e6cba9a6707c2152f, a CI visual 2/2, os dois artifacts e seus hashes. Revisão humana de PNG/SVG e capturas nativas Tk/Qt em Linux/macOS: nenhuma regressão visual impeditiva identificada. O escopo é visual; não registra medição física de latência do mouse.

A CI geral do mesmo commit passou 28/28. Relatórios anteriores são snapshots dos respectivos lotes. O candidato com metadata 0.3.0 será validado em um novo commit; isso não transforma o pacote publicado 0.2.0 em uma nova versão.

Resta somente 10.08: resumo final, CI do commit candidato, wheel/sdist verificados e autorização final. Nenhuma tag, alteração de main, GitHub Release ou upload PyPI está autorizado pelo aceite visual.

Aceite final 10.08 — release 0.3.0

80/80 concluídos. Registro técnico: aceite humano final e autorização explícita de publicação em 2026-10-08 UTC. O candidato revisado foi c85e935661c627c0a3a3e240904cf689c362b76f, com CI 28/28 e build auditado. Os hashes desse candidato identificam somente aquela revisão. O estado final será reconstruído, auditado e identificado por novos hashes antes de promover main; tag/release/upload dependem da CI completa do commit exato em main. Os mesmos bytes auditados serão entregues na GitHub Release e no PyPI. Uma falha interrompe o fluxo antes da próxima ação externa; nenhum gate é automaticamente contornado. A documentação pública tem validação de links, conteúdo e privacidade própria antes do deploy.

Correção do gate contextual de release

A checklist permanece 80/80. Contrato do auditor: branch esperada obrigatória, dev/0.3.0 antes da promoção e main após ela, sempre com SHA exato e os 28 jobs aprovados. Oito regressões novas elevam a suíte a 1.008 testes por job; verificações de artifacts/hashes/proveniência permanecem. O commit 43a38d5accf87f77731bc2fa4170dc77125e42a7 é candidato anterior. O novo estado exige nova CI e pacotes, e permanece aguardando publicação.

Publicação verificada — 0.3.0

80/80 mantidos. O registro final identifica o commit 270405cb0030d3cb3a547f01ec78a2e3e728cd88, a tag anotada v0.3.0, CI 28/28, Trusted Publishing e os hashes finais. Os arquivos baixados do GitHub e do PyPI coincidem byte a byte com os artifacts aprovados. Instalação limpa diretamente do PyPI, imports, versão, metadata e smoke passaram. Documentação posterior tem revisão própria; não altera tag ou pacotes publicados.