From 161757cca93bd2f70303cb8f4bfc1931e2172e01 Mon Sep 17 00:00:00 2001 From: fenix-hub Date: Sun, 9 Jan 2022 19:38:53 +0100 Subject: [PATCH] update dataframe and matrix --- .../utilities/classes/structures/data_frame.gd | 17 +++++++---------- .../utilities/classes/structures/matrix.gd | 18 +++++++----------- .../classes/structures/matrix_generator.gd | 4 ++++ 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/addons/easy_charts/utilities/classes/structures/data_frame.gd b/addons/easy_charts/utilities/classes/structures/data_frame.gd index 4c12571..63dd4b3 100644 --- a/addons/easy_charts/utilities/classes/structures/data_frame.gd +++ b/addons/easy_charts/utilities/classes/structures/data_frame.gd @@ -10,7 +10,7 @@ var dataset : Array = [] func _init(datamatrix : Matrix, headers : PoolStringArray = [], labels : PoolStringArray = [] , table_name : String = "") -> void: if labels.empty() : for label in range(datamatrix.get_size().x) : labels.append(label as String) - if headers.empty() : for header in range(datamatrix.get_size().y) : headers.append(ECUtilities.get_letter_index(header)) + if headers.empty() : for header in range(datamatrix.get_size().y) : headers.append(MatrixGenerator.get_letter_index(header)) build_dataframe(datamatrix, headers, labels, table_name) func build_dataframe(datamatrix : Matrix, headers : PoolStringArray = [], labels : PoolStringArray = [] , table_name : String = "") -> void: @@ -21,7 +21,7 @@ func build_dataframe(datamatrix : Matrix, headers : PoolStringArray = [], labels self.dataset = build_dataset_from_matrix(datamatrix, headers, labels) func build_dataset(data : Array, headers : PoolStringArray, labels : PoolStringArray) -> Array: - var dataset : Array = [Array(headers)] + var dataset : Array = [Array([""]) + Array(headers)] for row_i in range(data.size()): dataset.append([labels[row_i]]+data[row_i]) return dataset @@ -30,16 +30,15 @@ func build_dataset_from_matrix(datamatrix : Matrix, headers : PoolStringArray, l return build_dataset(data, headers, labels) func insert_column(column : Array, header : String = "", index : int = dataset[0].size()) -> void: - assert(column.size() == datamatrix.rows(), "error: the column size must match the dataset column size") - headers.insert(index, header if header != "" else ECUtilities.get_letter_index(index)) + headers.insert(index, header if header != "" else MatrixGenerator.get_letter_index(index)) datamatrix.insert_column(column, index-1) dataset = build_dataset_from_matrix(datamatrix, headers, labels) -func insert_row(row : Array, label : String = "", index : int = dataset.size()) -> void: - assert(row.size() == datamatrix.columns(), "error: the row size must match the dataset row size") +func insert_row(row : Array, label : String = "", index : int = dataset.size()) -> PoolStringArray: labels.insert(index-1, label if label != "" else (index-1) as String) datamatrix.insert_row(row, index-1) dataset = build_dataset_from_matrix(datamatrix, headers, labels) + return PoolStringArray([label] + row) func get_datamatrix() -> Matrix: return datamatrix @@ -59,14 +58,12 @@ func _to_string() -> String: for column in row: var string_len : int = str(column).length() last_string_len = string_len if string_len > last_string_len else last_string_len - var string : String = "" + var string : String = "\n" for row_i in dataset.size(): - if row_i == 0: - string+="%*s" % [last_string_len+1, ""] if get_dataset()[0].size() < get_dataset()[1].size() else "" for column_i in dataset[row_i].size(): string+="%*s" % [last_string_len+1, dataset[row_i][column_i]] string+="\n" - string+="\n['{table_name}' : {rows} rows x {columns} columns]\n".format({ + string+="['{table_name}' : {rows} rows x {columns} columns]\n".format({ rows = datamatrix.rows(), columns = datamatrix.columns(), table_name = table_name}) diff --git a/addons/easy_charts/utilities/classes/structures/matrix.gd b/addons/easy_charts/utilities/classes/structures/matrix.gd index 68cd4e7..b9ac4d0 100644 --- a/addons/easy_charts/utilities/classes/structures/matrix.gd +++ b/addons/easy_charts/utilities/classes/structures/matrix.gd @@ -4,15 +4,17 @@ class_name Matrix var values : Array = [] -func _init(matrix : Array = []) -> void: +func _init(matrix : Array = [], size : int = 0) -> void: values = matrix func insert_row(row : Array, index : int = values.size()) -> void: - assert(row.size() == values[0].size(), "the row size must match matrix row size") + if rows() != 0: + assert(row.size() == columns(), "the row size must match matrix row size") values.insert(index, row) func insert_column(column : Array, index : int = values[0].size()) -> void: - assert(column.size() == values.size(), "the column size must match matrix column size") + if columns() != 0: + assert(column.size() == rows(), "the column size must match matrix column size") for row_idx in column.size(): values[row_idx].insert(index, column[row_idx]) @@ -20,13 +22,13 @@ func to_array() -> Array: return values.duplicate(true) func get_size() -> Vector2: - return Vector2(values.size(), values[0].size()) + return Vector2(rows(), columns()) func rows() -> int: return values.size() func columns() -> int: - return values[0].size() + return values[0].size() if rows() != 0 else 0 func get_column(column : int) -> Array: assert(column < columns(), "index of the column requested (%s) exceedes matrix columns (%s)"%[column, columns()]) @@ -77,9 +79,3 @@ func _get(_property : String): else: if (_property as String).is_valid_integer(): return get_row(_property as int) - - - - - - diff --git a/addons/easy_charts/utilities/classes/structures/matrix_generator.gd b/addons/easy_charts/utilities/classes/structures/matrix_generator.gd index 1bad6dc..c8cd0c0 100644 --- a/addons/easy_charts/utilities/classes/structures/matrix_generator.gd +++ b/addons/easy_charts/utilities/classes/structures/matrix_generator.gd @@ -92,3 +92,7 @@ static func multiply_float(_matrix1 : Matrix, _float : float) -> Matrix: for y in range(_matrix1.to_array()[x].size()): array[x][y]*=_float return Matrix.new(array) + +# ------------------------------------------------------------ +static func get_letter_index(index : int) -> String: + return "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split(" ")[index]