Работа с ВСПТД
Project description
Модуль не поддерживает всю спецификацию ВСПТД!
ВСПТД — виртуальное строковое пространство технологических данных — описывает специальный способ организации баз знаний и баз данных. Подробнее узнать о спецификации можно в следующих пособиях:
ВИРТУАЛЬНОЕ СТРОКОВОЕ ПРОСТРАНСТВО ТЕХНОЛОГИЧЕСКИХ ДАННЫХ И ЗНАНИЙ. Методы представления данных. Филиппов А. Н.
ПРИМЕНЕНИЕ МЕТОДОВ ВИРТУАЛЬНОГО СТРОКОВОГО ПРОСТРАНСТВА ТЕХНОЛОГИЧЕСКИХ ДАННЫХ И ЗНАНИЙ В САПР ТП. А.Н. Филиппов, А.А. Путинцева
Зависимости
Python 3
Установка
pip install vsptd
Установка из файла
pip install <имя файла> Например: pip install vsptd-1.2.0-py3-none-any.whl
Обновление
pip install vsptd -U
Структура проекта
README.md — документация
CHANGES.md — описание изменений во всех версиях модуля
setup.py — файл с настройками сборки модуля
unittests/ — юнит-тесты для библиотеки
support_files/ — вспомогательные файлы
Модуль состоит из следующих основных единиц:
Trp — класс триплета
TrpStr — класс триплетнной строки
parse_trp_str() — функция парсинга триплетнной строки из str в TrpStr
check_condition() — функция осуществляет проверку истинности условия, включающего в себя триплеты
Различные регулярные выражения для проверки триплетов и их составляющих
В процессе работы с модулем могут вызваны различные исключения, о которых можно почитать в описании соответствующих классов, методов, функций **в коде*.*
Trp
Класс триплета.
Принимает:
prefix (str) - префикс триплета
name (str) - имя триплета
value (str, int, float) - значение триплета
Примеры работы
Создание
my_trp = Trp('E', 'NM', 'Сверло')
my_trp2 = Trp('E1', 'NM', 'Зенкер')
Обращение к свойствам
>>> my_trp.prefix
'E'
>>> me_trp.name
'NM'
>>> my_trp.value
'Сверло'
Перевод в строку, вывод
>>> str(my_trp) "$E.NM='Сверло';" >>> print(my_trp) $E.NM='Сверло';
Проверка на равенство
>>> my_trp == my_trp2
False
>>> my_trp != my_trp2
True
Сложение
>>> str(my_trp + my_trp2)
"$E.NM='Сверло';$E1.NM='Зенкер';" # объект класса TrpStr
TrpStr
Класс триплетнной строки
Принимает:
*triplets (Triplet) - триплеты
Примеры работы
Создание
>>> my_trp_str = TrpStr(Trp('E', 'NM', 'Сверло'), Trp('E1', 'NM', 'Зенкер'))
>>> triplets = [Trp('E2', 'NM', 'Отвёртка'), Trp('E3', 'NM', 'Топор')]
>>> my_trp_str2 = TrpStr(*triplets)
Длина триплетнной строки
>>> len(my_trp_str)
2
Перевод в строку, вывод
>>> str(my_trp_str) "$E.NM='Сверло';$E1.NM='Зенкер';" >>> print(my_trp_str) $E.NM='Сверло';$E1.NM='Зенкер';
Сложение
>>> my_trp = Trp('E4', 'NM', 'Развёртка') >>> print(my_trp + my_trp_str) $E4.NM='Развёртка';$E.NM='Сверло';$E1.NM='Зенкер'; # объект класса TrpStr >>> print(my_trp_str + my_trp) $E.NM='Сверло';$E1.NM='Зенкер';$E4.NM='Развёртка'; # объект класса TrpStr >>> print(my_trp_str + my_trp_str2) $E.NM='Сверло';$E1.NM='Зенкер';$E2.NM='Отвёртка';$E3.NM='Топор'; # объект класса TrpStr
Существует метод add практически эквивалентный сложению через оператор “+”. Отличие в том, что данный метод не возвращает новый изменённый объект, а только изменяет нынешний.
>>> my_trp_str.add(my_trp_str2) >>> print(my_trp_str) $E.NM='Сверло';$E1.NM='Зенкер';$E2.NM='Отвёртка';$E3.NM='Топор';
Проверка на равенство
>>> my_trp_str == my_trp_str2
False
Проверка вхождения триплета в триплетнную строку
>>> my_trp = Trp('E4', 'NM', 'Развёртка')
>>> my_trp_str = TrpStr(Trp('E', 'NM', 'Сверло'), Trp('E1', 'NM', 'Зенкер'))
>>> my_trp in my_trp_str
False
>>> Trp('E', 'NM', 'Сверло') in my_trp_str
True
Итерация, распаковка
>>> for trp in my_trp_str: print(trp) $E.NM='Сверло'; $E1.NM='Зенкер'; >>> TrpStr(*my_trp_str) == my_trp_str True
Доступ к элементам триплетнной строки по индексу/срезу или по ключу
Принимает:
(str) - ключ
ключ формата ‘префикс’ -> TrpStr с триплетами, имеющими данный префикс
ключ формата ‘префикс.имя’ или ‘$префикс.имя’ -> значение триплета
(list/tuple)
префикс и имя в кортеже (prefix, name) или в списке [prefix, name] -> значение триплета
иначе - индекс/срез
-> TrpStr по заданному индексу/срезу
Примеры:
trpStr[2]
trpStr[1:5]
trpStr['E']
trpStr['E.NM']
trpStr['$E.NM']
TrpStr[('E', 'NM')]
TrpStr[['E', 'NM']]
Удалить триплет из триплетнной строки по значениям префикса и имени
>>> my_trp_str = TrpStr(Trp('E', 'NM', 'Сверло'), Trp('E1', 'NM', 'Зенкер'), Trp('E2', 'NM', 'Отвёртка')) >>> my_trp_str.del_trp('E', 'NM') >>> print(my_trp_str) $E1.NM='Зенкер';$E2.NM='Отвёртка';
Удалить из триплетнной строки все триплеты с заданным префиксом
>>> my_trp_str = TrpStr(Trp('E', 'NM', 'Сверло'), Trp('E1', 'NM', 'Зенкер'), Trp('Q', 'PI', 3.14)) >>> my_trp_str.del_trp_pref('E') >>> print(my_trp_str) $E1.NM='Зенкер';$Q.PI=3.14;
parse_trp_str()
Парсинг триплетнной строки из str в TrpStr Вернёт параметр strto_parse без изменений, если он будет TrpStr_
Принимает:
str_to_parse (str) - строка для парсинга
Возвращает:
(TrpStr) - распарсенная строка
>>> parse_trp_str("$E.NM='Сверло';$E1.NM='Зенкер';")
check_condition()
Функция check_condition осуществляет проверку истинности условия, включающего в себя триплеты.
Алгоритм заменяет триплеты, указанные в условии соответствующими значениями, затем проверяет истинность условия. Триплеты, указанные без префикса “$”, заменяются соответствующими значениями, указанными в параметре trp_str_from_db
Принимает:
trp_str (str или TrpStr) - триплетнная строка
cond (str) - условие
trp_str_from_db (str или TrpStr) необязательный - триплетнная строка по данным из базы данных
Возвращает:
(bool) - результат проверки условия
Вызывает исключение TypeError, если:
триплескная строка/триплетнная строка по данным из БД/условие не является строкой или TrpStr
Вызывает исключение ValueError, если:
получена пустая строка вместо условия
триплет из условия не найден в триплетнной строке или в триплетнной строке по данным из БД
в условии не соблюден баланс скобок
Примеры работы
Исходная триплетнная строка
$E.NST=1;$E.KRM=1;$E.KTS='211051';$E.VI=35;$Е.NI=1;$L.D=3.5;$L.L=10;$L.KW=12;$L.WOB=27;$M.PGM=3;$O.GRO='20001';$P.SE='221440';$Q.PI=3.14159;$Q.X=0.973;$Q.Y=0.7854;
Триплетная строка по данным из базы
$E.NST=5;$E.KRM=3;$E.KTS=1;$E.VI=325;$Е.NI=1;
Условие I
SIN($Q.PI/2)>COS($Q.PI/3)
Результат: True
Условие II
(SIN($Q.X)*SIN($Q.X)+COS($Q.X)*COS($Q.X))>1
Результат: False
Условие III
($L.WOB=25 ИЛИ $L.WOB=27) И НЕТ($L.TT)
Результат: True
Условие IV
$E.KTS='21' И ($O.GRO<>'10000' И $O.GRO<>'10001')
Результат: False
Условие V
E.NST > 2 И $E.KTS='211051'
Результат: True
Особенности работы
Функции
Названия данных функций в условии могут быть определены как в нижнем регистре, так и в верхнем.
sin
cos
tan
acos
atan
sinh
cosh
tanh
sqrt
exp
ln
log
strcat
min
max
abs
есть
нет
Операторы
Операторы сравнения: =, ==, <>, !=, >, <, >=, <=
Логические операторы: и, или, and, or
Математические операторы: ^, **, *, /, +, -
Логические операторы могут быть определены как в нижнем регистре, так и в верхнем. Также они **обязательно* должны быть обособлены пробелами.*
Регулярные выражения
WODS - without dollar sign (‘:math:`’)_ _NI - not isolated by ‘^’ and ‘`‘
RE_PREFIX - префикс
RE_NAME - имя
RE_VALUE - значение
RE_PREFIX_NAME_WODS_NI - префикс.имя
RE_PREFIX_NAME_WODS - префикс.имя
RE_PREFIX_NAME_NI - $префикс.имя
RE_PREFIX_NAME - $префикс.имя
RE_TRIPLET_WODS - префикс.имя=значение;
RE_TRIPLET - $префикс.имя=значение;
С помощью файла ``support_filesmake_regexs.py`` можно удобно создавать свои регулярные выражения.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.