Описание функций встроенной библиотеки bfj для python
Разделы главы:
bfj - модуль для работы с пакетами внутри платформы RnDnet. Данный модуль позволяет обращаться к файлам (пакета) экземпляра, загружать содержимое пакета в память, сохранять пакет. Библиотека bfj включает функции для загрузки данных в скрипт и для сохранения данных из скрипта.
Примечание. Чтобы работать с функциями bfj, необходимо его импортировать в созданном программном модуле командой:
import bfj
load_inputs () - возвращает словарь с переменными, атрибутами и параметрами пакета. Загружает переменные всех пакетов, если входной файл формата HDF5. Для загрузки файла других форматов ознакомьтесь с разделом
"Загрузка файла произвольного формата "
.
Чтобы загрузить входные данные в область видимости скрипта, используйте команду:
bfj.load_inputs(global()). Тогда доступ к загруженным файлам (пакетам), значениям параметров узла или переменным пакета можно получить по их имени.
Пример. Считывание данных функцией load_inputs
Из пакета "package 1" считаем параметр "content", содержащий текст "Package with the result of plotting a sinusoid" , и выведем его на экран. Код скрипта выглядит следующим образом:
#!/usr/bin/env python3
import bfj # импорт библиотеки bfj
# Load everything from input package:
bfj.load_inputs(globals())#загрузка входных переменных в область видимости скрипта
readParams = content # присваивание переменной "content" к "readParams"
print("readParams",readParams)# вывод на экран
Ниже приведён результат вывода на экран переменной "readParams" ( лог-файл) после запуска программного модуля:
Примечание. Запись "arrayX: from server" - показывает, что переменная "arrayX" также считалась из пакета.
load_package (path, scope = None, load_meta = True)
– функция загрузки данных пакета (загружаются файлы hdf5 и дополнительные атрибуты), которая возвращает его как набор переменных (словарь).
path
- словарь, куда считываются переменные пакетов
package_meta(path)
- функция для загрузки атрибутов пакета, которые возвращаются как набор переменных (словарь) вида: имя атрибута - значение.
package_label(path)
- функция для загрузки названия (label) пакета.
packages()
- функция, которая возвращает список всех входных пакетов экземпляра
Пример. Считывание данных функциями packages, package_label, package_meta, load_package
На вход подаётся пакет "package 1", который содержит небольшую информацию "content" и большую информацию в формате HDF5 "arrayX", "arrayY". Программный модуль, представленный ниже, считывает и выводит информацию из пакета в лог файл.
#!/usr/bin/env python3
import bfj # импорт библиотеки bfj
# Or, loop over input packages:
for pkg,lbl in bfj.packages():
meta = bfj.package_meta(pkg) # загрузка переменной "content"
data = bfj.load_package(pkg) # загрузка массивов "arrayX","arrayY"
label = bfj.package_label(pkg)# загрузка имени пакета "package 1"
print("data:", data)# вывод на экран считанных переменных
print("meta:", meta)
print("label:", label)
Лог файл, полученный после запуска скрипта, содержит информацию имени пакета (label), массивов "arrayX", "arrayY" (data) и переменной "content" (meta).
instance_id()
- функция, которая возвращает идентификатор экземпляра
read_params(scope, fname = None)
- функция, которая возвращает содержимое файла параметров узла. scope - это словарь, в котором будут параметры узла. Вызывать их можно по ключу
scope.get('parameter_name') или
scope['parameter_name'].
read_params(globals())
- загружает все параметры узла в видимость срипта.
Пример. Считывание параметров функцией read_params
Из параметров "Covariation" загрузим "N" и "Td" и сохраним в лог файле. Ниже представлен скрин параметров вычислительного узла. Далее будет приведён программный модуль и результат.
Программный модуль:
#!/usr/bin/env python3
import bfj # импорт библиотеки bfj
covariation={} # создание словаря "covariation"
bfj.read_params(covariation)# загрузка параметров узла в словарь "covariation"
print("covariation", covariation)# вывод словаря
print("N", covariation['N']) # вывод значения "N" (1 способ)
print("Td", covariation.get('Td'))# вывод значения "Td" по ключу (2 способ)
Полученный лог файл:
Сохранение выходных данных программного модуля
save_package (name=None, label=None, data={}, meta={}, image={}, files={}, save_mpl=False)
– функция позволяет создать пакет для хранения результатов скрипта и передачи его далее по графу обработки. Имеет параметры:
name указывается имя для пакета (необязательный параметр),
label - имя пакета в базе данных,
data - список переменных, которые необходимо сохранить в hdf5-файлах,
meta - список переменных, которые необходимо сохранить в атрибутах (для не больших данных), по умолчанию представлены в JSON формате ,
image - список переменных, которые необходимо сохранить в формате изображения (сохраняет формат .png по умолчанию). Для сохранения изображения формата .mpl необходимо дописать команду до вызова image :
save_mpl = True,
files - для сохранения произвольного файла, где ключ - имя файла, а значение - функция, которая пишет в открытый файл.
Кроме того,
bfj.save_package принимает словарь.
Пример . Cохранение данных функцией save_package
Представлен программный модуль на языке python, рисующий график синусоиды по созданному массиву значений "x" и вычисленному массива значений "y". Результирующие данные записываются в выходной пакет функцией
save_package библиотеки bfj. Kод скрипта приведён ниже.
#!/usr/bin/env python3
import bfj # импорт библиотеки bfj
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0.0, 3.0, 0.01)
y = np.sin(x)
# Generate figures with matplotlib:
fig, ax = plt.subplots()
ax.plot(x, y, linewidth = 5, label = 'sin(x)')
content = "Package with the result of plotting a sinusoid"
# Save output package:
bfj.save_package(
label = "output package", # name of package
data = dict(arrayX = x, arrayY = y), # variables, saved to hdf5
meta = dict(content = content), # attributes, saved to database
image = dict(figureSine = fig)) # save image
Сформированный пакет под номером "13882" будет выглядеть, как показано ниже. Сверху рисунка изображен график и чуть ниже отображены переменные массивов и содержание, сохранённыe в выходной пакет.
Надеемся, что библиотека bfj будет радовать простотой использования
при работе с данными на платформе RnDnet.