Исходный код libUtils

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Библиотека дополнительных удобных штук libUtils
-----------------------------------------------
"""
import copy # была проблема с объектами типа np.array - они копировались на весь список.. Пришлось копировать через copy.copy

[документация] class DataBuffer(): """ буфер данных (внутри используется list) для хранения данных с предыдущих итераций добавлять точки по одной Args: Obj (object) - объект, атрибут которого будем хранить. Объект обязательно должен содержать атрибут с текущим временем (Time) Пример использования в классе задачи: .. code-block:: python 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 """ def __init__(self, Obj=None): if Obj is None: raise ValueError('Storager: укажите объект базы данных Obj') self.Obj = Obj
[документация] def Setup(self, TimeKey, Keys, N=1): """ Метод настраивает буфер Args: TimeKey (str): имя переменной, в которой хранится время Keys (list of str): список переменных БД, которые будут хранится N (int): колво точек """ self.Keys = Keys self.Keys.insert(0, TimeKey) setattr(self, TimeKey, [getattr(self.Obj, TimeKey) for i in range(N)])
[документация] def Initialize(self): """ инициализация - при старте заполняем буфера переменных текущим значением """ N = len(getattr(self, self.Keys[0])) for key in self.Keys: setattr(self, key, [getattr(self.Obj, key) for i in range(N)])
[документация] def Run(self): """ добавление точки (текущего состояния БД) TODO: for -> np.roll """ for key in self.Keys: V = getattr(self, key) V.pop(0) V.append(copy.copy(getattr(self.Obj, key)))
#%% if __name__ == '__main__': import numpy as np class Cont(): pass Obj = Cont() Obj.t = 0 Obj.x = np.array([1, 2]) Obj.y = 0.1 Buf = DataBuffer(Obj=Obj) Buf.Setup('t', ['x','y'], N=3) Buf.Initialize() for t in range(5): Obj.t = t Obj.x = np.array([1.1+t, 1]) Obj.y = 0.2+t Buf.Run() print(Buf.x) Buf.x[-1]