API

Библиотека двумерной графики libGraph2D

class libGraph2D.Contour(ax, Obj, keyX, keyY, keyZ)[исходный код]
Менеджер графика линий уровня. Копит и сохраняет данные, отрисовывает линию.

Простого типа int|float|numpy.ndarray (не вектор/кватернион)

Можно добавлять точки по одной или чанками (см. DataStore)

Добавляет метку на оси: z(x, y)

Параметры:
  • ax (axes)

  • Obj (object)

  • keyX

  • keyY

  • атрибутов (keyZ - имена)

Plot()[исходный код]

плотим накопленные данные на график

class libGraph2D.DataStore(Obj, attribute, n=0, chunkLen=1)[исходный код]
хранитель данных (внутри используется numpy.ndarray)

простого типа int|float|numpy.ndarray (не кватернион) можно добавлять точки по одной или чанками:

  • размерность m * n, где m-индекс по времени, n-размерность вектора

  • выбор на основе длины атрибута объекта, на момент инициализации

  • ожидается, что длина чанка chunkLen _не_будет_меняться_

Параметры:
  • Obj (object)

  • attribute (str)

  • n (int) - размерность атрибута (если вектор, то его длина)

  • chunkLen (int)

Add()[исходный код]

добавляем данные поточечно или чанками (с проверкой длины) индекс инкрементируется внутри Add

Reset()[исходный код]

заполнить массивы NaN-ом и сбросить индекс

class libGraph2D.Line_fiv(ax, time, Obj, attribute, n=0, chunkLen=1)[исходный код]
Менеджер линии. Копит и сохраняет данные от времени (наследует от DataStore),

отрисовывает линию. Простого типа int|float|numpy.ndarray (не кватернион)

Для отрисовки кватерниона либо перевести его в numpy.ndarray, либо использовать класс Line_q (правда он работает с ним только поточечно)

Можно добавлять точки по одной или чанками (см. DataStore)

Добавляет красивую метку на оси в LaTeX, в зависимости от размерности:

для одномерного просто своё имя 2D: индексы x, y (предполагается что вектор) 3D: индексы x, y, z (предполагается что вектор) 4D: индексы w, x, y, z (предполагается что кватернион)

Параметры:
  • ax (axes)

  • time (DataStore)

  • Obj (object)

  • attribute (str)

  • n (int) - размерность атрибута (если вектор, то его длина)

  • chunkLen (int)

Plot()[исходный код]

плотим накопленные данные на график

class libGraph2D.Line_q(ax, time, Obj, attribute)[исходный код]

класс для линии, принимающей кватернион поточечно (т.е. может брать данные из кватерниона)

Параметры:
  • ax (axes)

  • time (DataStore)

  • Obj (object)

  • attribute (str) - имя атрибута (допускается только кватернион)

Add()[исходный код]

добавляем данные кватерниона поточечно

class libGraph2D.Line_xy(ax, time, Obj, Attributes, chunkLen=1)[исходный код]
Менеджер линии. Копит и сохраняет данные, отрисовывает линию.

Простого типа int|float|numpy.ndarray (не вектор/кватернион)

Можно добавлять точки по одной или чанками (см. DataStore)

Добавляет метку на оси: переменная_y(переменная_x)

Параметры:
  • ax (axes)

  • time (DataStore)

  • Obj (object)

  • Attributes (list2 of str)

  • chunkLen (int)

Add()[исходный код]

добавляем данные

Plot()[исходный код]

плотим накопленные данные на график

class libGraph2D.Plot2D(DB=None)[исходный код]

Динамический 2D график

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

Это не бегущий график, а просто обычный график, в который добавляется информация с некоторым шагом в реальном времени

TODO: наследовать от Plot2DBase TODO: https://stackoverflow.com/questions/40126176/fast-live-plotting-in-matplotlib-pyplot

Параметры:

DB (obj) – объект базы данных, атрибуты которого содержат данные для отрисовки. Объект обязательно должен содержать атрибут с текущим временем (Time)

Пример использования в классе задачи:

def Setup(self):
    self.plot1 = Plot2D(DB=self)
    self.plot1.Setup('t', [['w_B'], ['w_I']])

def Initialize(self):
    self.plot1.Initialize()

def Run(self):
    self.plot1.Run() # отправляем результаты расчёта на график

def Finalize(self):
    self.plot1.Finalize()
Finalize()[исходный код]

финализация - дорисовываем на графике накопленные данные

Initialize()[исходный код]

инициализация графика (очистка при старте)

Plot()[исходный код]

плотим накопленные данные на график

Run()[исходный код]

добавление точки (текущего состояния БД)

Setup(TimeKey, Keys, chunkLen=1, name=None, tight=False)[исходный код]

Метод настраивает вид графика

Параметры:
  • TimeKey (str) – имя переменной (м.б float|numpy.array|list) в которой хранится время

  • Keys (list) –

    список переменных БД, которые будут отрисовываться на графиках.

    формат Keys

    [[„g“], - переменная от времени [„g“, „x1“]] - две переменные на одном графике

    длина списка соответствует колву графиков

  • chunkLen (int) – длина чанка данных, который будет передаваться в переменных

  • name (str) – имя графика. Окно графика будет иметь вид „Figure 1: name“

onResetClicked(event)[исходный код]

обработчик нажатия на Reset

onSaveClicked(event)[исходный код]

обработчик нажатия на Save

сохраняем данные всех линий в файл pickle с уникальным именем

class libGraph2D.Plot2DBase(DB=None)[исходный код]

