Skip to content

Commit

Permalink
fix(js): null handling in "lit" (#2156)
Browse files Browse the repository at this point in the history
  • Loading branch information
universalmind303 committed Dec 25, 2021
1 parent cf866eb commit a046345
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 19 deletions.
11 changes: 11 additions & 0 deletions nodejs-polars/__tests__/lazy_functions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,17 @@ describe("lazy functions", () => {
});
expect(actual).toFrameEqual(expected);
});
test("null", () => {
const actual = pl.DataFrame({
"foo": [1, 2, 3],
"bar": [4, 5, 6],
}).select(col("foo"), lit(null).as("nulls"));
const expected = pl.DataFrame({
"foo": [1, 2, 3],
"nulls": [null, null, null],
});
expect(actual).toFrameEqual(expected);
});
});
test("arange:positional", () => {
const df = pl.DataFrame({
Expand Down
3 changes: 3 additions & 0 deletions nodejs-polars/polars/internals/construction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import { isTypedArray } from "util/types";
import {Series} from "../series";

export const jsTypeToPolarsType = (value: unknown): DataType => {
if(value === null) {
return DataType.Float64;
}
if (Array.isArray(value)) {
return jsTypeToPolarsType(value[0]);
}
Expand Down
24 changes: 12 additions & 12 deletions nodejs-polars/polars/lazy/lazy_functions.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {Expr, exprToLitOrExpr} from "./expr";
import {Series} from "../series";
import { DataFrame } from "../dataframe";
import { ExprOrString, isSeries, range, selectionToExprList} from "../utils";
import { ExprOrString, range, selectionToExprList} from "../utils";
import pli from "../internals/polars_internal";

/**
Expand Down Expand Up @@ -101,7 +101,7 @@ export function col(col: string): Expr
export function col(col: string[]): Expr
export function col(col: Series<string>): Expr
export function col(col: string | string[] | Series<string>): Expr {
if(isSeries(col)) {
if(Series.isSeries(col)) {
col = col.toArray();
}
if(Array.isArray(col)) {
Expand All @@ -120,7 +120,7 @@ export function lit(value: any): Expr {
if(Array.isArray(value)) {
value = Series(value);
}
if(isSeries(value)){
if(Series.isSeries(value)){

return Expr(pli.lit({value: value._series}));
}
Expand Down Expand Up @@ -242,7 +242,7 @@ export function concatString(opts, sep=",") {
export function count(column: string): Expr
export function count(column: Series<any>): number
export function count(column: string | Series<any>): Expr | number {
if(isSeries(column)) {
if(Series.isSeries(column)) {
return column.len();
} else {
return col(column).count();
Expand Down Expand Up @@ -272,7 +272,7 @@ export function exclude(column: string, ...columns: string[]) {
export function first(column: string): Expr
export function first<T>(column: Series<T>): T
export function first<T>(column: string | Series<T>): Expr | T {
if(isSeries(column)) {
if(Series.isSeries(column)) {
if(column.length) {
return column[0];
} else {
Expand Down Expand Up @@ -342,7 +342,7 @@ export function groups(column: string): Expr {
export function head(column: ExprOrString, n?: number): Expr;
export function head<T>(column: Series<T>, n?: number): Series<T>;
export function head<T>(column: Series<T> | ExprOrString, n?): Series<T> | Expr {
if(isSeries(column)) {
if(Series.isSeries(column)) {
return column.head(n);
} else {
return exprToLitOrExpr(column, false).head(n);
Expand All @@ -354,7 +354,7 @@ export function head<T>(column: Series<T> | ExprOrString, n?): Series<T> | Expr
export function last(column: ExprOrString): Expr
export function last<T>(column: Series<T>): T
export function last<T>(column: ExprOrString | Series<T>): Expr | T {
if(isSeries(column)) {
if(Series.isSeries(column)) {
if(column.length) {
return column[-1];
} else {
Expand All @@ -369,7 +369,7 @@ export function last<T>(column: ExprOrString | Series<T>): Expr | T {
export function mean(column: ExprOrString): Expr;
export function mean(column: Series<any>): number;
export function mean(column: Series<any> | ExprOrString): number | Expr {
if(isSeries(column)) {
if(Series.isSeries(column)) {
return column.mean();
}

Expand All @@ -380,7 +380,7 @@ export function mean(column: Series<any> | ExprOrString): number | Expr {
export function median(column: ExprOrString): Expr;
export function median(column: Series<any>): number;
export function median(column: Series<any> | ExprOrString): number | Expr {
if(isSeries(column)) {
if(Series.isSeries(column)) {
return column.median();
}

Expand All @@ -391,7 +391,7 @@ export function median(column: Series<any> | ExprOrString): number | Expr {
export function nUnique(column: ExprOrString): Expr;
export function nUnique(column: Series<any>): number;
export function nUnique(column: Series<any> | ExprOrString): number | Expr {
if(isSeries(column)) {
if(Series.isSeries(column)) {
return column.nUnique();
}

Expand All @@ -411,7 +411,7 @@ export function pearsonCorr(a: ExprOrString, b: ExprOrString): Expr {
export function quantile(column: ExprOrString, q: number): Expr;
export function quantile(column: Series<any>, q: number): number;
export function quantile(column, q) {
if(isSeries(column)) {
if(Series.isSeries(column)) {
return column.quantile(q);
}

Expand Down Expand Up @@ -439,7 +439,7 @@ export function spearmanRankCorr(a: ExprOrString, b: ExprOrString): Expr {
export function tail(column: ExprOrString, n?: number): Expr;
export function tail<T>(column: Series<T>, n?: number): Series<T>;
export function tail<T>(column: Series<T> | ExprOrString, n?: number): Series<T> | Expr {
if(isSeries(column)) {
if(Series.isSeries(column)) {
return column.tail(n);
} else {
return exprToLitOrExpr(column, false).tail(n);
Expand Down
3 changes: 0 additions & 3 deletions nodejs-polars/polars/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,8 @@ export const range = (start: number, end: number) => {
};


export const isDataFrame = (ty: any): ty is DataFrame => isExternal(ty?._df);
export const isDataFrameArray = (ty: any): ty is DataFrame[] => Array.isArray(ty) && isExternal(ty[0]?._df);
export const isSeries = <T>(ty: any): ty is Series<T> => isExternal(ty._series);
export const isSeriesArray = <T>(ty: any): ty is Series<T>[] => Array.isArray(ty) && isExternal(ty[0]?._series);
export const isExpr = (ty: any): ty is Expr => isExternal(ty?._expr);
export const isExprArray = (ty: any): ty is Expr[] => Array.isArray(ty) && isExternal(ty[0]?._expr);
export const regexToString = (r: string | RegExp): string => {
if(isRegExp(r)) {
Expand Down
7 changes: 3 additions & 4 deletions nodejs-polars/src/series.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,18 +144,17 @@ pub fn repeat(cx: CallContext) -> JsResult<JsExternal> {
ca.into_inner().into_series()
}
DataType::Float64 => {
let val = val.extract::<f64>().unwrap();
let mut ca: NoNull<Float64Chunked> = (0..n).map(|_| val).collect_trusted();
let val = val.extract::<Option<f64>>().unwrap_or(None);
let mut ca: Float64Chunked = (0..n).map(|_| val).collect_trusted();
ca.rename(name);
ca.into_inner().into_series()
ca.into_series()
}
DataType::Boolean => {
let val = val.extract::<bool>().unwrap();
let mut ca: BooleanChunked = (0..n).map(|_| val).collect_trusted();
ca.rename(name);
ca.into_series()
}

dt => {
panic!("cannot create repeat with dtype: {:?}", dt);
}
Expand Down

0 comments on commit a046345

Please sign in to comment.