From 98dc37c0ee6c2d23c7bfddd3c293a991df5a1f7c Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Tue, 4 Mar 2025 15:57:03 +0000 Subject: [PATCH 01/18] First test green --- .../0.0.0-dev/src/Duplicate_Rows_Method.enso | 55 +++++++++++++++++++ .../Standard/Table/0.0.0-dev/src/Main.enso | 2 + .../Standard/Table/0.0.0-dev/src/Table.enso | 12 ++++ .../Generate_Rows_Spec.enso | 37 +++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso create mode 100644 test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso new file mode 100644 index 000000000000..634c9b0398cc --- /dev/null +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso @@ -0,0 +1,55 @@ +from Standard.Base import all +import project.Internal.Widget_Helpers +import Standard.Base.Errors.Common.Missing_Argument +import Standard.Base.Errors.Deprecated.Deprecated +import Standard.Base.Metadata.Display +import Standard.Base.Metadata.Widget +from Standard.Base.Metadata.Choice import Option +from Standard.Base.Metadata.Widget import Single_Choice +from Standard.Base.Widget_Helpers import make_any_selector, make_format_chooser + +import project.Column_Ref.Column_Ref +import project.Expression.Expression +import project.Internal.Table_Ref.Table_Ref +import project.Internal.Widget_Helpers +from project.Internal.Filter_Condition_Helpers import make_filter_column + +type Duplicate_Rows_Method + + ## TODO + Constant n:Integer + + @col Widget_Helpers.make_column_name_selector + Per_Column col + + @from Widget_Helpers.make_column_name_selector + @to Widget_Helpers.make_column_name_selector + Integer_Range from to step:Integer + + @from Widget_Helpers.make_column_name_selector + @to Widget_Helpers.make_column_name_selector + Date_Range from to step:(Date_Period | Time_Period) + + ## PRIVATE + Create a widget for operation + default_widget table:Table_Ref display:Display=..Always -> Widget = + with_everything = Widget_Helpers.make_column_ref_by_name_selector table add_text=True add_number=True add_boolean=True add_date=True add_time=True add_date_time=True add_nothing=True + with_number_text = Widget_Helpers.make_column_ref_by_name_selector table add_text=True add_number=True + filter_cond = Widget_Helpers.make_filter_condition_selector table + + options = Vector.build builder-> + builder.append (Option "copy" "..Copy") + builder.append (Option "add" "..Add" [["rhs", with_number_text]]) + builder.append (Option "format" "..Format" [["format", make_format_chooser include_number=True]]) + builder.append (Option "if" "..If" [["condition", filter_cond], ["true_value", with_everything], ["false_value", with_everything]]) + builder.append (Option "min" "..Min" [["rhs", with_number_text]]) + builder.append (Option "max" "..Max" [["rhs", with_number_text]]) + + ## Constants + constants = make_any_selector add_number=True . values + expression = Option "" "(expr '["+table.column_names.first+"]')" + + integer_input_column = Widget_Helpers.make_column_ref_by_name_selector table add_number=True + integer_range = Option "" "..Integer_Range" [["from", integer_input_column], ["to", integer_input_column]] + date_range = Option "" "..Date_Range" [["from", integer_input_column], ["to", integer_input_column]] + Single_Choice [integer_range, date_range] display=display diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Main.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Main.enso index 74e5ca8d432f..419e590dcf1a 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Main.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Main.enso @@ -18,6 +18,8 @@ export project.Data_Formatter.Data_Formatter export project.Delimited.Delimited_Format.Delimited_Format export project.Delimited.Quote_Style.Quote_Style +export project.Duplicate_Rows_Method.Duplicate_Rows_Method + export project.Excel.Excel_Format.Excel_Format export project.Excel.Excel_Range.Excel_Range export project.Excel.Excel_Workbook.Excel_Workbook diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 6c9551c5d21d..6c67a96c1e40 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -31,6 +31,7 @@ import project.Columns_To_Keep.Columns_To_Keep import project.Constants.Previous_Value import project.Constants.Report_Unmatched import project.Data_Formatter.Data_Formatter +import project.Duplicate_Rows_Method.Duplicate_Rows_Method import project.Delimited.Delimited_Format.Delimited_Format import project.Expression.Expression import project.Expression.Expression_Error @@ -3779,6 +3780,17 @@ type Table offset self (columns : Vector (Integer | Text | Regex | By_Type) = Missing_Argument.throw "columns") n:Integer=-1 fill_with:Fill_With=..Nothing (group_by : Vector | Text | Integer | Regex = []) (order_by : Vector | Text = []) set_mode:Set_Mode=..Add on_problems:Problem_Behavior=..Report_Warning -> Table = Offset_Helper.table_offset_impl self columns n fill_with group_by order_by set_mode on_problems + @n Duplicate_Rows_Method.default_widget + generate_rows self n:Duplicate_Rows_Method = + x = case n of + Duplicate_Rows_Method.Constant _ -> + range_col = self.make_constant_column (0.up_to n.n) + self.set range_col as="generate_rows_id" + Duplicate_Rows_Method.Integer_Range from to _ -> + range_col = self.make_constant_column (from.up_to to) + self.set range_col as="generate_rows_id" + x.expand_to_rows "generate_rows_id" + ## PRIVATE column_naming_helper : Column_Naming_Helper column_naming_helper self = Column_Naming_Helper.in_memory diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso new file mode 100644 index 000000000000..54f55a340b62 --- /dev/null +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -0,0 +1,37 @@ +from Standard.Base import all +from Standard.Test import all +from Standard.Table import all + +from Standard.Database.Errors import Unsupported_Database_Operation +import Standard.Database.Feature.Feature +from Standard.Base.Errors.Common import Missing_Argument, Floating_Point_Equality +from Standard.Table.Errors import Missing_Input_Columns + +from project.Common_Table_Operations.Util import run_default_backend +import project.Common_Table_Operations.Util +import project.Util as Test_Utils + +main filter=Nothing = run_default_backend add_specs filter + +add_specs suite_builder setup = + if setup.is_feature_supported Feature.Offset then (add_offset_specs suite_builder setup) else + suite_builder.group setup.prefix+"Table.offset" group_builder-> + group_builder.specify "offset should report unsupported" <| + table_builder = setup.light_table_builder + t = table_builder [["ix", [1, 2, 3, 4, 5]], ["X", [100, 3, Nothing, 4, 12]], ["Y", [100, 4, 2, Nothing, 11]]] + t2 = t.offset ["X"] + t2.should_fail_with (Unsupported_Database_Operation.Error "offset") + c = t.at 0 + c2 = c.offset + c2.should_fail_with (Unsupported_Database_Operation.Error "offset") + +add_offset_specs suite_builder setup = + prefix = setup.prefix + build_sorted_table = Util.build_sorted_table setup + suite_builder.group prefix+"Table.Offset with default fill strategy (Text Values)" group_builder-> + colText = ["Text Values", ["A", "B", "C"]] + t1 = build_sorted_table [colText] + group_builder.specify "Works with default values" <| + t1.generate_rows (..Integer_Range 0 2 1) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 1, 0, 1, 0, 1]]] + From 484090d3fa7d249f05b9808f38e2a0693474e596 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Tue, 4 Mar 2025 16:03:31 +0000 Subject: [PATCH 02/18] 2 step --- .../Table/0.0.0-dev/src/Duplicate_Rows_Method.enso | 2 +- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 4 ++-- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso index 634c9b0398cc..d84d05554fac 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso @@ -24,7 +24,7 @@ type Duplicate_Rows_Method @from Widget_Helpers.make_column_name_selector @to Widget_Helpers.make_column_name_selector - Integer_Range from to step:Integer + Integer_Range from to step:Integer=1 @from Widget_Helpers.make_column_name_selector @to Widget_Helpers.make_column_name_selector diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 6c67a96c1e40..f78932dba644 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3786,8 +3786,8 @@ type Table Duplicate_Rows_Method.Constant _ -> range_col = self.make_constant_column (0.up_to n.n) self.set range_col as="generate_rows_id" - Duplicate_Rows_Method.Integer_Range from to _ -> - range_col = self.make_constant_column (from.up_to to) + Duplicate_Rows_Method.Integer_Range from to step -> + range_col = self.make_constant_column (from.up_to to step=step) self.set range_col as="generate_rows_id" x.expand_to_rows "generate_rows_id" diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index 54f55a340b62..2a239b913121 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -31,7 +31,10 @@ add_offset_specs suite_builder setup = suite_builder.group prefix+"Table.Offset with default fill strategy (Text Values)" group_builder-> colText = ["Text Values", ["A", "B", "C"]] t1 = build_sorted_table [colText] - group_builder.specify "Works with default values" <| - t1.generate_rows (..Integer_Range 0 2 1) . should_equal ignore_order=setup.is_database + group_builder.specify "Works with Integer_Range constant values and default step" <| + t1.generate_rows (..Integer_Range 0 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 1, 0, 1, 0, 1]]] + group_builder.specify "Works with Integer_Range constant values and a 2 step" <| + t1.generate_rows (..Integer_Range 0 4 2) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 2, 0, 2, 0, 2]]] From e4ea30b4842b6e29f83617233c363a9448dc834f Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Tue, 4 Mar 2025 16:12:56 +0000 Subject: [PATCH 03/18] Red --- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index 2a239b913121..51891d52a22d 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -29,12 +29,15 @@ add_offset_specs suite_builder setup = prefix = setup.prefix build_sorted_table = Util.build_sorted_table setup suite_builder.group prefix+"Table.Offset with default fill strategy (Text Values)" group_builder-> - colText = ["Text Values", ["A", "B", "C"]] - t1 = build_sorted_table [colText] + t1 = build_sorted_table [["Text Values", ["A", "B", "C"]]] + t2 = build_sorted_table [["Text Values", ["A", "B", "C"]], ["NumRows", [1, 0, 2]]] group_builder.specify "Works with Integer_Range constant values and default step" <| t1.generate_rows (..Integer_Range 0 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 1, 0, 1, 0, 1]]] group_builder.specify "Works with Integer_Range constant values and a 2 step" <| t1.generate_rows (..Integer_Range 0 4 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 2, 0, 2, 0, 2]]] + group_builder.specify "Works with Integer_Range constant and column value" <| + t1.generate_rows (..Integer_Range 0 (..Name 'NumRows')) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "C", "C"]], ["NumRows", [1, 2, 2]], ["generate_rows_id", [0, 0, 1]]] From 439830947a3669ba9da851b7ec2142ac404a8d29 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Tue, 4 Mar 2025 16:39:43 +0000 Subject: [PATCH 04/18] Green --- .../Table/0.0.0-dev/src/Duplicate_Rows_Method.enso | 2 +- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 7 +++---- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso index d84d05554fac..7dd698cbccfb 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso @@ -24,7 +24,7 @@ type Duplicate_Rows_Method @from Widget_Helpers.make_column_name_selector @to Widget_Helpers.make_column_name_selector - Integer_Range from to step:Integer=1 + Integer_Range from:(Integer | Column_Ref) to:(Integer | Column_Ref) step:Integer=1 @from Widget_Helpers.make_column_name_selector @to Widget_Helpers.make_column_name_selector diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index f78932dba644..6a699a312702 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3783,11 +3783,10 @@ type Table @n Duplicate_Rows_Method.default_widget generate_rows self n:Duplicate_Rows_Method = x = case n of - Duplicate_Rows_Method.Constant _ -> - range_col = self.make_constant_column (0.up_to n.n) - self.set range_col as="generate_rows_id" Duplicate_Rows_Method.Integer_Range from to step -> - range_col = self.make_constant_column (from.up_to to step=step) + range_col = case to of + _ : Integer -> self.make_constant_column (from.up_to to step=step) + _ : Column_Ref -> ((self:Table_Ref).resolve to).map (x->0.up_to x) self.set range_col as="generate_rows_id" x.expand_to_rows "generate_rows_id" diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index 51891d52a22d..5e8f8cf19c5b 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -38,6 +38,6 @@ add_offset_specs suite_builder setup = t1.generate_rows (..Integer_Range 0 4 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 2, 0, 2, 0, 2]]] group_builder.specify "Works with Integer_Range constant and column value" <| - t1.generate_rows (..Integer_Range 0 (..Name 'NumRows')) . should_equal ignore_order=setup.is_database + t2.generate_rows (..Integer_Range 0 (..Name 'NumRows')) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "C", "C"]], ["NumRows", [1, 2, 2]], ["generate_rows_id", [0, 0, 1]]] From f7e26ee13705906b90f530a6556b32893c625e62 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Tue, 4 Mar 2025 16:58:52 +0000 Subject: [PATCH 05/18] Red --- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index 5e8f8cf19c5b..e332c152a04b 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -40,4 +40,8 @@ add_offset_specs suite_builder setup = group_builder.specify "Works with Integer_Range constant and column value" <| t2.generate_rows (..Integer_Range 0 (..Name 'NumRows')) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "C", "C"]], ["NumRows", [1, 2, 2]], ["generate_rows_id", [0, 0, 1]]] + group_builder.specify "Works with Integer_Range column value and constant" <| + t2.generate_rows (..Integer_Range (..Name 'NumRows') 2) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "B", "B"]], ["NumRows", [1, 0, 0]], ["generate_rows_id", [1, 0, 1]]] + From dd05035bda655e9095a9f96e140108ed38da244f Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 10:31:55 +0000 Subject: [PATCH 06/18] Green --- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 6a699a312702..2242df20e4b9 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3785,8 +3785,10 @@ type Table x = case n of Duplicate_Rows_Method.Integer_Range from to step -> range_col = case to of - _ : Integer -> self.make_constant_column (from.up_to to step=step) - _ : Column_Ref -> ((self:Table_Ref).resolve to).map (x->0.up_to x) + _ : Integer -> case from of + _ : Integer -> self.make_constant_column (from.up_to to step=step) + _ : Column_Ref -> ((self:Table_Ref).resolve from).map x->(x.up_to to) + _ : Column_Ref -> ((self:Table_Ref).resolve to).map x->(0.up_to x) self.set range_col as="generate_rows_id" x.expand_to_rows "generate_rows_id" From 4ed9704fb81e8e944d2a17301623c0f0541e44d9 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 10:46:19 +0000 Subject: [PATCH 07/18] Green --- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 4 +++- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 2242df20e4b9..35ccc2b4cf05 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3788,7 +3788,9 @@ type Table _ : Integer -> case from of _ : Integer -> self.make_constant_column (from.up_to to step=step) _ : Column_Ref -> ((self:Table_Ref).resolve from).map x->(x.up_to to) - _ : Column_Ref -> ((self:Table_Ref).resolve to).map x->(0.up_to x) + _ : Column_Ref -> case from of + _ : Integer -> ((self:Table_Ref).resolve to).map x->(0.up_to x) + _ : Column_Ref -> ((self:Table_Ref).resolve from).zip ((self:Table_Ref).resolve to) f->t->(f.up_to t) self.set range_col as="generate_rows_id" x.expand_to_rows "generate_rows_id" diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index e332c152a04b..15f2f50b5710 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -31,6 +31,7 @@ add_offset_specs suite_builder setup = suite_builder.group prefix+"Table.Offset with default fill strategy (Text Values)" group_builder-> t1 = build_sorted_table [["Text Values", ["A", "B", "C"]]] t2 = build_sorted_table [["Text Values", ["A", "B", "C"]], ["NumRows", [1, 0, 2]]] + t3 = build_sorted_table [["Text Values", ["A", "B", "C"]], ["Start", [1, 0, 2]], ["Stop", [3, 0, 3]]] group_builder.specify "Works with Integer_Range constant values and default step" <| t1.generate_rows (..Integer_Range 0 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 1, 0, 1, 0, 1]]] @@ -43,5 +44,8 @@ add_offset_specs suite_builder setup = group_builder.specify "Works with Integer_Range column value and constant" <| t2.generate_rows (..Integer_Range (..Name 'NumRows') 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "B", "B"]], ["NumRows", [1, 0, 0]], ["generate_rows_id", [1, 0, 1]]] + group_builder.specify "Works with Integer_Range 2 columns" <| + t3.generate_rows (..Integer_Range (..Name 'Start') (..Name 'Stop')) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "A", "C"]], ["Start", [1, 1, 2]], ["Stop", [3, 3, 3]], ["generate_rows_id", [1, 2, 2]]] From 722d40abfdcc9e9d3bf10e882292118362176972 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 11:05:02 +0000 Subject: [PATCH 08/18] Red --- .../Common_Table_Operations/Generate_Rows_Spec.enso | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index 15f2f50b5710..a9326c73bf03 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -47,5 +47,15 @@ add_offset_specs suite_builder setup = group_builder.specify "Works with Integer_Range 2 columns" <| t3.generate_rows (..Integer_Range (..Name 'Start') (..Name 'Stop')) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "C"]], ["Start", [1, 1, 2]], ["Stop", [3, 3, 3]], ["generate_rows_id", [1, 2, 2]]] + group_builder.specify "Works with Integer_Range constant and column value and a 2 step" <| + t2.generate_rows (..Integer_Range -2 (..Name 'NumRows') 2) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "B", "C", "C"]], ["NumRows", [1, 0, 2, 2]], ["generate_rows_id", [-2, -2, -2, 0]]] + group_builder.specify "Works with Integer_Range column value and constant and a 2 step" <| + t2.generate_rows (..Integer_Range (..Name 'NumRows') 2 2) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "B", "B"]], ["NumRows", [1, 0, 0]], ["generate_rows_id", [1, 0, 1]]] + group_builder.specify "Works with Integer_Range 2 columns and a 2 step" <| + t3.generate_rows (..Integer_Range (..Name 'Start') (..Name 'Stop') 2) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "A", "C"]], ["Start", [1, 1, 2]], ["Stop", [3, 3, 3]], ["generate_rows_id", [1, 2, 2]]] + From 5bdda2679a709b07f7937e068d622059db1fd3bf Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 11:11:37 +0000 Subject: [PATCH 09/18] Green --- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 2 +- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 35ccc2b4cf05..13657006d1d0 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3789,7 +3789,7 @@ type Table _ : Integer -> self.make_constant_column (from.up_to to step=step) _ : Column_Ref -> ((self:Table_Ref).resolve from).map x->(x.up_to to) _ : Column_Ref -> case from of - _ : Integer -> ((self:Table_Ref).resolve to).map x->(0.up_to x) + _ : Integer -> ((self:Table_Ref).resolve to).map x->(from.up_to x step=step) _ : Column_Ref -> ((self:Table_Ref).resolve from).zip ((self:Table_Ref).resolve to) f->t->(f.up_to t) self.set range_col as="generate_rows_id" x.expand_to_rows "generate_rows_id" diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index a9326c73bf03..f9888f0052f5 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -35,9 +35,6 @@ add_offset_specs suite_builder setup = group_builder.specify "Works with Integer_Range constant values and default step" <| t1.generate_rows (..Integer_Range 0 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 1, 0, 1, 0, 1]]] - group_builder.specify "Works with Integer_Range constant values and a 2 step" <| - t1.generate_rows (..Integer_Range 0 4 2) . should_equal ignore_order=setup.is_database - Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 2, 0, 2, 0, 2]]] group_builder.specify "Works with Integer_Range constant and column value" <| t2.generate_rows (..Integer_Range 0 (..Name 'NumRows')) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "C", "C"]], ["NumRows", [1, 2, 2]], ["generate_rows_id", [0, 0, 1]]] @@ -47,9 +44,13 @@ add_offset_specs suite_builder setup = group_builder.specify "Works with Integer_Range 2 columns" <| t3.generate_rows (..Integer_Range (..Name 'Start') (..Name 'Stop')) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "C"]], ["Start", [1, 1, 2]], ["Stop", [3, 3, 3]], ["generate_rows_id", [1, 2, 2]]] + + group_builder.specify "Works with Integer_Range constant values and a 2 step" <| + t1.generate_rows (..Integer_Range 0 4 2) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 2, 0, 2, 0, 2]]] group_builder.specify "Works with Integer_Range constant and column value and a 2 step" <| t2.generate_rows (..Integer_Range -2 (..Name 'NumRows') 2) . should_equal ignore_order=setup.is_database - Table.new [["Text Values", ["A", "B", "C", "C"]], ["NumRows", [1, 0, 2, 2]], ["generate_rows_id", [-2, -2, -2, 0]]] + Table.new [["Text Values", ["A", "A", "B", "C", "C"]], ["NumRows", [1, 1, 0, 2, 2]], ["generate_rows_id", [-2, 0, -2, -2, 0]]] group_builder.specify "Works with Integer_Range column value and constant and a 2 step" <| t2.generate_rows (..Integer_Range (..Name 'NumRows') 2 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "B", "B"]], ["NumRows", [1, 0, 0]], ["generate_rows_id", [1, 0, 1]]] From 32ac1e48af260241e19f6c0c330a631f7c8d4990 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 11:13:30 +0000 Subject: [PATCH 10/18] Red --- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index f9888f0052f5..4482bd23c0fb 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -52,8 +52,8 @@ add_offset_specs suite_builder setup = t2.generate_rows (..Integer_Range -2 (..Name 'NumRows') 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "B", "C", "C"]], ["NumRows", [1, 1, 0, 2, 2]], ["generate_rows_id", [-2, 0, -2, -2, 0]]] group_builder.specify "Works with Integer_Range column value and constant and a 2 step" <| - t2.generate_rows (..Integer_Range (..Name 'NumRows') 2 2) . should_equal ignore_order=setup.is_database - Table.new [["Text Values", ["A", "B", "B"]], ["NumRows", [1, 0, 0]], ["generate_rows_id", [1, 0, 1]]] + t2.generate_rows (..Integer_Range (..Name 'NumRows') 4 2) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "A", "B", "B", "C"]], ["NumRows", [1, 1, 0, 0, 2]], ["generate_rows_id", [1, 3, 0, 2, 2]]] group_builder.specify "Works with Integer_Range 2 columns and a 2 step" <| t3.generate_rows (..Integer_Range (..Name 'Start') (..Name 'Stop') 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "C"]], ["Start", [1, 1, 2]], ["Stop", [3, 3, 3]], ["generate_rows_id", [1, 2, 2]]] From e872a2ef07b5f6f1121da26584b7baebaafc0551 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 11:13:58 +0000 Subject: [PATCH 11/18] Green --- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 13657006d1d0..d365f6c002cf 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3787,7 +3787,7 @@ type Table range_col = case to of _ : Integer -> case from of _ : Integer -> self.make_constant_column (from.up_to to step=step) - _ : Column_Ref -> ((self:Table_Ref).resolve from).map x->(x.up_to to) + _ : Column_Ref -> ((self:Table_Ref).resolve from).map x->(x.up_to to step=step) _ : Column_Ref -> case from of _ : Integer -> ((self:Table_Ref).resolve to).map x->(from.up_to x step=step) _ : Column_Ref -> ((self:Table_Ref).resolve from).zip ((self:Table_Ref).resolve to) f->t->(f.up_to t) From 85e8459a1d8384667c5347daa8882308396756c7 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 11:15:58 +0000 Subject: [PATCH 12/18] Red --- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index 4482bd23c0fb..b4c03eed85cf 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -32,6 +32,7 @@ add_offset_specs suite_builder setup = t1 = build_sorted_table [["Text Values", ["A", "B", "C"]]] t2 = build_sorted_table [["Text Values", ["A", "B", "C"]], ["NumRows", [1, 0, 2]]] t3 = build_sorted_table [["Text Values", ["A", "B", "C"]], ["Start", [1, 0, 2]], ["Stop", [3, 0, 3]]] + t4 = build_sorted_table [["Text Values", ["A", "B", "C"]], ["Start", [1, 0, 2]], ["Stop", [5, 0, 5]]] group_builder.specify "Works with Integer_Range constant values and default step" <| t1.generate_rows (..Integer_Range 0 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "B", "B", "C", "C"]], ["generate_rows_id", [0, 1, 0, 1, 0, 1]]] @@ -55,8 +56,8 @@ add_offset_specs suite_builder setup = t2.generate_rows (..Integer_Range (..Name 'NumRows') 4 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "B", "B", "C"]], ["NumRows", [1, 1, 0, 0, 2]], ["generate_rows_id", [1, 3, 0, 2, 2]]] group_builder.specify "Works with Integer_Range 2 columns and a 2 step" <| - t3.generate_rows (..Integer_Range (..Name 'Start') (..Name 'Stop') 2) . should_equal ignore_order=setup.is_database - Table.new [["Text Values", ["A", "A", "C"]], ["Start", [1, 1, 2]], ["Stop", [3, 3, 3]], ["generate_rows_id", [1, 2, 2]]] + t4.generate_rows (..Integer_Range (..Name 'Start') (..Name 'Stop') 2) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "A", "C" "C"]], ["Start", [1, 1, 2, 2]], ["Stop", [5, 5, 5, 5]], ["generate_rows_id", [1, 3, 2, 4]]] From 6de667d91d1fa4a926c774323dbc0b1c362f553f Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 11:16:45 +0000 Subject: [PATCH 13/18] Green --- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 2 +- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index d365f6c002cf..3131e469a121 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3790,7 +3790,7 @@ type Table _ : Column_Ref -> ((self:Table_Ref).resolve from).map x->(x.up_to to step=step) _ : Column_Ref -> case from of _ : Integer -> ((self:Table_Ref).resolve to).map x->(from.up_to x step=step) - _ : Column_Ref -> ((self:Table_Ref).resolve from).zip ((self:Table_Ref).resolve to) f->t->(f.up_to t) + _ : Column_Ref -> ((self:Table_Ref).resolve from).zip ((self:Table_Ref).resolve to) f->t->(f.up_to t step=step) self.set range_col as="generate_rows_id" x.expand_to_rows "generate_rows_id" diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index b4c03eed85cf..f9ec8dbadf31 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -57,7 +57,7 @@ add_offset_specs suite_builder setup = Table.new [["Text Values", ["A", "A", "B", "B", "C"]], ["NumRows", [1, 1, 0, 0, 2]], ["generate_rows_id", [1, 3, 0, 2, 2]]] group_builder.specify "Works with Integer_Range 2 columns and a 2 step" <| t4.generate_rows (..Integer_Range (..Name 'Start') (..Name 'Stop') 2) . should_equal ignore_order=setup.is_database - Table.new [["Text Values", ["A", "A", "C" "C"]], ["Start", [1, 1, 2, 2]], ["Stop", [5, 5, 5, 5]], ["generate_rows_id", [1, 3, 2, 4]]] + Table.new [["Text Values", ["A", "A", "C", "C"]], ["Start", [1, 1, 2, 2]], ["Stop", [5, 5, 5, 5]], ["generate_rows_id", [1, 3, 2, 4]]] From bfd42eaec85ba2ec994a25695615a4582849971d Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 11:18:37 +0000 Subject: [PATCH 14/18] refactor --- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 3131e469a121..f7b04d0f93f0 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3790,7 +3790,10 @@ type Table _ : Column_Ref -> ((self:Table_Ref).resolve from).map x->(x.up_to to step=step) _ : Column_Ref -> case from of _ : Integer -> ((self:Table_Ref).resolve to).map x->(from.up_to x step=step) - _ : Column_Ref -> ((self:Table_Ref).resolve from).zip ((self:Table_Ref).resolve to) f->t->(f.up_to t step=step) + _ : Column_Ref -> + from_column = (self:Table_Ref).resolve from + to_column = (self:Table_Ref).resolve to + from_column.zip to_column f->t->(f.up_to t step=step) self.set range_col as="generate_rows_id" x.expand_to_rows "generate_rows_id" From 15ba0081531ee6a87824bb00c238b5d241f5c8ef Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Wed, 5 Mar 2025 11:21:13 +0000 Subject: [PATCH 15/18] refactor --- .../lib/Standard/Table/0.0.0-dev/src/Table.enso | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index f7b04d0f93f0..1433ec214b98 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3784,16 +3784,13 @@ type Table generate_rows self n:Duplicate_Rows_Method = x = case n of Duplicate_Rows_Method.Integer_Range from to step -> - range_col = case to of - _ : Integer -> case from of - _ : Integer -> self.make_constant_column (from.up_to to step=step) - _ : Column_Ref -> ((self:Table_Ref).resolve from).map x->(x.up_to to step=step) - _ : Column_Ref -> case from of - _ : Integer -> ((self:Table_Ref).resolve to).map x->(from.up_to x step=step) - _ : Column_Ref -> - from_column = (self:Table_Ref).resolve from - to_column = (self:Table_Ref).resolve to - from_column.zip to_column f->t->(f.up_to t step=step) + from_column = case from of + _ : Integer -> self.make_constant_column from + _ : Column_Ref -> (self:Table_Ref).resolve from + to_column = case to of + _ : Integer -> self.make_constant_column to + _ : Column_Ref -> (self:Table_Ref).resolve to + range_col = from_column.zip to_column f->t->(f.up_to t step=step) self.set range_col as="generate_rows_id" x.expand_to_rows "generate_rows_id" From aeda01b3b109cde659b5dab2d2d100080f31aa64 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Thu, 6 Mar 2025 11:03:05 +0000 Subject: [PATCH 16/18] Clean up api --- .../0.0.0-dev/src/Duplicate_Rows_Method.enso | 34 +++---------------- .../Standard/Table/0.0.0-dev/src/Table.enso | 6 ++-- 2 files changed, 7 insertions(+), 33 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso index 7dd698cbccfb..ce9e92ccc282 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso @@ -15,41 +15,15 @@ import project.Internal.Widget_Helpers from project.Internal.Filter_Condition_Helpers import make_filter_column type Duplicate_Rows_Method - - ## TODO - Constant n:Integer - - @col Widget_Helpers.make_column_name_selector - Per_Column col - - @from Widget_Helpers.make_column_name_selector - @to Widget_Helpers.make_column_name_selector Integer_Range from:(Integer | Column_Ref) to:(Integer | Column_Ref) step:Integer=1 - @from Widget_Helpers.make_column_name_selector - @to Widget_Helpers.make_column_name_selector - Date_Range from to step:(Date_Period | Time_Period) + Date_Range from to step:Integer=1 period:Date_Period ## PRIVATE Create a widget for operation default_widget table:Table_Ref display:Display=..Always -> Widget = - with_everything = Widget_Helpers.make_column_ref_by_name_selector table add_text=True add_number=True add_boolean=True add_date=True add_time=True add_date_time=True add_nothing=True - with_number_text = Widget_Helpers.make_column_ref_by_name_selector table add_text=True add_number=True - filter_cond = Widget_Helpers.make_filter_condition_selector table - - options = Vector.build builder-> - builder.append (Option "copy" "..Copy") - builder.append (Option "add" "..Add" [["rhs", with_number_text]]) - builder.append (Option "format" "..Format" [["format", make_format_chooser include_number=True]]) - builder.append (Option "if" "..If" [["condition", filter_cond], ["true_value", with_everything], ["false_value", with_everything]]) - builder.append (Option "min" "..Min" [["rhs", with_number_text]]) - builder.append (Option "max" "..Max" [["rhs", with_number_text]]) - - ## Constants - constants = make_any_selector add_number=True . values - expression = Option "" "(expr '["+table.column_names.first+"]')" - integer_input_column = Widget_Helpers.make_column_ref_by_name_selector table add_number=True - integer_range = Option "" "..Integer_Range" [["from", integer_input_column], ["to", integer_input_column]] - date_range = Option "" "..Date_Range" [["from", integer_input_column], ["to", integer_input_column]] + integer_range = Option "..Integer_Range" "..Integer_Range" [["from", integer_input_column], ["to", integer_input_column]] + date_input_column = Widget_Helpers.make_column_ref_by_name_selector table add_date=True + date_range = Option "..Date_Range" "..Date_Range" [["from", date_input_column], ["to", date_input_column]] Single_Choice [integer_range, date_range] display=display diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 1433ec214b98..36ac69f93c6e 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3780,9 +3780,9 @@ type Table offset self (columns : Vector (Integer | Text | Regex | By_Type) = Missing_Argument.throw "columns") n:Integer=-1 fill_with:Fill_With=..Nothing (group_by : Vector | Text | Integer | Regex = []) (order_by : Vector | Text = []) set_mode:Set_Mode=..Add on_problems:Problem_Behavior=..Report_Warning -> Table = Offset_Helper.table_offset_impl self columns n fill_with group_by order_by set_mode on_problems - @n Duplicate_Rows_Method.default_widget - generate_rows self n:Duplicate_Rows_Method = - x = case n of + @over Duplicate_Rows_Method.default_widget + generate_rows self over:Duplicate_Rows_Method = + x = case over of Duplicate_Rows_Method.Integer_Range from to step -> from_column = case from of _ : Integer -> self.make_constant_column from From 16087f92a514d04b9c3f9e1628c8a22f3366e864 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Thu, 6 Mar 2025 11:24:10 +0000 Subject: [PATCH 17/18] Expression support --- .../Table/0.0.0-dev/src/Duplicate_Rows_Method.enso | 2 +- .../lib/Standard/Table/0.0.0-dev/src/Table.enso | 14 ++++++++------ .../Generate_Rows_Spec.enso | 4 ++++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso index ce9e92ccc282..044164cda813 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Duplicate_Rows_Method.enso @@ -15,7 +15,7 @@ import project.Internal.Widget_Helpers from project.Internal.Filter_Condition_Helpers import make_filter_column type Duplicate_Rows_Method - Integer_Range from:(Integer | Column_Ref) to:(Integer | Column_Ref) step:Integer=1 + Integer_Range from:(Integer | Column_Ref | Expression) to:(Integer | Column_Ref | Expression) step:Integer=1 Date_Range from to step:Integer=1 period:Date_Period diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 36ac69f93c6e..d9cd3b8335b3 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3782,14 +3782,16 @@ type Table @over Duplicate_Rows_Method.default_widget generate_rows self over:Duplicate_Rows_Method = + resolve_to_from value = + case value of + _ : Integer -> self.make_constant_column value + _ : Column_Ref -> (self:Table_Ref).resolve value + _ : Expression -> self.evaluate_expression value ..Report_Warning + x = case over of Duplicate_Rows_Method.Integer_Range from to step -> - from_column = case from of - _ : Integer -> self.make_constant_column from - _ : Column_Ref -> (self:Table_Ref).resolve from - to_column = case to of - _ : Integer -> self.make_constant_column to - _ : Column_Ref -> (self:Table_Ref).resolve to + from_column = resolve_to_from from + to_column = resolve_to_from to range_col = from_column.zip to_column f->t->(f.up_to t step=step) self.set range_col as="generate_rows_id" x.expand_to_rows "generate_rows_id" diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index f9ec8dbadf31..2fbbcad0193a 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -59,5 +59,9 @@ add_offset_specs suite_builder setup = t4.generate_rows (..Integer_Range (..Name 'Start') (..Name 'Stop') 2) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "C", "C"]], ["Start", [1, 1, 2, 2]], ["Stop", [5, 5, 5, 5]], ["generate_rows_id", [1, 3, 2, 4]]] + group_builder.specify "Works with Integer_Range column and expression" <| + t3.generate_rows (..Integer_Range (..Name 'Start') (expr '[Stop]+1')) . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "A", "A", "B", "C", "C"]], ["Start", [1, 1, 1, 0, 2, 2]], ["Stop", [3, 3, 3, 0, 3, 3]], ["generate_rows_id", [1, 2, 3, 0, 2, 3]]] + From a27d1b22da143f655bbe5072404c508e075dcc95 Mon Sep 17 00:00:00 2001 From: Adam Riley Date: Thu, 6 Mar 2025 14:11:07 +0000 Subject: [PATCH 18/18] Add as --- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 7 ++++--- .../src/Common_Table_Operations/Generate_Rows_Spec.enso | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index d9cd3b8335b3..9a221bd4f8bd 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3781,7 +3781,8 @@ type Table Offset_Helper.table_offset_impl self columns n fill_with group_by order_by set_mode on_problems @over Duplicate_Rows_Method.default_widget - generate_rows self over:Duplicate_Rows_Method = + generate_rows self over:Duplicate_Rows_Method as:Text="" = + resolved_as = if as.is_empty then "generate_rows_id" else as resolve_to_from value = case value of _ : Integer -> self.make_constant_column value @@ -3793,8 +3794,8 @@ type Table from_column = resolve_to_from from to_column = resolve_to_from to range_col = from_column.zip to_column f->t->(f.up_to t step=step) - self.set range_col as="generate_rows_id" - x.expand_to_rows "generate_rows_id" + self.set range_col as=resolved_as + x.expand_to_rows resolved_as ## PRIVATE column_naming_helper : Column_Naming_Helper diff --git a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso index 2fbbcad0193a..31aa29cead52 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Generate_Rows_Spec.enso @@ -63,5 +63,9 @@ add_offset_specs suite_builder setup = t3.generate_rows (..Integer_Range (..Name 'Start') (expr '[Stop]+1')) . should_equal ignore_order=setup.is_database Table.new [["Text Values", ["A", "A", "A", "B", "C", "C"]], ["Start", [1, 1, 1, 0, 2, 2]], ["Stop", [3, 3, 3, 0, 3, 3]], ["generate_rows_id", [1, 2, 3, 0, 2, 3]]] + group_builder.specify "Can rename generated id colummn" <| + t3.generate_rows (..Integer_Range (..Name 'Start') (expr '[Stop]+1')) "MyColumnName" . should_equal ignore_order=setup.is_database + Table.new [["Text Values", ["A", "A", "A", "B", "C", "C"]], ["Start", [1, 1, 1, 0, 2, 2]], ["Stop", [3, 3, 3, 0, 3, 3]], ["MyColumnName", [1, 2, 3, 0, 2, 3]]] +