Базовый класс графика. Реализует открытие фигуры, инициализацию и т.п.

Finalize()[исходный код]

финализация - дорисовываем на фигуре накопленные данные

Initialize()[исходный код]

инициализация фигуры (очистка при старте)

Setup(nAx, name=None, tight=False)[исходный код]

Метод настраивает вид фигуры

Параметры:

name (str) – имя фигуры. Окно фигуры будет иметь вид „Figure 1: name“

class libGraph2D.PlotXY(DB=None)[исходный код]

Динамический XY график

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

Это не бегущий график, а просто обычный график, в который добавляется информация с некоторым шагом в реальном времени

Параметры:

DB (obj) – объект базы данных, атрибуты которого содержат данные для отрисовки. Объект обязательно должен содержать атрибут с текущим временем (Time)

Пример использования в классе задачи:

def Setup(self):
    self.plot1 = Plot2D(DB=self)
    self.plot1.Setup('t', [['x1','y1'], ['x2','y2']])

def Initialize(self):
    self.plot1.Initialize()

def Run(self):
    self.plot1.Run() # отправляем результаты расчёта на график

def Finalize(self):
    self.plot1.Finalize()
Finalize()[исходный код]

финализация - дорисовываем на графике накопленные данные

Initialize()[исходный код]

инициализация графика (очистка при старте)

Plot()[исходный код]

плотим накопленные данные на график

Run()[исходный код]

добавление точки (текущего состояния БД)

Setup(TimeKey, Keys, chunkLen=1, name=None, tight=False, axLabels=None)[исходный код]

Метод настраивает вид графика

Параметры:
  • TimeKey (str) – имя переменной (м.б float|numpy.array|list) в которой хранится время

  • Keys (list) –

    список переменных БД, которые будут отрисовываться на графиках.

    формат Keys

    [[„x1“,“y1“]] - переменные

    длина списка соответствует колву графиков

  • chunkLen (int) – длина чанка данных, который будет передаваться в переменных

  • name (str) – имя графика. Окно графика будет иметь вид „Figure 1: name“ Указывайте имя фигуры, это а) удобно и б) поможет избежать некоторых ошибок..

  • axLabels (list2 of str) – метки осей, типа r’угол атаки $lpha,,^{circ}$“

class libGraph2D.PlotXYcnt(DB=None)[исходный код]

plotXY + contour (по матрице)

Initialize()[исходный код]

инициализация графика (очистка при старте)

Run()[исходный код]

плотим накопленные данные на график

Setup(TimeKey, Keys, aedb=None, chunkLen=1, name=None, tight=False)[исходный код]

aedb (dict): словарь с именами матриц, которые будут использоваться в contour Ключи „x“, „y“, „z“ содержат имена

class libGraph2D.Storager(DB=None)[исходный код]

Хранитель данных. Сохраняет данные внутри себя (в numpy.ndarray), затем по финализации сохраняет их в файл

DB (obj): объект базы данных, атрибуты которого содержат данные для отрисовки.

Объект обязательно должен содержать атрибут с текущим временем (Time)

Пример использования в классе задачи:

def Setup(self):
    self.storage = Storager(DB=self)
    self.storage.Setup('t', ['w_B', 'B_B'])

def Initialize(self):
    self.storage.Initialize()

def Run(self):
    self.storage.Run()

def Finalize(self):
    self.storage.Finalize()
Finalize(fileName=None)[исходный код]

финализация - сохраняем накопленные данные

Параметры:

fileName (str) –

имя файла.

None - данные будут сохранены в поле Res в словаре

’pickle“ | „csv“ - будет сгенерировано уникальное имя (дата-время-имя задачи)

строка с полным именем - сохранится с форматом по .endswith

Initialize()[исходный код]

инициализация Хранителя (очистка при старте)

Run()[исходный код]

добавление точки (текущего состояния БД)

Setup(TimeKey, Keys, chunkLen=1, directory='')[исходный код]

Метод настраивает Хранителя

Параметры:
  • TimeKey (str) – имя переменной (м.б float|numpy.array|list) в которой хранится время

  • Keys (list of str) – список переменных БД, которые будут хранится.

  • chunkLen (int) – длина чанка данных, который будет передаваться в переменных

  • directory (str) – директория, куда сохранять файлы, с завершающим „/“ или „“

libGraph2D.superScript(s)[исходный код]

для метки, формирует в LaTeX верхние индексы

Библиотека дополнительных удобных штук libUtils

class libUtils.DataBuffer(Obj=None)[исходный код]
буфер данных (внутри используется list)

для хранения данных с предыдущих итераций добавлять точки по одной

Параметры:

Obj (object) – Объект обязательно должен содержать атрибут с текущим временем (Time)

Пример использования в классе задачи:

def Setup(self):
    self.Buf = DataBuffer(Obj=self)
    self.Buf.Setup('t', ['x','y'], N=3)

def Initialize(self):
    self.Buf.Initialize()

def Run(self):
    self.Buf.Run()

    print(self.Buf.x[-1]) # выводим i-1 значение x
    print(self.Buf.x[-2]) # выводим i-2 значение x
Initialize()[исходный код]

инициализация - при старте заполняем буфера переменных текущим значением

Run()[исходный код]

добавление точки (текущего состояния БД) TODO: for -> np.roll

Setup(TimeKey, Keys, N=1)[исходный код]

Метод настраивает буфер

Параметры:
  • TimeKey (str) – имя переменной, в которой хранится время

  • Keys (list of str) – список переменных БД, которые будут хранится

  • N (int) – колво точек