Перейти к содержанию

Совместимость и миграция

Это каноническая отправная точка для выбора API и развития существующего кода FuzzyRoutines. Она различает узкий контракт ADR-0001 и более широкий интерфейс 1.0.3, который сейчас реализован и тестируется. Ни одна категория не сохраняет известные математические, численные ошибки, ошибки проверки ввода или устаревшего состояния.

Выбор интерфейса

Ситуация Поддерживаемая точка входа Рекомендация
Существующее приложение в стиле 1.0.3 fuzzyroutines.FuzzyRoutines Сохраняйте исторические вызовы, пока специализированный современный путь не предоставит всё используемое поведение.
Новый код с явными математическими контрактами Корневые экспорты fuzzyroutines Предпочитайте неизменяемые универсальные множества, нечёткие множества, политики, типы результатов и явные численные области.
Постепенная миграция Современные корневые экспорты и выбранные объекты совместимости Переносите по одной операции; использование MFunction как вызываемого источника сейчас поддерживается.

Для нового кода рекомендуется современный API пакета, но существующим пользователям не требуется обязательное переименование. Исторические имена поддерживаются по ADR-0001, пока более поздний утверждённый ADR не изменит этот контракт намеренно.

Исторический контракт, защищённый ADR

ADR-0001 защищает возможность импорта fuzzyroutines и fuzzyroutines.FuzzyRoutines. Исторические символы импортируются из последнего:

from fuzzyroutines.FuzzyRoutines import FuzzySet, MFunction, TNorm

Защищённый контракт символов и поведения включает:

  • операторы FuzzyNOT, FuzzyNOTParabolic, FuzzyAND, FuzzyOR, TNorm, TNormCompose, SCoNorm и SCoNormCompose;
  • классы MFunction, FuzzySet, FuzzyScale и UniversalFuzzyScale;
  • документированные методы Defuz(), Fuzzy() и GetLevelByName();
  • исторические идентификаторы принадлежности hyperbolic, bell, parabolic, triangle, trapezium, exponential, sigmoidal и desirability;
  • исторические ключевые имена, смысл и порядок параметров из контракта функций принадлежности.

Удаление или изменение контракта требует явного заменяющего или дополняющего ADR со свидетельствами влияния на потребителей. Точные сигнатуры записаны в снимке 1.0.3 и проверяются test_legacy_public_api.py и test_legacy_import_compatibility.py.

Поддерживаемый наблюдаемый интерфейс

Текущий фасад совместимости также реализует и тестирует следующие наблюдавшиеся имена 1.0.3:

  • утилиты DiapasonParser, IsNumber и IsCorrectFuzzyNumberValue;
  • члены MFunction: name, parameters, mju, accuracy, Hyperbolic(), Bell(), Parabolic(), Triangle(), Trapezium(), Exponential(), Sigmoidal() и Desirability();
  • свойства FuzzySet: name, mFunction, supportSet и defuzValue;
  • свойства FuzzyScale: name и levels;
  • свойства UniversalFuzzyScale: levelsNames и levelsNamesUpper.

Имена поддерживаются текущей реализацией и регрессионным набором, но ADR-0001 не предоставляет каждой утилите или атрибуту ту же долгосрочную защиту, что его явному контракту выше. Исторический снимок фиксирует более широкий наблюдаемый интерфейс, чтобы будущее решение о совместимости могло оценить миграционное влияние, не принимая и не отбрасывая его неявно. Вспомогательные импортированные модули, случайно доступные через исторический импорт со звёздочкой, не являются API проекта. Текущий фасад задаёт __all__ ровно из пятнадцати поддерживаемых функций и классов; math и copy больше не импортируются фасадом. Импортируйте эти стандартные модули напрямую, если старый код зависел от такой утечки.

sShoulder, gaussian, logistic и harringtonDesirability — допустимые дополнительные идентификаторы MFunction. Они выбирают те же реализации, что соответствующие исторические идентификаторы. Это необязательные удобные имена, а не обязательная замена для существующих пользователей.

Современные пути, доступные сейчас

