From d89e808634d770299e918baa733bcec831f45f3b Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 25 Mar 2025 15:40:51 -0400 Subject: [PATCH 01/37] all but doc --- .../Base/0.0.0-dev/src/Data/Decimal.enso | 6 +-- .../Base/0.0.0-dev/src/Data/Numbers.enso | 16 +++---- .../Database/0.0.0-dev/src/DB_Column.enso | 38 ++++++++--------- .../Standard/Table/0.0.0-dev/src/Column.enso | 6 +-- .../Table/0.0.0-dev/src/Column_Operation.enso | 4 +- .../0.0.0-dev/src/Simple_Expression.enso | 8 ++-- .../common_utils/Core_Math_Utils.java | 2 +- test/Base_Tests/src/Data/Decimal_Spec.enso | 6 +-- test/Base_Tests/src/Data/Round_Spec.enso | 42 +++++++++---------- test/Benchmarks/src/Column_Numeric.enso | 16 +++---- test/Benchmarks/src/Numeric.enso | 14 +++---- test/Snowflake_Tests/src/Snowflake_Spec.enso | 16 +++---- .../Column_Operations_Spec.enso | 8 ++-- .../src/Database/Common/IR_Spec.enso | 8 ++-- .../src/Database/Postgres_Spec.enso | 16 +++---- .../Table_Tests/src/Database/SQLite_Spec.enso | 16 +++---- .../src/In_Memory/Column_Spec.enso | 8 ++-- 17 files changed, 114 insertions(+), 116 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso index 056a856cbdd1..5586e3fe37ad 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso @@ -962,7 +962,7 @@ type Decimal Round to a specified number of decimal places. By default, rounding uses "symmetric round-half-up", also known as - "half-up." If use_bankers=True, then it uses "round-half-even", also + "half-up." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also known as "banker's rounding". Arguments: @@ -1003,10 +1003,10 @@ type Decimal > Example Use Banker's Rounding. - Decimal.new "2.5" . round use_bankers=True + Decimal.new "2.5" . round rounding_Mode=Rounding_Mode.bankers # => 2 round : Integer -> Boolean -> Decimal - round self (decimal_places:Integer=0) (use_bankers:Boolean=False) -> Decimal = + round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.half_up) -> Decimal = out_of_range = decimal_places > Java_Integer.MAX_VALUE || decimal_places < Java_Integer.MIN_VALUE if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places use_bankers) else message = "round decimal_places must be between "+Java_Integer.MIN_VALUE.to_text+" and "+Java_Integer.MAX_VALUE.to_text+" (inclusive), but was "+decimal_places.to_text diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index c88b5411a0b3..8047133e29a8 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -659,7 +659,7 @@ type Float Round to a specified number of decimal places. By default, rounding uses "symmetric round-half-up", also known as - "half-up." If use_bankers=True, then it uses "round-half-even", also + "half-up." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also known as "banker's rounding". If `decimal_places` > 0, `round` returns a `Float`; otherwise, it @@ -705,12 +705,12 @@ type Float > Example Use Banker's Rounding. - 2.5 . round use_bankers=True == 2 + 2.5 . round rounding_Mode=Rounding_Mode.bankers == 2 round : Integer -> Boolean -> Integer | Float ! Illegal_Argument - round self (decimal_places:Integer=0) (use_bankers:Boolean=False) = + round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.half_up) = report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) Panic.catch Unsupported_Argument_Types handler=report_unsupported - round_float_builtin self decimal_places use_bankers + round_float_builtin self decimal_places (rounding_mode == Rounding_Mode.bankers) ## GROUP Operators ICON operators @@ -1074,7 +1074,7 @@ type Integer argument. For negative decimal places, see below. By default, rounding uses "symmetric round-half-up", also known as - "half-up." If use_bankers=True, then it uses "round-half-even", also + "half-up." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also known as "banker's rounding". Arguments: @@ -1108,14 +1108,14 @@ type Integer > Example Round to the nearest hundred, using Banker's Rounding. - 12250 . round -2 use_bankers=True == 12200 - round self (decimal_places:Integer=0) (use_bankers:Boolean=False) -> Integer ! Illegal_Argument = + 12250 . round -2 rounding_Mode=Rounding_Mode.bankers == 12200 + round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.half_up) -> Integer ! Illegal_Argument = ## We reject values outside the range of `long` here, so we don't also do this check in the Java. Rounding_Helpers.check_round_input self <| report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) Panic.catch Unsupported_Argument_Types handler=report_unsupported - round_integer_builtin self decimal_places use_bankers + round_integer_builtin self decimal_places (rounding_mode == Rounding_Mode.bankers) ## GROUP Operators ICON operators diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso index d500715a87d9..419a9e166376 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso @@ -852,7 +852,7 @@ type DB_Column `Value_Type.Integer` columns. By default, rounding uses "symmetric round-half-up", also known as - "round towards 0." If use_bankers=True, then it uses "round-half-even", + "round towards 0." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also known as "banker's rounding". The return type depends on the backend. @@ -883,14 +883,14 @@ type DB_Column import Standard.Examples example_round = Examples.decimal_column.round 2 - round self decimal_places:Integer=0 use_bankers:Boolean=False -> DB_Column ! Illegal_Argument | Invalid_Value_Type = + round self decimal_places:Integer=0 rounding_mode:Rounding_Mode=Rounding_Mode.half_up -> DB_Column ! Illegal_Argument | Invalid_Value_Type = Rounding_Helpers.check_decimal_places decimal_places <| Value_Type.expect_numeric self <| - if self.should_use_builtin_round decimal_places use_bankers then self.round_builtin decimal_places use_bankers else + if self.should_use_builtin_round decimal_places rounding_mode then self.round_builtin decimal_places rounding_mode else self.short_circuit_special_floating_point <| case self.value_type of - Value_Type.Integer _ -> self.round_integer decimal_places use_bankers - Value_Type.Float _ -> self.round_float decimal_places use_bankers - Value_Type.Decimal _ _ -> self.round_decimal decimal_places use_bankers + Value_Type.Integer _ -> self.round_integer decimal_places rounding_mode + Value_Type.Float _ -> self.round_float decimal_places rounding_mode + Value_Type.Decimal _ _ -> self.round_decimal decimal_places rounding_mode _ -> expected = "Decimal, Float, or Integer" Error.throw (Invalid_Value_Type.Column expected self.value_type self.name) @@ -902,9 +902,9 @@ type DB_Column - We are not passing a floating point value to round with a non-zero decimal_places param (prohibited by postgres) (Note that Postgres is fine with a `numeric` value here, just not `double precision`.) should_use_builtin_round : Integer -> Boolean -> Boolean - should_use_builtin_round self decimal_places use_bankers = + should_use_builtin_round self decimal_places rounding_mode = # Don't use for banker's rounding (unless the dialect has a builtin for it) - bankers_ok = self.connection.dialect.flagged ..Use_Builtin_Bankers || use_bankers.not + bankers_ok = self.connection.dialect.flagged ..Use_Builtin_Bankers || rounding_mode != Rounding_Mode.bankers # Don't use for negative decimal places, if the backend doesn't support it negative_dp_ok = decimal_places >= 0 || self.connection.dialect.flagged ..Supports_Negative_Decimal_Places # Don't use for floating-point inputs if decimal_places != 0, for Postgres @@ -914,12 +914,12 @@ type DB_Column ## PRIVATE Round a float-like column using the backend's builtin ROUND function. round_builtin : Integer -> Boolean -> DB_Column - round_builtin self decimal_places use_bankers = + round_builtin self decimal_places rounding_mode = new_name = self.naming_helper.function_name "round" [self] - case use_bankers of - True -> + case rounding_mode of + Rounding_Mode.bankers -> self.make_binary_op "ROUND_BANKERS" (SQL_Expression.Literal decimal_places.to_text) new_name - False -> + Rounding_Mode.half_up -> case decimal_places == 0 of True -> self.make_unary_op "ROUND" new_name @@ -929,7 +929,7 @@ type DB_Column ## PRIVATE Round a float-like column. round_float : Integer -> Boolean -> DB_Column - round_float self decimal_places use_bankers = + round_float self decimal_places rounding_mode = new_name = self.naming_helper.function_name "round" [self] scale = 10 ^ decimal_places scaled = self * scale @@ -941,7 +941,7 @@ type DB_Column round_midpoint.let "round_midpoint" round_midpoint-> ((scaled.truncate % 2) == 0).let "scaled_truncate_mod_2_equals_0" scaled_truncate_mod_2_equals_0-> even_is_up = (self >= 0).iif scaled_truncate_mod_2_equals_0.not scaled_truncate_mod_2_equals_0 - half_goes_up = if use_bankers then even_is_up else self >= 0 + half_goes_up = if roungind_mode == Rounding_Mode.bankers then even_is_up else self >= 0 do_round_up = half_goes_up.let "half_goes_up" x-> x.iif (self >= round_midpoint) (self > round_midpoint) result = do_round_up.let "do_round_up" x-> x.iif ((round_base + 1.0) / scale) (round_base / scale) result.rename new_name @@ -949,7 +949,7 @@ type DB_Column ## PRIVATE Round a float-like column. round_decimal : Integer -> Boolean -> DB_Column - round_decimal self decimal_places use_bankers = + round_decimal self decimal_places rounding_mode = # Construct a constant Decimal column. k x = self.const x . cast Value_Type.Decimal new_name = self.naming_helper.function_name "round" [self] @@ -962,7 +962,7 @@ type DB_Column round_midpoint.let "round_midpoint" round_midpoint-> ((scaled.truncate.decimal_mod (k 2)) != k 0).let "scaled_truncate_mod_2_equals_0" scaled_truncate_mod_2_equals_0-> even_is_up = (self >= k 0).iif scaled_truncate_mod_2_equals_0.not scaled_truncate_mod_2_equals_0 - half_goes_up = if use_bankers then even_is_up else self >= k 0 + half_goes_up = if rounding_mode == Rounding_Mode.bankers then even_is_up else self >= k 0 do_round_up = half_goes_up.let "half_goes_up" x-> x.iif (self >= round_midpoint) (self > round_midpoint) result = do_round_up.let "do_round_up" x-> x.iif ((round_base + k 1).decimal_div scale) (round_base.decimal_div scale) result.rename new_name @@ -970,7 +970,7 @@ type DB_Column ## PRIVATE Round an integer column. round_integer : Integer -> Boolean -> DB_Column - round_integer self decimal_places use_bankers = + round_integer self decimal_places rounding_mode = new_name = self.naming_helper.function_name "round" [self] scale = 10 ^ -decimal_places halfway = scale / 2 @@ -981,11 +981,11 @@ type DB_Column result_unnudged = scaled_down * scale result_unnudged.let "result_unnudged" result_unnudged-> if_non_neg = - half_goes_up = if use_bankers then (scaled_down % 2) != 0 else self >= 0 + half_goes_up = if rounding_mode == Rounding_Mode.bankers then (scaled_down % 2) != 0 else self >= 0 round_up = half_goes_up.let "half_goes_up" x-> x.iif (remainder >= halfway) (remainder > halfway) round_up.let "round_up" x-> x.iif (result_unnudged + scale) result_unnudged if_neg = - half_goes_up = if use_bankers then (scaled_down % 2) == 0 else self >= 0 + half_goes_up = if rounding_mode == Rounding_Mode.bankers then (scaled_down % 2) == 0 else self >= 0 round_up = half_goes_up.let "half_goes_up" x-> x.iif (remainder < -halfway) (remainder <= -halfway) round_up.let "round_up" x-> x.iif (result_unnudged - scale) result_unnudged diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index a1bc2c221209..259f79c845f3 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -866,7 +866,7 @@ type Column argument. For negative decimal places, see below. By default, rounding uses "asymmetric round-half-up", also known as - "round towards positive infinity." If use_bankers=True, then it uses + "round towards positive infinity." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also known as "banker's rounding". If the column is of type `Float` and `decimal_places` > 0, `round` @@ -909,10 +909,10 @@ type Column Round a column of `Float` values`. Column.from_vector "foo" [1.2, 2.3, 3.6] . round == (Column.from_vector "foo" [1, 2, 4]) - round self decimal_places:Integer=0 use_bankers:Boolean=False -> Column ! Illegal_Argument | Invalid_Value_Type = Value_Type.expect_numeric self <| + round self decimal_places:Integer=0 rounding_mode:Rounding_Mode=Rounding_Mode.half_up -> Column ! Illegal_Argument | Invalid_Value_Type = Value_Type.expect_numeric self <| Illegal_Argument.handle_java_exception <| Rounding_Helpers.check_decimal_places decimal_places <| new_name = naming_helper.function_name "round" [self] - run_vectorized_ternary_op self Java_Storage.Maps.ROUND decimal_places use_bankers new_name=new_name + run_vectorized_ternary_op self Java_Storage.Maps.ROUND decimal_places (rounding_mode == Rounding_Mode.bankers) new_name=new_name ## ALIAS int GROUP Standard.Base.Rounding diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso index aee692b652de..6cd089a44749 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso @@ -31,7 +31,7 @@ type Column_Operation Power (input : Column_Ref|Expression|Number) (rhs : Column_Ref|Expression|Number) ## Rounds values in the column to the specified precision. - Round (input : Column_Ref|Expression|Number) (precision:Integer = 0) (use_bankers:Boolean = False) + Round (input : Column_Ref|Expression|Number) (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.half_up) ## Rounds values in the column up to the nearest integer. Ceil (input : Column_Ref|Expression|Number) @@ -85,7 +85,7 @@ Simple_Expression.from (that:Column_Operation) = Column_Operation.Divide input rhs -> Simple_Expression.Simple_Expr input (Simple_Calculation.Divide rhs) Column_Operation.Mod input rhs -> Simple_Expression.Simple_Expr input (Simple_Calculation.Mod rhs) Column_Operation.Power input rhs -> Simple_Expression.Simple_Expr input (Simple_Calculation.Power rhs) - Column_Operation.Round input precision use_bankers -> Simple_Expression.Simple_Expr input (Simple_Calculation.Round precision use_bankers) + Column_Operation.Round input precision rounding_mode -> Simple_Expression.Simple_Expr input (Simple_Calculation.Round precision rounding_mode) Column_Operation.Ceil input -> Simple_Expression.Simple_Expr input Simple_Calculation.Ceil Column_Operation.Floor input -> Simple_Expression.Simple_Expr input Simple_Calculation.Floor Column_Operation.Truncate input -> Simple_Expression.Simple_Expr input Simple_Calculation.Truncate diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso index 05e3b7ec06e8..1779f9d31d4f 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso @@ -42,7 +42,7 @@ type Simple_Expression Simple_Calculation.Divide rhs -> input_column / (table.resolve rhs) Simple_Calculation.Mod rhs -> input_column % (table.resolve rhs) Simple_Calculation.Power rhs -> input_column ^ (table.resolve rhs) - Simple_Calculation.Round precision use_bankers -> input_column.round precision use_bankers + Simple_Calculation.Round precision rounding_mode -> input_column.round precision rounding_mode Simple_Calculation.Ceil -> input_column.ceil Simple_Calculation.Floor -> input_column.floor Simple_Calculation.Truncate -> input_column.truncate @@ -166,7 +166,7 @@ type Math_Operation Power (rhs : Column_Ref|Expression|Number = 1) ## Rounds values in the column to the specified precision. - Round (precision:Integer = 0) (use_bankers:Boolean = False) + Round (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.half_up) ## Rounds values in the column up to the nearest integer. Ceil @@ -206,7 +206,7 @@ type Math_Operation Math_Operation.Negate -> column * -1 Math_Operation.Mod rhs -> column % (table.resolve rhs) Math_Operation.Power rhs -> column ^ (table.resolve rhs) - Math_Operation.Round precision use_bankers -> column.round precision use_bankers + Math_Operation.Round precision rounding_mode -> column.round precision rounding_mode Math_Operation.Ceil -> column.ceil Math_Operation.Floor -> column.floor Math_Operation.Truncate -> column.truncate @@ -346,7 +346,7 @@ type Simple_Calculation Power (rhs : Column_Ref|Expression|Number = 1) ## Rounds values in the column to the specified precision. - Round (precision:Integer = 0) (use_bankers:Boolean = False) + Round (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.half_up) ## Rounds values in the column up to the nearest integer. Ceil diff --git a/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java b/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java index 787ca8d2ae51..06caa33eeb5d 100644 --- a/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java +++ b/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java @@ -80,7 +80,7 @@ public static double roundDouble(double n, long decimalPlaces, boolean useBanker *

For integers, rounding to 0 or more decimal places simply returns the argument. * *

