Skip to main content

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

Project description

ВСПТД — виртуальное строковое пространство технологических данных — описывает специальный способ организации баз знаний и баз данных. Подробнее узнать о спецификации можно в следующих пособиях: * ВИРТУАЛЬНОЕ СТРОКОВОЕ ПРОСТРАНСТВО ТЕХНОЛОГИЧЕСКИХ ДАННЫХ И ЗНАНИЙ. Методы представления данных. Филиппов А. Н. * ПРИМЕНЕНИЕ МЕТОДОВ ВИРТУАЛЬНОГО СТРОКОВОГО ПРОСТРАНСТВА ТЕХНОЛОГИЧЕСКИХ ДАННЫХ И ЗНАНИЙ В САПР ТП. А.Н. Филиппов, А.А. Путинцева

Зависимости

  • Python 3.4+

Установка

pip install vsptd

Установка из файла из папки dist/

pip install <имя файла>

Например:
pip install vsptd-1.2.0-py3-none-any.whl

Обновление

pip install vsptd -U

Модуль состоит из следующих основных единиц: * Trp — класс триплета * TrpStr — класс триплексной строки * parse_trp_str() — функция парсинга триплексной строки из str в TrpStr * check_condition() — функция осуществляет проверку истинности условия, включающего в себя триплеты.

В процессе работы с модулем могут вызваны различные исключения, о которых можно почитать в описании соответствующих классов, методов, функций **в коде*.*

Структура проекта

  • dist/ — библиотека в собранном виде в различных версиях

  • unittests/ — юнит-тесты для библиотеки

  • setup.py — файл с настройками сборки

Trp

Класс триплета.

Принимает: * prefix (str) - префикс триплета * name (str) - имя триплета * value (str, int, float, Trp, TrpStr) - значение триплета

Внимание! Случай, когда значение является триплетом или триплексной строкой, не реализован.

Примеры работы

Создание

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 с триплетами, имеющими данный префикс * ключ формата ‘префикс.имя’ или ‘$префикс.имя’ -> значение триплета * иначе - индекс/срез * -> TrpStr по заданному индексу/срезу

Примеры:

trpStr[2]
trpStr[1:5]
trpStr['E']
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

Принимает: * str_to_parse (str) - строка для парсинга

Возвращает: * (TrpStr) - распарсенная строка

>>> parse_trp_str("$E.NM='Сверло';$E1.NM='Зенкер';")

check_condition()

Функция check_condition осуществляет проверку истинности условия, включающего в себя триплеты.

Алгоритм заменяет триплеты, указанные в условии соответствующими значениями, затем проверяет истинность условия. Триплеты, указанные без префикса “$”, заменяются соответствующими значениями, указанными в параметре trp_str_from_db

Принимает: * trp_str (str) - триплексная строка * cond (str) - условие * trp_str_from_db (str) необязательный - триплексная строка по данным из базы данных

Возвращает: * (bool) - результат проверки условия

Вызывает исключение 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 * Математические операторы: ^, **, *, /, +, -

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.3.0-py3-none-any.whl (17.7 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