"""Teste rapido de instalacao do Planejador Missao. Entradas: Ambiente Python atual, dependencias instaladas e arquivos em dados/. Saidas: Diagnostico amigavel no terminal e log em logs/execucao.log. Papel no pipeline: Permite verificar rapidamente se o computador esta 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 Missao.") if __name__ == "__main__": main()