@iiasa/ixmp4-ts 0.1.5 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -100,10 +100,14 @@ class RunIamcData extends base_1.BaseFacade {
100
100
  /**
101
101
  * Tabulates IAMC format timeseries data with optional filtering.
102
102
  * @param filter Optional. Filter for tabulating IAMC format timeseries data.
103
+ * @param wide Optional. Whether to return the data in IAMC wide format or not, defaults to false.
103
104
  * @returns A dfd.DataFrame representing the tabulated data.
104
105
  * @throws An error if illegal filters are applied.
105
106
  */
106
- tabulate(filter) {
107
+ tabulate(_a = {
108
+ wide: false,
109
+ }) {
110
+ var { wide = false } = _a, filter = __rest(_a, ["wide"]);
107
111
  return __awaiter(this, void 0, void 0, function* () {
108
112
  if (filter !== undefined && filter !== null) {
109
113
  // these filters do not make sense when applied from a Run
@@ -114,12 +118,13 @@ class RunIamcData extends base_1.BaseFacade {
114
118
  throw new Error(`Illegal filter for 'iamc.tabulate()': ${illegalFilter}`);
115
119
  }
116
120
  }
117
- return yield this.repository.tabulate(Object.assign({ run: { id: this.run.id, defaultOnly: false }, joinRuns: false }, filter));
121
+ return yield this.repository.tabulate(Object.assign({ run: { id: this.run.id, defaultOnly: false }, joinRuns: false, wide }, filter));
118
122
  });
119
123
  }
120
124
  contractParameters(df) {
121
125
  return __awaiter(this, void 0, void 0, function* () {
122
126
  let timeseriesDf = df
127
+ .loc({ columns: ['region', 'variable', 'unit', 'run__id'] })
123
128
  .groupby(['region', 'variable', 'unit', 'run__id'])
124
129
  .agg({ run__id: 'min' })
125
130
  .loc({ columns: ['region', 'variable', 'unit', 'run__id'] });
@@ -160,13 +165,15 @@ class PlatformIamcData extends base_1.BaseFacade {
160
165
  /**
161
166
  * Tabulates IAMC data with optional filtering.
162
167
  * @param filter Optional. Filter for retrieving IAMC data.
163
- * @param filter.joinRuns Optional. Whether to join runs or not, defaults to true.
168
+ * @param joinRuns Optional. Whether to join runs or not, defaults to true.
169
+ * @param wide Optional. Whether to return the data in IAMC wide format or not, defaults to false.
164
170
  * @returns A Promise that resolves to a dfd.DataFrame containing the tabulated data.
165
171
  */
166
172
  tabulate(_a = {
167
173
  joinRuns: true,
174
+ wide: false,
168
175
  }) {
169
- var { joinRuns = true } = _a, filter = __rest(_a, ["joinRuns"]);
176
+ var { joinRuns = true, wide = false } = _a, filter = __rest(_a, ["joinRuns", "wide"]);
170
177
  return __awaiter(this, void 0, void 0, function* () {
171
178
  if (filter === undefined) {
172
179
  filter = {};
@@ -188,9 +195,8 @@ class PlatformIamcData extends base_1.BaseFacade {
188
195
  if (df.columns.includes('unit')) {
189
196
  // TODO report bug to danfojs: df.replace('oldValue', '', { columns: ['column_name'] }) throws: Params Error: Must specify param 'newValue' to replace with (probably newValue is cast to boolean and emty string is falsy)
190
197
  df = df.replace('dimensionless', ' ', { columns: ['unit'] });
191
- console.warn(`Unit name "dimensionless" has been replaced with ' ', this will be rejected by ixmp4.`);
192
198
  }
193
- return df;
199
+ return wide ? (0, utils_1.toIamcWide)(df) : df;
194
200
  });
195
201
  }
196
202
  }
@@ -64,9 +64,7 @@ class MetaIndicatorRepository extends base_1.BaseFacade {
64
64
  if (filter === undefined) {
65
65
  filter = {};
66
66
  }
67
- return (yield this.backend.meta.tabulate(filter, joinRunIndex)).drop({
68
- columns: ['id', 'type'],
69
- });
67
+ return yield this.backend.meta.tabulate(filter, joinRunIndex);
70
68
  });
71
69
  }
72
70
  }
@@ -1,6 +1,30 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.dfToDimensionless = exports.unitToDimensionless = exports.substitudeType = void 0;
26
+ exports.toIamcWide = exports.dfToDimensionless = exports.unitToDimensionless = exports.substitudeType = void 0;
27
+ const dfd = __importStar(require("danfojs"));
4
28
  const datapoint_1 = require("../data/iamc/datapoint");
5
29
  function substitudeType(df, type) {
6
30
  if (!df.columns.includes(type)) {
@@ -36,6 +60,56 @@ function dfToDimensionless(df) {
36
60
  }
37
61
  // TODO report bug to danfojs: df.replace('oldValue', '', { columns: ['column_name'] }) throws: Params Error: Must specify param 'newValue' to replace with (probably newValue is cast to boolean and emty string is falsy)
38
62
  df.replace(' ', 'dimensionless', { columns: ['unit'] });
63
+ console.warn(`Unit name "dimensionless" has been replaced with ' ', this will be rejected by ixmp4.`);
39
64
  return df;
40
65
  }
41
66
  exports.dfToDimensionless = dfToDimensionless;
67
+ function toIamcWide(df) {
68
+ // cannot convert empty dataframe to wide format
69
+ if (df.shape[0] === 0) {
70
+ // drop columns of iamc long format if present
71
+ if (df.columns.includes('step_year')) {
72
+ df = df.drop({ columns: ['step_year'] });
73
+ }
74
+ if (df.columns.includes('value')) {
75
+ df = df.drop({ columns: ['value'] });
76
+ }
77
+ return df;
78
+ }
79
+ // TODO make this work for other types than ANNUAL as well
80
+ if (df.query(df['type'].ne('ANNUAL')).shape[0] > 0) {
81
+ throw new Error('Only ANNUAL data is supported for conversion to wide format');
82
+ }
83
+ const allYears = [...new Set(df['step_year'].values)];
84
+ const data = dfd.toJSON(df);
85
+ const dataMap = new Map();
86
+ for (const row of data) {
87
+ const index = getIamcRowIndex(row);
88
+ if (dataMap.has(index)) {
89
+ dataMap.get(index).push(row);
90
+ }
91
+ else {
92
+ dataMap.set(index, [row]);
93
+ }
94
+ }
95
+ const wideIamcData = [];
96
+ for (const iamcRows of dataMap.values()) {
97
+ wideIamcData.push(buildIamcWideRow(iamcRows, allYears));
98
+ }
99
+ return new dfd.DataFrame(wideIamcData);
100
+ }
101
+ exports.toIamcWide = toIamcWide;
102
+ function getIamcRowIndex(row) {
103
+ return `${row.model}__${row.scenario}__${row.version}__${row.region}__${row.variable}__${row.unit}`;
104
+ }
105
+ function buildIamcWideRow(iamcRows, allYears) {
106
+ const wideRow = Object.assign({}, iamcRows[0]);
107
+ delete wideRow['step_year'];
108
+ delete wideRow['value'];
109
+ const yearsValues = {};
110
+ iamcRows.forEach((row) => (yearsValues[row.step_year] = row.value));
111
+ for (const year of allYears) {
112
+ wideRow[year] = yearsValues[year] || null;
113
+ }
114
+ return wideRow;
115
+ }
package/dist/cjs/index.js CHANGED
@@ -1,5 +1,51 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Platform = void 0;
26
+ exports.danfo = exports.InvalidCredentials = exports.BadFilterArguments = exports.InvalidRunMeta = exports.NoDefaultRunVersion = exports.SchemaError = exports.OperationNotSupported = exports.DeletionPrevented = exports.NotUnique = exports.NotFound = exports.Forbidden = exports.InvalidToken = exports.MissingToken = exports.PlatformNotUnique = exports.PlatformNotFound = exports.UnknownApiError = exports.ManagerApiError = exports.ImproperlyConfigured = exports.BadRequest = exports.InconsistentIamcType = exports.ProgrammingError = exports.IxmpError = exports.Platform = void 0;
4
27
  var platform_1 = require("./core/platform");
5
28
  Object.defineProperty(exports, "Platform", { enumerable: true, get: function () { return platform_1.Platform; } });
29
+ var exceptions_1 = require("./core/exceptions");
30
+ Object.defineProperty(exports, "IxmpError", { enumerable: true, get: function () { return exceptions_1.IxmpError; } });
31
+ Object.defineProperty(exports, "ProgrammingError", { enumerable: true, get: function () { return exceptions_1.ProgrammingError; } });
32
+ Object.defineProperty(exports, "InconsistentIamcType", { enumerable: true, get: function () { return exceptions_1.InconsistentIamcType; } });
33
+ Object.defineProperty(exports, "BadRequest", { enumerable: true, get: function () { return exceptions_1.BadRequest; } });
34
+ Object.defineProperty(exports, "ImproperlyConfigured", { enumerable: true, get: function () { return exceptions_1.ImproperlyConfigured; } });
35
+ Object.defineProperty(exports, "ManagerApiError", { enumerable: true, get: function () { return exceptions_1.ManagerApiError; } });
36
+ Object.defineProperty(exports, "UnknownApiError", { enumerable: true, get: function () { return exceptions_1.UnknownApiError; } });
37
+ Object.defineProperty(exports, "PlatformNotFound", { enumerable: true, get: function () { return exceptions_1.PlatformNotFound; } });
38
+ Object.defineProperty(exports, "PlatformNotUnique", { enumerable: true, get: function () { return exceptions_1.PlatformNotUnique; } });
39
+ Object.defineProperty(exports, "MissingToken", { enumerable: true, get: function () { return exceptions_1.MissingToken; } });
40
+ Object.defineProperty(exports, "InvalidToken", { enumerable: true, get: function () { return exceptions_1.InvalidToken; } });
41
+ Object.defineProperty(exports, "Forbidden", { enumerable: true, get: function () { return exceptions_1.Forbidden; } });
42
+ Object.defineProperty(exports, "NotFound", { enumerable: true, get: function () { return exceptions_1.NotFound; } });
43
+ Object.defineProperty(exports, "NotUnique", { enumerable: true, get: function () { return exceptions_1.NotUnique; } });
44
+ Object.defineProperty(exports, "DeletionPrevented", { enumerable: true, get: function () { return exceptions_1.DeletionPrevented; } });
45
+ Object.defineProperty(exports, "OperationNotSupported", { enumerable: true, get: function () { return exceptions_1.OperationNotSupported; } });
46
+ Object.defineProperty(exports, "SchemaError", { enumerable: true, get: function () { return exceptions_1.SchemaError; } });
47
+ Object.defineProperty(exports, "NoDefaultRunVersion", { enumerable: true, get: function () { return exceptions_1.NoDefaultRunVersion; } });
48
+ Object.defineProperty(exports, "InvalidRunMeta", { enumerable: true, get: function () { return exceptions_1.InvalidRunMeta; } });
49
+ Object.defineProperty(exports, "BadFilterArguments", { enumerable: true, get: function () { return exceptions_1.BadFilterArguments; } });
50
+ Object.defineProperty(exports, "InvalidCredentials", { enumerable: true, get: function () { return exceptions_1.InvalidCredentials; } });
51
+ exports.danfo = __importStar(require("danfojs"));
@@ -1,6 +1,6 @@
1
1
  import * as dfd from 'danfojs';
2
2
  import { BaseFacade } from '../base';
3
- import { dfToDimensionless, substitudeType } from '../utils';
3
+ import { dfToDimensionless, substitudeType, toIamcWide } from '../utils';
4
4
  import { VariableRepository } from './variable';
5
5
  /**
6
6
  * Represents IAMC format data for a specific Run.
@@ -55,10 +55,13 @@ class RunIamcData extends BaseFacade {
55
55
  /**
56
56
  * Tabulates IAMC format timeseries data with optional filtering.
57
57
  * @param filter Optional. Filter for tabulating IAMC format timeseries data.
58
+ * @param wide Optional. Whether to return the data in IAMC wide format or not, defaults to false.
58
59
  * @returns A dfd.DataFrame representing the tabulated data.
59
60
  * @throws An error if illegal filters are applied.
60
61
  */
61
- async tabulate(filter) {
62
+ async tabulate({ wide = false, ...filter } = {
63
+ wide: false,
64
+ }) {
62
65
  if (filter !== undefined && filter !== null) {
63
66
  // these filters do not make sense when applied from a Run
64
67
  const illegalFilter = Object.keys(filter).filter((key) => {
@@ -71,11 +74,13 @@ class RunIamcData extends BaseFacade {
71
74
  return await this.repository.tabulate({
72
75
  run: { id: this.run.id, defaultOnly: false },
73
76
  joinRuns: false,
77
+ wide,
74
78
  ...filter,
75
79
  });
76
80
  }
77
81
  async contractParameters(df) {
78
82
  let timeseriesDf = df
83
+ .loc({ columns: ['region', 'variable', 'unit', 'run__id'] })
79
84
  .groupby(['region', 'variable', 'unit', 'run__id'])
80
85
  .agg({ run__id: 'min' })
81
86
  .loc({ columns: ['region', 'variable', 'unit', 'run__id'] });
@@ -118,11 +123,13 @@ class PlatformIamcData extends BaseFacade {
118
123
  /**
119
124
  * Tabulates IAMC data with optional filtering.
120
125
  * @param filter Optional. Filter for retrieving IAMC data.
121
- * @param filter.joinRuns Optional. Whether to join runs or not, defaults to true.
126
+ * @param joinRuns Optional. Whether to join runs or not, defaults to true.
127
+ * @param wide Optional. Whether to return the data in IAMC wide format or not, defaults to false.
122
128
  * @returns A Promise that resolves to a dfd.DataFrame containing the tabulated data.
123
129
  */
124
- async tabulate({ joinRuns = true, ...filter } = {
130
+ async tabulate({ joinRuns = true, wide = false, ...filter } = {
125
131
  joinRuns: true,
132
+ wide: false,
126
133
  }) {
127
134
  if (filter === undefined) {
128
135
  filter = {};
@@ -144,9 +151,8 @@ class PlatformIamcData extends BaseFacade {
144
151
  if (df.columns.includes('unit')) {
145
152
  // TODO report bug to danfojs: df.replace('oldValue', '', { columns: ['column_name'] }) throws: Params Error: Must specify param 'newValue' to replace with (probably newValue is cast to boolean and emty string is falsy)
146
153
  df = df.replace('dimensionless', ' ', { columns: ['unit'] });
147
- console.warn(`Unit name "dimensionless" has been replaced with ' ', this will be rejected by ixmp4.`);
148
154
  }
149
- return df;
155
+ return wide ? toIamcWide(df) : df;
150
156
  }
151
157
  }
152
158
  export { RunIamcData, PlatformIamcData };
@@ -16,9 +16,7 @@ class MetaIndicatorRepository extends BaseFacade {
16
16
  if (filter === undefined) {
17
17
  filter = {};
18
18
  }
19
- return (await this.backend.meta.tabulate(filter, joinRunIndex)).drop({
20
- columns: ['id', 'type'],
21
- });
19
+ return await this.backend.meta.tabulate(filter, joinRunIndex);
22
20
  }
23
21
  }
24
22
  /**
@@ -1,3 +1,4 @@
1
+ import * as dfd from 'danfojs';
1
2
  import { DataPointType } from '../data/iamc/datapoint';
2
3
  function substitudeType(df, type) {
3
4
  if (!df.columns.includes(type)) {
@@ -31,6 +32,55 @@ function dfToDimensionless(df) {
31
32
  }
32
33
  // TODO report bug to danfojs: df.replace('oldValue', '', { columns: ['column_name'] }) throws: Params Error: Must specify param 'newValue' to replace with (probably newValue is cast to boolean and emty string is falsy)
33
34
  df.replace(' ', 'dimensionless', { columns: ['unit'] });
35
+ console.warn(`Unit name "dimensionless" has been replaced with ' ', this will be rejected by ixmp4.`);
34
36
  return df;
35
37
  }
36
- export { substitudeType, unitToDimensionless, dfToDimensionless };
38
+ function toIamcWide(df) {
39
+ // cannot convert empty dataframe to wide format
40
+ if (df.shape[0] === 0) {
41
+ // drop columns of iamc long format if present
42
+ if (df.columns.includes('step_year')) {
43
+ df = df.drop({ columns: ['step_year'] });
44
+ }
45
+ if (df.columns.includes('value')) {
46
+ df = df.drop({ columns: ['value'] });
47
+ }
48
+ return df;
49
+ }
50
+ // TODO make this work for other types than ANNUAL as well
51
+ if (df.query(df['type'].ne('ANNUAL')).shape[0] > 0) {
52
+ throw new Error('Only ANNUAL data is supported for conversion to wide format');
53
+ }
54
+ const allYears = [...new Set(df['step_year'].values)];
55
+ const data = dfd.toJSON(df);
56
+ const dataMap = new Map();
57
+ for (const row of data) {
58
+ const index = getIamcRowIndex(row);
59
+ if (dataMap.has(index)) {
60
+ dataMap.get(index).push(row);
61
+ }
62
+ else {
63
+ dataMap.set(index, [row]);
64
+ }
65
+ }
66
+ const wideIamcData = [];
67
+ for (const iamcRows of dataMap.values()) {
68
+ wideIamcData.push(buildIamcWideRow(iamcRows, allYears));
69
+ }
70
+ return new dfd.DataFrame(wideIamcData);
71
+ }
72
+ function getIamcRowIndex(row) {
73
+ return `${row.model}__${row.scenario}__${row.version}__${row.region}__${row.variable}__${row.unit}`;
74
+ }
75
+ function buildIamcWideRow(iamcRows, allYears) {
76
+ const wideRow = { ...iamcRows[0] };
77
+ delete wideRow['step_year'];
78
+ delete wideRow['value'];
79
+ const yearsValues = {};
80
+ iamcRows.forEach((row) => (yearsValues[row.step_year] = row.value));
81
+ for (const year of allYears) {
82
+ wideRow[year] = yearsValues[year] || null;
83
+ }
84
+ return wideRow;
85
+ }
86
+ export { substitudeType, unitToDimensionless, dfToDimensionless, toIamcWide };
package/dist/esm/index.js CHANGED
@@ -1 +1,3 @@
1
1
  export { Platform } from './core/platform';
2
+ export { IxmpError, ProgrammingError, InconsistentIamcType, BadRequest, ImproperlyConfigured, ManagerApiError, UnknownApiError, PlatformNotFound, PlatformNotUnique, MissingToken, InvalidToken, Forbidden, NotFound, NotUnique, DeletionPrevented, OperationNotSupported, SchemaError, NoDefaultRunVersion, InvalidRunMeta, BadFilterArguments, InvalidCredentials, } from './core/exceptions';
3
+ export * as danfo from 'danfojs';
@@ -55,10 +55,13 @@ declare class RunIamcData extends BaseFacade {
55
55
  /**
56
56
  * Tabulates IAMC format timeseries data with optional filtering.
57
57
  * @param filter Optional. Filter for tabulating IAMC format timeseries data.
58
+ * @param wide Optional. Whether to return the data in IAMC wide format or not, defaults to false.
58
59
  * @returns A dfd.DataFrame representing the tabulated data.
59
60
  * @throws An error if illegal filters are applied.
60
61
  */
61
- tabulate(filter?: IamcDataFilter): Promise<dfd.DataFrame>;
62
+ tabulate({ wide, ...filter }?: {
63
+ wide?: boolean;
64
+ } & IamcDataFilter): Promise<dfd.DataFrame>;
62
65
  private contractParameters;
63
66
  }
64
67
  /**
@@ -77,11 +80,13 @@ declare class PlatformIamcData extends BaseFacade {
77
80
  /**
78
81
  * Tabulates IAMC data with optional filtering.
79
82
  * @param filter Optional. Filter for retrieving IAMC data.
80
- * @param filter.joinRuns Optional. Whether to join runs or not, defaults to true.
83
+ * @param joinRuns Optional. Whether to join runs or not, defaults to true.
84
+ * @param wide Optional. Whether to return the data in IAMC wide format or not, defaults to false.
81
85
  * @returns A Promise that resolves to a dfd.DataFrame containing the tabulated data.
82
86
  */
83
- tabulate({ joinRuns, ...filter }?: {
87
+ tabulate({ joinRuns, wide, ...filter }?: {
84
88
  joinRuns?: boolean;
89
+ wide?: boolean;
85
90
  } & IamcDataFilter): Promise<dfd.DataFrame>;
86
91
  }
87
92
  export { RunIamcData, PlatformIamcData };
@@ -9,12 +9,20 @@ import { RunMetaIndicatorRepository } from './meta';
9
9
  import { ModelFilter as BaseModelFilter } from '../data/model';
10
10
  import { RunFilter as BaseRunFilter } from '../data/run';
11
11
  import { ScenarioFilter as BaseScenarioFilter } from '../data/scenario';
12
+ import { VariableFilter as BaseVariableFilter } from '../data/iamc/variable';
13
+ import { UnitFilter as BaseUnitFilter } from '../data/unit';
14
+ import { RegionFilter as BaseRegionFilter } from '../data/region';
12
15
  /**
13
16
  * Represents a filter for listing and tabulating runs.
14
17
  */
15
18
  type RunFilter = BaseRunFilter & {
16
19
  model?: BaseModelFilter;
17
20
  scenario?: BaseScenarioFilter;
21
+ iamc?: {
22
+ variable?: BaseVariableFilter;
23
+ region?: BaseRegionFilter;
24
+ unit?: BaseUnitFilter;
25
+ };
18
26
  };
19
27
  /**
20
28
  * Represents a Modeling Run.
@@ -3,4 +3,5 @@ import { DataPointType } from '../data/iamc/datapoint';
3
3
  declare function substitudeType(df: dfd.DataFrame, type?: DataPointType): dfd.DataFrame;
4
4
  declare function unitToDimensionless(name: string): string;
5
5
  declare function dfToDimensionless(df: dfd.DataFrame): dfd.DataFrame;
6
- export { substitudeType, unitToDimensionless, dfToDimensionless };
6
+ declare function toIamcWide(df: dfd.DataFrame): dfd.DataFrame;
7
+ export { substitudeType, unitToDimensionless, dfToDimensionless, toIamcWide };
@@ -18,3 +18,5 @@ export type { DataPoint as DataPointModel } from './data/iamc/datapoint';
18
18
  export type { Variable as VariableModel } from './data/iamc/variable';
19
19
  export type { TimeSeries as TimeSeriesModel } from './data/iamc/timeseries';
20
20
  export type { Lookup } from './data/filters';
21
+ export { IxmpError, ProgrammingError, InconsistentIamcType, BadRequest, ImproperlyConfigured, ManagerApiError, UnknownApiError, PlatformNotFound, PlatformNotUnique, MissingToken, InvalidToken, Forbidden, NotFound, NotUnique, DeletionPrevented, OperationNotSupported, SchemaError, NoDefaultRunVersion, InvalidRunMeta, BadFilterArguments, InvalidCredentials, } from './core/exceptions';
22
+ export * as danfo from 'danfojs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iiasa/ixmp4-ts",
3
- "version": "0.1.5",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "description": "typescript client for ixmp4, a data warehouse for scenario analysis",
6
6
  "repository": {
@@ -58,8 +58,8 @@
58
58
  "lint:prettier:root": "prettier 'src/**/*.{js,mjs,cjs,ts,json}'",
59
59
  "lint": "npm run lint:js && npm run lint:prettier",
60
60
  "lint:fix": "npm run lint:prettier:root -- --write --list-different && npm run lint:js -- --fix",
61
- "test": "jest",
62
- "test:debug": "DEBUG=testcontainers:containers jest",
61
+ "test": "vitest run",
62
+ "test:debug": "DEBUG=testcontainers:containers vitest run",
63
63
  "prepublishOnly": "npm run build",
64
64
  "doc": "typedoc --out ./doc/build ./src"
65
65
  },
@@ -81,19 +81,16 @@
81
81
  },
82
82
  "devDependencies": {
83
83
  "@nuxt/eslint-config": "^0.2.0",
84
- "@types/jest": "^29.5.10",
85
84
  "@types/web": "^0.0.134",
86
85
  "@types/webgl-ext": "^0.0.36",
87
86
  "@types/webgl2": "^0.0.10",
88
87
  "eslint-config-prettier": "^9.0.0",
89
88
  "eslint-plugin-prettier": "^5.0.1",
90
- "jest": "^29.7.0",
91
- "jest-extended": "^4.0.2",
92
89
  "prettier": "^3.1.0",
93
90
  "testcontainers": "^10.3.2",
94
- "ts-jest": "^29.1.1",
95
91
  "typedoc": "^0.25.7",
96
- "typescript": "^5.3.2"
92
+ "typescript": "^5.3.2",
93
+ "vitest": "^1.3.1"
97
94
  },
98
95
  "dependencies": {
99
96
  "axios": "^1.6.2",