Metadata-Version: 2.0
Name: vsptd
Version: 1.3.0
Summary: Работа с ВСПТД
Home-page: https://github.com/become-iron/vsptd/
Author: UNKNOWN
Author-email: UNKNOWN
License: UNKNOWN
Platform: UNKNOWN
Classifier: Natural Language :: Russian

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

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

Зависимости
^^^^^^^^^^^

-  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) - значение
триплета

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

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

Создание
^^^^^^^^

.. code:: python

    my_trp = Trp('E', 'NM', 'Сверло')
    my_trp2 = Trp('E1', 'NM', 'Зенкер')

Обращение к свойствам
^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    >>> my_trp.prefix
    'E'
    >>> me_trp.name
    'NM'
    >>> my_trp.value
    'Сверло'

Перевод в строку, вывод
^^^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    >>> str(my_trp)
    "$E.NM='Сверло';"
    >>> print(my_trp)
    $E.NM='Сверло';

Проверка на равенство
^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    >>> my_trp == my_trp2
    False
    >>> my_trp != my_trp2
    True

Сложение
^^^^^^^^

.. code:: python

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

TrpStr
------

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

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

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

Создание
^^^^^^^^

.. code:: python

    >>> my_trp_str = TrpStr(Trp('E', 'NM', 'Сверло'),  Trp('E1', 'NM', 'Зенкер'))
    >>> triplets = [Trp('E2', 'NM', 'Отвёртка'),  Trp('E3', 'NM', 'Топор')]
    >>> my_trp_str2 = TrpStr(*triplets)

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

.. code:: python

    >>> len(my_trp_str)
    2

Перевод в строку, вывод
^^^^^^^^^^^^^^^^^^^^^^^

.. code:: python

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

Сложение
^^^^^^^^

.. code:: python

    >>> 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`` практически эквивалентный сложению через
оператор "+". Отличие в том, что данный метод не возвращает новый
изменённый объект, а только изменяет нынешний.

.. code:: python

    >>> my_trp_str.add(my_trp_str2)
    >>> print(my_trp_str)
    $E.NM='Сверло';$E1.NM='Зенкер';$E2.NM='Отвёртка';$E3.NM='Топор';

Проверка на равенство
^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    >>> my_trp_str == my_trp_str2
    False

Проверка вхождения триплета в триплексную строку
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code:: 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

Итерация, распаковка
^^^^^^^^^^^^^^^^^^^^

.. code:: python

    >>> for trp in my_trp_str:
            print(trp)
    $E.NM='Сверло';
    $E1.NM='Зенкер';
    >>> TrpStr(*my_trp_str) == my_trp_str
    True

Доступ к элементам триплексной строки по индексу/срезу или по ключу
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

*Принимает:* \* (str) - ключ \* ключ формата 'префикс' -> TrpStr с
триплетами, имеющими данный префикс \* ключ формата 'префикс.имя' или
'$префикс.имя' -> значение триплета \* иначе - индекс/срез \* -> TrpStr
по заданному индексу/срезу

*Примеры:*

.. code:: python

    trpStr[2]
    trpStr[1:5]
    trpStr['E']
    trpStr['E.NM']
    trpStr['$E.NM']

Удалить триплет из триплексной строки по значениям префикса и имени
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code:: 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='Отвёртка';

Удалить из триплексной строки все триплеты с заданным префиксом
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code:: 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;

parse\_trp\_str()
-----------------

Парсинг триплексной строки из str в TrpStr

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

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

.. code:: python

    >>> 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``
\* Математические операторы: ``^``, ``**``, ``*``, ``/``, ``+``, ``-``


