Update internal use of decimal to float (#10333)

# Description
We made the decision that our floating point type should be referred to
as `float` over `decimal`.
Commands were updated by #9979 and #10320

Now make the internal codebase consistent in referring to this data type
as `float`.

Work for #10332

# User-Facing Changes

`decimal` has been removed as a type name/symbol. 

Instead of 
```nushell
def foo [bar: decimal] decimal -> decimal {}
```
use 
```nushell
def foo [bar: float] float -> float {}
```

Potential effect of `SyntaxShape`'s `Display` implementation now also
referring to `float` instead of `decimal`

# Details
- Rename `SyntaxShape::Decimal` to `Float`
- Update `Display for SyntaxShape` to `float`
- Update error message + fn name in dataframe code
- Fix docs in command examples
- Rename tests that are float specific
- Update doccomment on `SyntaxShape`
- Update comment in script

# Tests + Formatting
Updates the names of some tests
This commit is contained in:
Stefan Holderbach 2023-09-13 23:53:55 +02:00 committed by GitHub
parent 5bd7300cd5
commit bbf0b45c59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 48 additions and 63 deletions

View File

@ -226,7 +226,7 @@ pub(super) fn compute_series_single_value(
compute_series_i64(&lhs, *val, <ChunkedArray<Int64Type>>::add, lhs_span) compute_series_i64(&lhs, *val, <ChunkedArray<Int64Type>>::add, lhs_span)
} }
Value::Float { val, .. } => { Value::Float { val, .. } => {
compute_series_decimal(&lhs, *val, <ChunkedArray<Float64Type>>::add, lhs_span) compute_series_float(&lhs, *val, <ChunkedArray<Float64Type>>::add, lhs_span)
} }
Value::String { val, .. } => add_string_to_series(&lhs, val, lhs_span), Value::String { val, .. } => add_string_to_series(&lhs, val, lhs_span),
_ => Err(ShellError::OperatorMismatch { _ => Err(ShellError::OperatorMismatch {
@ -242,7 +242,7 @@ pub(super) fn compute_series_single_value(
compute_series_i64(&lhs, *val, <ChunkedArray<Int64Type>>::sub, lhs_span) compute_series_i64(&lhs, *val, <ChunkedArray<Int64Type>>::sub, lhs_span)
} }
Value::Float { val, .. } => { Value::Float { val, .. } => {
compute_series_decimal(&lhs, *val, <ChunkedArray<Float64Type>>::sub, lhs_span) compute_series_float(&lhs, *val, <ChunkedArray<Float64Type>>::sub, lhs_span)
} }
_ => Err(ShellError::OperatorMismatch { _ => Err(ShellError::OperatorMismatch {
op_span: operator.span, op_span: operator.span,
@ -257,7 +257,7 @@ pub(super) fn compute_series_single_value(
compute_series_i64(&lhs, *val, <ChunkedArray<Int64Type>>::mul, lhs_span) compute_series_i64(&lhs, *val, <ChunkedArray<Int64Type>>::mul, lhs_span)
} }
Value::Float { val, .. } => { Value::Float { val, .. } => {
compute_series_decimal(&lhs, *val, <ChunkedArray<Float64Type>>::mul, lhs_span) compute_series_float(&lhs, *val, <ChunkedArray<Float64Type>>::mul, lhs_span)
} }
_ => Err(ShellError::OperatorMismatch { _ => Err(ShellError::OperatorMismatch {
op_span: operator.span, op_span: operator.span,
@ -281,12 +281,7 @@ pub(super) fn compute_series_single_value(
if val.is_zero() { if val.is_zero() {
Err(ShellError::DivisionByZero { span }) Err(ShellError::DivisionByZero { span })
} else { } else {
compute_series_decimal( compute_series_float(&lhs, *val, <ChunkedArray<Float64Type>>::div, lhs_span)
&lhs,
*val,
<ChunkedArray<Float64Type>>::div,
lhs_span,
)
} }
} }
_ => Err(ShellError::OperatorMismatch { _ => Err(ShellError::OperatorMismatch {
@ -301,7 +296,7 @@ pub(super) fn compute_series_single_value(
Operator::Comparison(Comparison::Equal) => match &right { Operator::Comparison(Comparison::Equal) => match &right {
Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::equal, lhs_span), Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::equal, lhs_span),
Value::Float { val, .. } => { Value::Float { val, .. } => {
compare_series_decimal(&lhs, *val, ChunkedArray::equal, lhs_span) compare_series_float(&lhs, *val, ChunkedArray::equal, lhs_span)
} }
Value::String { val, .. } => { Value::String { val, .. } => {
let equal_pattern = format!("^{}$", fancy_regex::escape(val)); let equal_pattern = format!("^{}$", fancy_regex::escape(val));
@ -323,7 +318,7 @@ pub(super) fn compute_series_single_value(
compare_series_i64(&lhs, *val, ChunkedArray::not_equal, lhs_span) compare_series_i64(&lhs, *val, ChunkedArray::not_equal, lhs_span)
} }
Value::Float { val, .. } => { Value::Float { val, .. } => {
compare_series_decimal(&lhs, *val, ChunkedArray::not_equal, lhs_span) compare_series_float(&lhs, *val, ChunkedArray::not_equal, lhs_span)
} }
Value::Date { val, .. } => compare_series_i64( Value::Date { val, .. } => compare_series_i64(
&lhs, &lhs,
@ -342,7 +337,7 @@ pub(super) fn compute_series_single_value(
Operator::Comparison(Comparison::LessThan) => match &right { Operator::Comparison(Comparison::LessThan) => match &right {
Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::lt, lhs_span), Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::lt, lhs_span),
Value::Float { val, .. } => { Value::Float { val, .. } => {
compare_series_decimal(&lhs, *val, ChunkedArray::lt, lhs_span) compare_series_float(&lhs, *val, ChunkedArray::lt, lhs_span)
} }
Value::Date { val, .. } => { Value::Date { val, .. } => {
compare_series_i64(&lhs, val.timestamp_millis(), ChunkedArray::lt, lhs_span) compare_series_i64(&lhs, val.timestamp_millis(), ChunkedArray::lt, lhs_span)
@ -358,7 +353,7 @@ pub(super) fn compute_series_single_value(
Operator::Comparison(Comparison::LessThanOrEqual) => match &right { Operator::Comparison(Comparison::LessThanOrEqual) => match &right {
Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::lt_eq, lhs_span), Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::lt_eq, lhs_span),
Value::Float { val, .. } => { Value::Float { val, .. } => {
compare_series_decimal(&lhs, *val, ChunkedArray::lt_eq, lhs_span) compare_series_float(&lhs, *val, ChunkedArray::lt_eq, lhs_span)
} }
Value::Date { val, .. } => { Value::Date { val, .. } => {
compare_series_i64(&lhs, val.timestamp_millis(), ChunkedArray::lt_eq, lhs_span) compare_series_i64(&lhs, val.timestamp_millis(), ChunkedArray::lt_eq, lhs_span)
@ -374,7 +369,7 @@ pub(super) fn compute_series_single_value(
Operator::Comparison(Comparison::GreaterThan) => match &right { Operator::Comparison(Comparison::GreaterThan) => match &right {
Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::gt, lhs_span), Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::gt, lhs_span),
Value::Float { val, .. } => { Value::Float { val, .. } => {
compare_series_decimal(&lhs, *val, ChunkedArray::gt, lhs_span) compare_series_float(&lhs, *val, ChunkedArray::gt, lhs_span)
} }
Value::Date { val, .. } => { Value::Date { val, .. } => {
compare_series_i64(&lhs, val.timestamp_millis(), ChunkedArray::gt, lhs_span) compare_series_i64(&lhs, val.timestamp_millis(), ChunkedArray::gt, lhs_span)
@ -390,7 +385,7 @@ pub(super) fn compute_series_single_value(
Operator::Comparison(Comparison::GreaterThanOrEqual) => match &right { Operator::Comparison(Comparison::GreaterThanOrEqual) => match &right {
Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::gt_eq, lhs_span), Value::Int { val, .. } => compare_series_i64(&lhs, *val, ChunkedArray::gt_eq, lhs_span),
Value::Float { val, .. } => { Value::Float { val, .. } => {
compare_series_decimal(&lhs, *val, ChunkedArray::gt_eq, lhs_span) compare_series_float(&lhs, *val, ChunkedArray::gt_eq, lhs_span)
} }
Value::Date { val, .. } => { Value::Date { val, .. } => {
compare_series_i64(&lhs, val.timestamp_millis(), ChunkedArray::gt_eq, lhs_span) compare_series_i64(&lhs, val.timestamp_millis(), ChunkedArray::gt_eq, lhs_span)
@ -514,12 +509,7 @@ where
} }
} }
fn compute_series_decimal<F>( fn compute_series_float<F>(series: &Series, val: f64, f: F, span: Span) -> Result<Value, ShellError>
series: &Series,
val: f64,
f: F,
span: Span,
) -> Result<Value, ShellError>
where where
F: Fn(ChunkedArray<Float64Type>, f64) -> ChunkedArray<Float64Type>, F: Fn(ChunkedArray<Float64Type>, f64) -> ChunkedArray<Float64Type>,
{ {
@ -548,7 +538,7 @@ where
_ => Err(ShellError::GenericError( _ => Err(ShellError::GenericError(
"Incorrect type".into(), "Incorrect type".into(),
format!( format!(
"Series of type {} can not be used for operations with a decimal value", "Series of type {} can not be used for operations with a float value",
series.dtype() series.dtype()
), ),
Some(span), Some(span),
@ -668,12 +658,7 @@ where
} }
} }
fn compare_series_decimal<F>( fn compare_series_float<F>(series: &Series, val: f64, f: F, span: Span) -> Result<Value, ShellError>
series: &Series,
val: f64,
f: F,
span: Span,
) -> Result<Value, ShellError>
where where
F: Fn(&ChunkedArray<Float64Type>, f64) -> ChunkedArray<BooleanType>, F: Fn(&ChunkedArray<Float64Type>, f64) -> ChunkedArray<BooleanType>,
{ {
@ -702,7 +687,7 @@ where
_ => Err(ShellError::GenericError( _ => Err(ShellError::GenericError(
"Incorrect type".into(), "Incorrect type".into(),
format!( format!(
"Series of type {} can not be used for operations with a decimal value", "Series of type {} can not be used for operations with a float value",
series.dtype() series.dtype()
), ),
Some(span), Some(span),

View File

@ -107,7 +107,7 @@ impl Command for SubCommand {
result: None, result: None,
}, },
Example { Example {
description: "convert a decimal to a nushell binary primitive", description: "convert a float to a nushell binary primitive",
example: "1.234 | into binary", example: "1.234 | into binary",
result: Some(Value::binary( result: Some(Value::binary(
1.234f64.to_ne_bytes().to_vec(), 1.234f64.to_ne_bytes().to_vec(),

View File

@ -95,12 +95,12 @@ impl Command for SubCommand {
result: Some(Value::bool(true, span)), result: Some(Value::bool(true, span)),
}, },
Example { Example {
description: "convert decimal to boolean", description: "convert float to boolean",
example: "0.3 | into bool", example: "0.3 | into bool",
result: Some(Value::bool(true, span)), result: Some(Value::bool(true, span)),
}, },
Example { Example {
description: "convert decimal string to boolean", description: "convert float string to boolean",
example: "'0.0' | into bool", example: "'0.0' | into bool",
result: Some(Value::bool(false, span)), result: Some(Value::bool(false, span)),
}, },

View File

@ -105,7 +105,7 @@ impl Command for SubCommand {
result: Some(Value::filesize(2, Span::test_data())), result: Some(Value::filesize(2, Span::test_data())),
}, },
Example { Example {
description: "Convert decimal to filesize", description: "Convert float to filesize",
example: "8.3 | into filesize", example: "8.3 | into filesize",
result: Some(Value::filesize(8, Span::test_data())), result: Some(Value::filesize(8, Span::test_data())),
}, },

View File

@ -145,7 +145,7 @@ mod tests {
#[test] #[test]
#[allow(clippy::approx_constant)] #[allow(clippy::approx_constant)]
fn string_to_decimal() { fn string_to_float() {
let word = Value::test_string("3.1415"); let word = Value::test_string("3.1415");
let expected = Value::test_float(3.1415); let expected = Value::test_float(3.1415);
@ -154,7 +154,7 @@ mod tests {
} }
#[test] #[test]
fn communicates_parsing_error_given_an_invalid_decimallike_string() { fn communicates_parsing_error_given_an_invalid_floatlike_string() {
let invalid_str = Value::test_string("11.6anra"); let invalid_str = Value::test_string("11.6anra");
let actual = action( let actual = action(

View File

@ -169,7 +169,7 @@ impl Command for SubCommand {
result: Some(Value::test_int(2)), result: Some(Value::test_int(2)),
}, },
Example { Example {
description: "Convert decimal to integer", description: "Convert float to integer",
example: "5.9 | into int", example: "5.9 | into int",
result: Some(Value::test_int(5)), result: Some(Value::test_int(5)),
}, },

View File

@ -89,22 +89,22 @@ impl Command for SubCommand {
result: Some(Value::test_string("5.000")), result: Some(Value::test_string("5.000")),
}, },
Example { Example {
description: "convert decimal to string and round to nearest integer", description: "convert float to string and round to nearest integer",
example: "1.7 | into string -d 0", example: "1.7 | into string -d 0",
result: Some(Value::test_string("2")), result: Some(Value::test_string("2")),
}, },
Example { Example {
description: "convert decimal to string", description: "convert float to string",
example: "1.7 | into string -d 1", example: "1.7 | into string -d 1",
result: Some(Value::test_string("1.7")), result: Some(Value::test_string("1.7")),
}, },
Example { Example {
description: "convert decimal to string and limit to 2 decimals", description: "convert float to string and limit to 2 decimals",
example: "1.734 | into string -d 2", example: "1.734 | into string -d 2",
result: Some(Value::test_string("1.73")), result: Some(Value::test_string("1.73")),
}, },
Example { Example {
description: "try to convert decimal to string and provide negative decimal points", description: "try to convert float to string and provide negative decimal points",
example: "1.734 | into string -d -2", example: "1.734 | into string -d -2",
result: None, result: None,
// FIXME // FIXME
@ -116,7 +116,7 @@ impl Command for SubCommand {
// }), // }),
}, },
Example { Example {
description: "convert decimal to string", description: "convert float to string",
example: "4.3 | into string", example: "4.3 | into string",
result: Some(Value::test_string("4.3")), result: Some(Value::test_string("4.3")),
}, },

View File

@ -8,7 +8,7 @@ fn into_filesize_int() {
} }
#[test] #[test]
fn into_filesize_decimal() { fn into_filesize_float() {
let actual = nu!("1.2 | into filesize"); let actual = nu!("1.2 | into filesize");
assert!(actual.out.contains("1 B")); assert!(actual.out.contains("1 B"));

View File

@ -117,7 +117,7 @@ fn error_zero_division_int_int() {
} }
#[test] #[test]
fn error_zero_division_decimal_int() { fn error_zero_division_float_int() {
let actual = nu!(pipeline( let actual = nu!(pipeline(
r#" r#"
1.0 / 0 1.0 / 0
@ -128,7 +128,7 @@ fn error_zero_division_decimal_int() {
} }
#[test] #[test]
fn error_zero_division_int_decimal() { fn error_zero_division_int_float() {
let actual = nu!(pipeline( let actual = nu!(pipeline(
r#" r#"
1 / 0.0 1 / 0.0
@ -139,7 +139,7 @@ fn error_zero_division_int_decimal() {
} }
#[test] #[test]
fn error_zero_division_decimal_decimal() { fn error_zero_division_float_float() {
let actual = nu!(pipeline( let actual = nu!(pipeline(
r#" r#"
1.0 / 0.0 1.0 / 0.0
@ -194,7 +194,7 @@ fn error_zero_floor_division_int_int() {
} }
#[test] #[test]
fn error_zero_floor_division_decimal_int() { fn error_zero_floor_division_float_int() {
let actual = nu!(pipeline( let actual = nu!(pipeline(
r#" r#"
1.0 // 0 1.0 // 0
@ -205,7 +205,7 @@ fn error_zero_floor_division_decimal_int() {
} }
#[test] #[test]
fn error_zero_floor_division_int_decimal() { fn error_zero_floor_division_int_float() {
let actual = nu!(pipeline( let actual = nu!(pipeline(
r#" r#"
1 // 0.0 1 // 0.0
@ -216,7 +216,7 @@ fn error_zero_floor_division_int_decimal() {
} }
#[test] #[test]
fn error_zero_floor_division_decimal_decimal() { fn error_zero_floor_division_float_float() {
let actual = nu!(pipeline( let actual = nu!(pipeline(
r#" r#"
1.0 // 0.0 1.0 // 0.0

View File

@ -21,7 +21,7 @@ fn from_number() {
} }
#[test] #[test]
fn from_decimal() { fn from_float() {
let actual = nu!(r#" let actual = nu!(r#"
echo 1.5 | into string echo 1.5 | into string
"#); "#);
@ -90,7 +90,7 @@ fn from_filesize() {
} }
#[test] #[test]
fn from_decimal_correct_trailing_zeros() { fn from_float_correct_trailing_zeros() {
let actual = nu!(r#" let actual = nu!(r#"
1.23000 | into string -d 3 1.23000 | into string -d 3
"#); "#);
@ -99,7 +99,7 @@ fn from_decimal_correct_trailing_zeros() {
} }
#[test] #[test]
fn from_int_decimal_correct_trailing_zeros() { fn from_int_float_correct_trailing_zeros() {
let actual = nu!(r#" let actual = nu!(r#"
1.00000 | into string -d 3 1.00000 | into string -d 3
"#); "#);
@ -108,7 +108,7 @@ fn from_int_decimal_correct_trailing_zeros() {
} }
#[test] #[test]
fn from_int_decimal_trim_trailing_zeros() { fn from_int_float_trim_trailing_zeros() {
let actual = nu!(r#" let actual = nu!(r#"
1.00000 | into string | $"($in) flat" 1.00000 | into string | $"($in) flat"
"#); "#);

View File

@ -135,7 +135,7 @@ fn converts_to_int() {
} }
#[test] #[test]
fn converts_to_decimal() { fn converts_to_float() {
let actual = nu!(pipeline( let actual = nu!(pipeline(
r#" r#"
echo "3.1, 0.0415" echo "3.1, 0.0415"

View File

@ -2709,7 +2709,7 @@ pub fn parse_shape_name(
b"duration" => SyntaxShape::Duration, b"duration" => SyntaxShape::Duration,
b"error" => SyntaxShape::Error, b"error" => SyntaxShape::Error,
b"expr" => SyntaxShape::Expression, b"expr" => SyntaxShape::Expression,
b"float" | b"decimal" => SyntaxShape::Decimal, b"float" => SyntaxShape::Float,
b"filesize" => SyntaxShape::Filesize, b"filesize" => SyntaxShape::Filesize,
b"full-cell-path" => SyntaxShape::FullCellPath, b"full-cell-path" => SyntaxShape::FullCellPath,
b"glob" => SyntaxShape::GlobPattern, b"glob" => SyntaxShape::GlobPattern,
@ -4654,7 +4654,7 @@ pub fn parse_value(
expression expression
} }
SyntaxShape::Number => parse_number(working_set, span), SyntaxShape::Number => parse_number(working_set, span),
SyntaxShape::Decimal => parse_float(working_set, span), SyntaxShape::Float => parse_float(working_set, span),
SyntaxShape::Int => parse_int(working_set, span), SyntaxShape::Int => parse_int(working_set, span),
SyntaxShape::Duration => parse_duration(working_set, span), SyntaxShape::Duration => parse_duration(working_set, span),
SyntaxShape::DateTime => parse_datetime(working_set, span), SyntaxShape::DateTime => parse_datetime(working_set, span),

View File

@ -31,9 +31,6 @@ pub enum SyntaxShape {
/// A datetime value, eg `2022-02-02` or `2019-10-12T07:20:50.52+00:00` /// A datetime value, eg `2022-02-02` or `2019-10-12T07:20:50.52+00:00`
DateTime, DateTime,
/// A decimal value, eg `1.0`
Decimal,
/// A directory is allowed /// A directory is allowed
Directory, Directory,
@ -52,6 +49,9 @@ pub enum SyntaxShape {
/// A filesize value is allowed, eg `10kb` /// A filesize value is allowed, eg `10kb`
Filesize, Filesize,
/// A floating point value, eg `1.0`
Float,
/// A dotted path to navigate the table (including variable) /// A dotted path to navigate the table (including variable)
FullCellPath, FullCellPath,
@ -82,7 +82,7 @@ pub enum SyntaxShape {
/// Nothing /// Nothing
Nothing, Nothing,
/// Only a numeric (integer or decimal) value is allowed /// Only a numeric (integer or float) value is allowed
Number, Number,
/// One of a list of possible items, checked in order /// One of a list of possible items, checked in order
@ -137,7 +137,7 @@ impl SyntaxShape {
SyntaxShape::Expression => Type::Any, SyntaxShape::Expression => Type::Any,
SyntaxShape::Filepath => Type::String, SyntaxShape::Filepath => Type::String,
SyntaxShape::Directory => Type::String, SyntaxShape::Directory => Type::String,
SyntaxShape::Decimal => Type::Float, SyntaxShape::Float => Type::Float,
SyntaxShape::Filesize => Type::Filesize, SyntaxShape::Filesize => Type::Filesize,
SyntaxShape::FullCellPath => Type::Any, SyntaxShape::FullCellPath => Type::Any,
SyntaxShape::GlobPattern => Type::String, SyntaxShape::GlobPattern => Type::String,
@ -189,7 +189,7 @@ impl Display for SyntaxShape {
SyntaxShape::Number => write!(f, "number"), SyntaxShape::Number => write!(f, "number"),
SyntaxShape::Range => write!(f, "range"), SyntaxShape::Range => write!(f, "range"),
SyntaxShape::Int => write!(f, "int"), SyntaxShape::Int => write!(f, "int"),
SyntaxShape::Decimal => write!(f, "decimal"), SyntaxShape::Float => write!(f, "float"),
SyntaxShape::Filepath => write!(f, "path"), SyntaxShape::Filepath => write!(f, "path"),
SyntaxShape::Directory => write!(f, "directory"), SyntaxShape::Directory => write!(f, "directory"),
SyntaxShape::GlobPattern => write!(f, "glob"), SyntaxShape::GlobPattern => write!(f, "glob"),

View File

@ -149,7 +149,7 @@ export def datetime-diff [from: datetime, to: datetime] {
$result = (borrow-second $from_expanded $result) $result = (borrow-second $from_expanded $result)
} }
$result.millisecond = ($result.nanosecond / 1_000_000 | into int) # don't want a decimal $result.millisecond = ($result.nanosecond / 1_000_000 | into int) # don't want a float
$result.microsecond = (($result.nanosecond mod 1_000_000) / 1_000 | into int) $result.microsecond = (($result.nanosecond mod 1_000_000) / 1_000 | into int)
$result.nanosecond = ($result.nanosecond mod 1_000 | into int) $result.nanosecond = ($result.nanosecond mod 1_000 | into int)

View File

@ -561,7 +561,7 @@ fn index_out_of_bounds() {
} }
#[test] #[test]
fn negative_decimal_start() { fn negative_float_start() {
let actual = nu!(" let actual = nu!("
-1.3 + 4 -1.3 + 4
"); ");