By default, rounding uses "asymmetric round-half-up", also known as "round towards positive - * infinity." If use_bankers=True, then it uses "round-half-even", also known as "banker's + * infinity." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also known as "banker's * rounding". * * @param n the number to round. diff --git a/test/Base_Tests/src/Data/Decimal_Spec.enso b/test/Base_Tests/src/Data/Decimal_Spec.enso index 98a9d096b215..13f910246993 100644 --- a/test/Base_Tests/src/Data/Decimal_Spec.enso +++ b/test/Base_Tests/src/Data/Decimal_Spec.enso @@ -840,8 +840,8 @@ add_specs suite_builder = Decimal.new "0" . signum . should_equal 0 suite_builder.group "(Decimal_Spec) Rounding" group_builder-> - do_round n dp=0 use_bankers=False = - d = Decimal.new n . round dp use_bankers + do_round n dp=0 rounding_Mode=Rounding_Mode.half_up = + d = Decimal.new n . round dp rounding_mode d.to_float Round_Spec.add_specs group_builder (Round_Spec.Batch_Runner.from_function do_round) run_advanced=True @@ -870,7 +870,7 @@ add_specs suite_builder = Decimal.new "3.3" . round . should_equal (Decimal.new "3") Decimal.new "3.1415" . round 2 . should_equal (Decimal.new "3.14") Decimal.new "1234.5678E-50" . round 53 . should_equal (Decimal.new "1234.568E-50") - Decimal.new "2.5" . round use_bankers=True . should_equal 2 + Decimal.new "2.5" . round rounding_Mode=Rounding_Mode.bankers . should_equal 2 suite_builder.group "(Decimal_Spec) floor, ceil, truncate" group_builder-> group_builder.specify "should calculate floor correctly" <| diff --git a/test/Base_Tests/src/Data/Round_Spec.enso b/test/Base_Tests/src/Data/Round_Spec.enso index 7820f8447793..f08c53dcb587 100644 --- a/test/Base_Tests/src/Data/Round_Spec.enso +++ b/test/Base_Tests/src/Data/Round_Spec.enso @@ -10,24 +10,24 @@ type Batch_Runner Value (run_batch : Vector -> Vector -> Boolean -> Vector) (run_one : Number -> Integer -> Boolean -> Number) from_function (f : Number -> Integer -> Boolean -> Number) = - batch values_vec dps_vec use_bankers = - values_vec.zip dps_vec v-> dp-> f v dp use_bankers + batch values_vec dps_vec rounding_mode = + values_vec.zip dps_vec v-> dp-> f v dp rounding_mode Batch_Runner.Value batch f - run self (use_bankers : Boolean) (action : Batch_Builder -> Nothing) = + run self (rounding_mode : Rounding_Mode) (action : Batch_Builder -> Nothing) = configs = Vector.build vector_builder-> action (Batch_Builder.Value vector_builder . round) values_vec = configs.map c-> c.at 0 dps_vec = configs.map c-> c.at 1 expected_vec = configs.map c-> c.at 2 epsilon_vec = configs.map c-> c.at 3 - got_vec = self.run_batch values_vec dps_vec use_bankers + got_vec = self.run_batch values_vec dps_vec rounding_mode got_vec.each_with_index ix-> got-> expected = expected_vec.at ix value = values_vec.at ix dp = dps_vec.at ix epsilon = epsilon_vec.at ix - Test.with_clue "round("+value.to_text+", "+dp.to_text+", use_bankers="+use_bankers.to_text+") -> " <| + Test.with_clue "round("+value.to_text+", "+dp.to_text+", rounding_mode="+rounding_mode.to_text+") -> " <| got.should_equal expected epsilon type Batch_Builder @@ -46,7 +46,7 @@ type Check_Instance add_specs group_builder batch_runner run_advanced = pending_advanced = if run_advanced.not then "Advanced edge tests are disabled in this run." group_builder.specify "Can round positive decimals correctly" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun 3.0 . should_equal 3 round_fun 3.00001 . should_equal 3 round_fun 3.3 . should_equal 3 @@ -56,7 +56,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3.99999 . should_equal 4 group_builder.specify "Can round negative decimals correctly" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun -3.0 . should_equal -3 round_fun -3.00001 . should_equal -3 round_fun -3.3 . should_equal -3 @@ -66,20 +66,20 @@ add_specs group_builder batch_runner run_advanced = round_fun -3.99999 . should_equal -4 group_builder.specify "Explicit and implicit 0 decimal places work the same" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun 3.00001 0 . should_equal 3 round_fun 3.3 0 . should_equal 3 round_fun 3.00001 . should_equal 3 round_fun 3.3 . should_equal 3 group_builder.specify "Can round zero and small decimals correctly" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun 0.0 . should_equal 0 round_fun 0.00001 . should_equal 0 round_fun -0.00001 . should_equal 0 group_builder.specify "Can round positive decimals to a specified number of decimal places" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun 3.0001 2 . should_equal 3.0 round_fun 3.1414 2 . should_equal 3.14 round_fun 3.1415 2 . should_equal 3.14 @@ -93,7 +93,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3.9999 3 . should_equal 4.0 group_builder.specify "Can round negative decimals to a specified number of decimal places" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun -3.0001 2 . should_equal -3.0 round_fun -3.1414 2 . should_equal -3.14 round_fun -3.1415 2 . should_equal -3.14 @@ -107,7 +107,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3.9999 3 . should_equal -4.0 group_builder.specify "Can round positive decimals to a specified negative number of decimal places" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun 1234.0 -1 . should_equal 1230 round_fun 1234.0 -2 . should_equal 1200 round_fun 1234.0 -3 . should_equal 1000 @@ -123,7 +123,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 1494.0 -2 . should_equal 1500 group_builder.specify "Can round negative decimals to a specified negative number of decimal places" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun -1234.0 -1 . should_equal -1230 round_fun -1234.0 -2 . should_equal -1200 round_fun -1234.0 -3 . should_equal -1000 @@ -139,7 +139,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -1494.0 -2 . should_equal -1500 group_builder.specify "Banker's rounding handles half-way values correctly" pending=pending_advanced <| - batch_runner.run use_bankers=True round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.bankers round_fun-> round_fun -3.5 . should_equal -4 round_fun -2.5 . should_equal -2 round_fun -1.5 . should_equal -2 @@ -160,7 +160,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -12250.0 -2 . should_equal -12200 group_builder.specify "Banker's rounding handles non-half-way values just like normal rounding" pending=pending_advanced <| - batch_runner.run use_bankers=True round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.bankers round_fun-> round_fun 3.0 . should_equal 3 round_fun 3.00001 . should_equal 3 round_fun 3.3 . should_equal 3 @@ -168,7 +168,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3.50001 . should_equal 4 round_fun 3.99999 . should_equal 4 - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun -3.0 . should_equal -3 round_fun -3.00001 . should_equal -3 round_fun -3.3 . should_equal -3 @@ -177,7 +177,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3.99999 . should_equal -4 group_builder.specify "Can round small integers to a specified number of decimal places correctly (value is unchanged)" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun 0 . should_equal 0 round_fun 3 . should_equal 3 round_fun -3 . should_equal -3 @@ -187,7 +187,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3 1 . should_equal -3 group_builder.specify "Can round integers to a specified number of negative places correctly" <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun 0 -1 . should_equal 0 round_fun 4 -1 . should_equal 0 round_fun 5 -1 . should_equal 10 @@ -216,7 +216,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3101 -3 . should_equal 3000 group_builder.specify "Can round negative integers to a specified number of negative places correctly" pending=pending_advanced <| - batch_runner.run use_bankers=False round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> round_fun -4 -1 . should_equal 0 round_fun -5 -1 . should_equal -10 round_fun -6 -1 . should_equal -10 @@ -244,7 +244,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3101 -3 . should_equal -3000 group_builder.specify "Can round negative integers to a specified number of negative places with banker's rounding correctly" pending=pending_advanced <| - batch_runner.run use_bankers=True round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.bankers round_fun-> round_fun 12300 -2 . should_equal 12300 round_fun 12301 -2 . should_equal 12300 round_fun 12330 -2 . should_equal 12300 @@ -275,5 +275,3 @@ add_specs group_builder batch_runner run_advanced = group_builder.specify "Handles incorrect argument types" <| Test.expect_panic_with (batch_runner.run_one 123 "two") Type_Error - Test.expect_panic_with (batch_runner.run_one 123 use_bankers="no") Type_Error - Test.expect_panic_with (batch_runner.run_one 123 use_bankers=0) Type_Error diff --git a/test/Benchmarks/src/Column_Numeric.enso b/test/Benchmarks/src/Column_Numeric.enso index 756b451d511c..02bc3965d2d5 100644 --- a/test/Benchmarks/src/Column_Numeric.enso +++ b/test/Benchmarks/src/Column_Numeric.enso @@ -110,10 +110,10 @@ collect_benches = Bench.build builder-> group_builder.specify "floor_decimals" <| data.decimals.floor - [True, False].each use_bankers-> + [Rounding_Mode.half_up, Rounding_Mode.bankers].each rounding_mode-> [0, -2, 2].map decimal_places-> - name = create_name "round_decimal_places_" decimal_places use_bankers - fun x = x.round decimal_places use_bankers + name = create_name "round_decimal_places_" decimal_places rounding_mode + fun x = x.round decimal_places rounding_mode group_builder.specify ("ints_" + name) <| fun data.ints @@ -133,12 +133,12 @@ collect_benches = Bench.build builder-> ## Creates a valid name for the benchmark -create_name : Text -> Integer -> Boolean -> Text -create_name prefix dec_places use_bankers = - use_bankers_str = "_use_bankers_" + (use_bankers.to_text.to_case Case.Lower) +create_name : Text -> Integer -> Rounding_Mode -> Text +create_name prefix dec_places rounding_mode = + rounding_mode_str = "_rounding_mode_" + (rounding_mode.to_text.to_case Case.Lower) case dec_places >= 0 of - True -> prefix + dec_places.to_text + use_bankers_str - False -> prefix + "minus_" + (dec_places.abs.to_text) + use_bankers_str + True -> prefix + dec_places.to_text + rounding_mode_str + False -> prefix + "minus_" + (dec_places.abs.to_text) + rounding_mode_str main = collect_benches . run_main diff --git a/test/Benchmarks/src/Numeric.enso b/test/Benchmarks/src/Numeric.enso index f8be613eacf1..e70bb4787f8a 100644 --- a/test/Benchmarks/src/Numeric.enso +++ b/test/Benchmarks/src/Numeric.enso @@ -42,10 +42,10 @@ collect_benches = Bench.build builder-> fun = pair.at 1 group_builder.specify ("integer_" + name) (data.integers.map fun) - [True, False].each use_bankers-> + [Rounding_Mode.half_up, Rounding_Mode.bankers].each rounding_mode-> [0, -2, 2].each decimal_places-> - name = create_name "round_decimal_places_" decimal_places use_bankers - fun = _.round decimal_places use_bankers + name = create_name "round_decimal_places_" decimal_places rounding_mode + fun = _.round decimal_places rounding_mode group_builder.specify ("float_" + name) (data.floats.map fun) group_builder.specify ("integer_" + name) (data.integers.map fun) @@ -62,11 +62,11 @@ collect_benches = Bench.build builder-> ## Creates a valid name for the benchmark create_name : Text -> Integer -> Boolean -> Text -create_name prefix dec_places use_bankers = - use_bankers_str = "_use_bankers_" + (use_bankers.to_text.to_case Case.Lower) +create_name prefix dec_places rounding_mode = + rounding_mode_str = "_rounding_mode_" + (rounding_mode.to_text.to_case Case.Lower) case dec_places >= 0 of - True -> prefix + dec_places.to_text + use_bankers_str - False -> prefix + "minus_" + (dec_places.abs.to_text) + use_bankers_str + True -> prefix + dec_places.to_text + rounding_mode_str + False -> prefix + "minus_" + (dec_places.abs.to_text) + rounding_mode_str main = collect_benches . run_main diff --git a/test/Snowflake_Tests/src/Snowflake_Spec.enso b/test/Snowflake_Tests/src/Snowflake_Spec.enso index 9d4266e9293d..d173227d8438 100644 --- a/test/Snowflake_Tests/src/Snowflake_Spec.enso +++ b/test/Snowflake_Tests/src/Snowflake_Spec.enso @@ -475,9 +475,9 @@ snowflake_specific_spec suite_builder default_connection db_name setup = col . cast Value_Type.Integer . round 1 . value_type . should_equal (Value_Type.Decimal 38 0) col . cast Value_Type.Decimal . round 1 . value_type . should_equal (Value_Type.Decimal 38 1) - col . cast Value_Type.Float . round use_bankers=True . value_type . should_equal Value_Type.Float - col . cast Value_Type.Integer . round use_bankers=True . value_type . should_equal Value_Type.Float - col . cast Value_Type.Decimal . round use_bankers=True . value_type . should_equal Value_Type.Float + col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float col . cast Value_Type.Float . ceil . value_type . should_equal Value_Type.Float col . cast Value_Type.Integer . ceil . value_type . should_equal (Value_Type.Decimal 38 0) @@ -496,7 +496,7 @@ snowflake_specific_spec suite_builder default_connection db_name setup = result = table.at "x" |> op result.to_vector.at 0 - do_round n dp=0 use_bankers=False = do_op n (_.round dp use_bankers) + do_round n dp=0 rounding_Mode=Rounding_Mode.half_up = do_op n (_.round dp rounding_mode) group_builder.specify "Can round correctly near the precision limit" <| do_round 1.2222222222222225 15 . should_equal 1.222222222222223 @@ -505,10 +505,10 @@ snowflake_specific_spec suite_builder default_connection db_name setup = do_round -1.2222222222222235 15 . should_equal -1.222222222222224 group_builder.specify "Can round correctly near the precision limit, using banker's rounding" <| - do_round 1.2222222222222225 15 use_bankers=True . should_equal 1.222222222222222 - do_round -1.2222222222222225 15 use_bankers=True . should_equal -1.222222222222222 - do_round 1.2222222222222235 15 use_bankers=True . should_equal 1.222222222222224 - do_round -1.2222222222222235 15 use_bankers=True . should_equal -1.222222222222224 + do_round 1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222222 + do_round -1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222222 + do_round 1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222224 + do_round -1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222224 group_builder.specify "Can handle NaN/Infinity" <| ops = [.round, .truncate, .ceil, .floor] diff --git a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso index 89ade18f91f1..6fd8cfa8679f 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso @@ -156,18 +156,18 @@ add_column_operation_specs suite_builder setup = pending_datetime = if (setup.flagged ..Date_Time).not then "Date/Time operations are not supported by this backend." suite_builder.group prefix+"(Column_Operations_Spec) Rounding numeric tests" group_builder-> - round_one n dp=0 use_bankers=False = + round_one n dp=0 rounding_Mode=Rounding_Mode.half_up = table = light_table_builder [["x", [n]]] - result = table.at "x" . round dp use_bankers + result = table.at "x" . round dp rounding_mode result.to_vector.at 0 - round_batch n_vec dp_vec use_bankers = + round_batch n_vec dp_vec rounding_mode = name_for ix = "x"+ix.to_text n_columns = n_vec.map_with_index ix-> n-> [name_for ix, [n]] table = light_table_builder n_columns new_columns = dp_vec.map_with_index ix-> dp-> n_col = table.at (name_for ix) - n_col.round dp use_bankers . rename (name_for ix) + n_col.round dp rounding_mode . rename (name_for ix) # In new table input columns are replaced with results of output new_table = new_columns.fold table acc-> col-> acc.set col (set_mode=..Update) # We read all operations in a single query diff --git a/test/Table_Tests/src/Database/Common/IR_Spec.enso b/test/Table_Tests/src/Database/Common/IR_Spec.enso index 1b51c4278ab3..618993a4de10 100644 --- a/test/Table_Tests/src/Database/Common/IR_Spec.enso +++ b/test/Table_Tests/src/Database/Common/IR_Spec.enso @@ -57,13 +57,13 @@ add_specs (suite_builder : Suite_Builder) setup (prefix : Text) default_connecti group_builder.specify "should be able to traverse a Query to reconstruct it" <| col = data.t1 . at "a" - a = col.round * col.round use_bankers=True + a = col.round * col.round rounding_Mode=Rounding_Mode.bankers a_query = a.to_table.to_select_query a_query.traverse (x->x) . should_equal a_query group_builder.specify "should be able to traverse a Query to count nodes" <| col = data.t1 . at "a" - a = col.round * col.round use_bankers=True + a = col.round * col.round rounding_Mode=Rounding_Mode.bankers a_sub = (a . rename "p" . to_table . as_subquery . at "p") b = a_sub * a_sub b_sub = (b . rename "p" . to_table . as_subquery . at "p") @@ -85,8 +85,8 @@ add_specs (suite_builder : Suite_Builder) setup (prefix : Text) default_connecti ## Complex query that optionally enables let bindings at each step big = wm b0 (x * y) xty-> wm b1 (x + y + 10) xpyp10-> - wm b2 (xty.round 1 use_bankers=True) r0-> - wm b3 (xpyp10.round use_bankers=True) r1-> + wm b2 (xty.round 1 rounding_Mode=Rounding_Mode.bankers) r0-> + wm b3 (xpyp10.round rounding_Mode=Rounding_Mode.bankers) r1-> r0 + r1 big.to_vector results.flatten.flatten.flatten.distinct.length . should_equal 1 diff --git a/test/Table_Tests/src/Database/Postgres_Spec.enso b/test/Table_Tests/src/Database/Postgres_Spec.enso index dbb061caf417..1e0bcf5eac18 100644 --- a/test/Table_Tests/src/Database/Postgres_Spec.enso +++ b/test/Table_Tests/src/Database/Postgres_Spec.enso @@ -646,9 +646,9 @@ postgres_specific_spec suite_builder create_connection_fn db_name setup = col . cast Value_Type.Integer . round 1 . value_type . should_equal Value_Type.Decimal col . cast Value_Type.Decimal . round 1 . value_type . should_equal Value_Type.Decimal - col . cast Value_Type.Float . round use_bankers=True . value_type . should_equal Value_Type.Float - col . cast Value_Type.Integer . round use_bankers=True . value_type . should_equal Value_Type.Float - col . cast Value_Type.Decimal . round use_bankers=True . value_type . should_equal Value_Type.Decimal + col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Decimal col . cast Value_Type.Float . ceil . value_type . should_equal Value_Type.Float col . cast Value_Type.Integer . ceil . value_type . should_equal Value_Type.Float @@ -667,7 +667,7 @@ postgres_specific_spec suite_builder create_connection_fn db_name setup = result = table.at "x" |> op result.to_vector.at 0 - do_round data n dp=0 use_bankers=False = do_op data n (_.round dp use_bankers) + do_round data n dp=0 rounding_Mode=Rounding_Mode.half_up = do_op data n (_.round dp rounding_mode) ## column expressions group_builder.specify "Can round correctly near the precision limit" <| @@ -678,10 +678,10 @@ postgres_specific_spec suite_builder create_connection_fn db_name setup = ## column expressions group_builder.specify "Can round correctly near the precision limit, using banker's rounding" <| - do_round data 1.2222222222222225 15 use_bankers=True . should_equal 1.222222222222222 - do_round data -1.2222222222222225 15 use_bankers=True . should_equal -1.222222222222222 - do_round data 1.2222222222222235 15 use_bankers=True . should_equal 1.222222222222224 - do_round data -1.2222222222222235 15 use_bankers=True . should_equal -1.222222222222224 + do_round data 1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222222 + do_round data -1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222222 + do_round data 1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222224 + do_round data -1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222224 ## input/output group_builder.specify "Can handle NaN/Infinity" <| diff --git a/test/Table_Tests/src/Database/SQLite_Spec.enso b/test/Table_Tests/src/Database/SQLite_Spec.enso index 61db0a520a8d..a12b59d4290e 100644 --- a/test/Table_Tests/src/Database/SQLite_Spec.enso +++ b/test/Table_Tests/src/Database/SQLite_Spec.enso @@ -246,9 +246,9 @@ sqlite_specific_spec suite_builder prefix create_connection_func setup = col . cast Value_Type.Integer . round 1 . value_type . should_equal Value_Type.Float col . cast Value_Type.Decimal . round 1 . value_type . should_equal Value_Type.Float - col . cast Value_Type.Float . round use_bankers=True . value_type . should_equal Value_Type.Float - col . cast Value_Type.Integer . round use_bankers=True . value_type . should_equal Value_Type.Float - col . cast Value_Type.Decimal . round use_bankers=True . value_type . should_equal Value_Type.Float + col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float col . cast Value_Type.Float . ceil . value_type . should_equal Value_Type.Float col . cast Value_Type.Integer . ceil . value_type . should_equal Value_Type.Integer @@ -267,7 +267,7 @@ sqlite_specific_spec suite_builder prefix create_connection_func setup = result = table.at "x" |> op result.to_vector.at 0 - do_round data n dp=0 use_bankers=False = do_op data n (_.round dp use_bankers) + do_round data n dp=0 rounding_Mode=Rounding_Mode.half_up = do_op data n (_.round dp rounding_mode) group_builder.specify "Can round correctly near the precision limit" <| # This value varies depending on the version of SQLite. @@ -277,10 +277,10 @@ sqlite_specific_spec suite_builder prefix create_connection_func setup = do_round data -1.2222222222222235 15 . should_equal -1.222222222222223 group_builder.specify "Can round correctly near the precision limit, using banker's rounding" <| - do_round data 1.2222222222222225 15 use_bankers=True . should_equal 1.222222222222222 - do_round data -1.2222222222222225 15 use_bankers=True . should_equal -1.222222222222222 - do_round data 1.2222222222222235 15 use_bankers=True . should_equal 1.222222222222224 - do_round data -1.2222222222222235 15 use_bankers=True . should_equal -1.222222222222224 + do_round data 1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222222 + do_round data -1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222222 + do_round data 1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222224 + do_round data -1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222224 group_builder.specify "Can handle NaN/Infinity" <| ## SQLite does not support NaN diff --git a/test/Table_Tests/src/In_Memory/Column_Spec.enso b/test/Table_Tests/src/In_Memory/Column_Spec.enso index c023c48ee73d..8689d25d3e0c 100644 --- a/test/Table_Tests/src/In_Memory/Column_Spec.enso +++ b/test/Table_Tests/src/In_Memory/Column_Spec.enso @@ -311,7 +311,7 @@ add_specs suite_builder = Column.from_vector "foo" [1.2, 2.3, 2.5, 3.6] . round . should_equal (Column.from_vector "round([foo])" [1, 2, 3, 4]) Column.from_vector "foo" [1.25, 2.33, 3.57] . round 1 . should_equal <| Column.from_vector "round([foo])" [1.3, 2.3, 3.6] Column.from_vector "foo" [12.0, 24.0, 25.0, 29.0] . round -1 . should_equal <| Column.from_vector "round([foo])" [10, 20, 30, 30] - Column.from_vector "foo" [1.5, 2.5, 3.5] . round use_bankers=True . should_equal <| Column.from_vector "round([foo])" [2, 2, 4] + Column.from_vector "foo" [1.5, 2.5, 3.5] . round rounding_Mode=Rounding_Mode.bankers . should_equal <| Column.from_vector "round([foo])" [2, 2, 4] Column.from_vector "foo" [-1.2, -2.3, -2.5, -3.6] . round . should_equal (Column.from_vector "round([foo])" [-1, -2, -3, -4]) Column.from_vector "foo" [-1.25, -2.33, -2.45, -3.57] . round 1 . should_equal <| Column.from_vector "round([foo])" [-1.3, -2.3, -2.5, -3.6] @@ -326,7 +326,7 @@ add_specs suite_builder = group_builder.specify "should be able to round a column of integers" <| Column.from_vector "foo" [12, 24, 25, 29] . round . should_equal <| Column.from_vector "round([foo])" [12, 24, 25, 29] Column.from_vector "foo" [12, 24, 25, 29] . round -1 . should_equal <| Column.from_vector "round([foo])" [10, 20, 30, 30] - Column.from_vector "foo" [15, 25, 35] . round -1 use_bankers=True . should_equal <| Column.from_vector "round([foo])" [20, 20, 40] + Column.from_vector "foo" [15, 25, 35] . round -1 rounding_Mode=Rounding_Mode.bankers . should_equal <| Column.from_vector "round([foo])" [20, 20, 40] group_builder.specify "integer rounding should return the correct column type" <| col = Column.from_vector "foo" [12, 24, 25, 29] @@ -350,7 +350,7 @@ add_specs suite_builder = group_builder.specify "should handle type errors" <| col = Column.from_vector "foo" [12, 23, 45] - Test.expect_panic_with (col.round use_bankers="string") Type_Error + Test.expect_panic_with (col.round rounding_mode="string") Type_Error Test.expect_panic_with (col.round decimal_places="string") Type_Error suite_builder.group "truncate" group_builder-> @@ -394,7 +394,7 @@ add_specs suite_builder = col = Column.from_vector "x" [n] result = op col result.to_vector.at 0 - do_round n dp=0 use_bankers=False = do_op n (_.round dp use_bankers) + do_round n dp=0 rounding_Mode=Rounding_Mode.half_up = do_op n (_.round dp rounding_mode) group_builder.specify "round returns the correct type" <| do_round 231.2 1 . should_be_a Float From 64127a65fb4ee0202919f5d89388308661261f63 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 25 Mar 2025 16:49:50 -0400 Subject: [PATCH 02/37] wip --- distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso index 5586e3fe37ad..392a9119ea82 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso @@ -1008,7 +1008,7 @@ type Decimal round : Integer -> Boolean -> Decimal round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.half_up) -> Decimal = out_of_range = decimal_places > Java_Integer.MAX_VALUE || decimal_places < Java_Integer.MIN_VALUE - if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places use_bankers) else + if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places rounding_mode) else message = "round decimal_places must be between "+Java_Integer.MIN_VALUE.to_text+" and "+Java_Integer.MAX_VALUE.to_text+" (inclusive), but was "+decimal_places.to_text Error.throw (Out_Of_Range.Error decimal_places message) From 57ee98dc25cc36002e436446a8dabc8cd147fe11 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 25 Mar 2025 16:59:25 -0400 Subject: [PATCH 03/37] add import to Numbers --- distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso | 1 + 1 file changed, 1 insertion(+) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index 8047133e29a8..8a1a686425e2 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -1,6 +1,7 @@ import project.Any.Any import project.Data.Decimal.Decimal import project.Data.Locale.Locale +import project.Data.Numeric.Rounding_Mode import project.Data.Ordering.Comparable import project.Data.Text.Text import project.Error.Error From 07e91dac4f4fbb34ac7d33ed269241bd51d1c54d Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Wed, 26 Mar 2025 10:58:29 -0400 Subject: [PATCH 04/37] wip --- distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index 8a1a686425e2..00f6fb7a8139 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -1,7 +1,7 @@ import project.Any.Any import project.Data.Decimal.Decimal import project.Data.Locale.Locale -import project.Data.Numeric.Rounding_Mode +import project.Data.Numeric.Rounding_Mode.Rounding_Mode import project.Data.Ordering.Comparable import project.Data.Text.Text import project.Error.Error From 974e85960b3b9faa9ab7bb63d1a3636b191e068d Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 27 Mar 2025 14:11:06 -0400 Subject: [PATCH 05/37] added rm import --- distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso | 1 + 1 file changed, 1 insertion(+) diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso index 419a9e166376..87e9925ab43b 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso @@ -1,4 +1,5 @@ from Standard.Base import all +import Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode import Standard.Base.Data.Read.Many_Files_List.Many_Files_List import Standard.Base.Errors.Common.Floating_Point_Equality import Standard.Base.Errors.Common.Index_Out_Of_Bounds From e246663434f0ec65c937df48f097132e02773b22 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Fri, 28 Mar 2025 15:41:26 -0400 Subject: [PATCH 06/37] typo --- distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso index 7feb4de6cd7a..6278c83f5c67 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso @@ -942,7 +942,7 @@ type DB_Column round_midpoint.let "round_midpoint" round_midpoint-> ((scaled.truncate % 2) == 0).let "scaled_truncate_mod_2_equals_0" scaled_truncate_mod_2_equals_0-> even_is_up = (self >= 0).iif scaled_truncate_mod_2_equals_0.not scaled_truncate_mod_2_equals_0 - half_goes_up = if roungind_mode == Rounding_Mode.bankers then even_is_up else self >= 0 + half_goes_up = if rounding_mode == Rounding_Mode.bankers then even_is_up else self >= 0 do_round_up = half_goes_up.let "half_goes_up" x-> x.iif (self >= round_midpoint) (self > round_midpoint) result = do_round_up.let "do_round_up" x-> x.iif ((round_base + 1.0) / scale) (round_base / scale) result.rename new_name From d74c53b7758e8e1e15b6e175b05de5c6c0593905 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Mon, 31 Mar 2025 14:12:55 -0400 Subject: [PATCH 07/37] wip --- distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso | 1 - .../src/Common_Table_Operations/Column_Operations_Spec.enso | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso index 6278c83f5c67..6c40b1e2775a 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso @@ -1,5 +1,4 @@ from Standard.Base import all -import Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode import Standard.Base.Data.Read.Many_Files_List.Many_Files_List import Standard.Base.Errors.Common.Floating_Point_Equality import Standard.Base.Errors.Common.Index_Out_Of_Bounds diff --git a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso index 6fd8cfa8679f..36fb171f3061 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso @@ -156,7 +156,7 @@ add_column_operation_specs suite_builder setup = pending_datetime = if (setup.flagged ..Date_Time).not then "Date/Time operations are not supported by this backend." suite_builder.group prefix+"(Column_Operations_Spec) Rounding numeric tests" group_builder-> - round_one n dp=0 rounding_Mode=Rounding_Mode.half_up = + round_one n dp=0 rounding_mode=Rounding_Mode.half_up = table = light_table_builder [["x", [n]]] result = table.at "x" . round dp rounding_mode result.to_vector.at 0 From 0c36aa9ab9fc1da6df96cac74603319a78c6aaf0 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Mon, 31 Mar 2025 14:22:36 -0400 Subject: [PATCH 08/37] proper constructors --- .../Base/0.0.0-dev/src/Data/Decimal.enso | 6 ++-- .../Base/0.0.0-dev/src/Data/Numbers.enso | 16 +++++----- .../src/Data/Numeric/Math_Context.enso | 6 ++-- .../src/Data/Numeric/Rounding_Mode.enso | 14 ++++----- .../Database/0.0.0-dev/src/DB_Column.enso | 18 +++++------ .../Standard/Table/0.0.0-dev/src/Column.enso | 6 ++-- .../Table/0.0.0-dev/src/Column_Operation.enso | 2 +- .../0.0.0-dev/src/Simple_Expression.enso | 4 +-- .../common_utils/Core_Math_Utils.java | 2 +- test/Base_Tests/src/Data/Decimal_Spec.enso | 24 +++++++-------- test/Base_Tests/src/Data/Round_Spec.enso | 30 +++++++++---------- test/Benchmarks/src/Column_Numeric.enso | 2 +- test/Benchmarks/src/Numeric.enso | 2 +- test/Snowflake_Tests/src/Snowflake_Spec.enso | 16 +++++----- .../Column_Operations_Spec.enso | 2 +- .../src/Database/Common/IR_Spec.enso | 8 ++--- .../src/Database/Postgres_Spec.enso | 16 +++++----- .../Table_Tests/src/Database/SQLite_Spec.enso | 16 +++++----- .../src/In_Memory/Column_Spec.enso | 6 ++-- 19 files changed, 98 insertions(+), 98 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso index 5fb4ac777a92..c8d471561bbf 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso @@ -991,7 +991,7 @@ type Decimal Round to a specified number of decimal places. By default, rounding uses "symmetric round-half-up", also known as - "half-up." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also + "half-up." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". Arguments: @@ -1032,10 +1032,10 @@ type Decimal > Example Use Banker's Rounding. - Decimal.new "2.5" . round rounding_Mode=Rounding_Mode.bankers + Decimal.new "2.5" . round rounding_Mode=Rounding_Mode.Bankers # => 2 round : Integer -> Boolean -> Decimal - round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.half_up) -> Decimal = + round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) -> Decimal = out_of_range = decimal_places > Java_Integer.MAX_VALUE || decimal_places < Java_Integer.MIN_VALUE if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places rounding_mode) else message = "round decimal_places must be between "+Java_Integer.MIN_VALUE.to_text+" and "+Java_Integer.MAX_VALUE.to_text+" (inclusive), but was "+decimal_places.to_text diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index 00f6fb7a8139..3f7bf10bf7bc 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -660,7 +660,7 @@ type Float Round to a specified number of decimal places. By default, rounding uses "symmetric round-half-up", also known as - "half-up." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also + "half-up." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". If `decimal_places` > 0, `round` returns a `Float`; otherwise, it @@ -706,12 +706,12 @@ type Float > Example Use Banker's Rounding. - 2.5 . round rounding_Mode=Rounding_Mode.bankers == 2 + 2.5 . round rounding_Mode=Rounding_Mode.Bankers == 2 round : Integer -> Boolean -> Integer | Float ! Illegal_Argument - round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.half_up) = + round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) = report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) Panic.catch Unsupported_Argument_Types handler=report_unsupported - round_float_builtin self decimal_places (rounding_mode == Rounding_Mode.bankers) + round_float_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) ## GROUP Operators ICON operators @@ -1075,7 +1075,7 @@ type Integer argument. For negative decimal places, see below. By default, rounding uses "symmetric round-half-up", also known as - "half-up." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also + "half-up." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". Arguments: @@ -1109,14 +1109,14 @@ type Integer > Example Round to the nearest hundred, using Banker's Rounding. - 12250 . round -2 rounding_Mode=Rounding_Mode.bankers == 12200 - round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.half_up) -> Integer ! Illegal_Argument = + 12250 . round -2 rounding_Mode=Rounding_Mode.Bankers == 12200 + round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) -> Integer ! Illegal_Argument = ## We reject values outside the range of `long` here, so we don't also do this check in the Java. Rounding_Helpers.check_round_input self <| report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) Panic.catch Unsupported_Argument_Types handler=report_unsupported - round_integer_builtin self decimal_places (rounding_mode == Rounding_Mode.bankers) + round_integer_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) ## GROUP Operators ICON operators diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Math_Context.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Math_Context.enso index aa9b64b3b441..a33a51a4b754 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Math_Context.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Math_Context.enso @@ -42,7 +42,7 @@ type Math_Context specifies exact operations. - rounding_mode: The rounding mode to use. new : Integer | Unlimited -> Rounding_Mode -> Math_Context - new (precision : Integer | Unlimited) (rounding_mode : Rounding_Mode = Rounding_Mode.half_up) = + new (precision : Integer | Unlimited) (rounding_mode : Rounding_Mode = Rounding_Mode.Half_Up) = case precision of - _ : Integer -> Math_Context.Value (MathContext.new precision rounding_mode.rounding_mode) - _ : Unlimited -> Math_Context.Value (MathContext.new 0 rounding_mode.rounding_mode) + _ : Integer -> Math_Context.Value (MathContext.new precision rounding_mode.to_java_rounding_mode) + _ : Unlimited -> Math_Context.Value (MathContext.new 0 rounding_mode.to_java_rounding_mode) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index fb670b8c1056..7cf268a87cbb 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -7,17 +7,17 @@ polyglot java import java.math.RoundingMode `Rounding_Mode` is used to specify the method to use for rounding a value in operations on `Decimal`s.` See `Decimal` for more details. type Rounding_Mode - ## PRIVATE - Value (rounding_mode : RoundingMode) - ## ICON math Round towards positive infinity for positive numbers, and negative infinity for negative numbers. (This is the default.) - half_up : Rounding_Mode - half_up = Rounding_Mode.Value RoundingMode.HALF_UP + Half_Up ## ICON math Rownd towards the nearest neighbor, with ties broken by rounding towards the nearest even neighbor. - bankers : Rounding_Mode - bankers = Rounding_Mode.Value RoundingMode.HALF_EVEN + Bankers + + to_java_rounding_mode self -> RoundingMode = + case self of + Rounding_Mode.Half_Up -> RoundingMode.HALF_UP + Rounding_Mode.Bankers -> RoundingMode.HALF_EVEN diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso index 6c40b1e2775a..46d842ca286c 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso @@ -852,7 +852,7 @@ type DB_Column `Value_Type.Integer` columns. By default, rounding uses "symmetric round-half-up", also known as - "round towards 0." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", + "round towards 0." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". The return type depends on the backend. @@ -883,7 +883,7 @@ type DB_Column import Standard.Examples example_round = Examples.decimal_column.round 2 - round self decimal_places:Integer=0 rounding_mode:Rounding_Mode=Rounding_Mode.half_up -> DB_Column ! Illegal_Argument | Invalid_Value_Type = + round self decimal_places:Integer=0 rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up -> DB_Column ! Illegal_Argument | Invalid_Value_Type = Rounding_Helpers.check_decimal_places decimal_places <| Value_Type.expect_numeric self <| if self.should_use_builtin_round decimal_places rounding_mode then self.round_builtin decimal_places rounding_mode else self.short_circuit_special_floating_point <| @@ -904,7 +904,7 @@ type DB_Column should_use_builtin_round : Integer -> Boolean -> Boolean should_use_builtin_round self decimal_places rounding_mode = # Don't use for banker's rounding (unless the dialect has a builtin for it) - bankers_ok = self.connection.dialect.flagged ..Use_Builtin_Bankers || rounding_mode != Rounding_Mode.bankers + bankers_ok = self.connection.dialect.flagged ..Use_Builtin_Bankers || rounding_mode != Rounding_Mode.Bankers # Don't use for negative decimal places, if the backend doesn't support it negative_dp_ok = decimal_places >= 0 || self.connection.dialect.flagged ..Supports_Negative_Decimal_Places # Don't use for floating-point inputs if decimal_places != 0, for Postgres @@ -917,9 +917,9 @@ type DB_Column round_builtin self decimal_places rounding_mode = new_name = self.naming_helper.function_name "round" [self] case rounding_mode of - Rounding_Mode.bankers -> + Rounding_Mode.Bankers -> self.make_binary_op "ROUND_BANKERS" (SQL_Expression.Literal decimal_places.to_text) new_name - Rounding_Mode.half_up -> + Rounding_Mode.Half_Up -> case decimal_places == 0 of True -> self.make_unary_op "ROUND" new_name @@ -941,7 +941,7 @@ type DB_Column round_midpoint.let "round_midpoint" round_midpoint-> ((scaled.truncate % 2) == 0).let "scaled_truncate_mod_2_equals_0" scaled_truncate_mod_2_equals_0-> even_is_up = (self >= 0).iif scaled_truncate_mod_2_equals_0.not scaled_truncate_mod_2_equals_0 - half_goes_up = if rounding_mode == Rounding_Mode.bankers then even_is_up else self >= 0 + half_goes_up = if rounding_mode == Rounding_Mode.Bankers then even_is_up else self >= 0 do_round_up = half_goes_up.let "half_goes_up" x-> x.iif (self >= round_midpoint) (self > round_midpoint) result = do_round_up.let "do_round_up" x-> x.iif ((round_base + 1.0) / scale) (round_base / scale) result.rename new_name @@ -962,7 +962,7 @@ type DB_Column round_midpoint.let "round_midpoint" round_midpoint-> ((scaled.truncate.decimal_mod (k 2)) != k 0).let "scaled_truncate_mod_2_equals_0" scaled_truncate_mod_2_equals_0-> even_is_up = (self >= k 0).iif scaled_truncate_mod_2_equals_0.not scaled_truncate_mod_2_equals_0 - half_goes_up = if rounding_mode == Rounding_Mode.bankers then even_is_up else self >= k 0 + half_goes_up = if rounding_mode == Rounding_Mode.Bankers then even_is_up else self >= k 0 do_round_up = half_goes_up.let "half_goes_up" x-> x.iif (self >= round_midpoint) (self > round_midpoint) result = do_round_up.let "do_round_up" x-> x.iif ((round_base + k 1).decimal_div scale) (round_base.decimal_div scale) result.rename new_name @@ -981,11 +981,11 @@ type DB_Column result_unnudged = scaled_down * scale result_unnudged.let "result_unnudged" result_unnudged-> if_non_neg = - half_goes_up = if rounding_mode == Rounding_Mode.bankers then (scaled_down % 2) != 0 else self >= 0 + half_goes_up = if rounding_mode == Rounding_Mode.Bankers then (scaled_down % 2) != 0 else self >= 0 round_up = half_goes_up.let "half_goes_up" x-> x.iif (remainder >= halfway) (remainder > halfway) round_up.let "round_up" x-> x.iif (result_unnudged + scale) result_unnudged if_neg = - half_goes_up = if rounding_mode == Rounding_Mode.bankers then (scaled_down % 2) == 0 else self >= 0 + half_goes_up = if rounding_mode == Rounding_Mode.Bankers then (scaled_down % 2) == 0 else self >= 0 round_up = half_goes_up.let "half_goes_up" x-> x.iif (remainder < -halfway) (remainder <= -halfway) round_up.let "round_up" x-> x.iif (result_unnudged - scale) result_unnudged diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index a1e259ce78de..a05c5c3ca842 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -865,7 +865,7 @@ type Column argument. For negative decimal places, see below. By default, rounding uses "asymmetric round-half-up", also known as - "round towards positive infinity." If rounding_Mode=Rounding_Mode.bankers, then it uses + "round towards positive infinity." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". If the column is of type `Float` and `decimal_places` > 0, `round` @@ -908,10 +908,10 @@ type Column Round a column of `Float` values`. Column.from_vector "foo" [1.2, 2.3, 3.6] . round == (Column.from_vector "foo" [1, 2, 4]) - round self decimal_places:Integer=0 rounding_mode:Rounding_Mode=Rounding_Mode.half_up -> Column ! Illegal_Argument | Invalid_Value_Type = Value_Type.expect_numeric self <| + round self decimal_places:Integer=0 rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up -> Column ! Illegal_Argument | Invalid_Value_Type = Value_Type.expect_numeric self <| Illegal_Argument.handle_java_exception <| Rounding_Helpers.check_decimal_places decimal_places <| new_name = naming_helper.function_name "round" [self] - run_vectorized_ternary_op self Java_Storage.Maps.ROUND decimal_places (rounding_mode == Rounding_Mode.bankers) new_name=new_name + run_vectorized_ternary_op self Java_Storage.Maps.ROUND decimal_places (rounding_mode == Rounding_Mode.Bankers) new_name=new_name ## ALIAS int GROUP Standard.Base.Rounding diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso index 6cd089a44749..e411b96867c2 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso @@ -31,7 +31,7 @@ type Column_Operation Power (input : Column_Ref|Expression|Number) (rhs : Column_Ref|Expression|Number) ## Rounds values in the column to the specified precision. - Round (input : Column_Ref|Expression|Number) (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.half_up) + Round (input : Column_Ref|Expression|Number) (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.Half_Up) ## Rounds values in the column up to the nearest integer. Ceil (input : Column_Ref|Expression|Number) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso index 1779f9d31d4f..46c9d1f4707c 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso @@ -166,7 +166,7 @@ type Math_Operation Power (rhs : Column_Ref|Expression|Number = 1) ## Rounds values in the column to the specified precision. - Round (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.half_up) + Round (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.Half_Up) ## Rounds values in the column up to the nearest integer. Ceil @@ -346,7 +346,7 @@ type Simple_Calculation Power (rhs : Column_Ref|Expression|Number = 1) ## Rounds values in the column to the specified precision. - Round (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.half_up) + Round (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.Half_Up) ## Rounds values in the column up to the nearest integer. Ceil diff --git a/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java b/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java index 06caa33eeb5d..06d9302ae505 100644 --- a/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java +++ b/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java @@ -80,7 +80,7 @@ public static double roundDouble(double n, long decimalPlaces, boolean useBanker *

