Skip to main content

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

Project description

# vsptd — ВСПТД в ООП-стиле

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

####Зависимости
* Python 3.4+

####Установка
```
pip install vsptd
```

####Обновление
```
pip install vsptd -U
```

## Trp

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

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

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

### Примеры работы
####Создание
```python
my_trp = Trp('E', 'NM', 'Сверло')
my_trp2 = Trp('E1', 'NM', 'Зенкер')
```

####Обращение к свойствам
```python
>>> my_trp.prefix
'E'
>>> me_trp.name
'NM'
>>> my_trp.value
'Сверло'
```

####Перевод в строку, вывод
```python
>>> str(my_trp)
"$E.NM='Сверло';"
>>> print(my_trp)
$E.NM='Сверло';
```

####Проверка на равенство
```python
>>> my_trp == my_trp2
False
>>> my_trp != my_trp2
True
```

####Сложение
```python
>>> str(my_trp + my_trp2)
"$E.NM='Сверло';$E1.NM='Зенкер';" # объект класса TrpStr
```

## TrpStr

Класс триплексной строки

**Принимает:**
* ```*triplets``` (Triplet) - триплеты

### Примеры работы
####Создание
```python
>>> my_trp_str = TrpStr(Trp('E', 'NM', 'Сверло'), Trp('E1', 'NM', 'Зенкер'))
>>> triplets = [Trp('E2', 'NM', 'Отвёртка'), Trp('E3', 'NM', 'Топор')]
>>> my_trp_str2 = TrpStr(*triplets)
```

####Длина триплексной строки
```python
>>> len(my_trp_str)
2
```

####Перевод в строку, вывод
```python
>>> str(my_trp_str)
"$E.NM='Сверло';$E1.NM='Зенкер';"
>>> print(my_trp_str)
$E.NM='Сверло';$E1.NM='Зенкер';
```

####Сложение
```python
>>> my_trp = Trp('E4', 'NM', 'Развёртка')
>>> str(my_trp + my_trp_str)
"$E4.NM='Развёртка';$E.NM='Сверло';$E1.NM='Зенкер';" # объект класса TrpStr
>>> str(my_trp_str + my_trp)
"$E.NM='Сверло';$E1.NM='Зенкер';$E4.NM='Развёртка';" # объект класса TrpStr
>>> str(my_trp_str + my_trp_str2)
"$E.NM='Сверло';$E1.NM='Зенкер';$E2.NM='Отвёртка';$E3.NM='Топор';" # объект класса TrpStr
```
Существует метод ```add``` эквивалентный сложению через оператор "+"
```python
>>> str(my_trp_str.add(my_trp_str2))
"$E.NM='Сверло';$E1.NM='Зенкер';$E2.NM='Отвёртка';$E3.NM='Топор';"
```

####Равенство
```python
>>> my_trp_str == my_trp_str2
False
```

####Проверка вхождения триплета в триплексную строку
```python
>>> 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
```

####Итерация, распаковка
```python
>>> 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']


####Удалить триплет из триплексной строки по значениям префикса и имени
```python
>>> 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='Отвёртка';
```

####Удалить из триплексной строки все триплеты с заданным префиксом
```python
>>> 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;
```

## 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.2.0-py3-none-any.whl (15.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