Совместимость и миграция¶
- Статус: подготовленный контракт кандидата в релиз
2.0.0 - Определяющее решение: ADR-0001
- Наблюдаемый интерфейс 1.0.3: снимок исторического публичного API
- Реализованный интерфейс v2: инвентаризация публичного API
- Изменения релиза: миграция с 1.0.3 на планируемый 2.0.0
Это каноническая отправная точка для выбора 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-таблиц на этой странице.