Source code for node_table_to_dataset

# This file is part of Sympathy for Data.
# Copyright (c) 2021 Combine Control Systems
#
# SYMPATHY FOR DATA COMMERCIAL LICENSE
# You should have received a link to the License with Sympathy for Data.

from sympathy.api import node, exceptions
from sympathy.api.nodeconfig import Port, Ports, Tag, Tags
from sylib_aml.dataset import DatasetPort


[docs] class TablesToDataset(node.Node): """ Convert Table(s) to Dataset. """ name = "Tables to Dataset (Experimental)" nodeid = "com.sympathyfordata.advancedmachinelearning.tablestodataset" author = "Jannes Germishuys" icon = "tables2ds.svg" tags = Tags(Tag.MachineLearning.Processing) inputs = Ports( [ Port.Tables("Tables", name="in_tables"), Port.Datasources("Datasources", name="source"), ] ) outputs = Ports([DatasetPort("Dataset", "dataset")]) def execute(self, node_context): input_tables = node_context.input["in_tables"] output_paths = [s.decode_path() for s in node_context.input["source"]] tab_names = [] if len(input_tables) == 0: raise exceptions.SyDataError("Empty tables") assert len(input_tables) == len( output_paths ), "Length of input tables should match length of output paths" for i, tab in enumerate(input_tables): tab.to_csv(output_paths[i], delimiter=",") columns = tab.column_names() tab_names.append(tab.name) column_config = { col_name: {"dtype": "", "transforms": [], "transforms_values": []} for col_name in columns } ds = { "dstype": "table", "paths": output_paths, "tab_names": tab_names, "reader_config": {}, "column_config": column_config, } json = node_context.output["dataset"] json.set_ds(ds) json.save()