Skip to content

Finite, Shape и Index

Андрей Мулик edited this page Oct 4, 2023 · 3 revisions

Finite, Shape и Index

Shape - класс координат n-мерного ассоциативного массива, которые могут быть разделены на компоненты Index - класс границ и индексов n-мерного ассоциативного массива (без пропусков)

Finite aka. (:&) - тип универсального n-мерного индекса

Историческая справка

Изначально класс Shape создавался как вспомогательный, т.к. система типов плохо реагировала на рекурсию в ограничениях класса. В sdp-0.3 класс расширился за счёт семества типов Rank, и его математический смысл стал несколько яснее.

В sdp-0.2 ограничение SubIndex было Constraint-синонимом закрытого класса SDP.Index.Sub. В sdp-0.3 Constraint-синоним был удалён, SDP.Index.Sub переименован в SubIndex, а его функции реэкспортированы с теми не именами независимо от класса.

В sdp-0.2 в модуле SDP.Shape были добавлены ограничения RANKN sh (RANK0 sh .. RANK15 sh), которые проверяли количество компонент n-мерного индекса sh путём сравнения его унифицированного представления (GIndex sh) с типами IN sh (I2 sh .. I15 sh). В sdp-0.3 на смену RANKN sh пришли ограничения RankN sh (Rank0 sh .. Rank15 sh), которые определяют количество компонент n-мерного индекса. Хотя оба варианта равнозначны, подход sdp-0.3 кажется более понятным и универсальным.

В sdp-0.3 тип результата функции sizesOf изменился на SizeOf. Ранее она возвращала список длины n расстояний между каждой парой 1-мерных компонент n-мерных границ.

API

МодульSDP.Shape

Функция Описание Добавлен
toGBounds toGIndex для пары границ sdp-0.2
fromGBounds fromGIndex для пары границ sdp-0.2
rank# Вариант rank##, возвращающий n# :: Int# для индекса (а не Proxy) sdp-0.3
rank Вариант rank##, возвращающий n :: Int для индекса (а не Proxy) sdp-0.3

Семейства типов

Тип Описание Класс Добавлен
GIndex Тип индекса (:&), соответствующего данному sdp-0.2
DimLast Тип последнего 1-мерного компонента n-мерной координаты Shape sdp-0.2
DimInit Тип (n-1)-мерного компонента n-мерной координаты, из которого исключена последняя 1-мерная компонента Shape sdp-0.2
Rank n - число компонент n-мерной координаты Shape sdp-0.3

Класс Shape

Метод Описание Добавлен Удалён
fromGIndex Получает индекс из (:&) sdp-0.2
toGIndex Получает (:&) из индекса sdp-0.2
rank Возвращает n - число компонент n-мерной координаты sdp-0.2 sdp-0.3
rank## Возвращает n# - число компонент n-мерной координаты sdp-0.3
lastDim Возвращает DimLast от данного индекса sdp-0.2
initDim Возвращает DimInit от данного индекса sdp-0.2
consDim Создаёт n-мерный индекс из 1-мерной и (n - 1)-мерной компонент sdp-0.2
unconsDim Разделяет n-мерный индекс на 1-мерную и (n - 1)-мерную компоненты sdp-0.2

МодульSDP.Index

Функция Описание Добавлен
takeDim Возвращает k-мерную компоненту данного n-мерного индекса, исключая последние (n-k) компонент (0 <= k <= n) sdp-0.2
dropDim Возвращает (n-k)-мерную компоненту данного n-мерного индекса, исключая первые k компонент (0 <= k <= n) sdp-0.2
joinDim Создаёт n-мерный индекс из l-мерной и (n - k)-мерной компонент (0 <= k <= n) sdp-0.2
splitDim Разделяет n-мерный индекс на l-мерную и (n - k)-мерную компоненты (0 <= k <= n) sdp-0.2
offsetIntegral Определение по умолчанию для offset, если индекс - Integral sdp-0.2
defaultBoundsUnsign Определение по умолчанию для defaultBounds, если индекс - Bounded sdp-0.2
Тип Описание Добавлен
InBounds Тип результата inBounds sdp-0.2

Семейства типов

Тип Описание Добавлен
SizesOf Размер множества значений в указанных границах - в разрезе компонент, представлен n-мерным вектором sdp-0.3
SubIndex k-мерная часть n-мерного индекса (0 <= k <= n) sdp-0.2
(:|:) Разность двух типов размерности n и m (m <= n) sdp-0.2

Класс Index

Метод Описание Добавлен
size Возвращает полный размер структуры с указанными границами sdp-0.2
sizes Возвращает вектор расстояний между каждой парой 1-мерных компонент в n-мерных границах sdp-0.2
safeElem Возвращает данный индекс, если он находится в указанных границах, или ближайший граничный sdp-0.2
ordBounds Возвращает данные границы, если они непустые, или меняет их местами sdp-0.2
defLimit Возвращает максимальное количество элементов, которые могут поместиться между наименьшей и наибольшей границами, или Nothing, если ограничений нет sdp-0.2
defaultBounds Возвращает границы, в которых находится указанное число элементов sdp-0.2
rangeBounds Возвращает минимальные границы, в которых могут находиться все указанные индексы sdp-0.2
extendBounds Расширяет границы, чтобы в них попадал указанный индекс sdp-0.2
unsafeIndex Преобразует число в n-ый индекс в границах defaultBounds n sdp-0.2
unsafeIndex' unsafeIndex для Integer sdp-0.3
isEmpty Проверяет, что в указанных границах нет ни одного элемента sdp-0.2
inBounds Аналогична последовательной проверке на isEmpty, isUnderflow и isOverflow sdp-0.2
isOverflow Проверяет, что элемент выходит за верхнюю границу sdp-0.2
isUnderflow Проверяет, что элемент выходит за нижнюю границу sdp-0.2
inRange Проверяет, что элемент выходит за нижнюю границу sdp-0.2
prev Возвращает предыдущий индекс по порядку в указанных границах или нижнюю границу sdp-0.2
next Возвращает следующий индекс по порядку в указанных границах или верхнюю границу sdp-0.2
offset Определяет порядковый номер индекса в указанных границах sdp-0.2
index Определяет индекс по порядковому номеру в указанных границах sdp-0.2
range Возвращает все индексы в указанных границах sdp-0.2
subshape Проверяет, что обе n-мерные границы начинаются с указанного k-мерного компонента и их можно усечь до (n-k)-мерных (0 <= k <= n) sdp-0.2
slice Разбивает n-мерные границы на k-мерные, включающие указанных индекс, и (n-k)-мерные (0 <= k <= n) sdp-0.2