Примечания к миграции с 1.0.3 на 2.0.0¶
Здесь описан подготовленный кандидат 2.0.0; стабильный релиз
по-прежнему требует проверки готовности человеком.
Материал дополняет журнал изменений,
руководство по совместимости
и исполняемые примеры перехода с исторического API на современный.
Перед обновлением¶
Используйте CPython 3.13 или 3.14 и проверяйте приложение на его фактическом интерпретаторе.
Python 3.12 и более ранние версии не входят в обещание поддержки v2.
Исторический классификатор Python 3.6 не переносится. Метаданные пакета теперь задаёт
pyproject.toml; используются стандартные сборки wheel и исходного дистрибутива.
Исторический setup.py больше не отвечает за генерацию версии.
Текущий код, принадлежащий проекту, использует Apache-2.0 вместо исторической лицензии MIT.
При распространении сохраняйте LICENSE, NOTICE, применимые сведения об авторских правах
и указания авторства. Неизменяемая база 1.0.3 сохраняет исходную лицензию.
См. лицензирование и происхождение.
Импорты и исторические вызовы¶
Продолжайте импортировать исторические классы и операторы из fuzzyroutines.FuzzyRoutines.
Корневой пакет fuzzyroutines предоставляет отобранный современный API.
Экспорт фасада через звёздочку содержит пятнадцать поддерживаемых функций и классов,
а не все импортированные вспомогательные объекты. Приложения, ранее получавшие math,
copy или другие вспомогательные модули через такой импорт, должны импортировать
эти модули стандартной библиотеки напрямую; атрибуты фасада math и copy также удалены.
Защищённые имена и формы вызова поддерживаются, включая Defuz(), Fuzzy(),
GetLevelByName() и исторические идентификаторы функций принадлежности.
Сохраняйте историческое соответствие треугольника a=left, b=right, c=peak.
При переходе к современным фабрикам Triangle(left, peak, right) или Trapezoid
преобразуйте параметры явно: перенос позиционных значений между соглашениями может изменить форму.
Выделение фасада сохраняет исторические модульные идентичности классов и функций; оно проверено сериализацией и десериализацией новых pickle и настоящим образцом, созданным до выделения. Это свидетельство совместимости выделения, а не произвольной переносимости pickle между версиями Python. Исторические имена и изменяемые словари уровней остаются наблюдаемыми; инвентаризация наблюдаемого интерфейса указывает имена с тестами сверх более узкого защищённого контракта ADR-0001.
Входные данные, теперь вызывающие явную ошибку¶
Проверьте ввод приложения до обновления: некорректные значения больше не дают внешне
правдоподобный результат при ошибке. Следующие численные ограничения относятся к историческому
фасаду; более широкий современный контракт MembershipScalar описан
в политике конечных скаляров.
- Скалярные степени принадлежности должны быть конечными
intилиfloatиз[0, 1]. Логические значения, NaN, бесконечность, строки и массивоподобный ввод отклоняются. - Координаты принадлежности должны быть конечными небулевыми скалярами
intилиfloat; значения вне[0, 1]допустимы как координаты. Создание и замена параметров требуют ровно объявленных конечных параметров семейства и допустимой геометрии. Сохранённые изменяемые таблицы параметров не позволяют неявно вычислять повреждённое состояние как ноль. - Композиция с переменным числом аргументов требует хотя бы один операнд, проверяет каждый
и отклоняет неизвестные семейства.
FuzzyNOTтребуетalphaиз(0, 1), аFuzzyNOTParabolic— из[1/4, 3/4]. - Уровни шкалы должны иметь обязательные поля; имена, совпадающие при регистронезависимом поиске, отклоняются. Используйте уникальные полные имена, не полагаясь на неоднозначный поиск.
Исторические ошибки остаются конкретными встроенными исключениями. Современные категории
доступны из fuzzyroutines.exceptions и сохраняют применимые перехваты TypeError,
ValueError и ArithmeticError. Произвольные исключения пользовательских функций
принадлежности распространяются без преобразования в ноль или переклассификации.
См. PR #274
и реестр исправленных ошибок.
Численные результаты и сохранённые настройки¶
FuzzySet.Defuz() и defuzValue теперь пересчитываются по текущим параметрам
принадлежности и границам supportSet. Границы — конечный интервал интегрирования,
а не математическое множество поддержки. Аналитические моменты заменяют фиксированную
выборку для поддерживаемых семейств; остальные вычислители используют адаптивное интегрирование.
Обновите проверки, зависевшие от устаревшего центроида или удалённого результата метода
правых прямоугольников на 1000 точках. Для записанных исторических контрольных случаев
граница абсолютного сравнения равна 5e-4; это не универсальное обещание погрешности.
Нулевая площадь не имеет центроида и вызывает ValueError через исторический фасад
вместо косвенного ZeroDivisionError старой выборочной суммы; обновите соответствующие
обработчики исключений. Современные неопределённые результаты имеют явную категорию ошибок;
неразрешившееся адаптивное интегрирование вызывает CentroidConvergenceError.
Обрабатывайте ошибки, не подставляя середину интервала или старое кэшированное значение.
Современная CentroidPolicy управляет точностью и объёмом работы. MFunction.accuracy
остаётся доступным для записи, но игнорируется центроидом; сохранённый epsilon
у FuzzyNOTParabolic больше не управляет аналитическим вычислением.
Вычисление Bell сохраняет таблицу параметров. Исторический Fuzzy() по-прежнему выбирает
более поздний максимум, включая равенство всех нулевых степеней, и возвращает исходный
словарь уровня. Исторический регистронезависимый поиск использует полные имена в верхнем
регистре, современный — свёртку регистра Unicode. Современная фаззификация явно задаёт
отсутствие совпадения и политики равенства first, last или all.
Не заменяйте исторические правила выбора современными значениями по умолчанию неявно.
Постепенный переход к современным API¶
Используйте явные универсальные множества, неизменяемые скалярные множества и фабрики принадлежности, политики операторов и отдельные области интегрирования там, где реализованный современный API покрывает операцию приложения. Точные свойства, альфа-срезы, нормализация и отношения сохраняют границы доказательств; выборочные отчёты не доказывают непрерывное поведение. Лингвистические оценки и диагностика также доступны. Существующие исторические вызовы не требуют массового переименования.
Полное руководство по миграции содержит ссылки на исполняемые примеры и объясняет каждый доступный путь. Публичная современная типизация и покрытие сигнатур задач #92 и #95 реализованы и проверяются на установленных wheel в CPython 3.13 и 3.14; см. контракт типизации. Финальный кандидат всё равно требует собственных свидетельств CI. Опциональная векторизация — принятое решение и эксперимент вне пакета, а не импортируемое вычислительное ядро. Публичные запросы выпуклости, прозрачные кэши, поддержка free-threaded и общие заявления о производительности не являются целями миграции.