For integers, rounding to 0 or more decimal places simply returns the argument. * *

By default, rounding uses "asymmetric round-half-up", also known as "round towards positive - * infinity." If rounding_Mode=Rounding_Mode.bankers, then it uses "round-half-even", also known as "banker's + * infinity." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's * rounding". * * @param n the number to round. diff --git a/test/Base_Tests/src/Data/Decimal_Spec.enso b/test/Base_Tests/src/Data/Decimal_Spec.enso index 26f92581f14c..5e513893f081 100644 --- a/test/Base_Tests/src/Data/Decimal_Spec.enso +++ b/test/Base_Tests/src/Data/Decimal_Spec.enso @@ -42,7 +42,7 @@ add_specs suite_builder = Decimal.new "123.45" mc . should_equal (Decimal.new "123.5") group_builder.specify "should be able to construct a Decimal from a string, with an explicit precision, using a non-default rounding" <| - mc = Math_Context.new 4 Rounding_Mode.bankers + mc = Math_Context.new 4 Rounding_Mode.Bankers Decimal.new "123.45" mc . should_have_rep [1234, 4, 1] Decimal.new "123.45" mc . should_equal (Decimal.new "123.4") @@ -59,7 +59,7 @@ add_specs suite_builder = Decimal.new 1234500 mc . should_equal (Decimal.new 1235000) group_builder.specify "should be able to construct a Decimal from a small integer, with an explicit precision, using the non-default rounding" <| - mc = Math_Context.new 4 Rounding_Mode.bankers + mc = Math_Context.new 4 Rounding_Mode.Bankers Decimal.new 1234500 mc . should_have_rep [1234, 4, -3] Decimal.new 1234500 mc . should_equal (Decimal.new 1234000) @@ -72,7 +72,7 @@ add_specs suite_builder = Decimal.new 495782984723948723947239938732974241234500 mc . should_equal (Decimal.new 495782984723948723947239938732974241235000 ) group_builder.specify "should be able to construct a Decimal from a large integer, with an explicit precision, using the non-default rounding" <| - mc = Math_Context.new 39 Rounding_Mode.bankers + mc = Math_Context.new 39 Rounding_Mode.Bankers Decimal.new 495782984723948723947239938732974241234500 mc . should_have_rep [495782984723948723947239938732974241234 , 39, -3] Decimal.new 495782984723948723947239938732974241234500 mc . should_equal (Decimal.new 495782984723948723947239938732974241234000 ) @@ -87,7 +87,7 @@ add_specs suite_builder = d.should_equal (Decimal.new "123.13") group_builder.specify "should be able to construct a Decimal from a float, with an explicit precision, using a non-default rounding" <| - mc = Math_Context.new 5 Rounding_Mode.bankers + mc = Math_Context.new 5 Rounding_Mode.Bankers d = Decimal.from_float 123.125 mc d.should_have_rep [12312, 5, 2] d.should_equal (Decimal.new "123.12") @@ -507,17 +507,17 @@ add_specs suite_builder = group_builder.specify "should allow arithmetic with Decimals, with precision setting and rounding mode" <| (Decimal.from_float 3.4 . add (Decimal.from_float 20.05) (Math_Context.new 3)) . should_equal (Decimal.from_float 23.5) - (Decimal.from_float 3.4 . add (Decimal.from_float 20.05) (Math_Context.new 3 Rounding_Mode.bankers)) . should_equal (Decimal.from_float 23.4) + (Decimal.from_float 3.4 . add (Decimal.from_float 20.05) (Math_Context.new 3 Rounding_Mode.Bankers)) . should_equal (Decimal.from_float 23.4) (Decimal.from_float -3.4 . add (Decimal.from_float -20.05) (Math_Context.new 3)) . should_equal (Decimal.from_float -23.5) - (Decimal.from_float -3.4 . add (Decimal.from_float -20.05) (Math_Context.new 3 Rounding_Mode.bankers)) . should_equal (Decimal.from_float -23.4) + (Decimal.from_float -3.4 . add (Decimal.from_float -20.05) (Math_Context.new 3 Rounding_Mode.Bankers)) . should_equal (Decimal.from_float -23.4) (Decimal.from_float -867.625 . subtract (Decimal.from_float -33.05) (Math_Context.new 5)) . should_equal (Decimal.from_float -834.58) - (Decimal.from_float -867.625 . subtract (Decimal.from_float -33.05) (Math_Context.new 5 Rounding_Mode.bankers)) . should_equal (Decimal.from_float -834.58) + (Decimal.from_float -867.625 . subtract (Decimal.from_float -33.05) (Math_Context.new 5 Rounding_Mode.Bankers)) . should_equal (Decimal.from_float -834.58) (Decimal.from_float 49.31 . multiply (Decimal.from_integer 5) (Math_Context.new 4)) . should_equal (Decimal.from_float 246.6) - (Decimal.from_float 49.31 . multiply (Decimal.from_integer 5) (Math_Context.new 4 Rounding_Mode.bankers)) . should_equal (Decimal.from_float 246.6) + (Decimal.from_float 49.31 . multiply (Decimal.from_integer 5) (Math_Context.new 4 Rounding_Mode.Bankers)) . should_equal (Decimal.from_float 246.6) (Decimal.from_float 49.29 . multiply (Decimal.from_integer 5) (Math_Context.new 4)) . should_equal (Decimal.from_float 246.5) - (Decimal.from_float 49.29 . multiply (Decimal.from_integer 5) (Math_Context.new 4 Rounding_Mode.bankers)) . should_equal (Decimal.from_float 246.4) + (Decimal.from_float 49.29 . multiply (Decimal.from_integer 5) (Math_Context.new 4 Rounding_Mode.Bankers)) . should_equal (Decimal.from_float 246.4) (Decimal.from_float 247.75 . divide (Decimal.from_integer -5) (Math_Context.new 3)) . should_equal (Decimal.from_float -49.6) - (Decimal.from_float 247.75 . divide (Decimal.from_integer -5) (Math_Context.new 3 Rounding_Mode.bankers)) . should_equal (Decimal.from_float -49.6) + (Decimal.from_float 247.75 . divide (Decimal.from_integer -5) (Math_Context.new 3 Rounding_Mode.Bankers)) . should_equal (Decimal.from_float -49.6) group_builder.specify "should allow mixed arithmetic (integer)" <| (Decimal.from_integer 1 + 2) . should_equal 3 @@ -843,7 +843,7 @@ add_specs suite_builder = Decimal.new "0" . signum . should_equal 0 suite_builder.group "(Decimal_Spec) Rounding" group_builder-> - do_round n dp=0 rounding_Mode=Rounding_Mode.half_up = + do_round n dp=0 rounding_Mode=Rounding_Mode.Half_Up = d = Decimal.new n . round dp rounding_mode d.to_float @@ -873,7 +873,7 @@ add_specs suite_builder = Decimal.new "3.3" . round . should_equal (Decimal.new "3") Decimal.new "3.1415" . round 2 . should_equal (Decimal.new "3.14") Decimal.new "1234.5678E-50" . round 53 . should_equal (Decimal.new "1234.568E-50") - Decimal.new "2.5" . round rounding_Mode=Rounding_Mode.bankers . should_equal 2 + Decimal.new "2.5" . round rounding_Mode=Rounding_Mode.Bankers . should_equal 2 suite_builder.group "(Decimal_Spec) floor, ceil, truncate" group_builder-> group_builder.specify "should calculate floor correctly" <| diff --git a/test/Base_Tests/src/Data/Round_Spec.enso b/test/Base_Tests/src/Data/Round_Spec.enso index f08c53dcb587..dd8e66e71a76 100644 --- a/test/Base_Tests/src/Data/Round_Spec.enso +++ b/test/Base_Tests/src/Data/Round_Spec.enso @@ -46,7 +46,7 @@ type Check_Instance add_specs group_builder batch_runner run_advanced = pending_advanced = if run_advanced.not then "Advanced edge tests are disabled in this run." group_builder.specify "Can round positive decimals correctly" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun 3.0 . should_equal 3 round_fun 3.00001 . should_equal 3 round_fun 3.3 . should_equal 3 @@ -56,7 +56,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3.99999 . should_equal 4 group_builder.specify "Can round negative decimals correctly" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun -3.0 . should_equal -3 round_fun -3.00001 . should_equal -3 round_fun -3.3 . should_equal -3 @@ -66,20 +66,20 @@ add_specs group_builder batch_runner run_advanced = round_fun -3.99999 . should_equal -4 group_builder.specify "Explicit and implicit 0 decimal places work the same" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun 3.00001 0 . should_equal 3 round_fun 3.3 0 . should_equal 3 round_fun 3.00001 . should_equal 3 round_fun 3.3 . should_equal 3 group_builder.specify "Can round zero and small decimals correctly" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun 0.0 . should_equal 0 round_fun 0.00001 . should_equal 0 round_fun -0.00001 . should_equal 0 group_builder.specify "Can round positive decimals to a specified number of decimal places" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun 3.0001 2 . should_equal 3.0 round_fun 3.1414 2 . should_equal 3.14 round_fun 3.1415 2 . should_equal 3.14 @@ -93,7 +93,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3.9999 3 . should_equal 4.0 group_builder.specify "Can round negative decimals to a specified number of decimal places" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun -3.0001 2 . should_equal -3.0 round_fun -3.1414 2 . should_equal -3.14 round_fun -3.1415 2 . should_equal -3.14 @@ -107,7 +107,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3.9999 3 . should_equal -4.0 group_builder.specify "Can round positive decimals to a specified negative number of decimal places" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun 1234.0 -1 . should_equal 1230 round_fun 1234.0 -2 . should_equal 1200 round_fun 1234.0 -3 . should_equal 1000 @@ -123,7 +123,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 1494.0 -2 . should_equal 1500 group_builder.specify "Can round negative decimals to a specified negative number of decimal places" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun -1234.0 -1 . should_equal -1230 round_fun -1234.0 -2 . should_equal -1200 round_fun -1234.0 -3 . should_equal -1000 @@ -139,7 +139,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -1494.0 -2 . should_equal -1500 group_builder.specify "Banker's rounding handles half-way values correctly" pending=pending_advanced <| - batch_runner.run rounding_Mode=Rounding_Mode.bankers round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Bankers round_fun-> round_fun -3.5 . should_equal -4 round_fun -2.5 . should_equal -2 round_fun -1.5 . should_equal -2 @@ -160,7 +160,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -12250.0 -2 . should_equal -12200 group_builder.specify "Banker's rounding handles non-half-way values just like normal rounding" pending=pending_advanced <| - batch_runner.run rounding_Mode=Rounding_Mode.bankers round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Bankers round_fun-> round_fun 3.0 . should_equal 3 round_fun 3.00001 . should_equal 3 round_fun 3.3 . should_equal 3 @@ -168,7 +168,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3.50001 . should_equal 4 round_fun 3.99999 . should_equal 4 - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun -3.0 . should_equal -3 round_fun -3.00001 . should_equal -3 round_fun -3.3 . should_equal -3 @@ -177,7 +177,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3.99999 . should_equal -4 group_builder.specify "Can round small integers to a specified number of decimal places correctly (value is unchanged)" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun 0 . should_equal 0 round_fun 3 . should_equal 3 round_fun -3 . should_equal -3 @@ -187,7 +187,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3 1 . should_equal -3 group_builder.specify "Can round integers to a specified number of negative places correctly" <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun 0 -1 . should_equal 0 round_fun 4 -1 . should_equal 0 round_fun 5 -1 . should_equal 10 @@ -216,7 +216,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3101 -3 . should_equal 3000 group_builder.specify "Can round negative integers to a specified number of negative places correctly" pending=pending_advanced <| - batch_runner.run rounding_Mode=Rounding_Mode.half_up round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> round_fun -4 -1 . should_equal 0 round_fun -5 -1 . should_equal -10 round_fun -6 -1 . should_equal -10 @@ -244,7 +244,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3101 -3 . should_equal -3000 group_builder.specify "Can round negative integers to a specified number of negative places with banker's rounding correctly" pending=pending_advanced <| - batch_runner.run rounding_Mode=Rounding_Mode.bankers round_fun-> + batch_runner.run rounding_Mode=Rounding_Mode.Bankers round_fun-> round_fun 12300 -2 . should_equal 12300 round_fun 12301 -2 . should_equal 12300 round_fun 12330 -2 . should_equal 12300 diff --git a/test/Benchmarks/src/Column_Numeric.enso b/test/Benchmarks/src/Column_Numeric.enso index 02bc3965d2d5..ed7c11e8062a 100644 --- a/test/Benchmarks/src/Column_Numeric.enso +++ b/test/Benchmarks/src/Column_Numeric.enso @@ -110,7 +110,7 @@ collect_benches = Bench.build builder-> group_builder.specify "floor_decimals" <| data.decimals.floor - [Rounding_Mode.half_up, Rounding_Mode.bankers].each rounding_mode-> + [Rounding_Mode.Half_Up, Rounding_Mode.Bankers].each rounding_mode-> [0, -2, 2].map decimal_places-> name = create_name "round_decimal_places_" decimal_places rounding_mode fun x = x.round decimal_places rounding_mode diff --git a/test/Benchmarks/src/Numeric.enso b/test/Benchmarks/src/Numeric.enso index e70bb4787f8a..9b19f4f3dff5 100644 --- a/test/Benchmarks/src/Numeric.enso +++ b/test/Benchmarks/src/Numeric.enso @@ -42,7 +42,7 @@ collect_benches = Bench.build builder-> fun = pair.at 1 group_builder.specify ("integer_" + name) (data.integers.map fun) - [Rounding_Mode.half_up, Rounding_Mode.bankers].each rounding_mode-> + [Rounding_Mode.Half_Up, Rounding_Mode.Bankers].each rounding_mode-> [0, -2, 2].each decimal_places-> name = create_name "round_decimal_places_" decimal_places rounding_mode fun = _.round decimal_places rounding_mode diff --git a/test/Snowflake_Tests/src/Snowflake_Spec.enso b/test/Snowflake_Tests/src/Snowflake_Spec.enso index d173227d8438..2ee7538c39c1 100644 --- a/test/Snowflake_Tests/src/Snowflake_Spec.enso +++ b/test/Snowflake_Tests/src/Snowflake_Spec.enso @@ -475,9 +475,9 @@ snowflake_specific_spec suite_builder default_connection db_name setup = col . cast Value_Type.Integer . round 1 . value_type . should_equal (Value_Type.Decimal 38 0) col . cast Value_Type.Decimal . round 1 . value_type . should_equal (Value_Type.Decimal 38 1) - col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float col . cast Value_Type.Float . ceil . value_type . should_equal Value_Type.Float col . cast Value_Type.Integer . ceil . value_type . should_equal (Value_Type.Decimal 38 0) @@ -496,7 +496,7 @@ snowflake_specific_spec suite_builder default_connection db_name setup = result = table.at "x" |> op result.to_vector.at 0 - do_round n dp=0 rounding_Mode=Rounding_Mode.half_up = do_op n (_.round dp rounding_mode) + do_round n dp=0 rounding_Mode=Rounding_Mode.Half_Up = do_op n (_.round dp rounding_mode) group_builder.specify "Can round correctly near the precision limit" <| do_round 1.2222222222222225 15 . should_equal 1.222222222222223 @@ -505,10 +505,10 @@ snowflake_specific_spec suite_builder default_connection db_name setup = do_round -1.2222222222222235 15 . should_equal -1.222222222222224 group_builder.specify "Can round correctly near the precision limit, using banker's rounding" <| - do_round 1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222222 - do_round -1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222222 - do_round 1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222224 - do_round -1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222224 + do_round 1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222222 + do_round -1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222222 + do_round 1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222224 + do_round -1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222224 group_builder.specify "Can handle NaN/Infinity" <| ops = [.round, .truncate, .ceil, .floor] diff --git a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso index 36fb171f3061..010b8e934da5 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso @@ -156,7 +156,7 @@ add_column_operation_specs suite_builder setup = pending_datetime = if (setup.flagged ..Date_Time).not then "Date/Time operations are not supported by this backend." suite_builder.group prefix+"(Column_Operations_Spec) Rounding numeric tests" group_builder-> - round_one n dp=0 rounding_mode=Rounding_Mode.half_up = + round_one n dp=0 rounding_mode=Rounding_Mode.Half_Up = table = light_table_builder [["x", [n]]] result = table.at "x" . round dp rounding_mode result.to_vector.at 0 diff --git a/test/Table_Tests/src/Database/Common/IR_Spec.enso b/test/Table_Tests/src/Database/Common/IR_Spec.enso index 618993a4de10..44c20903514b 100644 --- a/test/Table_Tests/src/Database/Common/IR_Spec.enso +++ b/test/Table_Tests/src/Database/Common/IR_Spec.enso @@ -57,13 +57,13 @@ add_specs (suite_builder : Suite_Builder) setup (prefix : Text) default_connecti group_builder.specify "should be able to traverse a Query to reconstruct it" <| col = data.t1 . at "a" - a = col.round * col.round rounding_Mode=Rounding_Mode.bankers + a = col.round * col.round rounding_Mode=Rounding_Mode.Bankers a_query = a.to_table.to_select_query a_query.traverse (x->x) . should_equal a_query group_builder.specify "should be able to traverse a Query to count nodes" <| col = data.t1 . at "a" - a = col.round * col.round rounding_Mode=Rounding_Mode.bankers + a = col.round * col.round rounding_Mode=Rounding_Mode.Bankers a_sub = (a . rename "p" . to_table . as_subquery . at "p") b = a_sub * a_sub b_sub = (b . rename "p" . to_table . as_subquery . at "p") @@ -85,8 +85,8 @@ add_specs (suite_builder : Suite_Builder) setup (prefix : Text) default_connecti ## Complex query that optionally enables let bindings at each step big = wm b0 (x * y) xty-> wm b1 (x + y + 10) xpyp10-> - wm b2 (xty.round 1 rounding_Mode=Rounding_Mode.bankers) r0-> - wm b3 (xpyp10.round rounding_Mode=Rounding_Mode.bankers) r1-> + wm b2 (xty.round 1 rounding_Mode=Rounding_Mode.Bankers) r0-> + wm b3 (xpyp10.round rounding_Mode=Rounding_Mode.Bankers) r1-> r0 + r1 big.to_vector results.flatten.flatten.flatten.distinct.length . should_equal 1 diff --git a/test/Table_Tests/src/Database/Postgres_Spec.enso b/test/Table_Tests/src/Database/Postgres_Spec.enso index 1e0bcf5eac18..8de1b2909986 100644 --- a/test/Table_Tests/src/Database/Postgres_Spec.enso +++ b/test/Table_Tests/src/Database/Postgres_Spec.enso @@ -646,9 +646,9 @@ postgres_specific_spec suite_builder create_connection_fn db_name setup = col . cast Value_Type.Integer . round 1 . value_type . should_equal Value_Type.Decimal col . cast Value_Type.Decimal . round 1 . value_type . should_equal Value_Type.Decimal - col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Decimal + col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Decimal col . cast Value_Type.Float . ceil . value_type . should_equal Value_Type.Float col . cast Value_Type.Integer . ceil . value_type . should_equal Value_Type.Float @@ -667,7 +667,7 @@ postgres_specific_spec suite_builder create_connection_fn db_name setup = result = table.at "x" |> op result.to_vector.at 0 - do_round data n dp=0 rounding_Mode=Rounding_Mode.half_up = do_op data n (_.round dp rounding_mode) + do_round data n dp=0 rounding_Mode=Rounding_Mode.Half_Up = do_op data n (_.round dp rounding_mode) ## column expressions group_builder.specify "Can round correctly near the precision limit" <| @@ -678,10 +678,10 @@ postgres_specific_spec suite_builder create_connection_fn db_name setup = ## column expressions group_builder.specify "Can round correctly near the precision limit, using banker's rounding" <| - do_round data 1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222222 - do_round data -1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222222 - do_round data 1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222224 - do_round data -1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222224 + do_round data 1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222222 + do_round data -1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222222 + do_round data 1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222224 + do_round data -1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222224 ## input/output group_builder.specify "Can handle NaN/Infinity" <| diff --git a/test/Table_Tests/src/Database/SQLite_Spec.enso b/test/Table_Tests/src/Database/SQLite_Spec.enso index a12b59d4290e..38a45f63f98a 100644 --- a/test/Table_Tests/src/Database/SQLite_Spec.enso +++ b/test/Table_Tests/src/Database/SQLite_Spec.enso @@ -246,9 +246,9 @@ sqlite_specific_spec suite_builder prefix create_connection_func setup = col . cast Value_Type.Integer . round 1 . value_type . should_equal Value_Type.Float col . cast Value_Type.Decimal . round 1 . value_type . should_equal Value_Type.Float - col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float col . cast Value_Type.Float . ceil . value_type . should_equal Value_Type.Float col . cast Value_Type.Integer . ceil . value_type . should_equal Value_Type.Integer @@ -267,7 +267,7 @@ sqlite_specific_spec suite_builder prefix create_connection_func setup = result = table.at "x" |> op result.to_vector.at 0 - do_round data n dp=0 rounding_Mode=Rounding_Mode.half_up = do_op data n (_.round dp rounding_mode) + do_round data n dp=0 rounding_Mode=Rounding_Mode.Half_Up = do_op data n (_.round dp rounding_mode) group_builder.specify "Can round correctly near the precision limit" <| # This value varies depending on the version of SQLite. @@ -277,10 +277,10 @@ sqlite_specific_spec suite_builder prefix create_connection_func setup = do_round data -1.2222222222222235 15 . should_equal -1.222222222222223 group_builder.specify "Can round correctly near the precision limit, using banker's rounding" <| - do_round data 1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222222 - do_round data -1.2222222222222225 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222222 - do_round data 1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal 1.222222222222224 - do_round data -1.2222222222222235 15 rounding_Mode=Rounding_Mode.bankers . should_equal -1.222222222222224 + do_round data 1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222222 + do_round data -1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222222 + do_round data 1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222224 + do_round data -1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222224 group_builder.specify "Can handle NaN/Infinity" <| ## SQLite does not support NaN diff --git a/test/Table_Tests/src/In_Memory/Column_Spec.enso b/test/Table_Tests/src/In_Memory/Column_Spec.enso index 8689d25d3e0c..71df2de34b88 100644 --- a/test/Table_Tests/src/In_Memory/Column_Spec.enso +++ b/test/Table_Tests/src/In_Memory/Column_Spec.enso @@ -311,7 +311,7 @@ add_specs suite_builder = Column.from_vector "foo" [1.2, 2.3, 2.5, 3.6] . round . should_equal (Column.from_vector "round([foo])" [1, 2, 3, 4]) Column.from_vector "foo" [1.25, 2.33, 3.57] . round 1 . should_equal <| Column.from_vector "round([foo])" [1.3, 2.3, 3.6] Column.from_vector "foo" [12.0, 24.0, 25.0, 29.0] . round -1 . should_equal <| Column.from_vector "round([foo])" [10, 20, 30, 30] - Column.from_vector "foo" [1.5, 2.5, 3.5] . round rounding_Mode=Rounding_Mode.bankers . should_equal <| Column.from_vector "round([foo])" [2, 2, 4] + Column.from_vector "foo" [1.5, 2.5, 3.5] . round rounding_Mode=Rounding_Mode.Bankers . should_equal <| Column.from_vector "round([foo])" [2, 2, 4] Column.from_vector "foo" [-1.2, -2.3, -2.5, -3.6] . round . should_equal (Column.from_vector "round([foo])" [-1, -2, -3, -4]) Column.from_vector "foo" [-1.25, -2.33, -2.45, -3.57] . round 1 . should_equal <| Column.from_vector "round([foo])" [-1.3, -2.3, -2.5, -3.6] @@ -326,7 +326,7 @@ add_specs suite_builder = group_builder.specify "should be able to round a column of integers" <| Column.from_vector "foo" [12, 24, 25, 29] . round . should_equal <| Column.from_vector "round([foo])" [12, 24, 25, 29] Column.from_vector "foo" [12, 24, 25, 29] . round -1 . should_equal <| Column.from_vector "round([foo])" [10, 20, 30, 30] - Column.from_vector "foo" [15, 25, 35] . round -1 rounding_Mode=Rounding_Mode.bankers . should_equal <| Column.from_vector "round([foo])" [20, 20, 40] + Column.from_vector "foo" [15, 25, 35] . round -1 rounding_Mode=Rounding_Mode.Bankers . should_equal <| Column.from_vector "round([foo])" [20, 20, 40] group_builder.specify "integer rounding should return the correct column type" <| col = Column.from_vector "foo" [12, 24, 25, 29] @@ -394,7 +394,7 @@ add_specs suite_builder = col = Column.from_vector "x" [n] result = op col result.to_vector.at 0 - do_round n dp=0 rounding_Mode=Rounding_Mode.half_up = do_op n (_.round dp rounding_mode) + do_round n dp=0 rounding_Mode=Rounding_Mode.Half_Up = do_op n (_.round dp rounding_mode) group_builder.specify "round returns the correct type" <| do_round 231.2 1 . should_be_a Float From 168b76f524fc839a7006630de986b21571c7f6dc Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Mon, 31 Mar 2025 14:27:33 -0400 Subject: [PATCH 09/37] api --- .../Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md | 2 +- .../Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md | 4 ++-- .../0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md | 6 +++--- .../Standard/Base/0.0.0-dev/src/Data/Decimal.enso | 3 ++- .../Standard/Base/0.0.0-dev/src/Data/Numbers.enso | 6 ++++-- .../Database/0.0.0-dev/docs/api/DB_Column.md | 12 ++++++------ .../Standard/Database/0.0.0-dev/src/DB_Column.enso | 3 ++- .../lib/Standard/Table/0.0.0-dev/docs/api/Column.md | 2 +- .../Table/0.0.0-dev/docs/api/Column_Operation.md | 2 +- .../Table/0.0.0-dev/docs/api/Simple_Expression.md | 4 ++-- .../lib/Standard/Table/0.0.0-dev/src/Column.enso | 3 ++- 11 files changed, 26 insertions(+), 21 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md index 98175681f168..5a5dd567d3c5 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md @@ -31,7 +31,7 @@ - pow self exp:Standard.Base.Data.Numbers.Integer -> Standard.Base.Data.Decimal.Decimal - precision self -> Standard.Base.Data.Numbers.Integer - remainder self that:Standard.Base.Data.Decimal.Decimal -> Standard.Base.Data.Decimal.Decimal - - round self decimal_places:Standard.Base.Data.Numbers.Integer= use_bankers:Standard.Base.Data.Boolean.Boolean= -> Standard.Base.Data.Decimal.Decimal + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Data.Decimal.Decimal - scale self -> Standard.Base.Data.Numbers.Integer - set_scale self new_scale:Standard.Base.Data.Numbers.Integer -> Standard.Base.Data.Decimal.Decimal - signum self -> Standard.Base.Data.Numbers.Integer diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md index e51a681308a2..d016a6b10670 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md @@ -18,7 +18,7 @@ - min_value -> Standard.Base.Any.Any - negate self -> Standard.Base.Data.Numbers.Float - parse text:Standard.Base.Data.Text.Text locale:(Standard.Base.Data.Locale.Locale|Standard.Base.Nothing.Nothing)= format:(Standard.Base.Data.Text.Text|Standard.Base.Nothing.Nothing)= -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= use_bankers:Standard.Base.Data.Boolean.Boolean= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any - to_decimal self -> Standard.Base.Data.Decimal.Decimal - to_float self -> Standard.Base.Data.Numbers.Float - truncate self -> Standard.Base.Data.Numbers.Integer @@ -47,7 +47,7 @@ - floor self -> Standard.Base.Data.Numbers.Integer - negate self -> Standard.Base.Data.Numbers.Integer - parse text:Standard.Base.Data.Text.Text radix:Standard.Base.Data.Numbers.Integer= -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= use_bankers:Standard.Base.Data.Boolean.Boolean= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any - to_decimal self -> Standard.Base.Data.Decimal.Decimal - to_float self -> Standard.Base.Data.Numbers.Float - truncate self -> Standard.Base.Data.Numbers.Integer diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md index 47bf4af47ffb..2ca8ffef6c6f 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md @@ -1,6 +1,6 @@ ## Enso Signatures 1.0 ## module Standard.Base.Data.Numeric.Rounding_Mode - type Rounding_Mode - - Value rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.RoundingMode - - bankers -> Standard.Base.Any.Any - - half_up -> Standard.Base.Any.Any + - Bankers + - Half_Up + - to_java_rounding_mode self -> Standard.Base.Data.Numeric.Rounding_Mode.RoundingMode diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso index c8d471561bbf..58521ab1ae7c 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso @@ -999,7 +999,8 @@ type Decimal negative, which results in rounding to positive integer powers of 10. Must be between Java `Integer.MIN_VALUE` and `Integer.MAX_VALUE` (-2147483648 and 2147483647) (inclusive). - - use_bankers: Rounds mid-point to nearest even number. + - rounding_mode: specifies how to break ties for the least significant + digit. ! Error Conditions diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index 3f7bf10bf7bc..f737663c4900 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -673,7 +673,8 @@ type Float - decimal_places: The number of decimal places to round to. Can be negative, which results in rounding to positive integer powers of 10. Must be between -15 and 15 (inclusive). - - use_bankers: Rounds mid-point to nearest even number. + - rounding_mode: specifies how to break ties for the least significant + digit. ! Error Conditions @@ -1082,7 +1083,8 @@ type Integer - decimal_places: The number of decimal places to round to. Can be negative, which results in rounding to positive integer powers of 10. Must be between -15 and 15 (inclusive). - - use_bankers: Rounds mid-point to nearest even number. + - rounding_mode: specifies how to break ties for the least significant + digit. ! Error Conditions If `self` is outside the range -99999999999999..99999999999999 diff --git a/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md b/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md index c7557e9905c5..ad7a952ef953 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md +++ b/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md @@ -77,15 +77,15 @@ - read self max_rows:Standard.Table.Rows_To_Read.Rows_To_Read= -> Standard.Table.Column.Column - regex_match self pattern:(Standard.Database.DB_Column.DB_Column|Standard.Base.Data.Text.Text|Standard.Base.Data.Text.Regex.Regex) -> Standard.Database.DB_Column.DB_Column - rename self name:Standard.Base.Data.Text.Text -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= use_bankers:Standard.Base.Data.Boolean.Boolean= -> Standard.Base.Any.Any - - round_builtin self decimal_places:Standard.Base.Any.Any use_bankers:Standard.Base.Any.Any -> Standard.Base.Any.Any - - round_decimal self decimal_places:Standard.Base.Any.Any use_bankers:Standard.Base.Any.Any -> Standard.Base.Any.Any - - round_float self decimal_places:Standard.Base.Any.Any use_bankers:Standard.Base.Any.Any -> Standard.Base.Any.Any - - round_integer self decimal_places:Standard.Base.Any.Any use_bankers:Standard.Base.Any.Any -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any + - round_builtin self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any + - round_decimal self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any + - round_float self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any + - round_integer self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any - second self -> Standard.Base.Any.Any - short_circuit_special_floating_point self exp:Standard.Base.Any.Any -> Standard.Base.Any.Any - should_be_selected_by_type self value_type:Standard.Table.Value_Type.Value_Type -> Standard.Base.Data.Boolean.Boolean - - should_use_builtin_round self decimal_places:Standard.Base.Any.Any use_bankers:Standard.Base.Any.Any -> Standard.Base.Any.Any + - should_use_builtin_round self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any - sort self order:Standard.Base.Data.Sort_Direction.Sort_Direction= -> Standard.Database.DB_Column.DB_Column - sql_type self -> Standard.Base.Any.Any - starts_with self other:(Standard.Database.DB_Column.DB_Column|Standard.Base.Data.Text.Text|Standard.Base.Any.Any) case_sensitivity:Standard.Base.Data.Text.Case_Sensitivity.Case_Sensitivity= -> Standard.Database.DB_Column.DB_Column diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso index 46d842ca286c..f6b0d225190d 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso @@ -861,7 +861,8 @@ type DB_Column - decimal_places: The number of decimal places to round to. Can be negative, which results in rounding to positive integer powers of 10. Must be between -15 and 15 (inclusive). - - use_bankers: Rounds mid-point to nearest even number. + - rounding_mode: specifies how to break ties for the least significant + digit. ! NaN/Inf If a `NaN` or `Inf` value is passed to `round`, it immediately returns diff --git a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md index 6ad8e180d5d4..d05583d6c404 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md +++ b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md @@ -85,7 +85,7 @@ - rename self name:Standard.Base.Data.Text.Text -> Standard.Base.Any.Any - requires_numeric_formatter_check self -> Standard.Base.Any.Any - reverse self -> Standard.Table.Column.Column - - round self decimal_places:Standard.Base.Data.Numbers.Integer= use_bankers:Standard.Base.Data.Boolean.Boolean= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any - running self statistic:Standard.Base.Data.Statistics.Statistic= name:Standard.Base.Data.Text.Text= -> Standard.Table.Column.Column - second self -> Standard.Base.Any.Any - should_be_selected_by_type self value_type:Standard.Table.Value_Type.Value_Type -> Standard.Base.Data.Boolean.Boolean diff --git a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md index ee84095faab8..383728eadbff 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md +++ b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md @@ -17,7 +17,7 @@ - Not input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean) - Or input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean) rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean) - Power input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) - - Round input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) precision:Standard.Base.Data.Numbers.Integer= use_bankers:Standard.Base.Data.Boolean.Boolean= + - Round input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) precision:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= - Subtract input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) - Trim input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Text.Text) where:Standard.Base.Data.Text.Location.Location= what:(Standard.Base.Data.Text.Text|Standard.Table.Column_Ref.Column_Ref)= - Truncate input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number|Standard.Base.Data.Time.Date_Time.Date_Time) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md index 92404d34b1a6..d925053984de 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md +++ b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md @@ -27,7 +27,7 @@ - Multiply rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - Negate - Power rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - - Round precision:Standard.Base.Data.Numbers.Integer= use_bankers:Standard.Base.Data.Boolean.Boolean= + - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= - Subtract rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - Truncate - create_widget table:Standard.Table.Internal.Table_Ref.Table_Ref display:Standard.Base.Metadata.Display= -> Standard.Base.Any.Any @@ -54,7 +54,7 @@ - Not - Or rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean)= - Power rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - - Round precision:Standard.Base.Data.Numbers.Integer= use_bankers:Standard.Base.Data.Boolean.Boolean= + - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= - Subtract rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - Text operation:Standard.Table.Simple_Expression.Text_Operation= - Text_Left length:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Integer)= diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index a05c5c3ca842..ce99b8b884ef 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -876,7 +876,8 @@ type Column - decimal_places: The number of decimal places to round to. Can be negative, which results in rounding to positive integer powers of 10. Must be between -15 and 15 (inclusive). - - use_bankers: Rounds mid-point to nearest even number. + - rounding_mode: specifies how to break ties for the least significant + digit. - on_problems: Specifies how to handle if a problem occurs, raising as a warning by default. From 24778cb5d07e9a13435aa4cb868a4f3b397085e3 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Mon, 31 Mar 2025 15:53:36 -0400 Subject: [PATCH 10/37] typo --- .../Base/0.0.0-dev/src/Data/Decimal.enso | 4 +-- .../Base/0.0.0-dev/src/Data/Numbers.enso | 8 ++--- .../Database/0.0.0-dev/src/DB_Column.enso | 2 +- .../Standard/Table/0.0.0-dev/src/Column.enso | 2 +- .../common_utils/Core_Math_Utils.java | 2 +- test/Base_Tests/src/Data/Decimal_Spec.enso | 4 +-- test/Base_Tests/src/Data/Round_Spec.enso | 30 +++++++++---------- test/Snowflake_Tests/src/Snowflake_Spec.enso | 16 +++++----- .../src/Database/Common/IR_Spec.enso | 8 ++--- .../src/Database/Postgres_Spec.enso | 16 +++++----- .../Table_Tests/src/Database/SQLite_Spec.enso | 16 +++++----- .../src/In_Memory/Column_Spec.enso | 6 ++-- 12 files changed, 57 insertions(+), 57 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso index 58521ab1ae7c..e0b7d5d19b13 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso @@ -991,7 +991,7 @@ type Decimal Round to a specified number of decimal places. By default, rounding uses "symmetric round-half-up", also known as - "half-up." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also + "half-up." If rounding_mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". Arguments: @@ -1033,7 +1033,7 @@ type Decimal > Example Use Banker's Rounding. - Decimal.new "2.5" . round rounding_Mode=Rounding_Mode.Bankers + Decimal.new "2.5" . round rounding_mode=Rounding_Mode.Bankers # => 2 round : Integer -> Boolean -> Decimal round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) -> Decimal = diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index f737663c4900..290e8c0f00a9 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -660,7 +660,7 @@ type Float Round to a specified number of decimal places. By default, rounding uses "symmetric round-half-up", also known as - "half-up." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also + "half-up." If rounding_mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". If `decimal_places` > 0, `round` returns a `Float`; otherwise, it @@ -707,7 +707,7 @@ type Float > Example Use Banker's Rounding. - 2.5 . round rounding_Mode=Rounding_Mode.Bankers == 2 + 2.5 . round rounding_mode=Rounding_Mode.Bankers == 2 round : Integer -> Boolean -> Integer | Float ! Illegal_Argument round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) = report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) @@ -1076,7 +1076,7 @@ type Integer argument. For negative decimal places, see below. By default, rounding uses "symmetric round-half-up", also known as - "half-up." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also + "half-up." If rounding_mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". Arguments: @@ -1111,7 +1111,7 @@ type Integer > Example Round to the nearest hundred, using Banker's Rounding. - 12250 . round -2 rounding_Mode=Rounding_Mode.Bankers == 12200 + 12250 . round -2 rounding_mode=Rounding_Mode.Bankers == 12200 round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) -> Integer ! Illegal_Argument = ## We reject values outside the range of `long` here, so we don't also do this check in the Java. diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso index f6b0d225190d..25cb5df41333 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso @@ -852,7 +852,7 @@ type DB_Column `Value_Type.Integer` columns. By default, rounding uses "symmetric round-half-up", also known as - "round towards 0." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", + "round towards 0." If rounding_mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". The return type depends on the backend. diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index ce99b8b884ef..3ec433011877 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -865,7 +865,7 @@ type Column argument. For negative decimal places, see below. By default, rounding uses "asymmetric round-half-up", also known as - "round towards positive infinity." If rounding_Mode=Rounding_Mode.Bankers, then it uses + "round towards positive infinity." If rounding_mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's rounding". If the column is of type `Float` and `decimal_places` > 0, `round` diff --git a/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java b/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java index 06d9302ae505..6f6abb3370d0 100644 --- a/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java +++ b/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java @@ -80,7 +80,7 @@ public static double roundDouble(double n, long decimalPlaces, boolean useBanker *

