diff --git a/README.md b/README.md
index a3cbeada..0183c187 100644
--- a/README.md
+++ b/README.md
@@ -70,7 +70,7 @@ yarn add danfojs
For use directly in HTML files, you can add the latest script tag from [JsDelivr](https://www.jsdelivr.com/package/npm/danfojs) to your HTML file:
```html
-
+
```
See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs)
@@ -85,7 +85,7 @@ See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs)
-
+
Document
diff --git a/package.json b/package.json
index cc9521cf..834a1109 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,6 @@
{
"name": "danfo",
+ "version": "1.0.2",
"private": true,
"workspaces": [
"danfojs-node/**",
diff --git a/src/danfojs-base/core/datetime.ts b/src/danfojs-base/core/datetime.ts
index 264f0e10..accbc7f3 100644
--- a/src/danfojs-base/core/datetime.ts
+++ b/src/danfojs-base/core/datetime.ts
@@ -46,14 +46,14 @@ export default class TimeSeries implements DateTime {
* Returns the month, in local time.
* @example
* ```
- * import { Dataframe } from "danfojs-node"
+ * import { Series } from "danfojs-node"
* const data = [
* "2019-01-01",
* "2019-02-01",
* "2019-03-01",
* "2019-04-01",
* ]
- * const df = new Dataframe(data)
+ * const df = new Series(data)
* const dfNew = df.dt.month()
* console.log(dfNew.values)
* // [1, 2, 3, 4]
@@ -68,19 +68,19 @@ export default class TimeSeries implements DateTime {
* Returns the day of the week, in local time
* @example
* ```
- * import { Dataframe } from "danfojs-node"
+ * import { Series } from "danfojs-node"
* const data = [
* "2019-01-01",
* "2019-02-01",
* "2019-03-01",
* "2019-04-01",
* ]
- * const df = new Dataframe(data)
+ * const df = new Series(data)
* const dayOfWeek = df.dt.dayOfWeek()
* console.log(dayOfWeek.values)
* ```
*/
- dayOfWeek() {
+ dayOfWeek() {
const newValues = this.$dateObjectArray.map(date => date.getDay())
return new Series(newValues);
}
@@ -89,14 +89,14 @@ export default class TimeSeries implements DateTime {
* Returns the year, in local time
* @example
* ```
- * import { Dataframe } from "danfojs-node"
+ * import { Series } from "danfojs-node"
* const data = [
* "2019-01-01",
* "2019-02-01",
* "2021-03-01",
* "2020-04-01",
* ]
- * const df = new Dataframe(data)
+ * const df = new Series(data)
* const year = df.dt.year()
* console.log(year.values)
* // [2019, 2019, 2021, 2020]
@@ -111,14 +111,14 @@ export default class TimeSeries implements DateTime {
* Returns the name of the month, in local time
* @example
* ```
- * import { Dataframe } from "danfojs-node"
+ * import { Series } from "danfojs-node"
* const data = [
* "2019-01-01",
* "2019-02-01",
* "2021-03-01",
* "2020-04-01",
* ]
- * const df = new Dataframe(data)
+ * const df = new Series(data)
* const monthName = df.dt.monthName().values
* console.log(monthName)
* // ["January", "February", "March", "April"]
@@ -133,14 +133,14 @@ export default class TimeSeries implements DateTime {
* Returns the name of the day, of the week, in local time
* @example
* ```
- * import { Dataframe } from "danfojs-node"
+ * import { Series } from "danfojs-node"
* const data = [
* "2019-01-01",
* "2019-02-01",
* "2021-03-01",
* "2020-04-01",
* ]
- * const df = new Dataframe(data)
+ * const df = new Series(data)
* const dayOfWeekName = df.dt.dayOfWeekName().values
* console.log(dayOfWeekName)
* ```
@@ -154,14 +154,14 @@ export default class TimeSeries implements DateTime {
* Returns the day of the month, in local time
* @example
* ```
- * import { Dataframe } from "danfojs-node"
+ * import { Series } from "danfojs-node"
* const data = [
* "2019-01-01",
* "2019-02-05",
* "2021-03-02",
* "2020-04-01",
* ]
- * const df = new Dataframe(data)
+ * const df = new Series(data)
* const dayOfMonth = df.dt.dayOfMonth().values
* console.log(dayOfMonth)
* // [1, 5, 2, 1]
@@ -176,14 +176,14 @@ export default class TimeSeries implements DateTime {
* Returns the hour of the day, in local time
* @example
* ```
- * import { Dataframe } from "danfojs-node"
+ * import { Series } from "danfojs-node"
* const data = [
* "2019-01-01",
* "2019-02-05",
* "2021-03-02",
* "2020-04-01",
* ]
- * const df = new Dataframe(data)
+ * const df = new Series(data)
* const hour = df.dt.hour().values
* console.log(hour)
* // [0, 0, 0, 0]
@@ -198,14 +198,14 @@ export default class TimeSeries implements DateTime {
* Returns the second of the day, in local time
* @example
* ```
- * import { Dataframe } from "danfojs-node"
+ * import { Series } from "danfojs-node"
* const data = [
* "2019-01-01",
* "2019-02-05",
* "2021-03-02",
* "2020-04-01",
* ]
- * const df = new Dataframe(data)
+ * const df = new Series(data)
* const second = df.dt.second().values
* console.log(second)
* ```
@@ -219,14 +219,14 @@ export default class TimeSeries implements DateTime {
* Returns the minute of the day, in local time
* @example
* ```
- * import { Dataframe } from "danfojs-node"
+ * import { Series } from "danfojs-node"
* const data = [
* "2019-01-01",
* "2019-02-05",
* "2021-03-02",
* "2020-04-01",
* ]
- * const df = new Dataframe(data)
+ * const df = new Series(data)
* const minute = df.dt.minute().values
* console.log(minute)
* ```
@@ -236,6 +236,28 @@ export default class TimeSeries implements DateTime {
return new Series(newValues);
}
+ /**
+ * Returns the Date as JavaScript standard Date object
+ * @example
+ * ```
+ * import { Series } from "danfojs-node"
+ * const data = [
+ * "2019-01-01",
+ * "2019-02-05",
+ * "2021-03-02",
+ * "2020-04-01",
+ * ]
+ *
+ * const df = new Series(data)
+ * const date = df.dt.toDate().values
+ * console.log(date)
+ * ```
+ */
+ date() {
+ const newValues = this.$dateObjectArray.map(date => date.toLocaleString())
+ return new Series(newValues);
+ }
+
}
export const toDateTime = (data: Series | ArrayType1D) => {
diff --git a/src/danfojs-base/core/frame.ts b/src/danfojs-base/core/frame.ts
index b9e575c4..00932099 100644
--- a/src/danfojs-base/core/frame.ts
+++ b/src/danfojs-base/core/frame.ts
@@ -1747,8 +1747,8 @@ export default class DataFrame extends NDframe implements DataFrameInterface {
options?: { inplace?: boolean, atIndex?: number | string }
): DataFrame | void {
let { inplace, atIndex } = { inplace: false, atIndex: this.columns.length, ...options };
- if (typeof atIndex === "string" ) {
- if (!(this.columns.includes(atIndex))){
+ if (typeof atIndex === "string") {
+ if (!(this.columns.includes(atIndex))) {
throw new Error(`${atIndex} not a column`)
}
atIndex = this.columns.indexOf(atIndex)
@@ -2762,7 +2762,7 @@ export default class DataFrame extends NDframe implements DataFrameInterface {
inplace?: boolean
}
): DataFrame
- rename(
+ rename(
mapper: {
[index: string | number]: string | number
},
@@ -3332,4 +3332,47 @@ export default class DataFrame extends NDframe implements DataFrameInterface {
return toExcelNode(this, options as ExcelOutputOptionsNode)
}
}
+
+ /**
+ * Access a single value for a row/column pair by integer position.
+ * Similar to {@link iloc}, in that both provide integer-based lookups.
+ * Use iat if you only need to get or set a single value in a DataFrame.
+ * @param row Row index of the value to access.
+ * @param column Column index of the value to access.
+ * @example
+ * ```
+ * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']})
+ * df.iat(0, 0) // 1
+ * df.iat(0, 1) // 2
+ * df.iat(1, 0) // 3
+ * ```
+ */
+ iat(row: number, column: number): string | number | boolean | undefined {
+ if (typeof row === 'string' || typeof column === 'string') {
+ throw new Error('ParamError: row and column index must be an integer. Use .at to get a row or column by label.')
+ }
+
+ return (this.values as ArrayType2D)[row][column]
+ }
+
+ /**
+ * Access a single value for a row/column label pair.
+ * Similar to {@link loc}, in that both provide label-based lookups.
+ * Use at if you only need to get or set a single value in a DataFrame.
+ * @param row Row index of the value to access.
+ * @param column Column label of the value to access.
+ * @example
+ * ```
+ * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']})
+ * df.at(0,'A') // 1
+ * df.at(1, 'A') // 3
+ * df.at(1, 'B') // 4
+ * ```
+ */
+ at(row: string | number, column: string): string | number | boolean | undefined {
+ if (typeof column !== 'string') {
+ throw new Error('ParamError: column index must be a string. Use .iat to get a row or column by index.')
+ }
+ return (this.values as ArrayType2D)[this.index.indexOf(row)][this.columns.indexOf(column)]
+ }
}
diff --git a/src/danfojs-base/core/series.ts b/src/danfojs-base/core/series.ts
index 3b9659b0..c8a9a9f8 100644
--- a/src/danfojs-base/core/series.ts
+++ b/src/danfojs-base/core/series.ts
@@ -674,9 +674,10 @@ export default class Series extends NDframe implements SeriesInterface {
* //output [ 1.23, 2.4, 3.12, 4.12, 5.12 ]
* ```
*/
+ round(dp?: number, options?: { inplace?: boolean }): Series
round(dp = 1, options?: { inplace?: boolean }): Series | void {
const { inplace } = { inplace: false, ...options }
-
+ if (dp === undefined) dp = 1;
const newValues = utils.round(this.values as number[], dp, true);
if (inplace) {
@@ -816,24 +817,26 @@ export default class Series extends NDframe implements SeriesInterface {
const { ascending, inplace, } = { ascending: true, inplace: false, ...options }
let sortedValues = [];
+ let sortedIndex = []
const rangeIdx = utils.range(0, this.index.length - 1);
let sortedIdx = utils.sortArrayByIndex(rangeIdx, this.values, this.dtypes[0]);
for (let indx of sortedIdx) {
sortedValues.push(this.values[indx])
+ sortedIndex.push(this.index[indx])
}
if (ascending) {
sortedValues = sortedValues.reverse();
- sortedIdx = sortedIdx.reverse();
+ sortedIndex = sortedIndex.reverse();
}
if (inplace) {
this.$setValues(sortedValues as ArrayType1D)
- this.$setIndex(sortedIdx);
+ this.$setIndex(sortedIndex);
} else {
const sf = new Series(sortedValues, {
- index: sortedIdx,
+ index: sortedIndex,
dtypes: this.dtypes,
config: this.config
});
@@ -1828,6 +1831,11 @@ export default class Series extends NDframe implements SeriesInterface {
* //output [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ]
* ```
*/
+ append(
+ newValue: string | number | boolean | Series | ArrayType1D,
+ index: Array | number | string,
+ options?: { inplace?: boolean }
+ ): Series
append(
newValue: string | number | boolean | Series | ArrayType1D,
index: Array | number | string,
@@ -2239,4 +2247,44 @@ export default class Series extends NDframe implements SeriesInterface {
return toExcelNode(this, options as ExcelOutputOptionsNode)
}
}
+
+ /**
+ * Access a single value for a row index.
+ * Similar to iloc, in that both provide index-based lookups.
+ * Use iat if you only need to get or set a single value in a Series.
+ * @param row Row index of the value to access.
+ * @example
+ * ```
+ * const sf = new Series([1, 2, 3, 4, 5])
+ * sf.iat(0) //returns 1
+ * sf.iat(1) //returns 2
+ * sf.iat(2) //returns 3
+ * ```
+ */
+ iat(row: number): number | string | boolean | undefined {
+ if (typeof row === 'string') {
+ throw new Error('ParamError: row index must be an integer. Use .at to get a row by label.')
+ }
+ return (this.values as ArrayType1D)[row];
+ }
+
+ /**
+ * Access a single value for a row label.
+ * Similar to loc, in that both provide label-based lookups.
+ * Use at if you only need to get or set a single value in a Series.
+ * @param row Row label of the value to access.
+ * @example
+ * ```
+ * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['A', 'B', 'C', 'D', 'E', 'F'] })
+ * sf.at('A') //returns 1
+ * sf.at('B') //returns 2
+ * sf.at('C') //returns 3
+ * ```
+ */
+ at(row: string): number | string | boolean | undefined {
+ if (typeof row !== 'string') {
+ throw new Error('ParamError: row index must be a string. Use .iat to get a row by index.')
+ }
+ return (this.values as ArrayType1D)[this.index.indexOf(row)];
+ }
}
\ No newline at end of file
diff --git a/src/danfojs-base/index.ts b/src/danfojs-base/index.ts
index e1ff1e24..b401120c 100644
--- a/src/danfojs-base/index.ts
+++ b/src/danfojs-base/index.ts
@@ -29,7 +29,7 @@ import merge from "./transformers/merge"
import dateRange from "./core/daterange"
import tensorflow from "./shared/tensorflowlib"
-const __version = "1.0.1";
+const __version = "1.0.2";
export {
NDframe,
diff --git a/src/danfojs-base/package.json b/src/danfojs-base/package.json
index 6afeeece..5cbc3811 100644
--- a/src/danfojs-base/package.json
+++ b/src/danfojs-base/package.json
@@ -1,6 +1,6 @@
{
"name": "danfojs-base",
- "version": "1.0.0",
+ "version": "1.0.2",
"description": "Base package used in danfojs-node and danfojs-browser",
"main": "index.ts",
"scripts": {
@@ -9,8 +9,8 @@
"author": "",
"license": "ISC",
"dependencies": {
- "@tensorflow/tfjs": "3.6.0",
- "@tensorflow/tfjs-node": "3.6.1",
+ "@tensorflow/tfjs": "^3.13.0",
+ "@tensorflow/tfjs-node": "^3.13.0",
"mathjs": "^10.0.0",
"papaparse": "^5.3.1",
"request": "^2.88.2",
diff --git a/src/danfojs-base/shared/types.ts b/src/danfojs-base/shared/types.ts
index 3c3e23fc..7e1ca201 100644
--- a/src/danfojs-base/shared/types.ts
+++ b/src/danfojs-base/shared/types.ts
@@ -184,6 +184,8 @@ export interface SeriesInterface extends NDframeInterface {
toCSV(options?: CsvOutputOptionsBrowser): string | void
toJSON(options?: JsonOutputOptionsBrowser): object | void
toExcel(options?: ExcelOutputOptionsBrowser): void
+ iat(index: number): number | string | boolean | undefined
+ at(index: string | number): number | string | boolean | undefined
}
//Start of DataFrame class types
@@ -327,6 +329,8 @@ export interface DataFrameInterface extends NDframeInterface {
toCSV(options?: CsvOutputOptionsBrowser): string | void
toJSON(options?: JsonOutputOptionsBrowser): object | void
toExcel(options?: ExcelOutputOptionsBrowser): void
+ iat(row: number, column: number): number | string | boolean | undefined
+ at(row: string | number, column: string): number | string | boolean | undefined
}
export interface DateTime {
@@ -338,6 +342,7 @@ export interface DateTime {
hours(): Series
seconds(): Series
minutes(): Series
+ date(): Series
}
interface CustomConfig extends Config {
diff --git a/src/danfojs-base/shared/utils.ts b/src/danfojs-base/shared/utils.ts
index 16a11df1..e24192af 100644
--- a/src/danfojs-base/shared/utils.ts
+++ b/src/danfojs-base/shared/utils.ts
@@ -774,27 +774,48 @@ export default class Utils {
arr: Array<{ index: number | string, value: number | string | boolean }>,
ascending: boolean
) {
- return arr.sort((obj1, obj2) => {
- const a = obj2.value;
- const b = obj1.value;
+ let sortedValues = arr.sort((obj1, obj2) => {
+ let a = obj2.value;
+ let b = obj1.value;
if (!ascending) {
if (typeof a === "string" && typeof b === "string") {
- return a.charCodeAt(0) - b.charCodeAt(0);
- } else if ((typeof a === "number" && typeof b === "number") || (typeof a === "boolean" && typeof b === "boolean")) {
- return Number(a) - Number(b);
+ a = a.toUpperCase();
+ b = b.toUpperCase();
+
+ if (a < b) {
+ return -1;
+ }
+
+ if (a > b) {
+ return 1;
+ }
+
+ return 0;
+
} else {
- throw Error('ParamError: column values must be either numbers or strings');
+ return Number(a) - Number(b);
}
} else {
if (typeof a === "string" && typeof b === "string") {
- return b.charCodeAt(0) - a.charCodeAt(0);
- } else if ((typeof a === "number" && typeof b === "number") || (typeof a === "boolean" && typeof b === "boolean")) {
- return Number(b) - Number(a);
+ a = a.toUpperCase();
+ b = b.toUpperCase();
+
+ if (a > b) {
+ return -1;
+ }
+
+ if (a < b) {
+ return 1;
+ }
+
+ return 0;
} else {
- throw Error('ParamError: column values must be either numbers or strings');
+ return Number(b) - Number(a);;
}
}
});
+
+ return sortedValues;
}
}
\ No newline at end of file
diff --git a/src/danfojs-base/yarn.lock b/src/danfojs-base/yarn.lock
index 3922f9a3..31a234ce 100644
--- a/src/danfojs-base/yarn.lock
+++ b/src/danfojs-base/yarn.lock
@@ -980,6 +980,21 @@
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+"@mapbox/node-pre-gyp@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.4.tgz#6c76e7a40138eac39e1a4dc869a083e43e236c00"
+ integrity sha512-M669Qo4nRT7iDmQEjQYC7RU8Z6dpz9UmSbkJ1OFEja3uevCdLKh7IZZki7L1TZj02kRyl82snXFY8QqkyfowrQ==
+ dependencies:
+ detect-libc "^1.0.3"
+ https-proxy-agent "^5.0.0"
+ make-dir "^3.1.0"
+ node-fetch "^2.6.1"
+ nopt "^5.0.0"
+ npmlog "^4.1.2"
+ rimraf "^3.0.2"
+ semver "^7.3.4"
+ tar "^6.1.0"
+
"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":
version "2.1.8-no-fsevents.3"
resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b"
@@ -1006,80 +1021,82 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@tensorflow/tfjs-backend-cpu@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.6.0.tgz#4e64a7cf1c33b203f71f8f77cd7b0ac1ef25a871"
- integrity sha512-ZpAs17hPdKXadbtNjAsymYUILe8V7+pY4fYo8j25nfDTW/HfBpyAwsHPbMcA/n5zyJ7ZJtGKFcCUv1sl24KL1Q==
+"@tensorflow/tfjs-backend-cpu@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.13.0.tgz#2a141256fe0a5de0670c31a9ba6990465708dee4"
+ integrity sha512-POmzUoAP8HooYYTZ72O1ZYkpVZB0f+8PeAkbTxIG0oahcJccj6a0Vovp1A6xWKfljUoPlJb3jWVC++S603ZL8w==
dependencies:
"@types/seedrandom" "2.4.27"
seedrandom "2.4.3"
-"@tensorflow/tfjs-backend-webgl@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.6.0.tgz#1ea1a73abea8d6324fd81aedf7f187ab6eb73692"
- integrity sha512-zp7l4TmD1khgeSux/Ujaaj8M/v+e8JVIKjOci6HCGaeMNrn74lTSH9oqGPWKUCmpZME17/V0LfRHK34ddmrPSA==
+"@tensorflow/tfjs-backend-webgl@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.13.0.tgz#f99df51253de21e20dae195991d332195ab30b4b"
+ integrity sha512-ZuJS11tCoZx2F1Eq7wqiqu8euJpPW/JV0qOKBehlRpV2qQrR+wHMpBT1hhDl4qU4LdgFTtSggKIRg/L8b0ScUQ==
dependencies:
- "@tensorflow/tfjs-backend-cpu" "3.6.0"
+ "@tensorflow/tfjs-backend-cpu" "3.13.0"
"@types/offscreencanvas" "~2019.3.0"
"@types/seedrandom" "2.4.27"
"@types/webgl-ext" "0.0.30"
- "@types/webgl2" "0.0.5"
+ "@types/webgl2" "0.0.6"
seedrandom "2.4.3"
-"@tensorflow/tfjs-converter@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.6.0.tgz#32b3ff31b47e29630a82e30fbe01708facad7fd6"
- integrity sha512-9MtatbTSvo3gpEulYI6+byTA3OeXSMT2lzyGAegXO9nMxsvjR01zBvlZ5SmsNyecNh6fMSzdL2+cCdQfQtsIBg==
+"@tensorflow/tfjs-converter@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.13.0.tgz#3affc86d94c3948b01673a91309a35feb10e5eac"
+ integrity sha512-H2VpDTv9Ve0HBt7ttzz46DmnsPaiT0B+yJjVH3NebGZbgY9C8boBgJIsdyqfiqEWBS3WxF8h4rh58Hv5XXMgaQ==
-"@tensorflow/tfjs-core@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.6.0.tgz#6b4d8175790bdff78868eabe6adc6442eb4dc276"
- integrity sha512-bb2c3zwK4SgXZRvkTiC7EhCpWbCGp0GMd+1/3Vo2/Z54jiLB/h3sXIgHQrTNiWwhKPtst/xxA+MsslFlvD0A5w==
+"@tensorflow/tfjs-core@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.13.0.tgz#0cfd707c668250969564991c5c101fb52e51e1aa"
+ integrity sha512-18qBEVIB/4u2OUK9nA5P1XT3e3LyarElD1UKNSNDpnMLxhLTUVZaCR71eHJcpl9wP2Q0cciaTJCTpJdPv1tNDQ==
dependencies:
+ "@types/long" "^4.0.1"
"@types/offscreencanvas" "~2019.3.0"
"@types/seedrandom" "2.4.27"
"@types/webgl-ext" "0.0.30"
+ long "4.0.0"
node-fetch "~2.6.1"
seedrandom "2.4.3"
-"@tensorflow/tfjs-data@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.6.0.tgz#af2f03cffb75ad8e4c2f46e192e392d9b7f977ed"
- integrity sha512-5KU7fnU7cj/opb4aCNDoW4qma64ggDwI0PCs5KEO41T3waVHDLk6bjlFlBVRdjfZqvM0K6EfWEyoiXzdvz/Ieg==
+"@tensorflow/tfjs-data@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.13.0.tgz#55ae81957b7ed51cb0ce4e82edc63c5b3de152e6"
+ integrity sha512-n50+lxPK0CU72nlFt4dzMCCNV44CQsQU3sSP9zdR2bYHeoFqjjy1ISp+UV5N5DNLj7bsEMs73kGS1EuJ7YcdqQ==
dependencies:
"@types/node-fetch" "^2.1.2"
node-fetch "~2.6.1"
-"@tensorflow/tfjs-layers@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.6.0.tgz#5358af559fc8baed304b3e567319fe93f1aa46a6"
- integrity sha512-B7EHwAT6KFqhKzdf0e2Sr6haj9qpqpyEATV8OCPHdk+g8z2AGXOLlFfbgW6vCMjy1wb5jzYqCyZDoY3EWdgJAw==
+"@tensorflow/tfjs-layers@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.13.0.tgz#bc311664eba4f46802ffe3b05bea7df795cae10d"
+ integrity sha512-kTWJ/+9fbNCMDA9iQjDMYHmWivsiWz8CKNSOZdeCW7tiBwF1EiREBVQXMk1JI11ngQa8f+rYSLs7rkhp3SYl5Q==
-"@tensorflow/tfjs-node@3.6.1":
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-node/-/tfjs-node-3.6.1.tgz#a1452076fe6da48f5648ca33f85d1127e6881244"
- integrity sha512-JA6GE7AYx+zoXiKQmEdMc848HDOurrI3vFyiLk/8bXJDEv7L7oW5y6Q1Ja+Bz5ul7UmOxNG89hyYhfGqJK8qKw==
+"@tensorflow/tfjs-node@^3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-node/-/tfjs-node-3.13.0.tgz#cb5270efd171d8893654f7037bc308cba2912ef8"
+ integrity sha512-LYM3ck/TyipxMFD23moX9qC3F23UBC3zbiw85HTxZ9FPlE1QNLP1UNlfFGeUTnPvY6CUcvPyQsrG9fBTvtwB1A==
dependencies:
- "@tensorflow/tfjs" "3.6.0"
- adm-zip "^0.4.11"
+ "@mapbox/node-pre-gyp" "1.0.4"
+ "@tensorflow/tfjs" "3.13.0"
+ adm-zip "^0.5.2"
google-protobuf "^3.9.2"
https-proxy-agent "^2.2.1"
- node-pre-gyp "0.14.0"
progress "^2.0.0"
rimraf "^2.6.2"
tar "^4.4.6"
-"@tensorflow/tfjs@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.6.0.tgz#e65956cd40c96523e3f5ec7a58a4bef9ef5e349c"
- integrity sha512-uLDMDzyRkJa3fYBeR6etQTFD/t+nkQIH/DznL9hxmYoIYG8PigY2gcrc482TAvsdhiuvxCZ9rl5SyDtP93MvxQ==
- dependencies:
- "@tensorflow/tfjs-backend-cpu" "3.6.0"
- "@tensorflow/tfjs-backend-webgl" "3.6.0"
- "@tensorflow/tfjs-converter" "3.6.0"
- "@tensorflow/tfjs-core" "3.6.0"
- "@tensorflow/tfjs-data" "3.6.0"
- "@tensorflow/tfjs-layers" "3.6.0"
+"@tensorflow/tfjs@3.13.0", "@tensorflow/tfjs@^3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.13.0.tgz#ea0597e0208d403278e2ccbaa5faa479083a04d3"
+ integrity sha512-B5HvNH+6hHhQQkn+AG+u4j5sxZBMYdsq4IWXlBZzioJcVygtZhBWXkxp01boSwngjqUBgi8S2DopBE7McAUKqQ==
+ dependencies:
+ "@tensorflow/tfjs-backend-cpu" "3.13.0"
+ "@tensorflow/tfjs-backend-webgl" "3.13.0"
+ "@tensorflow/tfjs-converter" "3.13.0"
+ "@tensorflow/tfjs-core" "3.13.0"
+ "@tensorflow/tfjs-data" "3.13.0"
+ "@tensorflow/tfjs-layers" "3.13.0"
argparse "^1.0.10"
chalk "^4.1.0"
core-js "3"
@@ -1132,6 +1149,11 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
+"@types/long@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
+ integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
+
"@types/mocha@^8.2.2":
version "8.2.3"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323"
@@ -1228,10 +1250,10 @@
resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d"
integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==
-"@types/webgl2@0.0.5":
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.5.tgz#dd925e20ab8ace80eb4b1e46fda5b109c508fb0d"
- integrity sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow==
+"@types/webgl2@0.0.6":
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.6.tgz#1ea2db791362bd8521548d664dbd3c5311cdf4b6"
+ integrity sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ==
"@typescript-eslint/eslint-plugin@^4.30.0":
version "4.33.0"
@@ -1526,16 +1548,23 @@ adler-32@~1.3.0:
dependencies:
printj "~1.2.2"
-adm-zip@^0.4.11:
- version "0.4.16"
- resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365"
- integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==
+adm-zip@^0.5.2:
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.9.tgz#b33691028333821c0cf95c31374c5462f2905a83"
+ integrity sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==
after@0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
agent-base@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
@@ -2254,6 +2283,11 @@ chownr@^1.1.4:
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
chrome-trace-event@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
@@ -2641,6 +2675,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
dependencies:
ms "2.0.0"
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
+ integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
+ dependencies:
+ ms "2.1.2"
+
debug@4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
@@ -2648,20 +2689,13 @@ debug@4.3.1:
dependencies:
ms "2.1.2"
-debug@^3.1.0, debug@^3.2.6:
+debug@^3.1.0:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
-debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
- version "4.3.3"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
- integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
- dependencies:
- ms "2.1.2"
-
debug@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
@@ -2703,11 +2737,6 @@ deep-eql@^3.0.1:
dependencies:
type-detect "^4.0.0"
-deep-extend@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
- integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
deep-is@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
@@ -2787,7 +2816,7 @@ des.js@^1.0.0:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
-detect-libc@^1.0.2:
+detect-libc@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
@@ -3535,6 +3564,13 @@ fs-minipass@^1.2.7:
dependencies:
minipass "^2.6.0"
+fs-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
fs-readdir-recursive@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
@@ -3889,12 +3925,20 @@ https-proxy-agent@^2.2.1:
agent-base "^4.3.0"
debug "^3.1.0"
+https-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
+ integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
human-signals@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-iconv-lite@0.4.24, iconv-lite@^0.4.4:
+iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -3926,13 +3970,6 @@ ify-loader@^1.1.0:
read-package-json "^2.0.2"
resolve "^1.1.6"
-ignore-walk@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335"
- integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==
- dependencies:
- minimatch "^3.0.4"
-
ignore@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -3997,11 +4034,6 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-ini@~1.3.0:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
- integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-
inline-source-map@~0.6.0:
version "0.6.2"
resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5"
@@ -4623,6 +4655,11 @@ loglevelnext@^1.0.1:
es6-symbol "^3.1.1"
object.assign "^4.1.0"
+long@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
+ integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
+
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@@ -4810,6 +4847,13 @@ minipass@^2.6.0, minipass@^2.9.0:
safe-buffer "^5.1.2"
yallist "^3.0.0"
+minipass@^3.0.0:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee"
+ integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==
+ dependencies:
+ yallist "^4.0.0"
+
minizlib@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
@@ -4817,6 +4861,14 @@ minizlib@^1.3.3:
dependencies:
minipass "^2.9.0"
+minizlib@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+ integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
mixin-deep@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
@@ -4844,6 +4896,11 @@ mkdirp@^0.5.1, mkdirp@^0.5.5:
dependencies:
minimist "^1.2.5"
+mkdirp@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
mocha@^8.3.0:
version "8.4.0"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff"
@@ -4945,15 +5002,6 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-needle@^2.2.1:
- version "2.9.1"
- resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684"
- integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==
- dependencies:
- debug "^3.2.6"
- iconv-lite "^0.4.4"
- sax "^1.2.4"
-
negotiator@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
@@ -4983,22 +5031,6 @@ node-fetch@~2.6.1:
dependencies:
whatwg-url "^5.0.0"
-node-pre-gyp@0.14.0:
- version "0.14.0"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83"
- integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==
- dependencies:
- detect-libc "^1.0.2"
- mkdirp "^0.5.1"
- needle "^2.2.1"
- nopt "^4.0.1"
- npm-packlist "^1.1.6"
- npmlog "^4.0.2"
- rc "^1.2.7"
- rimraf "^2.6.1"
- semver "^5.3.0"
- tar "^4.4.2"
-
node-preload@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301"
@@ -5011,13 +5043,12 @@ node-releases@^2.0.1:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
-nopt@^4.0.1:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
- integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
+nopt@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
+ integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
dependencies:
abbrev "1"
- osenv "^0.1.4"
normalize-package-data@^2.0.0:
version "2.5.0"
@@ -5034,27 +5065,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-npm-bundled@^1.0.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
- integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==
- dependencies:
- npm-normalize-package-bin "^1.0.1"
-
-npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1:
+npm-normalize-package-bin@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
-npm-packlist@^1.1.6:
- version "1.4.8"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
- integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
- dependencies:
- ignore-walk "^3.0.1"
- npm-bundled "^1.0.1"
- npm-normalize-package-bin "^1.0.1"
-
npm-run-path@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
@@ -5062,7 +5077,7 @@ npm-run-path@^4.0.1:
dependencies:
path-key "^3.0.0"
-npmlog@^4.0.2:
+npmlog@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
@@ -5203,29 +5218,11 @@ os-browserify@~0.3.0:
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
-os-homedir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
- integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-
os-shim@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=
-os-tmpdir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
- integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-
-osenv@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
- integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.0"
-
p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -5558,16 +5555,6 @@ raw-body@2.4.2:
iconv-lite "0.4.24"
unpipe "1.0.0"
-rc@^1.2.7:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
- integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
- dependencies:
- deep-extend "^0.6.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
read-only-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0"
@@ -5798,7 +5785,7 @@ rfdc@^1.1.4:
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
-rimraf@^2.6.1, rimraf@^2.6.2:
+rimraf@^2.6.2:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@@ -5849,11 +5836,6 @@ safe-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-sax@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
schema-utils@^2.6.5:
version "2.7.1"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
@@ -5887,7 +5869,7 @@ seedrandom@^3.0.5:
resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7"
integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.6.0:
+"semver@2 || 3 || 4 || 5", semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -6380,11 +6362,6 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
- integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-
subarg@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
@@ -6458,7 +6435,7 @@ tapable@^2.1.1, tapable@^2.2.0:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
-tar@^4.4.2, tar@^4.4.6:
+tar@^4.4.6:
version "4.4.19"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3"
integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==
@@ -6471,6 +6448,18 @@ tar@^4.4.2, tar@^4.4.6:
safe-buffer "^5.2.1"
yallist "^3.1.1"
+tar@^6.1.0:
+ version "6.1.11"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
+ integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^3.0.0"
+ minizlib "^2.1.1"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
terser-webpack-plugin@^5.1.1:
version "5.3.0"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz#21641326486ecf91d8054161c816e464435bae9f"
diff --git a/src/danfojs-browser/README.md b/src/danfojs-browser/README.md
index 98fbf1da..e0bfe03c 100644
--- a/src/danfojs-browser/README.md
+++ b/src/danfojs-browser/README.md
@@ -71,7 +71,7 @@ yarn add danfojs
For use directly in HTML files, you can add the latest script tag from [JsDelivr](https://www.jsdelivr.com/package/npm/danfojs) to your HTML file:
```html
-
+
```
See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs)
@@ -86,7 +86,7 @@ See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs)
-
+
Document
diff --git a/src/danfojs-browser/package.json b/src/danfojs-browser/package.json
index 3854aa91..e0d074f1 100644
--- a/src/danfojs-browser/package.json
+++ b/src/danfojs-browser/package.json
@@ -1,6 +1,6 @@
{
"name": "danfojs",
- "version": "1.0.1",
+ "version": "1.0.2",
"description": "JavaScript library providing high performance, intuitive, and easy to use data structures for manipulating and processing structured data.",
"main": "dist/danfojs-browser/src/index.js",
"types": "dist/danfojs-browser/src/index.d.ts",
@@ -20,7 +20,7 @@
"dist/"
],
"dependencies": {
- "@tensorflow/tfjs": "^3.11.0",
+ "@tensorflow/tfjs": "^3.13.0",
"mathjs": "9.4.4",
"papaparse": "^5.3.1",
"plotly.js-dist-min": "^2.8.0",
diff --git a/src/danfojs-browser/tests/core/datetime.test.js b/src/danfojs-browser/tests/core/datetime.test.js
index 1562e743..e89bb97d 100644
--- a/src/danfojs-browser/tests/core/datetime.test.js
+++ b/src/danfojs-browser/tests/core/datetime.test.js
@@ -88,4 +88,24 @@ describe("TimeSeries", function () {
assert.deepEqual(dateTime.monthName().values, expectedMonthName);
});
+
+ it("Returns date string in standard JS format", function () {
+ const data = [ "02Sep2019", "03Aug2019", "04July2019" ];
+ const dateTime = dfd.toDateTime(data);
+ const expected = [
+ '9/2/2019, 12:00:00 AM',
+ '8/3/2019, 12:00:00 AM',
+ '7/4/2019, 12:00:00 AM'
+ ];
+
+ const data2 = new dfd.Series([ "12.30.19", "12.22.19", "11.01.20" ]);
+ const dateTime2 = dfd.toDateTime(data2);
+ const expected2 = [
+ '12/30/2019, 12:00:00 AM',
+ '12/22/2019, 12:00:00 AM',
+ '11/1/2020, 12:00:00 AM'
+ ];
+ assert.deepEqual(dateTime.date().values, expected);
+ assert.deepEqual(dateTime2.date().values, expected2);
+ });
});
diff --git a/src/danfojs-browser/tests/core/frame.test.js b/src/danfojs-browser/tests/core/frame.test.js
index d564bebd..515f7f07 100644
--- a/src/danfojs-browser/tests/core/frame.test.js
+++ b/src/danfojs-browser/tests/core/frame.test.js
@@ -1319,6 +1319,17 @@ describe("DataFrame", function () {
[ 6, 9 ] ];
assert.deepEqual(df.sortValues("A", { "ascending": true }).values, expected);
});
+
+ it("sort index in descending order and retains index", function () {
+ let data = [ [ 0, 2, 4, "b" ],
+ [ 360, 180, 360, "a" ],
+ [ 2, 4, 6, "c" ] ];
+
+ let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ], index: [ "b", "a", "c" ] });
+ let df2 = df.sortIndex({ ascending: false });
+ let rslt = [ "c", "b", "a" ];
+ assert.deepEqual(df2.index, rslt);
+ });
});
describe("copy", function () {
@@ -2742,68 +2753,6 @@ describe("DataFrame", function () {
});
});
- // describe("IO outputs", function () {
- // it("toExcel works", async function () {
- // const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
- // const df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] });
-
- // const filePath = path.join(process.cwd(), "test", "samples", "test.xlsx");
- // df.toExcel({ filePath })
-
- // const dfNew = await readExcel(filePath, {});
- // assert.equal(fs.existsSync(filePath), true)
- // assert.deepEqual(dfNew.columns, [
- // 'a',
- // 'b',
- // 'c',
- // 'd',
- // ]);
- // assert.deepEqual(dfNew.dtypes, [
- // 'int32', 'int32',
- // 'int32', 'int32',
- // ]);
- // assert.deepEqual(dfNew.shape, [3, 4])
- // });
-
- // it("toCSV works for specified seperator", async function () {
- // const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
- // let df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] });
- // assert.deepEqual(df.toCSV({ sep: "+" }), `a+b+c+d\n1+2+3+4\n5+6+7+8\n9+10+11+12\n`);
- // });
- // it("toCSV write to local file works", async function () {
- // const data = [[1, 2, 3, "4"], [5, 6, 7, "8"], [9, 10, 11, "12"]]
- // let df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] });
-
- // const filePath = path.join(process.cwd(), "test", "samples", "test_write.csv");
-
- // df.toCSV({ sep: ",", filePath });
- // assert.equal(fs.existsSync(filePath), true);
- // });
- // it("toJSON works for row format", async function () {
- // const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
- // const df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] });
- // const expected = {
- // "a": [1, 5, 9],
- // "b": [2, 6, 10],
- // "c": [3, 7, 11],
- // "d": [4, 8, 12],
- // }
- // const json = df.toJSON({ format: "row" })
- // assert.deepEqual(json, expected);
- // });
- // it("toJSON writes file to local path", async function () {
- // const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
- // const df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] });
-
- // const rowfilePath = path.join(process.cwd(), "test", "samples", "test_row_write.json");
- // const colfilePath = path.join(process.cwd(), "test", "samples", "test_col_write.json");
-
- // df.toJSON({ format: "row", filePath: rowfilePath })
- // df.toJSON({ format: "column", filePath: colfilePath })
- // assert.equal(fs.existsSync(rowfilePath), true);
- // assert.equal(fs.existsSync(colfilePath), true);
- // });
- // })
describe("getDummies", function () {
it("getDummies works on DataFrame", function () {
@@ -2902,5 +2851,51 @@ describe("DataFrame", function () {
});
});
+ describe("iat", function () {
+ it("iat works on DataFrame", function () {
+ const data = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ] ];
+ const columns = [ "a", "b", "c", "d" ];
+ const df = new dfd.DataFrame(data, { columns });
+ assert.equal(df.iat(0, 0), 1);
+ assert.equal(df.iat(1, 1), 6);
+ assert.equal(df.iat(2, 3), 12);
+ });
+ it("throws error on string indices", function () {
+ const data = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ] ];
+ const columns = [ "a", "b", "c", "d" ];
+ const index = [ "A", "B", "C" ];
+ const df = new dfd.DataFrame(data, { columns, index });
+ /* @ts-ignore */
+ assert.throws(function () { df.iat("A", 0); }, Error, "ParamError: row and column index must be an integer. Use .at to get a row or column by label.");
+ /* @ts-ignore */
+ assert.throws(function () { df.iat(0, "A"); }, Error, "ParamError: row and column index must be an integer. Use .at to get a row or column by label.");
+ });
+ });
+
+ describe("at", function () {
+ it("at works on DataFrame", function () {
+ const data = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ] ];
+ const columns = [ "a", "b", "c", "d" ];
+ const index = [ "A", "B", "C" ];
+ const df = new dfd.DataFrame(data, { columns, index });
+ assert.equal(df.at("A", "a"), 1);
+ assert.equal(df.at("B", "b"), 6);
+ assert.equal(df.at("C", "c"), 11);
+
+ });
+ it("throws error on numeric column index", function () {
+ const data = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ] ];
+ const columns = [ "a", "b", "c", "d" ];
+ const index = [ 0, "B", "C" ];
+ const df = new dfd.DataFrame(data, { columns, index });
+
+ assert.equal(df.at(0, "b"), 2);
+ /* @ts-ignore */
+ assert.throws(function () { df.at(0, 1); }, Error, "ParamError: column index must be a string. Use .iat to get a row or column by index.");
+ /* @ts-ignore */
+ assert.throws(function () { df.at("B", 0); }, Error, "ParamError: column index must be a string. Use .iat to get a row or column by index.");
+ });
+
+ });
});
diff --git a/src/danfojs-browser/tests/core/series.test.js b/src/danfojs-browser/tests/core/series.test.js
index 2a5f4680..23b6ce7f 100644
--- a/src/danfojs-browser/tests/core/series.test.js
+++ b/src/danfojs-browser/tests/core/series.test.js
@@ -688,6 +688,45 @@ describe("Series Functions", () => {
const sortedSf = sf.sortValues({ ascending: false });
assert.deepEqual(sortedSf.values, result);
});
+
+ it("Index is retained after sort (ascending=true)", function () {
+ let index = [ "apple", "banana", "orange", "grape" ];
+ let value = [ 3, 6, 2, 9 ];
+
+ let sf = new dfd.Series(value, { index });
+ sf.sortValues().print();
+ const expectedValues = [ 2, 3, 6, 9 ];
+ const expectedIndex = [ "orange", "apple", "banana", "grape" ];
+ const sortedSf = sf.sortValues();
+ assert.deepEqual(sortedSf.values, expectedValues);
+ assert.deepEqual(sortedSf.index, expectedIndex);
+ });
+ it("Index is retained after sort (ascending=false)", function () {
+ let index = [ "apple", "banana", "orange", "grape" ];
+ let value = [ 3, 6, 2, 9 ];
+
+ let sf = new dfd.Series(value, { index });
+ sf.sortValues().print();
+ const expectedValues = [ 9, 6, 3, 2 ];
+ const expectedIndex = [ "grape", "banana", "apple", "orange" ];
+ const sortedSf = sf.sortValues({ ascending: false });
+ assert.deepEqual(sortedSf.values, expectedValues);
+ assert.deepEqual(sortedSf.index, expectedIndex);
+ });
+
+ it("Index is retained after inplace sort (ascending=false)", function () {
+ let index = [ "apple", "banana", "orange", "grape" ];
+ let value = [ 3, 6, 2, 9 ];
+
+ let sf = new dfd.Series(value, { index });
+ sf.sortValues().print();
+ const expectedValues = [ 9, 6, 3, 2 ];
+ const expectedIndex = [ "grape", "banana", "apple", "orange" ];
+ sf.sortValues({ ascending: false, inplace: true });
+ assert.deepEqual(sf.values, expectedValues);
+ assert.deepEqual(sf.index, expectedIndex);
+ });
+
});
describe("describe", function () {
@@ -1583,4 +1622,58 @@ describe("Series Functions", () => {
});
});
+
+ describe("iat", function () {
+ it("iat works on Series", function () {
+ const data = [ 1, 2, 3, 4 ];
+ const index = [ "a", "b", "c", "d" ];
+ const df = new dfd.Series(data, { index });
+ assert.equal(df.iat(0), 1);
+ assert.equal(df.iat(1), 2);
+ assert.equal(df.iat(2), 3);
+ });
+ it("iat can return undefined", function () {
+ const data = [ 1, undefined, null, NaN ];
+ const df = new dfd.Series(data);
+ assert.equal(df.iat(1), undefined);
+ assert.equal(df.iat(2), null);
+ /* @ts-ignore */
+ assert.equal(isNaN(df.iat(3)), true);
+ });
+ it("throws error on string indices", function () {
+ const data = [ 1, 2, 3, 4 ];
+ const index = [ "a", "b", "c", "d" ];
+ const df = new dfd.Series(data, { index });
+ /* @ts-ignore */
+ assert.throws(function () { df.iat("A"); }, Error, "ParamError: row index must be an integer. Use .at to get a row by label.");
+ });
+ });
+
+ describe("at", function () {
+ it("at works on Series", function () {
+ const data = [ 1, 2, 3, 4 ];
+ const index = [ "a", "b", "c", "d" ];
+ const df = new dfd.Series(data, { index });
+ assert.equal(df.at("a"), 1);
+ assert.equal(df.at("b"), 2);
+ assert.equal(df.at("c"), 3);
+ });
+ it("at can return undefined", function () {
+ const data = [ 1, undefined, null, NaN ];
+ const index = [ "a", "b", "c", "d" ];
+ const df = new dfd.Series(data, { index });
+ assert.equal(df.at("b"), undefined);
+ assert.equal(df.at("c"), null);
+ /* @ts-ignore */
+ assert.equal(isNaN(df.at("d")), true);
+ });
+ it("throws error on string indices", function () {
+ const data = [ 1, 2, 3, 4 ];
+ const index = [ "a", "b", "c", "d" ];
+ const df = new dfd.Series(data, { index });
+ /* @ts-ignore */
+ assert.throws(function () { df.at(0); }, Error, "ParamError: row index must be a string. Use .iat to get a row by index.");
+ });
+
+ });
});
diff --git a/src/danfojs-browser/yarn.lock b/src/danfojs-browser/yarn.lock
index bf857024..a8b31198 100644
--- a/src/danfojs-browser/yarn.lock
+++ b/src/danfojs-browser/yarn.lock
@@ -922,35 +922,35 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@tensorflow/tfjs-backend-cpu@3.11.0":
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.11.0.tgz#01d5d68b91faf12bee4854adae56bc956b794f1a"
- integrity sha512-ShLkrZ4/rmhZwzGKenMFDfQnaEbyZgWA5F8JRa52Iob/vptlZeuOzjq87CZKmZMUmDswR9A2kjzovT/H1bJdWQ==
+"@tensorflow/tfjs-backend-cpu@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.13.0.tgz#2a141256fe0a5de0670c31a9ba6990465708dee4"
+ integrity sha512-POmzUoAP8HooYYTZ72O1ZYkpVZB0f+8PeAkbTxIG0oahcJccj6a0Vovp1A6xWKfljUoPlJb3jWVC++S603ZL8w==
dependencies:
"@types/seedrandom" "2.4.27"
seedrandom "2.4.3"
-"@tensorflow/tfjs-backend-webgl@3.11.0":
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.11.0.tgz#fbd7f24c164d17c11d964206b4b075b073b1a3bc"
- integrity sha512-rNnc/dZ7LIl9O/Pn9W24I1h8kgpJ+XvG8NrdNSfIoWPCW4fvPSlU7B3yMeZXvRneny+z+T3xRs96nWyU2mZBJw==
+"@tensorflow/tfjs-backend-webgl@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.13.0.tgz#f99df51253de21e20dae195991d332195ab30b4b"
+ integrity sha512-ZuJS11tCoZx2F1Eq7wqiqu8euJpPW/JV0qOKBehlRpV2qQrR+wHMpBT1hhDl4qU4LdgFTtSggKIRg/L8b0ScUQ==
dependencies:
- "@tensorflow/tfjs-backend-cpu" "3.11.0"
+ "@tensorflow/tfjs-backend-cpu" "3.13.0"
"@types/offscreencanvas" "~2019.3.0"
"@types/seedrandom" "2.4.27"
"@types/webgl-ext" "0.0.30"
"@types/webgl2" "0.0.6"
seedrandom "2.4.3"
-"@tensorflow/tfjs-converter@3.11.0":
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.11.0.tgz#0842269a83599b52fd167a8a05372018a9a1ca6a"
- integrity sha512-rTRIKvBoqL0qdPYpm8UXauZycOiaBHZB2E2v3OoXoHnjvle/Xn/09uZJdrixgGhR+Kahs3Vz27BEEFz6RI5j2w==
+"@tensorflow/tfjs-converter@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.13.0.tgz#3affc86d94c3948b01673a91309a35feb10e5eac"
+ integrity sha512-H2VpDTv9Ve0HBt7ttzz46DmnsPaiT0B+yJjVH3NebGZbgY9C8boBgJIsdyqfiqEWBS3WxF8h4rh58Hv5XXMgaQ==
-"@tensorflow/tfjs-core@3.11.0":
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.11.0.tgz#1e3986533faaed922bbfc2fe86da506d0e9e5c79"
- integrity sha512-JOp+1+LCd0Xg3hu7fu6iQPWZnN8Hc6ssfP7B+625XH5GYY1/OhVASa7Ahe2mJr9gZovY2lw8FUejLh1jMmBb1Q==
+"@tensorflow/tfjs-core@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.13.0.tgz#0cfd707c668250969564991c5c101fb52e51e1aa"
+ integrity sha512-18qBEVIB/4u2OUK9nA5P1XT3e3LyarElD1UKNSNDpnMLxhLTUVZaCR71eHJcpl9wP2Q0cciaTJCTpJdPv1tNDQ==
dependencies:
"@types/long" "^4.0.1"
"@types/offscreencanvas" "~2019.3.0"
@@ -960,30 +960,30 @@
node-fetch "~2.6.1"
seedrandom "2.4.3"
-"@tensorflow/tfjs-data@3.11.0":
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.11.0.tgz#90dd23a7181f0a744f2882a12c3442b27047383d"
- integrity sha512-+cUHUHzjM/zs0JVOwHQm9wP15Y+BZdRcUpMoYWia8r3kaGSyvoz6WqzacEP1PeXgJVnr2gtU3D+bF32th8fZfQ==
+"@tensorflow/tfjs-data@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.13.0.tgz#55ae81957b7ed51cb0ce4e82edc63c5b3de152e6"
+ integrity sha512-n50+lxPK0CU72nlFt4dzMCCNV44CQsQU3sSP9zdR2bYHeoFqjjy1ISp+UV5N5DNLj7bsEMs73kGS1EuJ7YcdqQ==
dependencies:
"@types/node-fetch" "^2.1.2"
node-fetch "~2.6.1"
-"@tensorflow/tfjs-layers@3.11.0":
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.11.0.tgz#456d8dc3fe93937ced329d5d06310da294d3758c"
- integrity sha512-BtLgLucJZHv5te1K3yjT3iZdHXgMJArrLuOb/oRPOtTp4R2ad5N0V2m5RtuZJ3sI5/ah0h72xtmTWNyTv3/5dw==
-
-"@tensorflow/tfjs@^3.11.0":
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.11.0.tgz#63d5231f41d57ca11b910664632a8e349eba3967"
- integrity sha512-TTYrKdkoh1sHnt4vn6MboLbpi1Es4U1Aw+L3PqwadRvXW4+7ySUtc00McrQ+ooK0q3Qhl3N7cvgchgM7nED3Mg==
- dependencies:
- "@tensorflow/tfjs-backend-cpu" "3.11.0"
- "@tensorflow/tfjs-backend-webgl" "3.11.0"
- "@tensorflow/tfjs-converter" "3.11.0"
- "@tensorflow/tfjs-core" "3.11.0"
- "@tensorflow/tfjs-data" "3.11.0"
- "@tensorflow/tfjs-layers" "3.11.0"
+"@tensorflow/tfjs-layers@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.13.0.tgz#bc311664eba4f46802ffe3b05bea7df795cae10d"
+ integrity sha512-kTWJ/+9fbNCMDA9iQjDMYHmWivsiWz8CKNSOZdeCW7tiBwF1EiREBVQXMk1JI11ngQa8f+rYSLs7rkhp3SYl5Q==
+
+"@tensorflow/tfjs@^3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.13.0.tgz#ea0597e0208d403278e2ccbaa5faa479083a04d3"
+ integrity sha512-B5HvNH+6hHhQQkn+AG+u4j5sxZBMYdsq4IWXlBZzioJcVygtZhBWXkxp01boSwngjqUBgi8S2DopBE7McAUKqQ==
+ dependencies:
+ "@tensorflow/tfjs-backend-cpu" "3.13.0"
+ "@tensorflow/tfjs-backend-webgl" "3.13.0"
+ "@tensorflow/tfjs-converter" "3.13.0"
+ "@tensorflow/tfjs-core" "3.13.0"
+ "@tensorflow/tfjs-data" "3.13.0"
+ "@tensorflow/tfjs-layers" "3.13.0"
argparse "^1.0.10"
chalk "^4.1.0"
core-js "3"
diff --git a/src/danfojs-node/README.md b/src/danfojs-node/README.md
index 98fbf1da..e0bfe03c 100644
--- a/src/danfojs-node/README.md
+++ b/src/danfojs-node/README.md
@@ -71,7 +71,7 @@ yarn add danfojs
For use directly in HTML files, you can add the latest script tag from [JsDelivr](https://www.jsdelivr.com/package/npm/danfojs) to your HTML file:
```html
-
+
```
See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs)
@@ -86,7 +86,7 @@ See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs)
-
+
Document
diff --git a/src/danfojs-node/package.json b/src/danfojs-node/package.json
index c9a026a0..bfeecf17 100644
--- a/src/danfojs-node/package.json
+++ b/src/danfojs-node/package.json
@@ -1,6 +1,6 @@
{
"name": "danfojs-node",
- "version": "1.0.1",
+ "version": "1.0.2",
"description": "JavaScript library providing high performance, intuitive, and easy to use data structures for manipulating and processing structured data.",
"main": "dist/danfojs-node/src/index.js",
"types": "dist/danfojs-node/src/index.d.ts",
@@ -19,7 +19,7 @@
"dist/"
],
"dependencies": {
- "@tensorflow/tfjs-node": "3.6.1",
+ "@tensorflow/tfjs-node": "^3.13.0",
"mathjs": "^9.4.4",
"node-fetch": "^2.6.1",
"papaparse": "^5.3.1",
diff --git a/src/danfojs-node/test/core/datetime.test.ts b/src/danfojs-node/test/core/datetime.test.ts
index 94d0c122..2a2e5683 100644
--- a/src/danfojs-node/test/core/datetime.test.ts
+++ b/src/danfojs-node/test/core/datetime.test.ts
@@ -91,4 +91,24 @@ describe("TimeSeries", function () {
assert.deepEqual(dateTime.monthName().values, expectedMonthName);
});
+
+ it("Returns date string in standard JS format", function () {
+ const data = ["02Sep2019", "03Aug2019", "04July2019"];
+ const dateTime = toDateTime(data);
+ const expected = [
+ '9/2/2019, 12:00:00 AM',
+ '8/3/2019, 12:00:00 AM',
+ '7/4/2019, 12:00:00 AM'
+ ]
+
+ const data2 = new Series(["12.30.19", "12.22.19", "11.01.20"]);
+ const dateTime2 = toDateTime(data2);
+ const expected2 = [
+ '12/30/2019, 12:00:00 AM',
+ '12/22/2019, 12:00:00 AM',
+ '11/1/2020, 12:00:00 AM'
+ ]
+ assert.deepEqual(dateTime.date().values, expected);
+ assert.deepEqual(dateTime2.date().values, expected2);
+ });
});
diff --git a/src/danfojs-node/test/core/frame.test.ts b/src/danfojs-node/test/core/frame.test.ts
index a6bf5108..76604f60 100644
--- a/src/danfojs-node/test/core/frame.test.ts
+++ b/src/danfojs-node/test/core/frame.test.ts
@@ -1266,7 +1266,7 @@ describe("DataFrame", function () {
[2, 4, 6, "c"]];
const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] });
- const df_sort = df.sortValues("col3") as DataFrame
+ const df_sort = df.sortValues("col3")
const expected = [[360, 180, 1, "b"], [0, 2, 4, "a"], [2, 4, 6, "c"]];
assert.deepEqual(df_sort.values, expected);
assert.deepEqual(df_sort.index, [1, 0, 2]);
@@ -1297,9 +1297,21 @@ describe("DataFrame", function () {
[2, 4, 6, "c"]];
const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] });
- const expected = [[2, 4, 6, 'c'], [360, 180, 1, 'b'], [0, 2, 4, 'a']];
- assert.deepEqual((df.sortValues("col4", { "ascending": false }) as DataFrame).values, expected);
+ const expected = [[2, 4, 6, "c"], [360, 180, 1, "b"], [0, 2, 4, "a"]]
+ assert.deepEqual(df.sortValues("col4", { "ascending": false }).values, expected);
});
+
+ it("sort works for Date string", function () {
+ const data = {
+ date: ['1974-02-19', '1955-12-06', '1963-11-18']
+ };
+ const df = new DataFrame(data);
+ const expected1 = [['1974-02-19'], ['1963-11-18'], ['1955-12-06']]
+ const expected2 = [['1955-12-06'], ['1963-11-18'], ['1974-02-19']]
+ assert.deepEqual(df.sortValues("date", { "ascending": false }).values, expected1);
+ assert.deepEqual(df.sortValues("date", { "ascending": true }).values, expected2);
+ });
+
it("Sort duplicate DataFrame with duplicate columns", function () {
const data = {
@@ -1320,7 +1332,7 @@ describe("DataFrame", function () {
[5, 8],
[5, 2],
[6, 9]];
- assert.deepEqual((df.sortValues("A", { "ascending": true }) as DataFrame).values, expected);
+ assert.deepEqual(df.sortValues("A", { "ascending": true }).values, expected);
});
it("sort index in descending order and retains index", function () {
let data = [[0, 2, 4, "b"],
@@ -1330,9 +1342,9 @@ describe("DataFrame", function () {
let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"], index: ["b", "a", "c"] });
let df2 = df.sortIndex({ ascending: false });
let rslt = ["c", "b", "a"];
-
assert.deepEqual(df2.index, rslt);
});
+
});
describe("copy", function () {
@@ -2905,5 +2917,52 @@ describe("DataFrame", function () {
});
});
+ describe("iat", function () {
+ it("iat works on DataFrame", function () {
+ const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];
+ const columns = ["a", "b", "c", "d"];
+ const df = new DataFrame(data, { columns });
+ assert.equal(df.iat(0, 0), 1);
+ assert.equal(df.iat(1, 1), 6);
+ assert.equal(df.iat(2, 3), 12);
+ });
+ it("throws error on string indices", function () {
+ const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];
+ const columns = ["a", "b", "c", "d"];
+ const index = ["A", "B", "C"];
+ const df = new DataFrame(data, { columns, index });
+ /* @ts-ignore */
+ assert.throws(function () { df.iat("A", 0); }, Error, "ParamError: row and column index must be an integer. Use .at to get a row or column by label.");
+ /* @ts-ignore */
+ assert.throws(function () { df.iat(0, "A"); }, Error, "ParamError: row and column index must be an integer. Use .at to get a row or column by label.");
+ });
+ })
+
+ describe("at", function () {
+ it("at works on DataFrame", function () {
+ const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];
+ const columns = ["a", "b", "c", "d"];
+ const index = ["A", "B", "C"]
+ const df = new DataFrame(data, { columns, index });
+ assert.equal(df.at("A", "a"), 1);
+ assert.equal(df.at("B", "b"), 6);
+ assert.equal(df.at("C", "c"), 11);
+
+ });
+ it("throws error on numeric column index", function () {
+ const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];
+ const columns = ["a", "b", "c", "d"];
+ const index = [0, "B", "C"]
+ const df = new DataFrame(data, { columns, index });
+
+ assert.equal(df.at(0, "b"), 2);
+ /* @ts-ignore */
+ assert.throws(function () { df.at(0, 1); }, Error, "ParamError: column index must be a string. Use .iat to get a row or column by index.");
+ /* @ts-ignore */
+ assert.throws(function () { df.at("B", 0); }, Error, "ParamError: column index must be a string. Use .iat to get a row or column by index.");
+
+ });
+
+ });
});
diff --git a/src/danfojs-node/test/core/series.test.ts b/src/danfojs-node/test/core/series.test.ts
index 9ec573cc..5dadec40 100644
--- a/src/danfojs-node/test/core/series.test.ts
+++ b/src/danfojs-node/test/core/series.test.ts
@@ -79,12 +79,12 @@ describe("Series Functions", () => {
const data2 = [30, 40, 39, 1, 2, 1];
const sf = new Series(data);
const sf2 = new Series(data2);
- assert.deepEqual((sf.add(sf2) as Series).values, [31, 42, 42, 5, 7, 7]);
+ assert.deepEqual((sf.add(sf2)).values, [31, 42, 42, 5, 7, 7]);
});
it("Return Addition of series with a single value (Broadcasting)", function () {
const data = [1, 2, 3, 4, 5];
const sf = new Series(data);
- assert.deepEqual((sf.add(1) as Series).values, [2, 3, 4, 5, 6]);
+ assert.deepEqual((sf.add(1)).values, [2, 3, 4, 5, 6]);
});
it("Return Addition of series with another series inplace", function () {
const data = [1, 2, 3, 4, 5, 6];
@@ -149,12 +149,12 @@ describe("Series Functions", () => {
const data2 = [1, 2, 3, 4, 5, 6];
const sf1 = new Series(data1);
const sf2 = new Series(data2);
- assert.deepEqual((sf1.sub(sf2) as Series).values, [29, 38, 36, -3, -3, -5]);
+ assert.deepEqual((sf1.sub(sf2)).values, [29, 38, 36, -3, -3, -5]);
});
it("Return Subtraction of series with a single value (Broadcasting)", function () {
const data = [1, 2, 3, 4, 5];
const sf = new Series(data);
- assert.deepEqual((sf.sub(1) as Series).values, [0, 1, 2, 3, 4]);
+ assert.deepEqual((sf.sub(1)).values, [0, 1, 2, 3, 4]);
});
it("Throws type error on Subtraction of string type", function () {
const data = [1, 2, 3, 4];
@@ -184,12 +184,12 @@ describe("Series Functions", () => {
const data2 = [1, 2, 3, 4];
const sf1 = new Series(data1);
const sf2 = new Series(data2);
- assert.deepEqual((sf1.mul(sf2) as Series).values, [30, 80, 9, 20]);
+ assert.deepEqual((sf1.mul(sf2)).values, [30, 80, 9, 20]);
});
it("Return multiplication of series with a single value (Broadcasting)", function () {
const data = [1, 2, 3, 4, 5];
const sf = new Series(data);
- assert.deepEqual((sf.mul(1) as Series).values, [1, 2, 3, 4, 5]);
+ assert.deepEqual((sf.mul(1)).values, [1, 2, 3, 4, 5]);
});
it("Throws type error on multiplication of string type", function () {
const data = [1, 2, 3, 4]
@@ -214,19 +214,19 @@ describe("Series Functions", () => {
const data2 = [1, 2, 3, 4];
const sf1 = new Series(data1);
const sf2 = new Series(data2);
- assert.deepEqual((sf1.div(sf2) as Series).values, [30, 20, 1, 1.25]);
+ assert.deepEqual((sf1.div(sf2)).values, [30, 20, 1, 1.25]);
});
it("Return integer division of series with another series", function () {
const data1 = [30, 40, 3, 5];
const data2 = [1, 2, 3, 4];
const sf1 = new Series(data1);
const sf2 = new Series(data2);
- assert.deepEqual((sf1.div(sf2) as Series).values, [30, 20, 1, 1.25]);
+ assert.deepEqual((sf1.div(sf2)).values, [30, 20, 1, 1.25]);
});
it("Return division of series with a single value (Broadcasting)", function () {
const data = [10, 2, 3, 90];
const sf = new Series(data);
- assert.deepEqual((sf.div(2) as Series).values, [5, 1, 1.5, 45]);
+ assert.deepEqual((sf.div(2)).values, [5, 1, 1.5, 45]);
});
it("Throws type error on division of string type", function () {
const data = [1, 2, 3, 4]
@@ -250,12 +250,12 @@ describe("Series Functions", () => {
const data2 = [1, 2, 3, 0];
const sf1 = new Series(data1);
const sf2 = new Series(data2);
- assert.deepEqual((sf1.pow(sf2) as Series).values, [2, 9, 64, 1]);
+ assert.deepEqual((sf1.pow(sf2)).values, [2, 9, 64, 1]);
});
it("Return Exponetial power of series with a single value (Broadcasting)", function () {
const data = [1, 2, 3, 4, 5];
const sf = new Series(data);
- assert.deepEqual((sf.pow(2) as Series).values, [1, 4, 9, 16, 25]);
+ assert.deepEqual((sf.pow(2)).values, [1, 4, 9, 16, 25]);
});
});
@@ -271,19 +271,19 @@ describe("Series Functions", () => {
0.7000000000000002,
0.20000000000000018
];
- assert.deepEqual((sf1.mod(sf2) as Series).values, expected);
+ assert.deepEqual((sf1.mod(sf2)).values, expected);
});
it("Return modulo of series with another int series", function () {
const data1 = [2, 30, 4, 5];
const data2 = [1, 2, 3, 1];
const sf1 = new Series(data1);
const sf2 = new Series(data2);
- assert.deepEqual((sf1.mod(sf2) as Series).values, [0, 0, 1, 0]);
+ assert.deepEqual((sf1.mod(sf2)).values, [0, 0, 1, 0]);
});
it("Return modulo power of series with a single value (Broadcasting)", function () {
const data = [1, 2, 3, 4, 5];
const sf = new Series(data);
- assert.deepEqual((sf.mod(2) as Series).values, [1, 0, 1, 0, 1]);
+ assert.deepEqual((sf.mod(2)).values, [1, 0, 1, 0, 1]);
});
});
@@ -508,17 +508,17 @@ describe("Series Functions", () => {
it("Rounds elements in a Series to nearest whole number", function () {
const data1 = [30.21091, 40.190901, 3.564, 5.0212];
const sf = new Series(data1);
- assert.deepEqual((sf.round() as Series).values, [30.2, 40.2, 3.6, 5]);
+ assert.deepEqual((sf.round()).values, [30.2, 40.2, 3.6, 5]);
});
it("Rounds elements in a Series to 1dp", function () {
const data1 = [30.21091, 40.190901, 3.564, 5.0212];
const sf = new Series(data1);
- assert.deepEqual((sf.round(1) as Series).values, [30.2, 40.2, 3.6, 5.0]);
+ assert.deepEqual((sf.round(1)).values, [30.2, 40.2, 3.6, 5.0]);
});
it("Rounds elements in a Series to 2dp", function () {
const data1 = [30.2191, 40.190901, 3.564, 5.0212];
const sf = new Series(data1);
- assert.deepEqual((sf.round(2) as Series).values, [30.22, 40.19, 3.56, 5.02]);
+ assert.deepEqual((sf.round(2)).values, [30.22, 40.19, 3.56, 5.02]);
});
it("Rounds elements in a Series to 2dp inplace", function () {
@@ -630,14 +630,14 @@ describe("Series Functions", () => {
const sf = new Series(data);
const sfVal = ["filled", "boy", "filled", "hey", "Man", "filled"];
const sfFill = sf.fillNa("filled");
- assert.deepEqual((sfFill as Series).values, sfVal);
+ assert.deepEqual((sfFill).values, sfVal);
});
it("Data is in right format after filling", function () {
const data = [NaN, "boy", NaN, "hey", "Man", undefined];
const sf = new Series(data);
const sfVal = ["filled", "boy", "filled", "hey", "Man", "filled"];
const sfFill = sf.fillNa("filled");
- assert.deepEqual((sfFill as Series).values, sfVal);
+ assert.deepEqual((sfFill).values, sfVal);
});
});
@@ -646,7 +646,7 @@ describe("Series Functions", () => {
const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]);
const result = [0, 1, 2, 4, 4, 20, 30, 57, 89];
const sortedSf = sf.sortValues();
- assert.deepEqual((sortedSf as Series).values, result);
+ assert.deepEqual((sortedSf).values, result);
});
it("confirms that sortValues in ascending order does not happen inplace", function () {
@@ -660,8 +660,8 @@ describe("Series Functions", () => {
it("Sort values in a Series in Descending order", function () {
const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]);
const result = [89, 57, 30, 20, 4, 4, 2, 1, 0];
- const sortedSf = sf.sortValues({ascending: false});
- assert.deepEqual((sortedSf as Series).values, result);
+ const sortedSf = sf.sortValues({ ascending: false });
+ assert.deepEqual((sortedSf).values, result);
});
it("confirms that sortValues in descending order happens inplace", function () {
const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]);
@@ -672,28 +672,65 @@ describe("Series Functions", () => {
it("Confirms that series index is sorted in ascending order (not in inplace)", function () {
const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]);
const result = [7, 2, 3, 8, 4, 0, 1, 5, 6];
- const sortedSf = sf.sortValues() as Series
+ const sortedSf = sf.sortValues()
assert.deepEqual(sortedSf.index, result);
});
it("Confirms that series index is sorted in descending order (not in inplace)", function () {
const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]);
const result = [6, 5, 1, 0, 4, 8, 3, 2, 7];
- const sortedSf = sf.sortValues({ ascending: false}) as Series
+ const sortedSf = sf.sortValues({ ascending: false })
assert.deepEqual(sortedSf.index, result);
});
it("Sort string values in a Series", function () {
const sf = new Series(["boy", "zebra", "girl", "man"]);
const result = ["boy", "girl", "man", "zebra"];
- const sortedSf = sf.sortValues({ ascending: false}) as Series
+ const sortedSf = sf.sortValues({ ascending: false })
assert.deepEqual(sortedSf.values, result);
});
+ it("Index is retained after sort (ascending=true)", function () {
+ let index = ["apple", "banana", "orange", "grape"];
+ let value = [3, 6, 2, 9];
+
+ let sf = new Series(value, { index });
+ sf.sortValues().print();
+ const expectedValues = [2, 3, 6, 9];
+ const expectedIndex = ["orange", "apple", "banana", "grape"];
+ const sortedSf = sf.sortValues()
+ assert.deepEqual(sortedSf.values, expectedValues);
+ assert.deepEqual(sortedSf.index, expectedIndex);
+ });
+ it("Index is retained after sort (ascending=false)", function () {
+ let index = ["apple", "banana", "orange", "grape"];
+ let value = [3, 6, 2, 9];
+
+ let sf = new Series(value, { index });
+ sf.sortValues().print();
+ const expectedValues = [9, 6, 3, 2];
+ const expectedIndex = ["grape", "banana", "apple", "orange"];
+ const sortedSf = sf.sortValues({ ascending: false })
+ assert.deepEqual(sortedSf.values, expectedValues);
+ assert.deepEqual(sortedSf.index, expectedIndex);
+ });
+
+ it("Index is retained after inplace sort (ascending=false)", function () {
+ let index = ["apple", "banana", "orange", "grape"];
+ let value = [3, 6, 2, 9];
+
+ let sf = new Series(value, { index });
+ sf.sortValues().print();
+ const expectedValues = [9, 6, 3, 2];
+ const expectedIndex = ["grape", "banana", "apple", "orange"];
+ sf.sortValues({ ascending: false, inplace: true });
+ assert.deepEqual(sf.values, expectedValues);
+ assert.deepEqual(sf.index, expectedIndex);
+ });
});
describe("describe", function () {
it("Computes the descriptive statistics on an int Series", function () {
const data1 = [10, 45, 56, 25, 23, 20, 10];
const sf = new Series(data1)
- assert.deepEqual((sf.describe().round() as Series).values, [
+ assert.deepEqual(sf.describe().round().values, [
7,
27,
17.4,
@@ -706,7 +743,7 @@ describe("Series Functions", () => {
it("Computes the descriptive statistics on a float Series", function () {
const data1 = [30.1, 40.2, 3.1, 5.1];
const sf = new Series(data1);
- assert.deepEqual((sf.describe().round() as Series).values, [
+ assert.deepEqual(sf.describe().round().values, [
4,
19.6,
18.4,
@@ -739,13 +776,13 @@ describe("Series Functions", () => {
{ alpha: "C", count: 3 }
];
const df = new Series(data, { index: ["one", "two", "three"] });
- const dfReset = df.resetIndex() as Series
+ const dfReset = df.resetIndex()
assert.deepEqual(dfReset.index, [0, 1, 2]);
});
it("Reset the index of a Series created from an Array", function () {
const data = [1, 2, 3, 4, 5, 6];
const df = new Series(data, { index: ["one", "two", "three", "four", "five", "six"] });
- const dfNew = df.resetIndex() as Series
+ const dfNew = df.resetIndex()
assert.deepEqual(dfNew.index, [0, 1, 2, 3, 4, 5]);
});
it("checks that the original series changed after reseting new index inplace", function () {
@@ -768,7 +805,7 @@ describe("Series Functions", () => {
{ alpha: "C", count: 3 }
];
const df = new Series(data);
- const dfNew = df.setIndex(["one", "two", "three"]) as Series
+ const dfNew = df.setIndex(["one", "two", "three"])
assert.deepEqual(dfNew.index, ["one", "two", "three"]);
assert.notDeepEqual(df.index, dfNew.index);
});
@@ -779,7 +816,7 @@ describe("Series Functions", () => {
{ alpha: "C", count: 3 }
];
const df = new Series(data);
- const dfNew = df.setIndex(["one", "two", "three"]) as Series
+ const dfNew = df.setIndex(["one", "two", "three"])
assert.notDeepEqual(df.index, dfNew.index);
});
it("sets the index of an Series inplace", function () {
@@ -805,7 +842,7 @@ describe("Series Functions", () => {
const sf = new Series([1, 2, 3, 4]);
const map = { 1: "ok", 2: "okie", 3: "frit", 4: "gop" };
const rslt = ["ok", "okie", "frit", "gop"];
- assert.deepEqual((sf.map(map) as Series).values, rslt);
+ assert.deepEqual((sf.map(map)).values, rslt);
});
it("map series element to object keys inplace", function () {
const sf = new Series([1, 2, 3, 4]);
@@ -827,7 +864,7 @@ describe("Series Functions", () => {
return x + 1;
};
const rslt = [2, 3, 4, 5];
- assert.deepEqual((sf.map(func_map) as Series).values, rslt);
+ assert.deepEqual((sf.map(func_map)).values, rslt);
});
it("map series element to a function statement inplace", function () {
@@ -841,14 +878,14 @@ describe("Series Functions", () => {
});
it("map passes along the index", function () {
- const sf = new Series([ 1, 2, 3, 4 ]);
+ const sf = new Series([1, 2, 3, 4]);
const func_map = (x: any, i: any) => {
- return x + i;
+ return x + i;
};
- const rslt = [ 1, 3, 5, 7 ];
+ const rslt = [1, 3, 5, 7];
sf.map(func_map, { inplace: true });
assert.deepEqual(sf.values, rslt);
- });
+ });
});
describe("Apply", function () {
@@ -859,7 +896,7 @@ describe("Series Functions", () => {
};
const rslt = [2, 4, 6, 8, 10, 12, 14, 16];
- assert.deepEqual((sf.apply(applyFunc) as Series).values, rslt);
+ assert.deepEqual((sf.apply(applyFunc)).values, rslt);
});
it("apply a function to a series element inplace", function () {
@@ -931,12 +968,12 @@ describe("Series Functions", () => {
it("Returns the absolute values in Series", function () {
const data1 = [-10, 45, 56, -25, 23, -20, 10];
const sf = new Series(data1);
- assert.deepEqual((sf.abs() as Series).values, [10, 45, 56, 25, 23, 20, 10]);
+ assert.deepEqual((sf.abs()).values, [10, 45, 56, 25, 23, 20, 10]);
});
it("Computes the descriptive statistics on a float Series", function () {
const data1 = [-30.1, -40.2, -3.1, -5.1];
const sf = new Series(data1);
- assert.deepEqual((sf.abs() as Series).values, [30.1, 40.2, 3.1, 5.1]);
+ assert.deepEqual((sf.abs()).values, [30.1, 40.2, 3.1, 5.1]);
});
});
@@ -944,7 +981,7 @@ describe("Series Functions", () => {
it("Return cumulative sum over a Series", function () {
const data1 = [10, 45, 56, 25, 23, 20, 10];
const sf = new Series(data1);
- assert.deepEqual((sf.cumSum() as Series).values, [10, 55, 111, 136, 159, 179, 189]);
+ assert.deepEqual((sf.cumSum()).values, [10, 55, 111, 136, 159, 179, 189]);
});
it("Return cumulative sum over a Series inplace", function () {
const data1 = [10, 45, 56, 25, 23, 20, 10];
@@ -958,7 +995,7 @@ describe("Series Functions", () => {
it("Return cumulative maximum over a Series", function () {
const data1 = [10, 45, 56, 25, 23, 20, 10];
const sf = new Series(data1);
- assert.deepEqual((sf.cumMax() as Series).values, [10, 45, 56, 56, 56, 56, 56]);
+ assert.deepEqual((sf.cumMax()).values, [10, 45, 56, 56, 56, 56, 56]);
});
it("Return cumulative maximum over a Series inplace", function () {
const data1 = [10, 45, 56, 25, 23, 20, 10];
@@ -972,7 +1009,7 @@ describe("Series Functions", () => {
it("Return cumulative minimum over a Series", function () {
const data1 = [10, 45, 56, 25, 23, 20, 10];
const sf = new Series(data1);
- assert.deepEqual((sf.cumMin() as Series).values, [10, 10, 10, 10, 10, 10, 10]);
+ assert.deepEqual((sf.cumMin()).values, [10, 10, 10, 10, 10, 10, 10]);
});
});
@@ -981,7 +1018,7 @@ describe("Series Functions", () => {
const data1 = [1, 2, 10, 3, 12, 14, 1];
const sf = new Series(data1);
const rslt = [1, 2, 20, 60, 720, 10080, 10080];
- assert.deepEqual((sf.cumProd() as Series).values, rslt);
+ assert.deepEqual((sf.cumProd()).values, rslt);
});
});
@@ -1122,7 +1159,7 @@ describe("Series Functions", () => {
const data1 = [10, 45, 56, 25, 23, 20, 10];
const sf = new Series(data1);
const expected = [-50, 45, 56, 25, 23, 20, -50];
- const dfRep = sf.replace(10, -50) as Series
+ const dfRep = sf.replace(10, -50)
assert.deepEqual(dfRep.values, expected);
});
@@ -1159,7 +1196,7 @@ describe("Series Functions", () => {
const sf = new Series(data1);
const expected = [10, 45, 56, 23, 20];
const expectedIndex = [0, 1, 2, 4, 5];
- const df_drop = sf.dropDuplicates() as Series
+ const df_drop = sf.dropDuplicates()
assert.deepEqual(df_drop.values, expected);
assert.deepEqual(df_drop.index, expectedIndex);
});
@@ -1169,7 +1206,7 @@ describe("Series Functions", () => {
const sf = new Series(data1);
const expected = [45, 56, 23, 20, 10];
const expectedIndex = [1, 2, 4, 5, 7];
- const df_drop = sf.dropDuplicates({ keep: "last" }) as Series
+ const df_drop = sf.dropDuplicates({ keep: "last" })
assert.deepEqual(df_drop.values, expected);
assert.deepEqual(df_drop.index, expectedIndex);
});
@@ -1191,7 +1228,7 @@ describe("Series Functions", () => {
const sf = new Series(data1);
const expected = [10, 45, 10, 23, 20, 10];
const expectedIndex = [0, 1, 3, 4, 5, 7];
- const sfDrop = sf.dropNa() as Series
+ const sfDrop = sf.dropNa()
assert.deepEqual(sfDrop.values, expected);
assert.deepEqual(sfDrop.index, expectedIndex);
assert.deepEqual(sfDrop.shape, [6, 1]);
@@ -1203,7 +1240,7 @@ describe("Series Functions", () => {
const expected = ["A", "A", "B", "B", "C"];
const expectedIndex = [0, 2, 3, 4, 6];
- sf.dropNa({ inplace: true }) as Series
+ sf.dropNa({ inplace: true })
assert.deepEqual(sf.values, expected);
assert.deepEqual(sf.index, expectedIndex);
assert.deepEqual(sf.shape, [5, 1]);
@@ -1223,7 +1260,7 @@ describe("Series Functions", () => {
const data1 = [10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11];
const sf = new Series(data1);
const expected = [6, 4, 5, 7, 0, 3, 1, 2];
- const sf_sort = sf.argSort({ ascending: false});
+ const sf_sort = sf.argSort({ ascending: false });
assert.deepEqual(sf_sort.values, expected);
});
});
@@ -1276,20 +1313,20 @@ describe("Series Functions", () => {
const data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"];
const res = ["lower", "capitals", "this is a sentence", "swapcase"];
const sf = new Series(data);
- assert.deepEqual((sf.str.toLowerCase() as Series).values, res);
+ assert.deepEqual((sf.str.toLowerCase()).values, res);
});
it("Converts all characters to capital case.", function () {
const data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"];
const res = ["Lower", "Capitals", "This is a sentence", "Swapcase"];
const sf = new Series(data);
- assert.deepEqual((sf.str.capitalize() as Series).values, res);
+ assert.deepEqual((sf.str.capitalize()).values, res);
});
it("Returns the character at the specified index (position)", function () {
const data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"];
const res = ["w", "P", "i", "A"];
const sf = new Series(data);
- assert.deepEqual((sf.str.charAt(2) as Series).values, res);
+ assert.deepEqual((sf.str.charAt(2)).values, res);
});
it("Throws error on concat of numeric series", function () {
@@ -1340,7 +1377,7 @@ describe("Series Functions", () => {
it("set type of float column to int", function () {
const data = [-20.1, 30, 47.3, -20];
const ndframe = new Series(data);
- const df = ndframe.asType("int32") as Series
+ const df = ndframe.asType("int32")
assert.deepEqual(df.dtypes[0], "int32");
assert.deepEqual(df.values, [-20, 30, 47, -20]);
@@ -1348,14 +1385,14 @@ describe("Series Functions", () => {
it("set type of int column to float", function () {
const data = [34, -4, 5, 6];
const ndframe = new Series(data);
- const df = ndframe.asType("float32") as Series
+ const df = ndframe.asType("float32")
assert.deepEqual(df.dtypes[0], "float32");
assert.deepEqual(df.values, [34, -4, 5, 6]);
});
it("set type of string column to int", function () {
const data = ["20.1", "21", "23.4", "50.78"];
const ndframe = new Series(data);
- const df = ndframe.asType("int32") as Series
+ const df = ndframe.asType("int32")
assert.deepEqual(df.dtypes[0], "int32");
assert.deepEqual(df.values, [20, 21, 23, 50]);
@@ -1363,7 +1400,7 @@ describe("Series Functions", () => {
it("set type of string column to float", function () {
const data = ["20.1", "21", "23.4", "50.78"];
const ndframe = new Series(data);
- const df = ndframe.asType("float32") as Series
+ const df = ndframe.asType("float32")
assert.deepEqual(df.dtypes[0], "float32");
assert.deepEqual(df.values, [20.1, 21, 23.4, 50.78]);
@@ -1371,14 +1408,14 @@ describe("Series Functions", () => {
it("set type of float column to string", function () {
const data = [-20.1, 30, 47.3, -20];
const ndframe = new Series(data);
- const df = ndframe.asType("string") as Series
+ const df = ndframe.asType("string")
assert.deepEqual(df.dtypes[0], "string");
assert.deepEqual(df.values, ["-20.1", "30", "47.3", "-20"]);
});
it("set type of int column to string", function () {
const data = [34, -4, 5, 6];
const ndframe = new Series(data);
- const df = ndframe.asType("string") as Series
+ const df = ndframe.asType("string")
assert.deepEqual(df.dtypes[0], "string");
assert.deepEqual(df.values, ["34", "-4", "5", "6"]);
});
@@ -1420,7 +1457,7 @@ describe("Series Functions", () => {
const data = [1, 2, 3, 4, "a", "b", "c"];
const sf = new Series(data);
const expected_val = [1, 2, 3, 4, "a", "b", "c", "d"];
- const sf2 = sf.append("d", 7) as Series
+ const sf2 = sf.append("d", 7)
assert.deepEqual(sf2.values, expected_val);
});
it("Add a new array of values to the end of a Series", function () {
@@ -1429,7 +1466,7 @@ describe("Series Functions", () => {
const index = [4, 5, 6];
const sf = new Series(data);
const expected_val = [1, 2, 3, 4, "a", "b", "c"];
- const sf2 = sf.append(to_add, index) as Series;
+ const sf2 = sf.append(to_add, index);
assert.deepEqual(sf2.values, expected_val);
});
it("Add a Series to the end of another Series", function () {
@@ -1437,14 +1474,14 @@ describe("Series Functions", () => {
const sf2 = new Series(["a", "b", "c"]);
const index = [4, 5, 6];
const expected_val = [1, 2, 3, 4, "a", "b", "c"];
- const sf3 = sf1.append(sf2, index) as Series;
+ const sf3 = sf1.append(sf2, index);
assert.deepEqual(sf3.values, expected_val);
});
it("Confirm index Change after append", function () {
const sf1 = new Series([1, 2, 3, 4]);
const sf2 = new Series(["a", "b", "c"]);
const index = [4, 5, 6];
- const sf3 = sf1.append(sf2, index) as Series;
+ const sf3 = sf1.append(sf2, index);
assert.deepEqual(sf3.index, [0, 1, 2, 3, 4, 5, 6]);
});
it("Confirm index Change after append inplace", function () {
@@ -1591,4 +1628,58 @@ describe("Series Functions", () => {
assert.deepEqual(sf.and(data2).index, expected);
});
});
+
+ describe("iat", function () {
+ it("iat works on Series", function () {
+ const data = [1, 2, 3, 4];
+ const index = ["a", "b", "c", "d"];
+ const df = new Series(data, { index });
+ assert.equal(df.iat(0), 1);
+ assert.equal(df.iat(1), 2);
+ assert.equal(df.iat(2), 3);
+ });
+ it("iat can return undefined", function () {
+ const data = [1, undefined, null, NaN];
+ const df = new Series(data);
+ assert.equal(df.iat(1), undefined);
+ assert.equal(df.iat(2), null);
+ /* @ts-ignore */
+ assert.equal(isNaN(df.iat(3)), true);
+ });
+ it("throws error on string indices", function () {
+ const data = [1, 2, 3, 4];
+ const index = ["a", "b", "c", "d"];
+ const df = new Series(data, { index });
+ /* @ts-ignore */
+ assert.throws(function () { df.iat("A"); }, Error, "ParamError: row index must be an integer. Use .at to get a row by label.");
+ });
+ })
+
+ describe("at", function () {
+ it("at works on Series", function () {
+ const data = [1, 2, 3, 4];
+ const index = ["a", "b", "c", "d"];
+ const df = new Series(data, { index });
+ assert.equal(df.at("a"), 1);
+ assert.equal(df.at("b"), 2);
+ assert.equal(df.at("c"), 3);
+ });
+ it("at can return undefined", function () {
+ const data = [1, undefined, null, NaN];
+ const index = ["a", "b", "c", "d"];
+ const df = new Series(data, { index });
+ assert.equal(df.at("b"), undefined);
+ assert.equal(df.at("c"), null);
+ /* @ts-ignore */
+ assert.equal(isNaN(df.at("d")), true);
+ });
+ it("throws error on string indices", function () {
+ const data = [1, 2, 3, 4];
+ const index = ["a", "b", "c", "d"];
+ const df = new Series(data, { index });
+ /* @ts-ignore */
+ assert.throws(function () { df.at(0); }, Error, "ParamError: row index must be a string. Use .iat to get a row by index.");
+ });
+
+ });
})
\ No newline at end of file
diff --git a/src/danfojs-node/yarn.lock b/src/danfojs-node/yarn.lock
index f1558dc1..d5dffae8 100644
--- a/src/danfojs-node/yarn.lock
+++ b/src/danfojs-node/yarn.lock
@@ -890,6 +890,21 @@
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
+"@mapbox/node-pre-gyp@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.4.tgz#6c76e7a40138eac39e1a4dc869a083e43e236c00"
+ integrity sha512-M669Qo4nRT7iDmQEjQYC7RU8Z6dpz9UmSbkJ1OFEja3uevCdLKh7IZZki7L1TZj02kRyl82snXFY8QqkyfowrQ==
+ dependencies:
+ detect-libc "^1.0.3"
+ https-proxy-agent "^5.0.0"
+ make-dir "^3.1.0"
+ node-fetch "^2.6.1"
+ nopt "^5.0.0"
+ npmlog "^4.1.2"
+ rimraf "^3.0.2"
+ semver "^7.3.4"
+ tar "^6.1.0"
+
"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents":
version "2.1.8-no-fsevents"
resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz#da7c3996b8e6e19ebd14d82eaced2313e7769f9b"
@@ -919,80 +934,82 @@
dependencies:
defer-to-connect "^1.0.1"
-"@tensorflow/tfjs-backend-cpu@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.6.0.tgz#4e64a7cf1c33b203f71f8f77cd7b0ac1ef25a871"
- integrity sha512-ZpAs17hPdKXadbtNjAsymYUILe8V7+pY4fYo8j25nfDTW/HfBpyAwsHPbMcA/n5zyJ7ZJtGKFcCUv1sl24KL1Q==
+"@tensorflow/tfjs-backend-cpu@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.13.0.tgz#2a141256fe0a5de0670c31a9ba6990465708dee4"
+ integrity sha512-POmzUoAP8HooYYTZ72O1ZYkpVZB0f+8PeAkbTxIG0oahcJccj6a0Vovp1A6xWKfljUoPlJb3jWVC++S603ZL8w==
dependencies:
"@types/seedrandom" "2.4.27"
seedrandom "2.4.3"
-"@tensorflow/tfjs-backend-webgl@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.6.0.tgz#1ea1a73abea8d6324fd81aedf7f187ab6eb73692"
- integrity sha512-zp7l4TmD1khgeSux/Ujaaj8M/v+e8JVIKjOci6HCGaeMNrn74lTSH9oqGPWKUCmpZME17/V0LfRHK34ddmrPSA==
+"@tensorflow/tfjs-backend-webgl@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.13.0.tgz#f99df51253de21e20dae195991d332195ab30b4b"
+ integrity sha512-ZuJS11tCoZx2F1Eq7wqiqu8euJpPW/JV0qOKBehlRpV2qQrR+wHMpBT1hhDl4qU4LdgFTtSggKIRg/L8b0ScUQ==
dependencies:
- "@tensorflow/tfjs-backend-cpu" "3.6.0"
+ "@tensorflow/tfjs-backend-cpu" "3.13.0"
"@types/offscreencanvas" "~2019.3.0"
"@types/seedrandom" "2.4.27"
"@types/webgl-ext" "0.0.30"
- "@types/webgl2" "0.0.5"
+ "@types/webgl2" "0.0.6"
seedrandom "2.4.3"
-"@tensorflow/tfjs-converter@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.6.0.tgz#32b3ff31b47e29630a82e30fbe01708facad7fd6"
- integrity sha512-9MtatbTSvo3gpEulYI6+byTA3OeXSMT2lzyGAegXO9nMxsvjR01zBvlZ5SmsNyecNh6fMSzdL2+cCdQfQtsIBg==
+"@tensorflow/tfjs-converter@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.13.0.tgz#3affc86d94c3948b01673a91309a35feb10e5eac"
+ integrity sha512-H2VpDTv9Ve0HBt7ttzz46DmnsPaiT0B+yJjVH3NebGZbgY9C8boBgJIsdyqfiqEWBS3WxF8h4rh58Hv5XXMgaQ==
-"@tensorflow/tfjs-core@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.6.0.tgz#6b4d8175790bdff78868eabe6adc6442eb4dc276"
- integrity sha512-bb2c3zwK4SgXZRvkTiC7EhCpWbCGp0GMd+1/3Vo2/Z54jiLB/h3sXIgHQrTNiWwhKPtst/xxA+MsslFlvD0A5w==
+"@tensorflow/tfjs-core@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.13.0.tgz#0cfd707c668250969564991c5c101fb52e51e1aa"
+ integrity sha512-18qBEVIB/4u2OUK9nA5P1XT3e3LyarElD1UKNSNDpnMLxhLTUVZaCR71eHJcpl9wP2Q0cciaTJCTpJdPv1tNDQ==
dependencies:
+ "@types/long" "^4.0.1"
"@types/offscreencanvas" "~2019.3.0"
"@types/seedrandom" "2.4.27"
"@types/webgl-ext" "0.0.30"
+ long "4.0.0"
node-fetch "~2.6.1"
seedrandom "2.4.3"
-"@tensorflow/tfjs-data@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.6.0.tgz#af2f03cffb75ad8e4c2f46e192e392d9b7f977ed"
- integrity sha512-5KU7fnU7cj/opb4aCNDoW4qma64ggDwI0PCs5KEO41T3waVHDLk6bjlFlBVRdjfZqvM0K6EfWEyoiXzdvz/Ieg==
+"@tensorflow/tfjs-data@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.13.0.tgz#55ae81957b7ed51cb0ce4e82edc63c5b3de152e6"
+ integrity sha512-n50+lxPK0CU72nlFt4dzMCCNV44CQsQU3sSP9zdR2bYHeoFqjjy1ISp+UV5N5DNLj7bsEMs73kGS1EuJ7YcdqQ==
dependencies:
"@types/node-fetch" "^2.1.2"
node-fetch "~2.6.1"
-"@tensorflow/tfjs-layers@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.6.0.tgz#5358af559fc8baed304b3e567319fe93f1aa46a6"
- integrity sha512-B7EHwAT6KFqhKzdf0e2Sr6haj9qpqpyEATV8OCPHdk+g8z2AGXOLlFfbgW6vCMjy1wb5jzYqCyZDoY3EWdgJAw==
+"@tensorflow/tfjs-layers@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.13.0.tgz#bc311664eba4f46802ffe3b05bea7df795cae10d"
+ integrity sha512-kTWJ/+9fbNCMDA9iQjDMYHmWivsiWz8CKNSOZdeCW7tiBwF1EiREBVQXMk1JI11ngQa8f+rYSLs7rkhp3SYl5Q==
-"@tensorflow/tfjs-node@3.6.1":
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-node/-/tfjs-node-3.6.1.tgz#a1452076fe6da48f5648ca33f85d1127e6881244"
- integrity sha512-JA6GE7AYx+zoXiKQmEdMc848HDOurrI3vFyiLk/8bXJDEv7L7oW5y6Q1Ja+Bz5ul7UmOxNG89hyYhfGqJK8qKw==
+"@tensorflow/tfjs-node@^3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-node/-/tfjs-node-3.13.0.tgz#cb5270efd171d8893654f7037bc308cba2912ef8"
+ integrity sha512-LYM3ck/TyipxMFD23moX9qC3F23UBC3zbiw85HTxZ9FPlE1QNLP1UNlfFGeUTnPvY6CUcvPyQsrG9fBTvtwB1A==
dependencies:
- "@tensorflow/tfjs" "3.6.0"
- adm-zip "^0.4.11"
+ "@mapbox/node-pre-gyp" "1.0.4"
+ "@tensorflow/tfjs" "3.13.0"
+ adm-zip "^0.5.2"
google-protobuf "^3.9.2"
https-proxy-agent "^2.2.1"
- node-pre-gyp "0.14.0"
progress "^2.0.0"
rimraf "^2.6.2"
tar "^4.4.6"
-"@tensorflow/tfjs@3.6.0":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.6.0.tgz#e65956cd40c96523e3f5ec7a58a4bef9ef5e349c"
- integrity sha512-uLDMDzyRkJa3fYBeR6etQTFD/t+nkQIH/DznL9hxmYoIYG8PigY2gcrc482TAvsdhiuvxCZ9rl5SyDtP93MvxQ==
- dependencies:
- "@tensorflow/tfjs-backend-cpu" "3.6.0"
- "@tensorflow/tfjs-backend-webgl" "3.6.0"
- "@tensorflow/tfjs-converter" "3.6.0"
- "@tensorflow/tfjs-core" "3.6.0"
- "@tensorflow/tfjs-data" "3.6.0"
- "@tensorflow/tfjs-layers" "3.6.0"
+"@tensorflow/tfjs@3.13.0":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.13.0.tgz#ea0597e0208d403278e2ccbaa5faa479083a04d3"
+ integrity sha512-B5HvNH+6hHhQQkn+AG+u4j5sxZBMYdsq4IWXlBZzioJcVygtZhBWXkxp01boSwngjqUBgi8S2DopBE7McAUKqQ==
+ dependencies:
+ "@tensorflow/tfjs-backend-cpu" "3.13.0"
+ "@tensorflow/tfjs-backend-webgl" "3.13.0"
+ "@tensorflow/tfjs-converter" "3.13.0"
+ "@tensorflow/tfjs-core" "3.13.0"
+ "@tensorflow/tfjs-data" "3.13.0"
+ "@tensorflow/tfjs-layers" "3.13.0"
argparse "^1.0.10"
chalk "^4.1.0"
core-js "3"
@@ -1034,6 +1051,11 @@
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.19.tgz#80f286b515897413c7a35bdda069cc80f2344233"
integrity sha512-jRJgpRBuY+7izT7/WNXP/LsMO9YonsstuL+xuvycDyESpoDoIAsMd7suwpB4h9oEWB+ZlPTqJJ8EHomzNhwTPQ==
+"@types/long@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
+ integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
+
"@types/mocha@^9.0.0":
version "9.0.0"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.0.0.tgz#3205bcd15ada9bc681ac20bef64e9e6df88fd297"
@@ -1116,10 +1138,10 @@
resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d"
integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==
-"@types/webgl2@0.0.5":
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.5.tgz#dd925e20ab8ace80eb4b1e46fda5b109c508fb0d"
- integrity sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow==
+"@types/webgl2@0.0.6":
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.6.tgz#1ea2db791362bd8521548d664dbd3c5311cdf4b6"
+ integrity sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ==
abab@^2.0.3, abab@^2.0.5:
version "2.0.5"
@@ -1174,10 +1196,10 @@ adler-32@~1.3.0:
dependencies:
printj "~1.2.2"
-adm-zip@^0.4.11:
- version "0.4.16"
- resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365"
- integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==
+adm-zip@^0.5.2:
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.9.tgz#b33691028333821c0cf95c31374c5462f2905a83"
+ integrity sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==
agent-base@6:
version "6.0.2"
@@ -1695,6 +1717,11 @@ chownr@^1.1.1:
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
ci-info@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
@@ -2086,7 +2113,7 @@ delegates@^1.0.0:
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-detect-libc@^1.0.2:
+detect-libc@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
@@ -2599,6 +2626,13 @@ fs-minipass@^1.2.5:
dependencies:
minipass "^2.6.0"
+fs-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
fs-readdir-recursive@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
@@ -2945,7 +2979,7 @@ https-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
-iconv-lite@0.4.24, iconv-lite@^0.4.4:
+iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -2957,13 +2991,6 @@ ignore-by-default@^1.0.1:
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
-ignore-walk@^3.0.1:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
- integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
- dependencies:
- minimatch "^3.0.4"
-
ignore@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -3556,6 +3583,11 @@ log-symbols@3.0.0:
dependencies:
chalk "^2.4.2"
+long@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
+ integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
+
lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
@@ -3581,7 +3613,7 @@ make-dir@^2.0.0, make-dir@^2.1.0:
pify "^4.0.1"
semver "^5.6.0"
-make-dir@^3.0.0, make-dir@^3.0.2:
+make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
@@ -3676,6 +3708,13 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
safe-buffer "^5.1.2"
yallist "^3.0.0"
+minipass@^3.0.0:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee"
+ integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==
+ dependencies:
+ yallist "^4.0.0"
+
minizlib@^1.2.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
@@ -3683,6 +3722,14 @@ minizlib@^1.2.1:
dependencies:
minipass "^2.9.0"
+minizlib@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+ integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
mixin-deep@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
@@ -3691,13 +3738,18 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
-mkdirp@0.5.5, mkdirp@^0.5.0, mkdirp@^0.5.1:
+mkdirp@0.5.5, mkdirp@^0.5.0:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"
+mkdirp@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
mocha@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604"
@@ -3770,15 +3822,6 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-needle@^2.2.1:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe"
- integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==
- dependencies:
- debug "^3.2.6"
- iconv-lite "^0.4.4"
- sax "^1.2.4"
-
node-environment-flags@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088"
@@ -3797,22 +3840,6 @@ node-modules-regexp@^1.0.0:
resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
-node-pre-gyp@0.14.0:
- version "0.14.0"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83"
- integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==
- dependencies:
- detect-libc "^1.0.2"
- mkdirp "^0.5.1"
- needle "^2.2.1"
- nopt "^4.0.1"
- npm-packlist "^1.1.6"
- npmlog "^4.0.2"
- rc "^1.2.7"
- rimraf "^2.6.1"
- semver "^5.3.0"
- tar "^4.4.2"
-
node-preload@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301"
@@ -3841,13 +3868,12 @@ nodemon@^2.0.7:
undefsafe "^2.0.3"
update-notifier "^4.1.0"
-nopt@^4.0.1:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
- integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
+nopt@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
+ integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
dependencies:
abbrev "1"
- osenv "^0.1.4"
nopt@~1.0.10:
version "1.0.10"
@@ -3873,28 +3899,7 @@ normalize-url@^4.1.0:
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
-npm-bundled@^1.0.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
- integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
- dependencies:
- npm-normalize-package-bin "^1.0.1"
-
-npm-normalize-package-bin@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
- integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
-
-npm-packlist@^1.1.6:
- version "1.4.8"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
- integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
- dependencies:
- ignore-walk "^3.0.1"
- npm-bundled "^1.0.1"
- npm-normalize-package-bin "^1.0.1"
-
-npmlog@^4.0.2:
+npmlog@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
@@ -4050,24 +4055,6 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
-os-homedir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
- integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-
-os-tmpdir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
- integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-
-osenv@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
- integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.0"
-
p-cancelable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
@@ -4306,7 +4293,7 @@ qs@~6.5.2:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-rc@^1.2.7, rc@^1.2.8:
+rc@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
@@ -4524,7 +4511,7 @@ ret@~0.1.10:
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-rimraf@^2.6.1, rimraf@^2.6.2:
+rimraf@^2.6.2:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@@ -4560,11 +4547,6 @@ safe-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-sax@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
saxes@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
@@ -4599,7 +4581,7 @@ semver@7.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
-semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
+semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -4616,6 +4598,13 @@ semver@^7.2.1:
dependencies:
lru-cache "^6.0.0"
+semver@^7.3.4:
+ version "7.3.5"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+ integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
+ dependencies:
+ lru-cache "^6.0.0"
+
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
@@ -4950,7 +4939,7 @@ table@^6.0.4:
slice-ansi "^4.0.0"
string-width "^4.2.0"
-tar@^4.4.2, tar@^4.4.6:
+tar@^4.4.6:
version "4.4.13"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
@@ -4963,6 +4952,18 @@ tar@^4.4.2, tar@^4.4.6:
safe-buffer "^5.1.2"
yallist "^3.0.3"
+tar@^6.1.0:
+ version "6.1.11"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
+ integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^3.0.0"
+ minizlib "^2.1.1"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
term-size@^2.1.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"