Потребность Исторический путь Реализованный современный путь Граница
Бинарные скалярные операторы FuzzyNOT, TNorm, SCoNorm NegationPolicy, TNormPolicy, SNormPolicy Объекты политик неизменяемы и предоставляют Evaluate().
Скалярная композиция переменного числа аргументов TNormCompose, SCoNormCompose Нет специализированной n-арной замены Сохраняйте исторические функции, если нужна n-арная свёртка.
Функции принадлежности MFunction MembershipFunction, семантические фабрики вроде Triangle и MembershipCallable Современные фабрики используют явную геометрию; MFunction.mju остаётся поддерживаемым вычислителем.
Представление нечёткого множества Изменяемый FuzzySet ScalarFuzzySet с ContinuousUniverse или DiscreteUniverse supportSet — интервал интегрирования, не математическое универсальное множество или точное множество поддержки.
Алгебра множеств Скалярные операторы, применяемые кодом пользователя Complement, Intersection, Union и Difference с явными политиками Бинарные операции требуют точно совместимых универсальных множеств.
Производная информация о множестве Нет единого исторического результата DeriveProperties, SampleProperties, AlphaCut, SampleAlphaCut, Height, Normalize Точные и выборочные свидетельства имеют разные контракты результатов.
Отношения Нет специализированного исторического интерфейса EqualOnDomain, IncludedOnDomain, ComparisonPolicy, ComparisonDomain Допуск сравнения и область проверки явные.
Лингвистическое представление FuzzyScale, UniversalFuzzyScale LinguisticTerm, LinguisticScale, типы результатов фаззификации и выборочной диагностики Поиск, оценки, уверенность, политики равенства и выборочная диагностика явные.
Центроидная дефаззификация FuzzySet.Defuz(), defuzValue Centroid с ScalarFuzzySet, IntegrationDomain и необязательной CentroidPolicy Интервал интегрирования явный и конечный.

Корневой список экспортов в fuzzyroutines/__init__.py определяет, какие современные символы реализованы. Текущий статус реализации отделяет этот интерфейс от планируемой работы.

Исправленное поведение не является обещанием совместимости

Контракт совместимости сохраняет корректное использование, а не дефектные результаты. Поэтому следующие реализованные исправления могут менять ошибки или результаты, сохраняя исторические имена и формы вызова:

Исправленная область Текущее поведение
Бинарные скалярные операторы Отклоняют недопустимые, неконечные и логические операнды; функции выбора семейства отклоняют неизвестные семейства.
Композиция переменного числа аргументов Отклоняет пустой ввод, недопустимые операнды и неизвестные семейства операторов явным ValueError.
Параметрическое отрицание Проверяет доказанные области параметров; параболическое отрицание использует ограниченную аналитическую ветвь.
Создание функции принадлежности Требует точного набора конечных параметров и допустимой геометрии семейства.
Вычисление Bell Не изменяет видимую пользователю таблицу параметров.
Состояние центроида Пересчитывается по текущим параметрам принадлежности и границам интегрирования, не возвращая устаревшее состояние.
Поиск по шкале Вычисляет каждый терм один раз и сохраняет документированную политику победы более позднего терма.
Имена шкалы Требует оба ключа словаря и последовательно отклоняет имена, совпадающие при регистронезависимом поиске.

Реестр исправленных ошибок содержит историю изменений и свидетельства слияний. Будущие исправления должны добавляться туда; намеренное удаление или изменение сигнатуры требует явного ADR и процесса оценки влияния на потребителей по ADR-0001. Известные свидетельства downstream-потребителей отслеживаются отдельно в инвентаризации потребителей.

Примеры миграции

Существующий код остаётся допустимым:

from fuzzyroutines.FuzzyRoutines import FuzzySet, MFunction

membershipFunction = MFunction("triangle", a=0.0, b=1.0, c=0.5)
fuzzySet = FuzzySet(membershipFunction, supportSet=(0.0, 1.0))
centroid = fuzzySet.Defuz()

То же определение принадлежности можно связать с реализованными современными контрактами множеств и дефаззификации через MFunction.mju. В новом коде вместо этого можно использовать уже доступную неизменяемую фабрику Triangle; подробное руководство показывает её другое соглашение о параметрах:

from fuzzyroutines import Centroid, ContinuousUniverse, IntegrationDomain, ScalarFuzzySet
from fuzzyroutines.FuzzyRoutines import MFunction

membershipFunction = MFunction("triangle", a=0.0, b=1.0, c=0.5)
universe = ContinuousUniverse(0.0, 1.0, leftClosed=True, rightClosed=True)
fuzzySet = ScalarFuzzySet(universe, membershipFunction.mju)
centroid = Centroid(fuzzySet, IntegrationDomain(0.0, 1.0))

Подробные инструкции по областям приведены в руководстве миграции с исторического API на современный. Его полные исполняемые сценарии:

Запустите их с установленным пакетом:

python examples/migration/historical_compatibility.py
python examples/migration/modern_supported.py

test_migration_examples.py проверяет импорты и детерминированные результаты. Проверки документации репозитория также контролируют локальные ссылки и выравнивание Markdown-таблиц на этой странице.