Files
Escalante-Pastor/scripts/09_testar_instalacao.py
2026-06-26 18:15:55 -03:00

64 lines
2.2 KiB
Python

"""Teste rápido de instalação do Planejador Missão.
Entradas:
Ambiente Python atual, dependencias instaladas e arquivos em dados/.
Saídas:
Diagnóstico amigável no terminal e log em logs/execucao.log.
Papel no pipeline:
Permite verificar rapidamente se o computador está pronto para executar o
planejador e o solver HiGHS/scipy.optimize.milp.
"""
from __future__ import annotations
import importlib
import sys
import numpy as np
from scipy.optimize import Bounds, LinearConstraint, milp
config = importlib.import_module("01_config")
io_utils = importlib.import_module("02_io_utils")
def testar_solver_minimo() -> None:
"""Resolve um MILP minimo para comprovar que scipy.optimize.milp funciona."""
c = np.array([-1.0, -2.0])
integrality = np.ones(2)
bounds = Bounds([0, 0], [1, 1])
constraints = [LinearConstraint([[1, 1]], -np.inf, 1)]
result = milp(c=c, integrality=integrality, bounds=bounds, constraints=constraints)
if not result.success:
raise RuntimeError(f"Erro: teste minimo do solver falhou: {result.message}")
def main() -> None:
"""Executa todas as verificacoes de ambiente."""
logger = io_utils.configurar_logger("teste_instalacao")
print(f"Python encontrado: {sys.version.split()[0]}")
for pacote in ["pandas", "numpy", "openpyxl", "scipy"]:
importlib.import_module(pacote)
print(f"Biblioteca OK: {pacote}")
config.garantir_diretorios()
for diretorio in [config.DADOS_DIR, config.RESULTADOS_DIR, config.SRC_DIR, config.LOGS_DIR, config.TEMP_DIR]:
if not diretorio.exists():
raise RuntimeError(f"Erro: diretorio obrigatorio ausente: {diretorio}")
print(f"Diretorio OK: {diretorio.name}")
cadastro = config.ARQUIVO_CADASTRO_LOCAL if config.ARQUIVO_CADASTRO_LOCAL.exists() else config.ARQUIVO_CADASTRO_ORIGINAL
io_utils.exigir_arquivos([cadastro, *config.ARQUIVOS_ENTRADA_OBRIGATORIOS])
print("Arquivos de entrada OK")
testar_solver_minimo()
print("Solver scipy.optimize.milp/HiGHS OK")
logger.info("Teste de instalacao concluido com sucesso.")
print("Ambiente OK para executar o Planejador Missão.")
if __name__ == "__main__":
main()