For integers, rounding to 0 or more decimal places simply returns the argument. * *

By default, rounding uses "asymmetric round-half-up", also known as "round towards positive - * infinity." If rounding_Mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's + * infinity." If rounding_mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's * rounding". * * @param n the number to round. diff --git a/test/Base_Tests/src/Data/Decimal_Spec.enso b/test/Base_Tests/src/Data/Decimal_Spec.enso index 5e513893f081..a20b2dcef465 100644 --- a/test/Base_Tests/src/Data/Decimal_Spec.enso +++ b/test/Base_Tests/src/Data/Decimal_Spec.enso @@ -843,7 +843,7 @@ add_specs suite_builder = Decimal.new "0" . signum . should_equal 0 suite_builder.group "(Decimal_Spec) Rounding" group_builder-> - do_round n dp=0 rounding_Mode=Rounding_Mode.Half_Up = + do_round n dp=0 rounding_mode=Rounding_Mode.Half_Up = d = Decimal.new n . round dp rounding_mode d.to_float @@ -873,7 +873,7 @@ add_specs suite_builder = Decimal.new "3.3" . round . should_equal (Decimal.new "3") Decimal.new "3.1415" . round 2 . should_equal (Decimal.new "3.14") Decimal.new "1234.5678E-50" . round 53 . should_equal (Decimal.new "1234.568E-50") - Decimal.new "2.5" . round rounding_Mode=Rounding_Mode.Bankers . should_equal 2 + Decimal.new "2.5" . round rounding_mode=Rounding_Mode.Bankers . should_equal 2 suite_builder.group "(Decimal_Spec) floor, ceil, truncate" group_builder-> group_builder.specify "should calculate floor correctly" <| diff --git a/test/Base_Tests/src/Data/Round_Spec.enso b/test/Base_Tests/src/Data/Round_Spec.enso index dd8e66e71a76..9788a9d07b1f 100644 --- a/test/Base_Tests/src/Data/Round_Spec.enso +++ b/test/Base_Tests/src/Data/Round_Spec.enso @@ -46,7 +46,7 @@ type Check_Instance add_specs group_builder batch_runner run_advanced = pending_advanced = if run_advanced.not then "Advanced edge tests are disabled in this run." group_builder.specify "Can round positive decimals correctly" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun 3.0 . should_equal 3 round_fun 3.00001 . should_equal 3 round_fun 3.3 . should_equal 3 @@ -56,7 +56,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3.99999 . should_equal 4 group_builder.specify "Can round negative decimals correctly" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun -3.0 . should_equal -3 round_fun -3.00001 . should_equal -3 round_fun -3.3 . should_equal -3 @@ -66,20 +66,20 @@ add_specs group_builder batch_runner run_advanced = round_fun -3.99999 . should_equal -4 group_builder.specify "Explicit and implicit 0 decimal places work the same" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun 3.00001 0 . should_equal 3 round_fun 3.3 0 . should_equal 3 round_fun 3.00001 . should_equal 3 round_fun 3.3 . should_equal 3 group_builder.specify "Can round zero and small decimals correctly" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun 0.0 . should_equal 0 round_fun 0.00001 . should_equal 0 round_fun -0.00001 . should_equal 0 group_builder.specify "Can round positive decimals to a specified number of decimal places" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun 3.0001 2 . should_equal 3.0 round_fun 3.1414 2 . should_equal 3.14 round_fun 3.1415 2 . should_equal 3.14 @@ -93,7 +93,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3.9999 3 . should_equal 4.0 group_builder.specify "Can round negative decimals to a specified number of decimal places" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun -3.0001 2 . should_equal -3.0 round_fun -3.1414 2 . should_equal -3.14 round_fun -3.1415 2 . should_equal -3.14 @@ -107,7 +107,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3.9999 3 . should_equal -4.0 group_builder.specify "Can round positive decimals to a specified negative number of decimal places" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun 1234.0 -1 . should_equal 1230 round_fun 1234.0 -2 . should_equal 1200 round_fun 1234.0 -3 . should_equal 1000 @@ -123,7 +123,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 1494.0 -2 . should_equal 1500 group_builder.specify "Can round negative decimals to a specified negative number of decimal places" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun -1234.0 -1 . should_equal -1230 round_fun -1234.0 -2 . should_equal -1200 round_fun -1234.0 -3 . should_equal -1000 @@ -139,7 +139,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -1494.0 -2 . should_equal -1500 group_builder.specify "Banker's rounding handles half-way values correctly" pending=pending_advanced <| - batch_runner.run rounding_Mode=Rounding_Mode.Bankers round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Bankers round_fun-> round_fun -3.5 . should_equal -4 round_fun -2.5 . should_equal -2 round_fun -1.5 . should_equal -2 @@ -160,7 +160,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -12250.0 -2 . should_equal -12200 group_builder.specify "Banker's rounding handles non-half-way values just like normal rounding" pending=pending_advanced <| - batch_runner.run rounding_Mode=Rounding_Mode.Bankers round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Bankers round_fun-> round_fun 3.0 . should_equal 3 round_fun 3.00001 . should_equal 3 round_fun 3.3 . should_equal 3 @@ -168,7 +168,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3.50001 . should_equal 4 round_fun 3.99999 . should_equal 4 - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun -3.0 . should_equal -3 round_fun -3.00001 . should_equal -3 round_fun -3.3 . should_equal -3 @@ -177,7 +177,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3.99999 . should_equal -4 group_builder.specify "Can round small integers to a specified number of decimal places correctly (value is unchanged)" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun 0 . should_equal 0 round_fun 3 . should_equal 3 round_fun -3 . should_equal -3 @@ -187,7 +187,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3 1 . should_equal -3 group_builder.specify "Can round integers to a specified number of negative places correctly" <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun 0 -1 . should_equal 0 round_fun 4 -1 . should_equal 0 round_fun 5 -1 . should_equal 10 @@ -216,7 +216,7 @@ add_specs group_builder batch_runner run_advanced = round_fun 3101 -3 . should_equal 3000 group_builder.specify "Can round negative integers to a specified number of negative places correctly" pending=pending_advanced <| - batch_runner.run rounding_Mode=Rounding_Mode.Half_Up round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> round_fun -4 -1 . should_equal 0 round_fun -5 -1 . should_equal -10 round_fun -6 -1 . should_equal -10 @@ -244,7 +244,7 @@ add_specs group_builder batch_runner run_advanced = round_fun -3101 -3 . should_equal -3000 group_builder.specify "Can round negative integers to a specified number of negative places with banker's rounding correctly" pending=pending_advanced <| - batch_runner.run rounding_Mode=Rounding_Mode.Bankers round_fun-> + batch_runner.run rounding_mode=Rounding_Mode.Bankers round_fun-> round_fun 12300 -2 . should_equal 12300 round_fun 12301 -2 . should_equal 12300 round_fun 12330 -2 . should_equal 12300 diff --git a/test/Snowflake_Tests/src/Snowflake_Spec.enso b/test/Snowflake_Tests/src/Snowflake_Spec.enso index 2ee7538c39c1..f21f85982240 100644 --- a/test/Snowflake_Tests/src/Snowflake_Spec.enso +++ b/test/Snowflake_Tests/src/Snowflake_Spec.enso @@ -475,9 +475,9 @@ snowflake_specific_spec suite_builder default_connection db_name setup = col . cast Value_Type.Integer . round 1 . value_type . should_equal (Value_Type.Decimal 38 0) col . cast Value_Type.Decimal . round 1 . value_type . should_equal (Value_Type.Decimal 38 1) - col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Float . round rounding_mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Integer . round rounding_mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Decimal . round rounding_mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float col . cast Value_Type.Float . ceil . value_type . should_equal Value_Type.Float col . cast Value_Type.Integer . ceil . value_type . should_equal (Value_Type.Decimal 38 0) @@ -496,7 +496,7 @@ snowflake_specific_spec suite_builder default_connection db_name setup = result = table.at "x" |> op result.to_vector.at 0 - do_round n dp=0 rounding_Mode=Rounding_Mode.Half_Up = do_op n (_.round dp rounding_mode) + do_round n dp=0 rounding_mode=Rounding_Mode.Half_Up = do_op n (_.round dp rounding_mode) group_builder.specify "Can round correctly near the precision limit" <| do_round 1.2222222222222225 15 . should_equal 1.222222222222223 @@ -505,10 +505,10 @@ snowflake_specific_spec suite_builder default_connection db_name setup = do_round -1.2222222222222235 15 . should_equal -1.222222222222224 group_builder.specify "Can round correctly near the precision limit, using banker's rounding" <| - do_round 1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222222 - do_round -1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222222 - do_round 1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222224 - do_round -1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222224 + do_round 1.2222222222222225 15 rounding_mode=Rounding_Mode.Bankers . should_equal 1.222222222222222 + do_round -1.2222222222222225 15 rounding_mode=Rounding_Mode.Bankers . should_equal -1.222222222222222 + do_round 1.2222222222222235 15 rounding_mode=Rounding_Mode.Bankers . should_equal 1.222222222222224 + do_round -1.2222222222222235 15 rounding_mode=Rounding_Mode.Bankers . should_equal -1.222222222222224 group_builder.specify "Can handle NaN/Infinity" <| ops = [.round, .truncate, .ceil, .floor] diff --git a/test/Table_Tests/src/Database/Common/IR_Spec.enso b/test/Table_Tests/src/Database/Common/IR_Spec.enso index 44c20903514b..079fbc71e74a 100644 --- a/test/Table_Tests/src/Database/Common/IR_Spec.enso +++ b/test/Table_Tests/src/Database/Common/IR_Spec.enso @@ -57,13 +57,13 @@ add_specs (suite_builder : Suite_Builder) setup (prefix : Text) default_connecti group_builder.specify "should be able to traverse a Query to reconstruct it" <| col = data.t1 . at "a" - a = col.round * col.round rounding_Mode=Rounding_Mode.Bankers + a = col.round * col.round rounding_mode=Rounding_Mode.Bankers a_query = a.to_table.to_select_query a_query.traverse (x->x) . should_equal a_query group_builder.specify "should be able to traverse a Query to count nodes" <| col = data.t1 . at "a" - a = col.round * col.round rounding_Mode=Rounding_Mode.Bankers + a = col.round * col.round rounding_mode=Rounding_Mode.Bankers a_sub = (a . rename "p" . to_table . as_subquery . at "p") b = a_sub * a_sub b_sub = (b . rename "p" . to_table . as_subquery . at "p") @@ -85,8 +85,8 @@ add_specs (suite_builder : Suite_Builder) setup (prefix : Text) default_connecti ## Complex query that optionally enables let bindings at each step big = wm b0 (x * y) xty-> wm b1 (x + y + 10) xpyp10-> - wm b2 (xty.round 1 rounding_Mode=Rounding_Mode.Bankers) r0-> - wm b3 (xpyp10.round rounding_Mode=Rounding_Mode.Bankers) r1-> + wm b2 (xty.round 1 rounding_mode=Rounding_Mode.Bankers) r0-> + wm b3 (xpyp10.round rounding_mode=Rounding_Mode.Bankers) r1-> r0 + r1 big.to_vector results.flatten.flatten.flatten.distinct.length . should_equal 1 diff --git a/test/Table_Tests/src/Database/Postgres_Spec.enso b/test/Table_Tests/src/Database/Postgres_Spec.enso index 8de1b2909986..799c6e43e648 100644 --- a/test/Table_Tests/src/Database/Postgres_Spec.enso +++ b/test/Table_Tests/src/Database/Postgres_Spec.enso @@ -646,9 +646,9 @@ postgres_specific_spec suite_builder create_connection_fn db_name setup = col . cast Value_Type.Integer . round 1 . value_type . should_equal Value_Type.Decimal col . cast Value_Type.Decimal . round 1 . value_type . should_equal Value_Type.Decimal - col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Decimal + col . cast Value_Type.Float . round rounding_mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Integer . round rounding_mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Decimal . round rounding_mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Decimal col . cast Value_Type.Float . ceil . value_type . should_equal Value_Type.Float col . cast Value_Type.Integer . ceil . value_type . should_equal Value_Type.Float @@ -667,7 +667,7 @@ postgres_specific_spec suite_builder create_connection_fn db_name setup = result = table.at "x" |> op result.to_vector.at 0 - do_round data n dp=0 rounding_Mode=Rounding_Mode.Half_Up = do_op data n (_.round dp rounding_mode) + do_round data n dp=0 rounding_mode=Rounding_Mode.Half_Up = do_op data n (_.round dp rounding_mode) ## column expressions group_builder.specify "Can round correctly near the precision limit" <| @@ -678,10 +678,10 @@ postgres_specific_spec suite_builder create_connection_fn db_name setup = ## column expressions group_builder.specify "Can round correctly near the precision limit, using banker's rounding" <| - do_round data 1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222222 - do_round data -1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222222 - do_round data 1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222224 - do_round data -1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222224 + do_round data 1.2222222222222225 15 rounding_mode=Rounding_Mode.Bankers . should_equal 1.222222222222222 + do_round data -1.2222222222222225 15 rounding_mode=Rounding_Mode.Bankers . should_equal -1.222222222222222 + do_round data 1.2222222222222235 15 rounding_mode=Rounding_Mode.Bankers . should_equal 1.222222222222224 + do_round data -1.2222222222222235 15 rounding_mode=Rounding_Mode.Bankers . should_equal -1.222222222222224 ## input/output group_builder.specify "Can handle NaN/Infinity" <| diff --git a/test/Table_Tests/src/Database/SQLite_Spec.enso b/test/Table_Tests/src/Database/SQLite_Spec.enso index 38a45f63f98a..6394ad69fa81 100644 --- a/test/Table_Tests/src/Database/SQLite_Spec.enso +++ b/test/Table_Tests/src/Database/SQLite_Spec.enso @@ -246,9 +246,9 @@ sqlite_specific_spec suite_builder prefix create_connection_func setup = col . cast Value_Type.Integer . round 1 . value_type . should_equal Value_Type.Float col . cast Value_Type.Decimal . round 1 . value_type . should_equal Value_Type.Float - col . cast Value_Type.Float . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Integer . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float - col . cast Value_Type.Decimal . round rounding_Mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Float . round rounding_mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Integer . round rounding_mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float + col . cast Value_Type.Decimal . round rounding_mode=Rounding_Mode.Bankers . value_type . should_equal Value_Type.Float col . cast Value_Type.Float . ceil . value_type . should_equal Value_Type.Float col . cast Value_Type.Integer . ceil . value_type . should_equal Value_Type.Integer @@ -267,7 +267,7 @@ sqlite_specific_spec suite_builder prefix create_connection_func setup = result = table.at "x" |> op result.to_vector.at 0 - do_round data n dp=0 rounding_Mode=Rounding_Mode.Half_Up = do_op data n (_.round dp rounding_mode) + do_round data n dp=0 rounding_mode=Rounding_Mode.Half_Up = do_op data n (_.round dp rounding_mode) group_builder.specify "Can round correctly near the precision limit" <| # This value varies depending on the version of SQLite. @@ -277,10 +277,10 @@ sqlite_specific_spec suite_builder prefix create_connection_func setup = do_round data -1.2222222222222235 15 . should_equal -1.222222222222223 group_builder.specify "Can round correctly near the precision limit, using banker's rounding" <| - do_round data 1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222222 - do_round data -1.2222222222222225 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222222 - do_round data 1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal 1.222222222222224 - do_round data -1.2222222222222235 15 rounding_Mode=Rounding_Mode.Bankers . should_equal -1.222222222222224 + do_round data 1.2222222222222225 15 rounding_mode=Rounding_Mode.Bankers . should_equal 1.222222222222222 + do_round data -1.2222222222222225 15 rounding_mode=Rounding_Mode.Bankers . should_equal -1.222222222222222 + do_round data 1.2222222222222235 15 rounding_mode=Rounding_Mode.Bankers . should_equal 1.222222222222224 + do_round data -1.2222222222222235 15 rounding_mode=Rounding_Mode.Bankers . should_equal -1.222222222222224 group_builder.specify "Can handle NaN/Infinity" <| ## SQLite does not support NaN diff --git a/test/Table_Tests/src/In_Memory/Column_Spec.enso b/test/Table_Tests/src/In_Memory/Column_Spec.enso index 71df2de34b88..8d886c4ec724 100644 --- a/test/Table_Tests/src/In_Memory/Column_Spec.enso +++ b/test/Table_Tests/src/In_Memory/Column_Spec.enso @@ -311,7 +311,7 @@ add_specs suite_builder = Column.from_vector "foo" [1.2, 2.3, 2.5, 3.6] . round . should_equal (Column.from_vector "round([foo])" [1, 2, 3, 4]) Column.from_vector "foo" [1.25, 2.33, 3.57] . round 1 . should_equal <| Column.from_vector "round([foo])" [1.3, 2.3, 3.6] Column.from_vector "foo" [12.0, 24.0, 25.0, 29.0] . round -1 . should_equal <| Column.from_vector "round([foo])" [10, 20, 30, 30] - Column.from_vector "foo" [1.5, 2.5, 3.5] . round rounding_Mode=Rounding_Mode.Bankers . should_equal <| Column.from_vector "round([foo])" [2, 2, 4] + Column.from_vector "foo" [1.5, 2.5, 3.5] . round rounding_mode=Rounding_Mode.Bankers . should_equal <| Column.from_vector "round([foo])" [2, 2, 4] Column.from_vector "foo" [-1.2, -2.3, -2.5, -3.6] . round . should_equal (Column.from_vector "round([foo])" [-1, -2, -3, -4]) Column.from_vector "foo" [-1.25, -2.33, -2.45, -3.57] . round 1 . should_equal <| Column.from_vector "round([foo])" [-1.3, -2.3, -2.5, -3.6] @@ -326,7 +326,7 @@ add_specs suite_builder = group_builder.specify "should be able to round a column of integers" <| Column.from_vector "foo" [12, 24, 25, 29] . round . should_equal <| Column.from_vector "round([foo])" [12, 24, 25, 29] Column.from_vector "foo" [12, 24, 25, 29] . round -1 . should_equal <| Column.from_vector "round([foo])" [10, 20, 30, 30] - Column.from_vector "foo" [15, 25, 35] . round -1 rounding_Mode=Rounding_Mode.Bankers . should_equal <| Column.from_vector "round([foo])" [20, 20, 40] + Column.from_vector "foo" [15, 25, 35] . round -1 rounding_mode=Rounding_Mode.Bankers . should_equal <| Column.from_vector "round([foo])" [20, 20, 40] group_builder.specify "integer rounding should return the correct column type" <| col = Column.from_vector "foo" [12, 24, 25, 29] @@ -394,7 +394,7 @@ add_specs suite_builder = col = Column.from_vector "x" [n] result = op col result.to_vector.at 0 - do_round n dp=0 rounding_Mode=Rounding_Mode.Half_Up = do_op n (_.round dp rounding_mode) + do_round n dp=0 rounding_mode=Rounding_Mode.Half_Up = do_op n (_.round dp rounding_mode) group_builder.specify "round returns the correct type" <| do_round 231.2 1 . should_be_a Float From 0e91142f6a83c3afd31272fa7359842affcf156f Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 1 Apr 2025 12:04:52 -0400 Subject: [PATCH 11/37] wip --- .../lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso | 2 +- .../src/Common_Table_Operations/Column_Operations_Spec.enso | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso index e0b7d5d19b13..70169d00c711 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso @@ -1038,7 +1038,7 @@ type Decimal round : Integer -> Boolean -> Decimal round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) -> Decimal = out_of_range = decimal_places > Java_Integer.MAX_VALUE || decimal_places < Java_Integer.MIN_VALUE - if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places rounding_mode) else + if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places (rounding_mode == Rounding_Mode.Half_Up)) else message = "round decimal_places must be between "+Java_Integer.MIN_VALUE.to_text+" and "+Java_Integer.MAX_VALUE.to_text+" (inclusive), but was "+decimal_places.to_text Error.throw (Out_Of_Range.Error decimal_places message) diff --git a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso index 010b8e934da5..26a792a4f73b 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso @@ -188,8 +188,8 @@ add_column_operation_specs suite_builder setup = + [[-12300, -2, -12300], [-12301, -2, -12300]] cases_transposed = cases.transpose bankers_cases_transposed = bankers_cases.transpose - round_batch (cases_transposed.at 0) (cases_transposed.at 1) False . should_equal (cases_transposed.at 2) - round_batch (bankers_cases_transposed.at 0) (bankers_cases_transposed.at 1) True . should_equal (bankers_cases_transposed.at 2) + round_batch (cases_transposed.at 0) (cases_transposed.at 1) rounding_mode=Rounding_Mode.Half_Up . should_equal (cases_transposed.at 2) + round_batch (bankers_cases_transposed.at 0) (bankers_cases_transposed.at 1) rounding_mode=Rou.Bankers . should_equal (bankers_cases_transposed.at 2) build_sorted_table table_structure table_builder=setup.table_builder = # Workaround for https://github.com/enso-org/enso/issues/10321 From 29dc9f1c415a939ac10ad67c98084b69130ac410 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 1 Apr 2025 14:54:13 -0400 Subject: [PATCH 12/37] fix --- distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso index 70169d00c711..a6248c064e62 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso @@ -1038,7 +1038,7 @@ type Decimal round : Integer -> Boolean -> Decimal round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) -> Decimal = out_of_range = decimal_places > Java_Integer.MAX_VALUE || decimal_places < Java_Integer.MIN_VALUE - if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places (rounding_mode == Rounding_Mode.Half_Up)) else + if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places (rounding_mode == Rounding_Mode.Bankers)) else message = "round decimal_places must be between "+Java_Integer.MIN_VALUE.to_text+" and "+Java_Integer.MAX_VALUE.to_text+" (inclusive), but was "+decimal_places.to_text Error.throw (Out_Of_Range.Error decimal_places message) From 5c8b8ab521dc56c83be47258f637ee9888b2304c Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 1 Apr 2025 15:09:07 -0400 Subject: [PATCH 13/37] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3292c8164c92..47adc50d9755 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -125,6 +125,7 @@ - [Added `add_group_number` for Postgres and SQLite.][12574] - [Added `add_group_number` for Snowflake and SQLServer.][12590] - [Added Regex_match for Postgres][12663] +- [Use `Rounding_Mode` in all `round` methods][12641] [11926]: https://github.com/enso-org/enso/pull/11926 [12031]: https://github.com/enso-org/enso/pull/12031 @@ -147,6 +148,7 @@ [12574]: https://github.com/enso-org/enso/pull/12574 [12590]: https://github.com/enso-org/enso/pull/12590 [12663]: https://github.com/enso-org/enso/pull/12663 +[12641]: https://github.com/enso-org/enso/pull/12641 #### Enso Language & Runtime From 7fd7664b576191bd68fe7630104d7f496ab16a63 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 1 Apr 2025 15:09:32 -0400 Subject: [PATCH 14/37] fmt --- .../java/org/enso/polyglot/common_utils/Core_Math_Utils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java b/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java index 6f6abb3370d0..eed416356c01 100644 --- a/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java +++ b/lib/scala/common-polyglot-core-utils/src/main/java/org/enso/polyglot/common_utils/Core_Math_Utils.java @@ -80,8 +80,8 @@ public static double roundDouble(double n, long decimalPlaces, boolean useBanker *

