История изменений ========= Версия 0.3.3b2 --------------- Добавлено ~~~~~ * Добавлена поддержка удаленного кеша для результатов расчетов ORCA через API * Добавлен класс ``RemoteCacheClient`` для взаимодействия с API сервиса удаленного кеша * Добавлена интеграция удаленного кеша в ``CacheManager`` с гибридным локальным/удаленным кешированием * Добавлены параметры ``cache_server_url``, ``cache_api_token``, ``cache_timeout`` и ``cache_only`` в класс ``Orca`` * Добавлены параметры CLI ``--cache_server_url``, ``--cache_api_token``, ``--cache_timeout`` и ``--cache_only`` для настройки удаленного кеша * Добавлен параметр ``cache_only`` в класс ``ORCABatchProcessing`` для включения режима только кеша (без расчетов ORCA, только использование закешированных результатов) * Добавлена зависимость ``requests>=2.28.0`` для HTTP API коммуникации * Добавлена комплексная обработка ошибок для операций удаленного кеша: * ``RemoteCacheError`` для общих ошибок API * ``RemoteCachePermissionError`` для ошибок доступа (can_read/can_upload) * Правильная обработка HTTP ошибок (401, 403, 404, 500, таймауты, сетевые ошибки) * Корректная обработка ограничений скорости и ошибок сервера * Добавлены интеграционные тесты для функциональности удаленного кеша: * Тесты инициализации клиента и подключения * Тесты проверки прав доступа * Тесты загрузки и получения кеша * Тесты интеграции с расчетами ORCA * Тесты обработки ошибок и отката * Тесты пакетной обработки с удаленным кешем Изменено ~~~~~~~ * Улучшен ``CacheManager`` для поддержки гибридного кеширования (локальный + удаленный): * Сначала проверяется локальный кеш, затем удаленный, если доступен * Записи удаленного кеша автоматически загружаются и сохраняются локально при обнаружении * Записи локального кеша автоматически загружаются на удаленный сервер после сохранения * ``input_parameters`` теперь извлекаются из ответов удаленного кеша и сохраняются в локальном индексе кеша * Улучшена система кеширования для корректной обработки сбоев удаленного кеша без прерывания расчетов * Обновлен ``RemoteCacheClient`` для поддержки методов аутентификации ``X-API-Key`` (по умолчанию) и ``Authorization: Bearer`` * Улучшен парсинг ошибок для извлечения детальных сообщений об ошибках из ответов API * Улучшен процесс получения кеша: сначала проверяется существование кеша, затем загружается файл, если доступен * Улучшена производительность пакетной обработки за счет реализации предварительной проверки кеша для всех молекул: * Все молекулы проверяются на наличие кеша (локального и удаленного) перед началом расчетов * Кешированные молекулы обрабатываются сразу и исключаются из дальнейших расчетов * Отображается статистика о количестве найденных в кеше молекул и исключенных из расчетов * Это значительно ускоряет пакетную обработку, когда многие молекулы уже находятся в кеше * Улучшена интеграция кеша в пакетной обработке: * Удаленный кеш проверяется автоматически, если предоставлен API токен * Кешированные результаты из локального и удаленного кеша обрабатываются сразу * Улучшена отчетность о прогрессе со статистикой кеша * Добавлена поддержка режима только кеша: * При ``cache_only=True`` используются только закешированные результаты (расчеты ORCA не выполняются) * Молекулы, не найденные в кеше, возвращают ``None`` для дескрипторов вместо запуска расчетов * Полезно для быстрого получения результатов из кеша без выполнения дорогостоящих расчетов Технические детали ~~~~~~~~~~~~~~~~~ * Удаленный кеш работает прозрачно - закешированные результаты с сервера работают так же, как локальный кеш * Если удаленный кеш недоступен или не работает, система переключается на локальное кеширование * Аутентификация API токена поддерживает как заголовок ``X-API-Key`` (рекомендуется для программного доступа), так и токен ``Authorization: Bearer`` * Удаленный кеш поддерживает операции чтения и загрузки с проверкой прав доступа * Таймаут кеша настраивается (по умолчанию: 30 секунд) * Все ошибки удаленного кеша логируются как предупреждения, позволяя расчетам продолжаться с локальным кешем * Пакетная обработка полностью поддерживает удаленный кеш - расчеты кешируются и извлекаются с удаленного сервера при доступности * Операции кеша используют API v1 endpoints: ``/api/v1/cache/check``, ``/api/v1/cache/upload``, ``/api/v1/cache/{cache_id}/files/{filename}`` * Предварительная проверка кеша в пакетной обработке происходит до начала любых расчетов, позволяя немедленно обработать кешированные молекулы * Кешированные молекулы исключаются из очередей расчетов, уменьшая ненужную работу * Статистика кеша помогает пользователям понять, сколько расчетов было пропущено из-за кеширования * Работает бесшовно как в последовательном, так и в режиме multiprocessing Версия 0.3.4 ------------- Добавлено ~~~~~ * Добавлена команда CLI ``clear`` для удаления всех файлов ORCA в рабочей директории (полезно для очистки файлов, которые не были удалены из-за ошибок) * Добавлена команда CLI ``purge_cache`` для удаления кеша ORCA Изменено ~~~~~~~ * Улучшена система кеширования для сохранения оригинальных расширений файлов (`.out`, `.log`, `.smd.out`) при сохранении файлов * Улучшен парсинг энергий стабилизации NBO с более информативными сообщениями об ошибках, указывающими на необходимость переменной окружения NBOEXE * Обновлен тест для индексов Майера AM1 для учета различных значений по сравнению с методами DFT Удалено ~~~~~~~ * Удален дескриптор ESP экстремумов (``get_esp_extrema``) - не реализован из-за ограничений ORCA 6.0.1 для прямой генерации файлов ESP cube (потребовалась бы интеграция с утилитой orca_plot) Исправлено ~~~~~ * Исправлена проблема системы кеширования, когда файлы сохранялись с расширением `.out` независимо от оригинального расширения, что вызывало ошибки "файл не найден" * Исправлен парсинг энергий стабилизации NBO для правильного определения, когда переменная окружения NBOEXE не установлена * Исправлен парсинг химических сдвигов NMR для корректной работы с закешированными файлами * Исправлен тест для индексов Майера AM1 для принятия различных диапазонов значений по сравнению с DFT Технические детали ~~~~~~~~~~~~~~~~~ * Кеш теперь сохраняет оригинальные расширения файлов для обеспечения правильного извлечения файлов * Анализ NBO требует установки переменной окружения NBOEXE, указывающей на исполняемый файл NBO (nbo6.exe или nbo5.exe) * Расчет ESP экстремумов потребовал бы интеграции с утилитой orca_plot, которая в настоящее время не реализована * Команды CLI ``clear`` и ``purge_cache`` помогают поддерживать чистые рабочие директории и управление кешем Версия 0.3.3 ------------- Изменено ~~~~~~~ * Крупный рефакторинг кода: разделение большого файла ``orca.py`` (1620 строк) на модульную структуру: * Создан ``base.py`` с классом ``OrcaBase``, содержащим общие вспомогательные методы * Создан ``calculation.py`` с миксином ``CalculationMixin`` для методов выполнения расчетов * Создан ``decorators.py`` с декоратором ``handle_x_molecule`` * Дескрипторы разделены на отдельные модули по категориям: * ``descriptors/electronic.py`` - Электронные дескрипторы * ``descriptors/energy.py`` - Энергетические дескрипторы * ``descriptors/structural.py`` - Структурные дескрипторы * ``descriptors/topological.py`` - Топологические дескрипторы * ``descriptors/misc.py`` - Прочие дескрипторы * Основной класс ``Orca`` теперь использует множественное наследование от миксинов * Улучшена организация кода и поддерживаемость * Удалены избыточные комментарии по всему коду Технические детали ~~~~~~~~~~~~~~~~~ * Новая модульная структура упрощает расширение функциональности и поддержку кода * Дескрипторы организованы по категориям для лучшей навигации по коду * Вся функциональность остается обратно совместимой Версия 0.3.0 ------------- Добавлено ~~~~~ * Добавлен новый класс ``ORCABatchProcessing`` для эффективной пакетной обработки молекулярных дескрипторов с поддержкой pandas * Добавлена поддержка полуэмпирических методов (AM1, PM3, PM6, PM7, RM1, MNDO, MNDOD, OM1, OM2, OM3) * Добавлен параметр ``pre_optimize`` (по умолчанию: ``True``) для предварительной оптимизации геометрии молекулы с помощью силового поля MMFF94 перед расчетами ORCA * Добавлена поддержка multiprocessing для параллельной пакетной обработки через параметр ``parallel_mode="multiprocessing"`` * Добавлена автоматическая очистка всех временных файлов ORCA (входные, выходные и все временные файлы) после расчетов, так как результаты кешируются * Добавлен улучшенный парсинг ошибок с краткими сообщениями в ``logging.INFO`` и детальной информацией в ``logging.DEBUG`` * Добавлен метод ``_pre_optimize_geometry()`` для оптимизации геометрии с помощью MMFF94 * Добавлен метод ``_is_semi_empirical()`` для определения полуэмпирических методов Изменено ~~~~~~~ * Рефакторинг функциональности пакетной обработки из ``Orca.calculate_descriptors()`` в отдельный класс ``ORCABatchProcessing`` * ``Orca.calculate_descriptors()`` теперь использует ``ORCABatchProcessing`` внутри для обратной совместимости * ``calculate_descriptors()`` теперь сохраняет исходные колонки DataFrame (включая 'smiles') вместо их удаления и повторного добавления * Улучшен расчет хеша молекулы для включения параметра ``pre_optimize`` для правильного кеширования * Обновлен расчет хеша молекулы для исключения ``basis_set`` и ``dispersion_correction`` для полуэмпирических методов * Улучшена генерация входных файлов для поддержки полуэмпирических методов (не требуется базисный набор или дисперсионная коррекция) * Улучшена очистка файлов для удаления всех файлов ORCA (включая входные и выходные файлы), так как результаты кешируются Исправлено ~~~~~ * Исправлена обработка DataFrame в пакетной обработке для сохранения всех исходных колонок * Исправлена обработка ошибок для предоставления кратких сообщений об ошибках на уровне INFO и детальной информации на уровне DEBUG Технические детали ~~~~~~~~~~~~~~~~~ * ``ORCABatchProcessing`` поддерживает три режима распараллеливания: "sequential", "multiprocessing" и "mpirun" * Предоптимизация использует силовое поле MMFF94 из RDKit для быстрой оптимизации геометрии перед квантово-химическими расчетами * Все файлы ORCA автоматически очищаются после успешных расчетов, результаты сохраняются в кеше * Полуэмпирические методы автоматически определяются и обрабатываются иначе, чем методы DFT * Пакетная обработка теперь включает оценку времени на основе производительности benchmark-машины Версия 0.2.2 -------------- Добавлено ~~~~~ * Добавлено ``numpy>=1.20.0`` to project dependencies (numpy was used but not declared) * Добавлено dynamic time estimation updates in batch processing - time estimates are now refined based on actual execution times of previous molecules * Добавлено ``_get_available_descriptors()`` method to dynamically discover available descriptor methods Изменено ~~~~~~~ * Обновлен парсер дипольного момента для приоритизации газофазных значений при их наличии (для расчетов без сольватации) * Улучшен алгоритм оценки времени: * Изменено scaling exponent from O(N^3.5) to O(N^2.5) for more realistic estimates * Используется ``total_time`` из benchmark вместо ``scf_time`` как базовая единица * Более реалистичная оценка шагов оптимизации (15-35 шагов вместо 10-50) * Удален искусственный предел в 24 часа * Рефакторинг метода ``calculate_descriptors()``: * Убрано дублирование кода (заменена большая цепочка if-elif на вызовы методов через ``getattr``) * Удален избыточный список ``all_descriptors`` - дескрипторы теперь обнаруживаются динамически * Удалены ненужные комментарии * Улучшена поддерживаемость и читаемость кода Исправлено ~~~~~ * Исправлено dipole moment parser to correctly extract gas-phase values from ORCA output when available * Исправлено time estimation showing unrealistic values (e.g., 47 hours for 2 molecules) - now provides accurate estimates based on actual benchmark data Технические детали ~~~~~~~~~~~~~~~~~ * Оценщик времени теперь использует экспоненциальное скользящее среднее для лучшей точности прогнозирования * Методы дескрипторов вызываются динамически с использованием ``getattr(self, desc_name)`` * Автоматическое обнаружение дескрипторов устраняет необходимость поддерживать списки дескрипторов вручную