Biblioteca de física nuclear para cálculo de decaimento radioativo
Project description
nucleonpy
nucleonpy é uma biblioteca científica em Python para cálculo, consulta, simulação e visualização de decaimento radioativo.
O pacote foi criado para facilitar análises envolvendo meia-vida, atividade remanescente, cadeias lineares de decaimento, equações de Bateman e dados nucleares obtidos a partir da IAEA.
Status: projeto em fase alpha.
Recursos
- Cálculo de quantidade ou atividade remanescente
- Simulação de cadeias lineares de decaimento radioativo
- Implementação das equações de Bateman
- Base interna de isótopos
- Metadados sobre a fonte dos dados nucleares
- Normalização automática de nomes de isótopos
- Busca de isótopos por símbolo químico
- Filtros por estabilidade e modo de decaimento
- Interface orientada a objetos com
Isotope - Visualização com Matplotlib
- Exportação de resultados para CSV e JSON
- Testes automatizados com
pytest - Análise de qualidade com
ruff - CI com GitHub Actions
Requisitos
- Python 3.11 ou superior
- Poetry
Instalação
Clone o repositório:
git clone https://github.com/prifloriano/nucleonpy.git
cd nucleonpy
Instale as dependências com Poetry:
poetry install
Também é possível instalar em modo editável com pip:
pip install -e .
Uso rápido
Consultar um isótopo
from nucleonpy import Isotope
tritio = Isotope("H-3")
print(tritio.name)
print(tritio.atomic_number)
print(tritio.half_life)
print(tritio.decay_mode)
print(tritio.is_stable)
print(tritio.decay_constant)
Normalização de nomes de isótopos
O nucleonpy aceita diferentes formas de escrever o nome de um isótopo. A entrada é normalizada automaticamente para o formato usado na base interna.
Exemplos equivalentes para trítio:
from nucleonpy import Isotope
tritio_1 = Isotope("H-3")
tritio_2 = Isotope("h-3")
tritio_3 = Isotope("h3")
tritio_4 = Isotope(" H-3 ")
print(tritio_1.name)
print(tritio_2.name)
print(tritio_3.name)
print(tritio_4.name)
Todas as chamadas acima são interpretadas como:
H-3
Exemplos equivalentes para cobalto-60:
from nucleonpy import Isotope
cobalto_1 = Isotope("Co-60")
cobalto_2 = Isotope("co-60")
cobalto_3 = Isotope("CO60")
cobalto_4 = Isotope("co60")
print(cobalto_1.name)
print(cobalto_2.name)
print(cobalto_3.name)
print(cobalto_4.name)
Todas as chamadas acima são normalizadas para:
Co-60
Calcular decaimento simples
from nucleonpy import calculate_remaining_activity
atividade = calculate_remaining_activity(
initial_amount=1000.0,
half_life_seconds=10.0,
time_elapsed_seconds=10.0,
)
print(atividade)
Após uma meia-vida, a quantidade restante será aproximadamente metade da quantidade inicial.
Calcular decaimento usando a classe Isotope
from nucleonpy import Isotope
tritio = Isotope("H-3")
atividade = tritio.get_remaining_activity(
initial_amount=1000.0,
time_elapsed=5 * 365 * 24 * 3600,
)
print(atividade)
Simular uma cadeia de decaimento
from nucleonpy import calculate_bateman_chain
resultados = calculate_bateman_chain(
initial_amount=100.0,
half_lives_seconds=[5.0, 10.0, float("inf")],
time_elapsed_seconds=20.0,
)
print(resultados)
Use float("inf") para representar um produto final estável.
Gerar gráfico da cadeia de decaimento
from nucleonpy import plot_decay_chain
fig, ax = plot_decay_chain(
initial_amount=100.0,
half_lives_seconds=[5.0, 10.0, float("inf")],
time_max_seconds=50.0,
)
fig.savefig("decay-chain.png", dpi=300)
Para exibir o gráfico imediatamente:
from nucleonpy import plot_decay_chain
plot_decay_chain(
initial_amount=100.0,
half_lives_seconds=[5.0, 10.0, float("inf")],
time_max_seconds=50.0,
show=True,
)
Busca e filtros
Listar todos os isótopos disponíveis
from nucleonpy import list_isotopes
isotopos = list_isotopes()
print(len(isotopos))
print(isotopos[:10])
Buscar isótopos por símbolo químico
from nucleonpy import get_isotopes_by_symbol
cobaltos = get_isotopes_by_symbol("Co")
print(cobaltos.keys())
Filtrar isótopos estáveis e radioativos
from nucleonpy import get_radioactive_isotopes, get_stable_isotopes
estaveis = get_stable_isotopes()
radioativos = get_radioactive_isotopes()
print(len(estaveis))
print(len(radioativos))
Filtrar por modo de decaimento
from nucleonpy import get_isotopes_by_decay_mode
beta_menos = get_isotopes_by_decay_mode("B-")
print(beta_menos.keys())
Exportação de resultados
Gerar série temporal
from nucleonpy import generate_decay_chain_series
serie = generate_decay_chain_series(
initial_amount=100.0,
half_lives_seconds=[5.0, 10.0, float("inf")],
time_max_seconds=50.0,
num_points=100,
)
print(serie[0])
Exportar para CSV
from nucleonpy import export_decay_chain_to_csv
export_decay_chain_to_csv(
path="decay-chain.csv",
initial_amount=100.0,
half_lives_seconds=[5.0, 10.0, float("inf")],
time_max_seconds=50.0,
num_points=100,
)
Exportar para JSON
from nucleonpy import export_decay_chain_to_json
export_decay_chain_to_json(
path="decay-chain.json",
initial_amount=100.0,
half_lives_seconds=[5.0, 10.0, float("inf")],
time_max_seconds=50.0,
num_points=100,
)
Fonte dos dados
A base interna de isótopos é gerada a partir da IAEA LiveChart of Nuclides.
Fonte usada pelo script de atualização:
https://www-nds.iaea.org/relnsd/v0/data?fields=ground_states&nuclides=all
O script responsável pela atualização da base está em:
scripts/fetch_iaea.py
Ele gera os arquivos:
src/nucleonpy/isotopes.json
src/nucleonpy/isotopes_metadata.json
No arquivo isotopes.json, valores null em half_life_seconds representam isótopos estáveis ou registros sem meia-vida numérica disponível na fonte.
Durante o carregamento da biblioteca, esses valores são convertidos para math.inf.
Atualizar a base de isótopos
Execute:
poetry run python scripts/fetch_iaea.py
Depois valide os arquivos JSON:
python -m json.tool src/nucleonpy/isotopes.json > /dev/null
python -m json.tool src/nucleonpy/isotopes_metadata.json > /dev/null
Desenvolvimento
Instalar dependências
poetry install
Rodar testes
poetry run pytest
A suíte de testes cobre:
- Cálculo de decaimento simples
- Validações de entrada
- Cadeias de Bateman
- Carregamento da base de isótopos
- Normalização de nomes de isótopos
- Busca e filtros
- Classe
Isotope - API pública do pacote
- Visualização com Matplotlib
- Exportação para CSV e JSON
Rodar lint com Ruff
poetry run ruff check .
Para corrigir automaticamente o que for possível:
poetry run ruff check . --fix
Rodar formatação com Ruff
poetry run ruff format .
Para apenas verificar se a formatação está correta:
poetry run ruff format --check .
Rodar validação completa
poetry run ruff format .
poetry run ruff check .
poetry run pytest
Build do pacote
Para gerar os artefatos de distribuição:
poetry build
Os arquivos serão gerados na pasta:
dist/
Para conferir se os arquivos de dados entraram no pacote:
tar -tzf dist/nucleonpy-0.1.0.tar.gz | grep isotopes
O resultado deve incluir:
src/nucleonpy/isotopes.json
src/nucleonpy/isotopes_metadata.json
Estrutura do projeto
nucleonpy/
├── .github/
│ └── workflows/
│ └── ci.yml
├── scripts/
│ └── fetch_iaea.py
├── src/
│ └── nucleonpy/
│ ├── __init__.py
│ ├── calculus.py
│ ├── core.py
│ ├── data.py
│ ├── export.py
│ ├── isotopes.json
│ ├── isotopes_metadata.json
│ └── viz.py
├── tests/
├── README.md
├── pyproject.toml
└── LICENSE
Comandos úteis
poetry install
poetry run pytest
poetry run ruff check .
poetry run ruff check . --fix
poetry run ruff format .
poetry run ruff format --check .
poetry build
Roadmap
- Estrutura inicial do pacote
- Cálculo de decaimento simples
- Cadeias de Bateman
- Base interna de isótopos
- Metadados da fonte de dados
- Visualização com Matplotlib
- Testes automatizados
- CI com GitHub Actions
- Normalização de nomes de isótopos
- Busca por símbolo químico
- Filtros por estabilidade e modo de decaimento
- Exportação de resultados
- Documentação expandida
- Publicação no PyPI
Aviso
O nucleonpy ainda está em desenvolvimento.
Os resultados devem ser validados antes de qualquer uso acadêmico, técnico, médico, industrial, regulatório ou profissional.
Licença
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nucleonpy-0.1.0.tar.gz.
File metadata
- Download URL: nucleonpy-0.1.0.tar.gz
- Upload date:
- Size: 56.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.14.6 Darwin/21.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bef92752d7c657902a3c033dd26a81736f4022e2cf2cc71246d3878f71eb393
|
|
| MD5 |
f48579ad259ce3f87fcba1786ab6099b
|
|
| BLAKE2b-256 |
c0fde8068bd48b87508a95681b737116292e13fa15afe99ad3253bf89d0e738d
|
File details
Details for the file nucleonpy-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nucleonpy-0.1.0-py3-none-any.whl
- Upload date:
- Size: 60.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.14.6 Darwin/21.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41c6b6eecabc89769c140b3734d800c20413f80295c66946106b1e206f77f5df
|
|
| MD5 |
316bca13aeca710219207f4bef7fd3b0
|
|
| BLAKE2b-256 |
108d530e3e15a85f0a84c5f0fbe83cef8a185d76b05086acfaa669d8cafad0de
|