For integers, rounding to 0 or more decimal places simply returns the argument. * *

By default, rounding uses "asymmetric round-half-up", also known as "round towards positive - * infinity." If rounding_mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known as "banker's - * rounding". + * infinity." If rounding_mode=Rounding_Mode.Bankers, then it uses "round-half-even", also known + * as "banker's rounding". * * @param n the number to round. * @param decimalPlaces the number of decimal places to round to. Can be negative, which results From 5be63fe5f78d5f7feb23bd1839a97ec8d43929ed Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 1 Apr 2025 16:36:50 -0400 Subject: [PATCH 15/37] wip --- .../src/Common_Table_Operations/Column_Operations_Spec.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso index 26a792a4f73b..796ca79e79cf 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso @@ -189,7 +189,7 @@ add_column_operation_specs suite_builder setup = cases_transposed = cases.transpose bankers_cases_transposed = bankers_cases.transpose round_batch (cases_transposed.at 0) (cases_transposed.at 1) rounding_mode=Rounding_Mode.Half_Up . should_equal (cases_transposed.at 2) - round_batch (bankers_cases_transposed.at 0) (bankers_cases_transposed.at 1) rounding_mode=Rou.Bankers . should_equal (bankers_cases_transposed.at 2) + round_batch (bankers_cases_transposed.at 0) (bankers_cases_transposed.at 1) rounding_mode=Rounding_Mode.Bankers . should_equal (bankers_cases_transposed.at 2) build_sorted_table table_structure table_builder=setup.table_builder = # Workaround for https://github.com/enso-org/enso/issues/10321 From 90b425d2ab1e4069683225e8b87fa4b7cbb0c004 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 3 Apr 2025 14:16:13 -0400 Subject: [PATCH 16/37] clarified changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47adc50d9755..0ec1f7c0e1fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -125,7 +125,8 @@ - [Added `add_group_number` for Postgres and SQLite.][12574] - [Added `add_group_number` for Snowflake and SQLServer.][12590] - [Added Regex_match for Postgres][12663] -- [Use `Rounding_Mode` in all `round` methods][12641] +- [Replace `use_bankers` flag with `Rounding_Mode` in all `round` + methods][12641] [11926]: https://github.com/enso-org/enso/pull/11926 [12031]: https://github.com/enso-org/enso/pull/12031 From d80aa849bda0ff86b0f5db9ecd360b0d2c6d27be Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 3 Apr 2025 14:17:11 -0400 Subject: [PATCH 17/37] wip --- .../Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index 7cf268a87cbb..5523e4aaf8b2 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -17,7 +17,7 @@ type Rounding_Mode the nearest even neighbor. Bankers - to_java_rounding_mode self -> RoundingMode = + private to_java_rounding_mode self -> RoundingMode = case self of Rounding_Mode.Half_Up -> RoundingMode.HALF_UP Rounding_Mode.Bankers -> RoundingMode.HALF_EVEN From 627cab12a96aa31178bbcd5f79a55a7f5dd9f807 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Mon, 7 Apr 2025 15:00:35 -0400 Subject: [PATCH 18/37] handle deprecated argument in Numbers --- .../Standard/Base/0.0.0-dev/src/Data/Numbers.enso | 10 ++++++---- .../src/Data/Numeric/Internal/Round_Internal.enso | 14 ++++++++++++++ test/Base_Tests/src/Data/Round_Spec.enso | 15 ++++++++++++--- 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Internal/Round_Internal.enso diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index 290e8c0f00a9..32f9be00f96f 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -14,6 +14,7 @@ import project.Internal.Rounding_Helpers import project.Nothing.Nothing import project.Panic.Panic from project.Data.Boolean import Boolean, False, True +from project.Data.Numeric.Internal.Round_Internal import resolve_deprecated_rounding_mode from project.Internal.Number_Builtins import all from project.Internal.Ordering_Helpers import Positive_Integer_Comparator from project.Widget_Helpers import make_number_format_selector @@ -709,10 +710,11 @@ type Float 2.5 . round rounding_mode=Rounding_Mode.Bankers == 2 round : Integer -> Boolean -> Integer | Float ! Illegal_Argument - round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) = - report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) - Panic.catch Unsupported_Argument_Types handler=report_unsupported - round_float_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) + round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) = + resolve_deprecated_rounding_mode "Standard.Base.Data.Numbers.Float" rounding_mode rounding_mode-> + report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) + Panic.catch Unsupported_Argument_Types handler=report_unsupported + round_float_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) ## GROUP Operators ICON operators diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Internal/Round_Internal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Internal/Round_Internal.enso new file mode 100644 index 000000000000..73b0e4975f9d --- /dev/null +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Internal/Round_Internal.enso @@ -0,0 +1,14 @@ +private + +import project.Data.Numeric.Rounding_Mode.Rounding_Mode +import project.Data.Text.Text +import project.Errors.Deprecated.Deprecated +import project.Warning.Warning +from project.Data.Boolean import Boolean, False, True + +resolve_deprecated_rounding_mode (type_name:Text) (rounding_mode : Rounding_Mode | Boolean) ~action = + case rounding_mode of + _ : Boolean -> + rounding_mode_resolved = if rounding_mode then Rounding_Mode.Bankers else Rounding_Mode.Half_Up + Warning.attach (Deprecated.Warning type_name "round" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") (action rounding_mode_resolved) + _ -> action rounding_mode diff --git a/test/Base_Tests/src/Data/Round_Spec.enso b/test/Base_Tests/src/Data/Round_Spec.enso index 9788a9d07b1f..91b200731605 100644 --- a/test/Base_Tests/src/Data/Round_Spec.enso +++ b/test/Base_Tests/src/Data/Round_Spec.enso @@ -1,5 +1,6 @@ from Standard.Base import all import Standard.Base.Errors.Common.Type_Error +import Standard.Base.Errors.Deprecated.Deprecated import Standard.Base.Errors.Illegal_Argument.Illegal_Argument from Standard.Test import all @@ -14,21 +15,25 @@ type Batch_Runner values_vec.zip dps_vec v-> dp-> f v dp rounding_mode Batch_Runner.Value batch f - run self (rounding_mode : Rounding_Mode) (action : Batch_Builder -> Nothing) = + run self (rounding_mode : Rounding_Mode | Boolean) (action : Batch_Builder -> Nothing) = configs = Vector.build vector_builder-> action (Batch_Builder.Value vector_builder . round) values_vec = configs.map c-> c.at 0 dps_vec = configs.map c-> c.at 1 expected_vec = configs.map c-> c.at 2 epsilon_vec = configs.map c-> c.at 3 + warning_vec = configs.map c-> c.at 4 got_vec = self.run_batch values_vec dps_vec rounding_mode got_vec.each_with_index ix-> got-> expected = expected_vec.at ix value = values_vec.at ix dp = dps_vec.at ix epsilon = epsilon_vec.at ix + warning = warning_vec.at ix Test.with_clue "round("+value.to_text+", "+dp.to_text+", rounding_mode="+rounding_mode.to_text+") -> " <| got.should_equal expected epsilon + if warning.is_nothing.not then + Problems.expect_warning warning got type Batch_Builder Value vector_builder @@ -39,8 +44,8 @@ type Batch_Builder type Check_Instance Value vector_builder value dp - should_equal self (expected : Number) (epsilon:Float=0) = - self.vector_builder.append [self.value, self.dp, expected, epsilon] + should_equal self (expected : Number) (epsilon:Float=0) (with_warning=Nothing) = + self.vector_builder.append [self.value, self.dp, expected, epsilon, with_warning] ## PRIVATE add_specs group_builder batch_runner run_advanced = @@ -273,5 +278,9 @@ add_specs group_builder batch_runner run_advanced = round_fun -12250 -2 . should_equal -12200 round_fun -12251 -2 . should_equal -12300 + group_builder.specify "Accepts deprecated use_bankers boolean argument, with a warning" <| + batch_runner.run rounding_mode=True round_fun-> + round_fun -3.5 . should_equal -4 with_warning=Deprecated + group_builder.specify "Handles incorrect argument types" <| Test.expect_panic_with (batch_runner.run_one 123 "two") Type_Error From df9486d772a011786017f3d55d63b35f3e6559a9 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Mon, 7 Apr 2025 15:30:12 -0400 Subject: [PATCH 19/37] decimal, columns --- .../Base/0.0.0-dev/src/Data/Decimal.enso | 12 ++++++---- .../Base/0.0.0-dev/src/Data/Numbers.enso | 13 +++++----- .../Data/Numeric/Internal/Round_Internal.enso | 14 ----------- .../src/Data/Numeric/Rounding_Mode.enso | 16 +++++++++++++ .../Database/0.0.0-dev/src/DB_Column.enso | 24 ++++++++++--------- .../Standard/Table/0.0.0-dev/src/Column.enso | 10 ++++---- .../Table/0.0.0-dev/src/Column_Operation.enso | 2 +- .../0.0.0-dev/src/Simple_Expression.enso | 4 ++-- 8 files changed, 52 insertions(+), 43 deletions(-) delete mode 100644 distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Internal/Round_Internal.enso diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso index a6248c064e62..d9873b06a055 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso @@ -14,6 +14,7 @@ import project.Warning.Warning from project.Data.Boolean import Boolean, False, True from project.Data.Numbers import Float, Integer, Number, Number_Parse_Error from project.Data.Numeric.Internal.Decimal_Internal import Decimal_Comparator +from project.Data.Numeric.Rounding_Mode import resolve_deprecated_rounding_mode from project.Data.Ordering import Comparable, Ordering from project.Errors.Common import Arithmetic_Error, Loss_Of_Numeric_Precision, Out_Of_Range, Unsupported_Argument_Types from project.Widget_Helpers import make_number_format_selector @@ -1036,11 +1037,12 @@ type Decimal Decimal.new "2.5" . round rounding_mode=Rounding_Mode.Bankers # => 2 round : Integer -> Boolean -> Decimal - round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) -> Decimal = - out_of_range = decimal_places > Java_Integer.MAX_VALUE || decimal_places < Java_Integer.MIN_VALUE - if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places (rounding_mode == Rounding_Mode.Bankers)) else - message = "round decimal_places must be between "+Java_Integer.MIN_VALUE.to_text+" and "+Java_Integer.MAX_VALUE.to_text+" (inclusive), but was "+decimal_places.to_text - Error.throw (Out_Of_Range.Error decimal_places message) + round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) -> Decimal = + resolve_deprecated_rounding_mode "Standard.Base.Data.Decimal.Decimal" rounding_mode rounding_mode-> + out_of_range = decimal_places > Java_Integer.MAX_VALUE || decimal_places < Java_Integer.MIN_VALUE + if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places (rounding_mode == Rounding_Mode.Bankers)) else + message = "round decimal_places must be between "+Java_Integer.MIN_VALUE.to_text+" and "+Java_Integer.MAX_VALUE.to_text+" (inclusive), but was "+decimal_places.to_text + Error.throw (Out_Of_Range.Error decimal_places message) ## GROUP Rounding ICON math diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index 32f9be00f96f..46707976af48 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -14,7 +14,7 @@ import project.Internal.Rounding_Helpers import project.Nothing.Nothing import project.Panic.Panic from project.Data.Boolean import Boolean, False, True -from project.Data.Numeric.Internal.Round_Internal import resolve_deprecated_rounding_mode +from project.Data.Numeric.Rounding_Mode import resolve_deprecated_rounding_mode from project.Internal.Number_Builtins import all from project.Internal.Ordering_Helpers import Positive_Integer_Comparator from project.Widget_Helpers import make_number_format_selector @@ -1114,13 +1114,14 @@ type Integer Round to the nearest hundred, using Banker's Rounding. 12250 . round -2 rounding_mode=Rounding_Mode.Bankers == 12200 - round self (decimal_places:Integer=0) (rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up) -> Integer ! Illegal_Argument = + round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) -> Integer ! Illegal_Argument = ## We reject values outside the range of `long` here, so we don't also do this check in the Java. - Rounding_Helpers.check_round_input self <| - report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) - Panic.catch Unsupported_Argument_Types handler=report_unsupported - round_integer_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) + resolve_deprecated_rounding_mode "Standard.Base.Data.Numbers.Integer" rounding_mode rounding_mode-> + Rounding_Helpers.check_round_input self <| + report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) + Panic.catch Unsupported_Argument_Types handler=report_unsupported + round_integer_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) ## GROUP Operators ICON operators diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Internal/Round_Internal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Internal/Round_Internal.enso deleted file mode 100644 index 73b0e4975f9d..000000000000 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Internal/Round_Internal.enso +++ /dev/null @@ -1,14 +0,0 @@ -private - -import project.Data.Numeric.Rounding_Mode.Rounding_Mode -import project.Data.Text.Text -import project.Errors.Deprecated.Deprecated -import project.Warning.Warning -from project.Data.Boolean import Boolean, False, True - -resolve_deprecated_rounding_mode (type_name:Text) (rounding_mode : Rounding_Mode | Boolean) ~action = - case rounding_mode of - _ : Boolean -> - rounding_mode_resolved = if rounding_mode then Rounding_Mode.Bankers else Rounding_Mode.Half_Up - Warning.attach (Deprecated.Warning type_name "round" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") (action rounding_mode_resolved) - _ -> action rounding_mode diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index 5523e4aaf8b2..859156b0fe10 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -1,3 +1,9 @@ +import project.Data.Numeric.Rounding_Mode.Rounding_Mode +import project.Data.Text.Text +import project.Errors.Deprecated.Deprecated +import project.Warning.Warning +from project.Data.Boolean import Boolean, False, True + polyglot java import java.math.RoundingMode ## A wrapper around the Java @@ -21,3 +27,13 @@ type Rounding_Mode case self of Rounding_Mode.Half_Up -> RoundingMode.HALF_UP Rounding_Mode.Bankers -> RoundingMode.HALF_EVEN + +## PRIVATE + Convert deprecated `use_bankers : Boolean` arguments (passed as + `rounding_mode`) to `Rounding_Mode`. +resolve_deprecated_rounding_mode (type_name:Text) (rounding_mode : Rounding_Mode | Boolean) ~action = + case rounding_mode of + _ : Boolean -> + rounding_mode_resolved = if rounding_mode then Rounding_Mode.Bankers else Rounding_Mode.Half_Up + Warning.attach (Deprecated.Warning type_name "round" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") (action rounding_mode_resolved) + _ -> action rounding_mode diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso index 0cc72ca0adae..57abe1665450 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso @@ -6,6 +6,7 @@ import Standard.Base.Errors.Common.Missing_Argument import Standard.Base.Errors.Illegal_Argument.Illegal_Argument import Standard.Base.Errors.Illegal_State.Illegal_State import Standard.Base.Internal.Rounding_Helpers +from Standard.Base.Data.Numeric.Rounding_Mode import resolve_deprecated_rounding_mode from Standard.Base.Metadata.Widget import Numeric_Input, Text_Input from Standard.Base.Widget_Helpers import make_data_cleanse_vector_selector, make_format_chooser, make_regex_text_widget @@ -885,17 +886,18 @@ type DB_Column import Standard.Examples example_round = Examples.decimal_column.round 2 - round self decimal_places:Integer=0 rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up -> DB_Column ! Illegal_Argument | Invalid_Value_Type = - Rounding_Helpers.check_decimal_places decimal_places <| Value_Type.expect_numeric self <| - if self.should_use_builtin_round decimal_places rounding_mode then self.round_builtin decimal_places rounding_mode else - self.short_circuit_special_floating_point <| - case self.value_type of - Value_Type.Integer _ -> self.round_integer decimal_places rounding_mode - Value_Type.Float _ -> self.round_float decimal_places rounding_mode - Value_Type.Decimal _ _ -> self.round_decimal decimal_places rounding_mode - _ -> - expected = "Decimal, Float, or Integer" - Error.throw (Invalid_Value_Type.Column expected self.value_type self.name) + round self decimal_places:Integer=0 (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) -> DB_Column ! Illegal_Argument | Invalid_Value_Type = + resolve_deprecated_rounding_mode "Standard.Database.DB_Column.DB_Column" rounding_mode rounding_mode-> + Rounding_Helpers.check_decimal_places decimal_places <| Value_Type.expect_numeric self <| + if self.should_use_builtin_round decimal_places rounding_mode then self.round_builtin decimal_places rounding_mode else + self.short_circuit_special_floating_point <| + case self.value_type of + Value_Type.Integer _ -> self.round_integer decimal_places rounding_mode + Value_Type.Float _ -> self.round_float decimal_places rounding_mode + Value_Type.Decimal _ _ -> self.round_decimal decimal_places rounding_mode + _ -> + expected = "Decimal, Float, or Integer" + Error.throw (Invalid_Value_Type.Column expected self.value_type self.name) ## PRIVATE Determine whether to use built-in rounding. We use built-in rounding if: diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index 446d34cdd9e6..948deba120f4 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -14,6 +14,7 @@ import Standard.Base.Errors.Illegal_State.Illegal_State import Standard.Base.Internal.Polyglot_Helpers import Standard.Base.Internal.Rounding_Helpers from Standard.Base.Data.Index_Sub_Range import drop_helper, normalize_ranges, take_helper +from Standard.Base.Data.Numeric.Rounding_Mode import resolve_deprecated_rounding_mode from Standard.Base.Metadata import Display, make_single_choice from Standard.Base.Metadata.Widget import Numeric_Input, Text_Input from Standard.Base.Widget_Helpers import make_data_cleanse_vector_selector, make_format_chooser, make_regex_text_widget @@ -911,10 +912,11 @@ type Column Round a column of `Float` values`. Column.from_vector "foo" [1.2, 2.3, 3.6] . round == (Column.from_vector "foo" [1, 2, 4]) - round self decimal_places:Integer=0 rounding_mode:Rounding_Mode=Rounding_Mode.Half_Up -> Column ! Illegal_Argument | Invalid_Value_Type = Value_Type.expect_numeric self <| - Illegal_Argument.handle_java_exception <| Rounding_Helpers.check_decimal_places decimal_places <| - new_name = naming_helper.function_name "round" [self] - run_vectorized_ternary_op self Java_Storage.Maps.ROUND decimal_places (rounding_mode == Rounding_Mode.Bankers) new_name=new_name + round self decimal_places:Integer=0 (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) -> Column ! Illegal_Argument | Invalid_Value_Type = Value_Type.expect_numeric self <| + resolve_deprecated_rounding_mode "Standard.Table.Column.Column" rounding_mode rounding_mode-> + Illegal_Argument.handle_java_exception <| Rounding_Helpers.check_decimal_places decimal_places <| + new_name = naming_helper.function_name "round" [self] + run_vectorized_ternary_op self Java_Storage.Maps.ROUND decimal_places (rounding_mode == Rounding_Mode.Bankers) new_name=new_name ## ALIAS int GROUP Standard.Base.Rounding diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso index e411b96867c2..c363e44ffa75 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso @@ -31,7 +31,7 @@ type Column_Operation Power (input : Column_Ref|Expression|Number) (rhs : Column_Ref|Expression|Number) ## Rounds values in the column to the specified precision. - Round (input : Column_Ref|Expression|Number) (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.Half_Up) + Round (input : Column_Ref|Expression|Number) (precision:Integer = 0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) ## Rounds values in the column up to the nearest integer. Ceil (input : Column_Ref|Expression|Number) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso index 46c9d1f4707c..34109d4170d1 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso @@ -166,7 +166,7 @@ type Math_Operation Power (rhs : Column_Ref|Expression|Number = 1) ## Rounds values in the column to the specified precision. - Round (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.Half_Up) + Round (precision:Integer = 0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) ## Rounds values in the column up to the nearest integer. Ceil @@ -346,7 +346,7 @@ type Simple_Calculation Power (rhs : Column_Ref|Expression|Number = 1) ## Rounds values in the column to the specified precision. - Round (precision:Integer = 0) (rounding_mode:Rounding_Mode = Rounding_Mode.Half_Up) + Round (precision:Integer = 0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) ## Rounds values in the column up to the nearest integer. Ceil From 3837536cf2c991f5931bb3f52067901f5c843797 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 8 Apr 2025 12:52:34 -0400 Subject: [PATCH 20/37] api --- .../lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md | 2 +- .../lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md | 4 ++-- .../Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md | 2 +- .../lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md index 5a5dd567d3c5..c3f6ffee9d50 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md @@ -31,7 +31,7 @@ - pow self exp:Standard.Base.Data.Numbers.Integer -> Standard.Base.Data.Decimal.Decimal - precision self -> Standard.Base.Data.Numbers.Integer - remainder self that:Standard.Base.Data.Decimal.Decimal -> Standard.Base.Data.Decimal.Decimal - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Data.Decimal.Decimal + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Data.Decimal.Decimal - scale self -> Standard.Base.Data.Numbers.Integer - set_scale self new_scale:Standard.Base.Data.Numbers.Integer -> Standard.Base.Data.Decimal.Decimal - signum self -> Standard.Base.Data.Numbers.Integer diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md index d016a6b10670..952eb346a449 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md @@ -18,7 +18,7 @@ - min_value -> Standard.Base.Any.Any - negate self -> Standard.Base.Data.Numbers.Float - parse text:Standard.Base.Data.Text.Text locale:(Standard.Base.Data.Locale.Locale|Standard.Base.Nothing.Nothing)= format:(Standard.Base.Data.Text.Text|Standard.Base.Nothing.Nothing)= -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Any.Any - to_decimal self -> Standard.Base.Data.Decimal.Decimal - to_float self -> Standard.Base.Data.Numbers.Float - truncate self -> Standard.Base.Data.Numbers.Integer @@ -47,7 +47,7 @@ - floor self -> Standard.Base.Data.Numbers.Integer - negate self -> Standard.Base.Data.Numbers.Integer - parse text:Standard.Base.Data.Text.Text radix:Standard.Base.Data.Numbers.Integer= -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Any.Any - to_decimal self -> Standard.Base.Data.Decimal.Decimal - to_float self -> Standard.Base.Data.Numbers.Float - truncate self -> Standard.Base.Data.Numbers.Integer diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md index 2ca8ffef6c6f..6fe01de4dbff 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md @@ -3,4 +3,4 @@ - type Rounding_Mode - Bankers - Half_Up - - to_java_rounding_mode self -> Standard.Base.Data.Numeric.Rounding_Mode.RoundingMode +- resolve_deprecated_rounding_mode type_name:Standard.Base.Data.Text.Text rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean) ~action:Standard.Base.Any.Any -> Standard.Base.Any.Any diff --git a/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md b/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md index 4c0cb5a4eeab..dc37215a3806 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md +++ b/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md @@ -77,7 +77,7 @@ - read self max_rows:Standard.Table.Rows_To_Read.Rows_To_Read= -> Standard.Table.Column.Column - regex_match self pattern:(Standard.Database.DB_Column.DB_Column|Standard.Base.Data.Text.Text|Standard.Base.Data.Text.Regex.Regex) -> Standard.Database.DB_Column.DB_Column - rename self name:Standard.Base.Data.Text.Text -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Any.Any - round_builtin self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any - round_decimal self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any - round_float self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any From 2b5b40629924dd6edf06b357648cd490c96c731e Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 8 Apr 2025 13:47:03 -0400 Subject: [PATCH 21/37] mark db deprecated warning spec pending --- test/Base_Tests/src/Data/Decimal_Spec.enso | 2 +- test/Base_Tests/src/Data/Numbers_Spec.enso | 2 +- test/Base_Tests/src/Data/Round_Spec.enso | 5 +++-- .../src/Common_Table_Operations/Column_Operations_Spec.enso | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/test/Base_Tests/src/Data/Decimal_Spec.enso b/test/Base_Tests/src/Data/Decimal_Spec.enso index a20b2dcef465..0402452306c9 100644 --- a/test/Base_Tests/src/Data/Decimal_Spec.enso +++ b/test/Base_Tests/src/Data/Decimal_Spec.enso @@ -847,7 +847,7 @@ add_specs suite_builder = d = Decimal.new n . round dp rounding_mode d.to_float - Round_Spec.add_specs group_builder (Round_Spec.Batch_Runner.from_function do_round) run_advanced=True + Round_Spec.add_specs False group_builder (Round_Spec.Batch_Runner.from_function do_round) run_advanced=True group_builder.specify "Large values" <| Decimal.new "1234.5678E-50" . round 53 . should_equal (Decimal.new "1234.568E-50") diff --git a/test/Base_Tests/src/Data/Numbers_Spec.enso b/test/Base_Tests/src/Data/Numbers_Spec.enso index 1d8f654d12f2..8c9fb4d7e34e 100644 --- a/test/Base_Tests/src/Data/Numbers_Spec.enso +++ b/test/Base_Tests/src/Data/Numbers_Spec.enso @@ -607,7 +607,7 @@ add_specs suite_builder = ((99999999999998 * 1000).div 1000) . round . should_equal 99999999999998 suite_builder.group "Rounding" group_builder-> - Round_Spec.add_specs group_builder (Round_Spec.Batch_Runner.from_function .round) run_advanced=True + Round_Spec.add_specs False group_builder (Round_Spec.Batch_Runner.from_function .round) run_advanced=True group_builder.specify "Decimal places out of range" <| 3.1 . round 16 . should_fail_with Illegal_Argument diff --git a/test/Base_Tests/src/Data/Round_Spec.enso b/test/Base_Tests/src/Data/Round_Spec.enso index 91b200731605..9d0a8b4f7416 100644 --- a/test/Base_Tests/src/Data/Round_Spec.enso +++ b/test/Base_Tests/src/Data/Round_Spec.enso @@ -48,7 +48,7 @@ type Check_Instance self.vector_builder.append [self.value, self.dp, expected, epsilon, with_warning] ## PRIVATE -add_specs group_builder batch_runner run_advanced = +add_specs is_database group_builder batch_runner run_advanced = pending_advanced = if run_advanced.not then "Advanced edge tests are disabled in this run." group_builder.specify "Can round positive decimals correctly" <| batch_runner.run rounding_mode=Rounding_Mode.Half_Up round_fun-> @@ -278,7 +278,8 @@ add_specs group_builder batch_runner run_advanced = round_fun -12250 -2 . should_equal -12200 round_fun -12251 -2 . should_equal -12300 - group_builder.specify "Accepts deprecated use_bankers boolean argument, with a warning" <| + deprecated_argument_pending = if is_database then "https://github.com/enso-org/enso/issues/12787" else Nothing + group_builder.specify "Accepts deprecated use_bankers boolean argument, with a warning" pending=deprecated_argument_pending <| batch_runner.run rounding_mode=True round_fun-> round_fun -3.5 . should_equal -4 with_warning=Deprecated diff --git a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso index fe03310ee22a..cbca618caed1 100644 --- a/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso +++ b/test/Table_Tests/src/Common_Table_Operations/Column_Operations_Spec.enso @@ -174,7 +174,7 @@ add_column_operation_specs suite_builder setup = materialized = new_table.read Runtime.assert (materialized.row_count == 1) materialized.first_row.to_vector - Round_Spec.add_specs group_builder (Round_Spec.Batch_Runner.Value round_batch round_one) run_advanced=setup.test_selection.run_advanced_edge_case_tests + Round_Spec.add_specs True group_builder (Round_Spec.Batch_Runner.Value round_batch round_one) run_advanced=setup.test_selection.run_advanced_edge_case_tests group_builder.specify "Decimal places out of range" <| 3.1 . round 16 . should_fail_with Illegal_Argument From b6a18dfe9ac7b74eaa3911443495b7edf8c4c3c5 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Tue, 8 Apr 2025 14:41:43 -0400 Subject: [PATCH 22/37] api --- distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md | 2 +- .../lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md | 2 +- .../Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md index 235a475b5a70..16d064202eac 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md +++ b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md @@ -85,7 +85,7 @@ - rename self name:Standard.Base.Data.Text.Text -> Standard.Base.Any.Any - requires_numeric_formatter_check self -> Standard.Base.Any.Any - reverse self -> Standard.Table.Column.Column - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Any.Any - running self statistic:Standard.Base.Data.Statistics.Statistic= name:Standard.Base.Data.Text.Text= -> Standard.Table.Column.Column - second self -> Standard.Base.Any.Any - should_be_selected_by_type self value_type:Standard.Table.Value_Type.Value_Type -> Standard.Base.Data.Boolean.Boolean diff --git a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md index 383728eadbff..819882a79df5 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md +++ b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md @@ -17,7 +17,7 @@ - Not input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean) - Or input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean) rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean) - Power input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) - - Round input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) precision:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= + - Round input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) precision:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= - Subtract input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) - Trim input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Text.Text) where:Standard.Base.Data.Text.Location.Location= what:(Standard.Base.Data.Text.Text|Standard.Table.Column_Ref.Column_Ref)= - Truncate input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number|Standard.Base.Data.Time.Date_Time.Date_Time) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md index d925053984de..a847a1cdff50 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md +++ b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md @@ -27,7 +27,7 @@ - Multiply rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - Negate - Power rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= + - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= - Subtract rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - Truncate - create_widget table:Standard.Table.Internal.Table_Ref.Table_Ref display:Standard.Base.Metadata.Display= -> Standard.Base.Any.Any @@ -54,7 +54,7 @@ - Not - Or rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean)= - Power rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= + - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= - Subtract rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - Text operation:Standard.Table.Simple_Expression.Text_Operation= - Text_Left length:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Integer)= From 9808e519c5787e40e3abda692e715dd5dad7b673 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 9 Apr 2025 13:58:31 +0100 Subject: [PATCH 23/37] Use conversion instead of method. --- .../Base/0.0.0-dev/src/Data/Decimal.enso | 14 +++++------ .../Base/0.0.0-dev/src/Data/Numbers.enso | 23 ++++++++---------- .../src/Data/Numeric/Rounding_Mode.enso | 9 +++---- .../Database/0.0.0-dev/src/DB_Column.enso | 24 +++++++++---------- .../Standard/Table/0.0.0-dev/src/Column.enso | 10 ++++---- 5 files changed, 34 insertions(+), 46 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso index d9873b06a055..73f232e660ad 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Decimal.enso @@ -14,7 +14,6 @@ import project.Warning.Warning from project.Data.Boolean import Boolean, False, True from project.Data.Numbers import Float, Integer, Number, Number_Parse_Error from project.Data.Numeric.Internal.Decimal_Internal import Decimal_Comparator -from project.Data.Numeric.Rounding_Mode import resolve_deprecated_rounding_mode from project.Data.Ordering import Comparable, Ordering from project.Errors.Common import Arithmetic_Error, Loss_Of_Numeric_Precision, Out_Of_Range, Unsupported_Argument_Types from project.Widget_Helpers import make_number_format_selector @@ -1036,13 +1035,12 @@ type Decimal Decimal.new "2.5" . round rounding_mode=Rounding_Mode.Bankers # => 2 - round : Integer -> Boolean -> Decimal - round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) -> Decimal = - resolve_deprecated_rounding_mode "Standard.Base.Data.Decimal.Decimal" rounding_mode rounding_mode-> - out_of_range = decimal_places > Java_Integer.MAX_VALUE || decimal_places < Java_Integer.MIN_VALUE - if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places (rounding_mode == Rounding_Mode.Bankers)) else - message = "round decimal_places must be between "+Java_Integer.MIN_VALUE.to_text+" and "+Java_Integer.MAX_VALUE.to_text+" (inclusive), but was "+decimal_places.to_text - Error.throw (Out_Of_Range.Error decimal_places message) + round : Integer -> Rounding_Mode -> Decimal + round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode = ..Half_Up) -> Decimal = + out_of_range = decimal_places > Java_Integer.MAX_VALUE || decimal_places < Java_Integer.MIN_VALUE + if out_of_range.not then Decimal.Value (Decimal_Utils.round self.big_decimal decimal_places (rounding_mode == Rounding_Mode.Bankers)) else + message = "round decimal_places must be between "+Java_Integer.MIN_VALUE.to_text+" and "+Java_Integer.MAX_VALUE.to_text+" (inclusive), but was "+decimal_places.to_text + Error.throw (Out_Of_Range.Error decimal_places message) ## GROUP Rounding ICON math diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index 46707976af48..cba621b20e97 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -14,7 +14,6 @@ import project.Internal.Rounding_Helpers import project.Nothing.Nothing import project.Panic.Panic from project.Data.Boolean import Boolean, False, True -from project.Data.Numeric.Rounding_Mode import resolve_deprecated_rounding_mode from project.Internal.Number_Builtins import all from project.Internal.Ordering_Helpers import Positive_Integer_Comparator from project.Widget_Helpers import make_number_format_selector @@ -709,12 +708,11 @@ type Float Use Banker's Rounding. 2.5 . round rounding_mode=Rounding_Mode.Bankers == 2 - round : Integer -> Boolean -> Integer | Float ! Illegal_Argument - round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) = - resolve_deprecated_rounding_mode "Standard.Base.Data.Numbers.Float" rounding_mode rounding_mode-> - report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) - Panic.catch Unsupported_Argument_Types handler=report_unsupported - round_float_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) + round : Integer -> Rounding_Mode -> Integer | Float ! Illegal_Argument + round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode = ..Half_Up) = + report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) + Panic.catch Unsupported_Argument_Types handler=report_unsupported + round_float_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) ## GROUP Operators ICON operators @@ -1114,14 +1112,13 @@ type Integer Round to the nearest hundred, using Banker's Rounding. 12250 . round -2 rounding_mode=Rounding_Mode.Bankers == 12200 - round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) -> Integer ! Illegal_Argument = + round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode = ..Half_Up) -> Integer ! Illegal_Argument = ## We reject values outside the range of `long` here, so we don't also do this check in the Java. - resolve_deprecated_rounding_mode "Standard.Base.Data.Numbers.Integer" rounding_mode rounding_mode-> - Rounding_Helpers.check_round_input self <| - report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) - Panic.catch Unsupported_Argument_Types handler=report_unsupported - round_integer_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) + Rounding_Helpers.check_round_input self <| + report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) + Panic.catch Unsupported_Argument_Types handler=report_unsupported + round_integer_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) ## GROUP Operators ICON operators diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index 859156b0fe10..fd419186b05e 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -31,9 +31,6 @@ type Rounding_Mode ## PRIVATE Convert deprecated `use_bankers : Boolean` arguments (passed as `rounding_mode`) to `Rounding_Mode`. -resolve_deprecated_rounding_mode (type_name:Text) (rounding_mode : Rounding_Mode | Boolean) ~action = - case rounding_mode of - _ : Boolean -> - rounding_mode_resolved = if rounding_mode then Rounding_Mode.Bankers else Rounding_Mode.Half_Up - Warning.attach (Deprecated.Warning type_name "round" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") (action rounding_mode_resolved) - _ -> action rounding_mode +Rounding_Mode.from (that:Boolean) = + rounding_mode_resolved = if that then Rounding_Mode.Bankers else Rounding_Mode.Half_Up + Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso index 57abe1665450..309791cf0631 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/DB_Column.enso @@ -6,7 +6,6 @@ import Standard.Base.Errors.Common.Missing_Argument import Standard.Base.Errors.Illegal_Argument.Illegal_Argument import Standard.Base.Errors.Illegal_State.Illegal_State import Standard.Base.Internal.Rounding_Helpers -from Standard.Base.Data.Numeric.Rounding_Mode import resolve_deprecated_rounding_mode from Standard.Base.Metadata.Widget import Numeric_Input, Text_Input from Standard.Base.Widget_Helpers import make_data_cleanse_vector_selector, make_format_chooser, make_regex_text_widget @@ -886,18 +885,17 @@ type DB_Column import Standard.Examples example_round = Examples.decimal_column.round 2 - round self decimal_places:Integer=0 (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) -> DB_Column ! Illegal_Argument | Invalid_Value_Type = - resolve_deprecated_rounding_mode "Standard.Database.DB_Column.DB_Column" rounding_mode rounding_mode-> - Rounding_Helpers.check_decimal_places decimal_places <| Value_Type.expect_numeric self <| - if self.should_use_builtin_round decimal_places rounding_mode then self.round_builtin decimal_places rounding_mode else - self.short_circuit_special_floating_point <| - case self.value_type of - Value_Type.Integer _ -> self.round_integer decimal_places rounding_mode - Value_Type.Float _ -> self.round_float decimal_places rounding_mode - Value_Type.Decimal _ _ -> self.round_decimal decimal_places rounding_mode - _ -> - expected = "Decimal, Float, or Integer" - Error.throw (Invalid_Value_Type.Column expected self.value_type self.name) + round self decimal_places:Integer=0 (rounding_mode : Rounding_Mode = ..Half_Up) -> DB_Column ! Illegal_Argument | Invalid_Value_Type = + Rounding_Helpers.check_decimal_places decimal_places <| Value_Type.expect_numeric self <| + if self.should_use_builtin_round decimal_places rounding_mode then self.round_builtin decimal_places rounding_mode else + self.short_circuit_special_floating_point <| + case self.value_type of + Value_Type.Integer _ -> self.round_integer decimal_places rounding_mode + Value_Type.Float _ -> self.round_float decimal_places rounding_mode + Value_Type.Decimal _ _ -> self.round_decimal decimal_places rounding_mode + _ -> + expected = "Decimal, Float, or Integer" + Error.throw (Invalid_Value_Type.Column expected self.value_type self.name) ## PRIVATE Determine whether to use built-in rounding. We use built-in rounding if: diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index 948deba120f4..1933e378abac 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -14,7 +14,6 @@ import Standard.Base.Errors.Illegal_State.Illegal_State import Standard.Base.Internal.Polyglot_Helpers import Standard.Base.Internal.Rounding_Helpers from Standard.Base.Data.Index_Sub_Range import drop_helper, normalize_ranges, take_helper -from Standard.Base.Data.Numeric.Rounding_Mode import resolve_deprecated_rounding_mode from Standard.Base.Metadata import Display, make_single_choice from Standard.Base.Metadata.Widget import Numeric_Input, Text_Input from Standard.Base.Widget_Helpers import make_data_cleanse_vector_selector, make_format_chooser, make_regex_text_widget @@ -912,11 +911,10 @@ type Column Round a column of `Float` values`. Column.from_vector "foo" [1.2, 2.3, 3.6] . round == (Column.from_vector "foo" [1, 2, 4]) - round self decimal_places:Integer=0 (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) -> Column ! Illegal_Argument | Invalid_Value_Type = Value_Type.expect_numeric self <| - resolve_deprecated_rounding_mode "Standard.Table.Column.Column" rounding_mode rounding_mode-> - Illegal_Argument.handle_java_exception <| Rounding_Helpers.check_decimal_places decimal_places <| - new_name = naming_helper.function_name "round" [self] - run_vectorized_ternary_op self Java_Storage.Maps.ROUND decimal_places (rounding_mode == Rounding_Mode.Bankers) new_name=new_name + round self decimal_places:Integer=0 (rounding_mode : Rounding_Mode = ..Half_Up) -> Column ! Illegal_Argument | Invalid_Value_Type = Value_Type.expect_numeric self <| + Illegal_Argument.handle_java_exception <| Rounding_Helpers.check_decimal_places decimal_places <| + new_name = naming_helper.function_name "round" [self] + run_vectorized_ternary_op self Java_Storage.Maps.ROUND decimal_places (rounding_mode == Rounding_Mode.Bankers) new_name=new_name ## ALIAS int GROUP Standard.Base.Rounding From fdf781457ea2917c96fb718ffb28508930ce46f0 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Wed, 9 Apr 2025 10:00:20 -0400 Subject: [PATCH 24/37] submodule update --- app/gui/.dev-env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/gui/.dev-env b/app/gui/.dev-env index 29f136759558..2f5de604bb2f 160000 --- a/app/gui/.dev-env +++ b/app/gui/.dev-env @@ -1 +1 @@ -Subproject commit 29f136759558bf3893e4a139e09192de1d00f181 +Subproject commit 2f5de604bb2f6b8dacef3961b9e2698262238981 From b08e419ea621e579cec6782faf2b5d5e65a059b9 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Wed, 9 Apr 2025 10:01:45 -0400 Subject: [PATCH 25/37] merge --- app/gui/.dev-env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/gui/.dev-env b/app/gui/.dev-env index 29f136759558..2f5de604bb2f 160000 --- a/app/gui/.dev-env +++ b/app/gui/.dev-env @@ -1 +1 @@ -Subproject commit 29f136759558bf3893e4a139e09192de1d00f181 +Subproject commit 2f5de604bb2f6b8dacef3961b9e2698262238981 From e5c354ea66b2176d172a0e9798770313230a56cc Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Wed, 9 Apr 2025 10:03:12 -0400 Subject: [PATCH 26/37] api --- .../lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md | 2 +- .../lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md | 4 ++-- .../Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md | 2 +- .../lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md | 2 +- distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md index c3f6ffee9d50..5a5dd567d3c5 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Decimal.md @@ -31,7 +31,7 @@ - pow self exp:Standard.Base.Data.Numbers.Integer -> Standard.Base.Data.Decimal.Decimal - precision self -> Standard.Base.Data.Numbers.Integer - remainder self that:Standard.Base.Data.Decimal.Decimal -> Standard.Base.Data.Decimal.Decimal - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Data.Decimal.Decimal + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Data.Decimal.Decimal - scale self -> Standard.Base.Data.Numbers.Integer - set_scale self new_scale:Standard.Base.Data.Numbers.Integer -> Standard.Base.Data.Decimal.Decimal - signum self -> Standard.Base.Data.Numbers.Integer diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md index 952eb346a449..d016a6b10670 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md @@ -18,7 +18,7 @@ - min_value -> Standard.Base.Any.Any - negate self -> Standard.Base.Data.Numbers.Float - parse text:Standard.Base.Data.Text.Text locale:(Standard.Base.Data.Locale.Locale|Standard.Base.Nothing.Nothing)= format:(Standard.Base.Data.Text.Text|Standard.Base.Nothing.Nothing)= -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any - to_decimal self -> Standard.Base.Data.Decimal.Decimal - to_float self -> Standard.Base.Data.Numbers.Float - truncate self -> Standard.Base.Data.Numbers.Integer @@ -47,7 +47,7 @@ - floor self -> Standard.Base.Data.Numbers.Integer - negate self -> Standard.Base.Data.Numbers.Integer - parse text:Standard.Base.Data.Text.Text radix:Standard.Base.Data.Numbers.Integer= -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any - to_decimal self -> Standard.Base.Data.Decimal.Decimal - to_float self -> Standard.Base.Data.Numbers.Float - truncate self -> Standard.Base.Data.Numbers.Integer diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md index 6fe01de4dbff..984ca4d099e7 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numeric/Rounding_Mode.md @@ -3,4 +3,4 @@ - type Rounding_Mode - Bankers - Half_Up -- resolve_deprecated_rounding_mode type_name:Standard.Base.Data.Text.Text rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean) ~action:Standard.Base.Any.Any -> Standard.Base.Any.Any +- Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode.from that:Standard.Base.Data.Boolean.Boolean -> Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode diff --git a/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md b/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md index dc37215a3806..4c0cb5a4eeab 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md +++ b/distribution/lib/Standard/Database/0.0.0-dev/docs/api/DB_Column.md @@ -77,7 +77,7 @@ - read self max_rows:Standard.Table.Rows_To_Read.Rows_To_Read= -> Standard.Table.Column.Column - regex_match self pattern:(Standard.Database.DB_Column.DB_Column|Standard.Base.Data.Text.Text|Standard.Base.Data.Text.Regex.Regex) -> Standard.Database.DB_Column.DB_Column - rename self name:Standard.Base.Data.Text.Text -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any - round_builtin self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any - round_decimal self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any - round_float self decimal_places:Standard.Base.Any.Any rounding_mode:Standard.Base.Any.Any -> Standard.Base.Any.Any diff --git a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md index 16d064202eac..235a475b5a70 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md +++ b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column.md @@ -85,7 +85,7 @@ - rename self name:Standard.Base.Data.Text.Text -> Standard.Base.Any.Any - requires_numeric_formatter_check self -> Standard.Base.Any.Any - reverse self -> Standard.Table.Column.Column - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any - running self statistic:Standard.Base.Data.Statistics.Statistic= name:Standard.Base.Data.Text.Text= -> Standard.Table.Column.Column - second self -> Standard.Base.Any.Any - should_be_selected_by_type self value_type:Standard.Table.Value_Type.Value_Type -> Standard.Base.Data.Boolean.Boolean From afc577f57c30016eb238cb734725eaed0a5386ff Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Wed, 9 Apr 2025 10:33:13 -0400 Subject: [PATCH 27/37] removed more Bools --- .../lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md | 2 +- .../Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md | 4 ++-- .../lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso | 2 +- .../lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md index 819882a79df5..383728eadbff 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md +++ b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Column_Operation.md @@ -17,7 +17,7 @@ - Not input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean) - Or input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean) rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean) - Power input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) - - Round input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) precision:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= + - Round input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) precision:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= - Subtract input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number) - Trim input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Text.Text) where:Standard.Base.Data.Text.Location.Location= what:(Standard.Base.Data.Text.Text|Standard.Table.Column_Ref.Column_Ref)= - Truncate input:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number|Standard.Base.Data.Time.Date_Time.Date_Time) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md index a847a1cdff50..d925053984de 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md +++ b/distribution/lib/Standard/Table/0.0.0-dev/docs/api/Simple_Expression.md @@ -27,7 +27,7 @@ - Multiply rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - Negate - Power rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= + - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= - Subtract rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - Truncate - create_widget table:Standard.Table.Internal.Table_Ref.Table_Ref display:Standard.Base.Metadata.Display= -> Standard.Base.Any.Any @@ -54,7 +54,7 @@ - Not - Or rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Boolean.Boolean)= - Power rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:(Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode|Standard.Base.Data.Boolean.Boolean)= + - Round precision:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= - Subtract rhs:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Number)= - Text operation:Standard.Table.Simple_Expression.Text_Operation= - Text_Left length:(Standard.Table.Column_Ref.Column_Ref|Standard.Table.Expression.Expression|Standard.Base.Data.Numbers.Integer)= diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso index c363e44ffa75..a4276871c573 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column_Operation.enso @@ -31,7 +31,7 @@ type Column_Operation Power (input : Column_Ref|Expression|Number) (rhs : Column_Ref|Expression|Number) ## Rounds values in the column to the specified precision. - Round (input : Column_Ref|Expression|Number) (precision:Integer = 0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) + Round (input : Column_Ref|Expression|Number) (precision:Integer = 0) (rounding_mode : Rounding_Mode = Rounding_Mode.Half_Up) ## Rounds values in the column up to the nearest integer. Ceil (input : Column_Ref|Expression|Number) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso index 34109d4170d1..f66649795ff5 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Simple_Expression.enso @@ -166,7 +166,7 @@ type Math_Operation Power (rhs : Column_Ref|Expression|Number = 1) ## Rounds values in the column to the specified precision. - Round (precision:Integer = 0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) + Round (precision:Integer = 0) (rounding_mode : Rounding_Mode = Rounding_Mode.Half_Up) ## Rounds values in the column up to the nearest integer. Ceil @@ -346,7 +346,7 @@ type Simple_Calculation Power (rhs : Column_Ref|Expression|Number = 1) ## Rounds values in the column to the specified precision. - Round (precision:Integer = 0) (rounding_mode : Rounding_Mode | Boolean = Rounding_Mode.Half_Up) + Round (precision:Integer = 0) (rounding_mode : Rounding_Mode = Rounding_Mode.Half_Up) ## Rounds values in the column up to the nearest integer. Ceil From 2637e4da2aec323bdc2eb635383df6d0202276b6 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Wed, 9 Apr 2025 11:45:06 -0400 Subject: [PATCH 28/37] submodule update --- app/gui/.dev-env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/gui/.dev-env b/app/gui/.dev-env index 2f5de604bb2f..29f136759558 160000 --- a/app/gui/.dev-env +++ b/app/gui/.dev-env @@ -1 +1 @@ -Subproject commit 2f5de604bb2f6b8dacef3961b9e2698262238981 +Subproject commit 29f136759558bf3893e4a139e09192de1d00f181 From 5fbbe9c391e3d7b62cb6b44b2b4f3d4a682feae1 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 10 Apr 2025 09:54:21 -0400 Subject: [PATCH 29/37] disable converison --- .../Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index fd419186b05e..158826025b78 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -31,6 +31,6 @@ type Rounding_Mode ## PRIVATE Convert deprecated `use_bankers : Boolean` arguments (passed as `rounding_mode`) to `Rounding_Mode`. -Rounding_Mode.from (that:Boolean) = - rounding_mode_resolved = if that then Rounding_Mode.Bankers else Rounding_Mode.Half_Up - Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved + Rounding_Mode.from (that:Boolean) = + rounding_mode_resolved = if that then Rounding_Mode.Bankers else Rounding_Mode.Half_Up + Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved From 6e700aba236004bf1d0035caa22b3058b820f15c Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 10 Apr 2025 12:17:55 -0400 Subject: [PATCH 30/37] Revert "disable converison" This reverts commit 5fbbe9c391e3d7b62cb6b44b2b4f3d4a682feae1. --- .../Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index 158826025b78..fd419186b05e 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -31,6 +31,6 @@ type Rounding_Mode ## PRIVATE Convert deprecated `use_bankers : Boolean` arguments (passed as `rounding_mode`) to `Rounding_Mode`. - Rounding_Mode.from (that:Boolean) = - rounding_mode_resolved = if that then Rounding_Mode.Bankers else Rounding_Mode.Half_Up - Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved +Rounding_Mode.from (that:Boolean) = + rounding_mode_resolved = if that then Rounding_Mode.Bankers else Rounding_Mode.Half_Up + Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved From c356b6a60e420291af3961b91963fc8a9e9b074f Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 10 Apr 2025 12:19:55 -0400 Subject: [PATCH 31/37] log --- .../Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index fd419186b05e..b22789fa7310 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -1,3 +1,4 @@ +from Standard.Base import all import project.Data.Numeric.Rounding_Mode.Rounding_Mode import project.Data.Text.Text import project.Errors.Deprecated.Deprecated @@ -32,5 +33,9 @@ type Rounding_Mode Convert deprecated `use_bankers : Boolean` arguments (passed as `rounding_mode`) to `Rounding_Mode`. Rounding_Mode.from (that:Boolean) = + IO.println "AAAAA 0 "+that rounding_mode_resolved = if that then Rounding_Mode.Bankers else Rounding_Mode.Half_Up - Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved + IO.println "AAAAA 1 "+that + k = Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved + IO.println "AAAAA 2 "+that + k From 316c8926a14fbd735c4ef3869a7b59999d520a30 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 10 Apr 2025 13:14:53 -0400 Subject: [PATCH 32/37] removed self-import --- .../Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso | 1 - 1 file changed, 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index b22789fa7310..7c898d5dff24 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -1,5 +1,4 @@ from Standard.Base import all -import project.Data.Numeric.Rounding_Mode.Rounding_Mode import project.Data.Text.Text import project.Errors.Deprecated.Deprecated import project.Warning.Warning From 246689be074991d45cafb1a506583728febbaba4 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 10 Apr 2025 13:15:13 -0400 Subject: [PATCH 33/37] unused import --- .../Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso | 1 - 1 file changed, 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index 7c898d5dff24..a885fb6d9b4c 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -1,5 +1,4 @@ from Standard.Base import all -import project.Data.Text.Text import project.Errors.Deprecated.Deprecated import project.Warning.Warning from project.Data.Boolean import Boolean, False, True From 4090a0ab2364867fe2bf160357664e012a4fe7fa Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 10 Apr 2025 13:33:51 -0400 Subject: [PATCH 34/37] review, logging --- .../lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso | 2 +- .../Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso index cba621b20e97..55e63f875f4e 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numbers.enso @@ -709,7 +709,7 @@ type Float 2.5 . round rounding_mode=Rounding_Mode.Bankers == 2 round : Integer -> Rounding_Mode -> Integer | Float ! Illegal_Argument - round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode = ..Half_Up) = + round self (decimal_places:Integer=0) (rounding_mode : Rounding_Mode = ..Half_Up) -> Float = report_unsupported cp = Error.throw (Illegal_Argument.Error cp.payload.message) Panic.catch Unsupported_Argument_Types handler=report_unsupported round_float_builtin self decimal_places (rounding_mode == Rounding_Mode.Bankers) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index a885fb6d9b4c..586576905543 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -31,9 +31,9 @@ type Rounding_Mode Convert deprecated `use_bankers : Boolean` arguments (passed as `rounding_mode`) to `Rounding_Mode`. Rounding_Mode.from (that:Boolean) = - IO.println "AAAAA 0 "+that + IO.println "AAAAA 0 "+that.to_text rounding_mode_resolved = if that then Rounding_Mode.Bankers else Rounding_Mode.Half_Up - IO.println "AAAAA 1 "+that + IO.println "AAAAA 1 "+that.to_text k = Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved - IO.println "AAAAA 2 "+that + IO.println "AAAAA 2 "+that.to_text k From b3087a9c34d1a39daaab7e3d09800ded4dcf2dcc Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 10 Apr 2025 14:05:49 -0400 Subject: [PATCH 35/37] api --- .../lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md index d016a6b10670..21544a192467 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Data/Numbers.md @@ -18,7 +18,7 @@ - min_value -> Standard.Base.Any.Any - negate self -> Standard.Base.Data.Numbers.Float - parse text:Standard.Base.Data.Text.Text locale:(Standard.Base.Data.Locale.Locale|Standard.Base.Nothing.Nothing)= format:(Standard.Base.Data.Text.Text|Standard.Base.Nothing.Nothing)= -> Standard.Base.Any.Any - - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Any.Any + - round self decimal_places:Standard.Base.Data.Numbers.Integer= rounding_mode:Standard.Base.Data.Numeric.Rounding_Mode.Rounding_Mode= -> Standard.Base.Data.Numbers.Float - to_decimal self -> Standard.Base.Data.Decimal.Decimal - to_float self -> Standard.Base.Data.Numbers.Float - truncate self -> Standard.Base.Data.Numbers.Integer From c1bcc1da7ac5cb4bb70c1cdadc69f83a2c6e374c Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 10 Apr 2025 14:25:30 -0400 Subject: [PATCH 36/37] unused warnings --- .../Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso | 2 -- 1 file changed, 2 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index 586576905543..88d3838df8ca 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -1,7 +1,5 @@ from Standard.Base import all import project.Errors.Deprecated.Deprecated -import project.Warning.Warning -from project.Data.Boolean import Boolean, False, True polyglot java import java.math.RoundingMode From 6e3f45e2ebb093ffaa607acf46d7e54fc344e500 Mon Sep 17 00:00:00 2001 From: Gregory Travis Date: Thu, 10 Apr 2025 16:25:22 -0400 Subject: [PATCH 37/37] remove logging --- .../Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso index 88d3838df8ca..27e1f75ebe4e 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Numeric/Rounding_Mode.enso @@ -29,9 +29,5 @@ type Rounding_Mode Convert deprecated `use_bankers : Boolean` arguments (passed as `rounding_mode`) to `Rounding_Mode`. Rounding_Mode.from (that:Boolean) = - IO.println "AAAAA 0 "+that.to_text rounding_mode_resolved = if that then Rounding_Mode.Bankers else Rounding_Mode.Half_Up - IO.println "AAAAA 1 "+that.to_text - k = Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved - IO.println "AAAAA 2 "+that.to_text - k + Warning.attach (Deprecated.Warning "Standard.Base.Data.Numeric" "Rounding_Mode" "use_bankers:Boolean is deprecated, use Rounding_Mode instead") rounding_mode_resolved