Skip to main content

Работа с ВСПТД

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

vsptd-1.5.0-py3-none-any.whl (20.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page