@milaboratories/pl-model-common 1.24.3 → 1.24.4
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.
- package/dist/base32_encode.cjs +11 -11
- package/dist/base32_encode.cjs.map +1 -1
- package/dist/base32_encode.d.ts +1 -1
- package/dist/base32_encode.js +11 -11
- package/dist/base32_encode.js.map +1 -1
- package/dist/base64.cjs +2 -2
- package/dist/base64.cjs.map +1 -1
- package/dist/base64.d.ts +1 -1
- package/dist/base64.d.ts.map +1 -1
- package/dist/base64.js +2 -2
- package/dist/base64.js.map +1 -1
- package/dist/block_state.d.ts +3 -3
- package/dist/bmodel/block_config.cjs +1 -1
- package/dist/bmodel/block_config.cjs.map +1 -1
- package/dist/bmodel/block_config.d.ts +3 -3
- package/dist/bmodel/block_config.d.ts.map +1 -1
- package/dist/bmodel/block_config.js +1 -1
- package/dist/bmodel/block_config.js.map +1 -1
- package/dist/bmodel/code.cjs +1 -1
- package/dist/bmodel/code.cjs.map +1 -1
- package/dist/bmodel/code.d.ts +2 -2
- package/dist/bmodel/code.js +1 -1
- package/dist/bmodel/code.js.map +1 -1
- package/dist/bmodel/container.d.ts +5 -5
- package/dist/bmodel/index.d.ts +5 -5
- package/dist/bmodel/normalization.cjs +17 -17
- package/dist/bmodel/normalization.cjs.map +1 -1
- package/dist/bmodel/normalization.d.ts +2 -2
- package/dist/bmodel/normalization.d.ts.map +1 -1
- package/dist/bmodel/normalization.js +17 -17
- package/dist/bmodel/normalization.js.map +1 -1
- package/dist/bmodel/types.d.ts +1 -1
- package/dist/branding.d.ts +2 -2
- package/dist/common_types.d.ts +1 -1
- package/dist/driver_kit.d.ts +1 -1
- package/dist/drivers/ChunkedStreamReader.cjs +13 -12
- package/dist/drivers/ChunkedStreamReader.cjs.map +1 -1
- package/dist/drivers/ChunkedStreamReader.d.ts +2 -2
- package/dist/drivers/ChunkedStreamReader.d.ts.map +1 -1
- package/dist/drivers/ChunkedStreamReader.js +13 -12
- package/dist/drivers/ChunkedStreamReader.js.map +1 -1
- package/dist/drivers/blob.cjs +1 -1
- package/dist/drivers/blob.cjs.map +1 -1
- package/dist/drivers/blob.d.ts +4 -4
- package/dist/drivers/blob.d.ts.map +1 -1
- package/dist/drivers/blob.js +1 -1
- package/dist/drivers/blob.js.map +1 -1
- package/dist/drivers/index.d.ts +8 -8
- package/dist/drivers/log.cjs +1 -1
- package/dist/drivers/log.cjs.map +1 -1
- package/dist/drivers/log.js +1 -1
- package/dist/drivers/log.js.map +1 -1
- package/dist/drivers/ls.cjs +3 -3
- package/dist/drivers/ls.cjs.map +1 -1
- package/dist/drivers/ls.d.ts +6 -6
- package/dist/drivers/ls.d.ts.map +1 -1
- package/dist/drivers/ls.js +3 -3
- package/dist/drivers/ls.js.map +1 -1
- package/dist/drivers/pframe/column_filter.d.ts +1 -1
- package/dist/drivers/pframe/data_info.cjs +119 -110
- package/dist/drivers/pframe/data_info.cjs.map +1 -1
- package/dist/drivers/pframe/data_info.d.ts +10 -10
- package/dist/drivers/pframe/data_info.d.ts.map +1 -1
- package/dist/drivers/pframe/data_info.js +119 -110
- package/dist/drivers/pframe/data_info.js.map +1 -1
- package/dist/drivers/pframe/data_types.cjs +7 -4
- package/dist/drivers/pframe/data_types.cjs.map +1 -1
- package/dist/drivers/pframe/data_types.d.ts +2 -2
- package/dist/drivers/pframe/data_types.d.ts.map +1 -1
- package/dist/drivers/pframe/data_types.js +7 -4
- package/dist/drivers/pframe/data_types.js.map +1 -1
- package/dist/drivers/pframe/driver.d.ts +10 -10
- package/dist/drivers/pframe/driver.d.ts.map +1 -1
- package/dist/drivers/pframe/find_columns.d.ts +2 -2
- package/dist/drivers/pframe/index.d.ts +14 -14
- package/dist/drivers/pframe/linker_columns.cjs +13 -5
- package/dist/drivers/pframe/linker_columns.cjs.map +1 -1
- package/dist/drivers/pframe/linker_columns.d.ts +2 -2
- package/dist/drivers/pframe/linker_columns.d.ts.map +1 -1
- package/dist/drivers/pframe/linker_columns.js +13 -5
- package/dist/drivers/pframe/linker_columns.js.map +1 -1
- package/dist/drivers/pframe/pframe.d.ts +6 -6
- package/dist/drivers/pframe/pframe.d.ts.map +1 -1
- package/dist/drivers/pframe/query/index.d.ts +2 -2
- package/dist/drivers/pframe/query/query_common.d.ts +37 -37
- package/dist/drivers/pframe/query/query_data.d.ts +2 -2
- package/dist/drivers/pframe/query/query_data.d.ts.map +1 -1
- package/dist/drivers/pframe/query/query_spec.d.ts +3 -3
- package/dist/drivers/pframe/query/query_spec.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/anchored.cjs +6 -6
- package/dist/drivers/pframe/spec/anchored.cjs.map +1 -1
- package/dist/drivers/pframe/spec/anchored.d.ts +4 -4
- package/dist/drivers/pframe/spec/anchored.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/anchored.js +6 -6
- package/dist/drivers/pframe/spec/anchored.js.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.cjs +1 -1
- package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.d.ts +1 -1
- package/dist/drivers/pframe/spec/filtered_column.js +1 -1
- package/dist/drivers/pframe/spec/filtered_column.js.map +1 -1
- package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
- package/dist/drivers/pframe/spec/ids.d.ts +5 -5
- package/dist/drivers/pframe/spec/ids.js.map +1 -1
- package/dist/drivers/pframe/spec/index.d.ts +6 -6
- package/dist/drivers/pframe/spec/native_id.cjs.map +1 -1
- package/dist/drivers/pframe/spec/native_id.d.ts +3 -3
- package/dist/drivers/pframe/spec/native_id.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/native_id.js.map +1 -1
- package/dist/drivers/pframe/spec/selectors.cjs +1 -1
- package/dist/drivers/pframe/spec/selectors.cjs.map +1 -1
- package/dist/drivers/pframe/spec/selectors.d.ts +4 -4
- package/dist/drivers/pframe/spec/selectors.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/selectors.js +1 -1
- package/dist/drivers/pframe/spec/selectors.js.map +1 -1
- package/dist/drivers/pframe/spec/spec.cjs +64 -59
- package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
- package/dist/drivers/pframe/spec/spec.d.ts +15 -15
- package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/spec.js +64 -59
- package/dist/drivers/pframe/spec/spec.js.map +1 -1
- package/dist/drivers/pframe/table.d.ts +2 -2
- package/dist/drivers/pframe/table_calculate.cjs +11 -11
- package/dist/drivers/pframe/table_calculate.cjs.map +1 -1
- package/dist/drivers/pframe/table_calculate.d.ts +30 -30
- package/dist/drivers/pframe/table_calculate.d.ts.map +1 -1
- package/dist/drivers/pframe/table_calculate.js +11 -11
- package/dist/drivers/pframe/table_calculate.js.map +1 -1
- package/dist/drivers/pframe/table_common.cjs +4 -4
- package/dist/drivers/pframe/table_common.cjs.map +1 -1
- package/dist/drivers/pframe/table_common.d.ts +6 -6
- package/dist/drivers/pframe/table_common.js +4 -4
- package/dist/drivers/pframe/table_common.js.map +1 -1
- package/dist/drivers/pframe/type_util.d.ts.map +1 -1
- package/dist/drivers/pframe/unique_values.d.ts +4 -4
- package/dist/drivers/urls.cjs +2 -2
- package/dist/drivers/urls.cjs.map +1 -1
- package/dist/drivers/urls.d.ts +1 -1
- package/dist/drivers/urls.js +2 -2
- package/dist/drivers/urls.js.map +1 -1
- package/dist/errors.cjs +12 -12
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +12 -12
- package/dist/errors.js.map +1 -1
- package/dist/flags/block_flags.cjs +2 -2
- package/dist/flags/block_flags.cjs.map +1 -1
- package/dist/flags/block_flags.d.ts.map +1 -1
- package/dist/flags/block_flags.js +2 -2
- package/dist/flags/block_flags.js.map +1 -1
- package/dist/flags/flag_utils.cjs +31 -29
- package/dist/flags/flag_utils.cjs.map +1 -1
- package/dist/flags/flag_utils.d.ts +33 -33
- package/dist/flags/flag_utils.d.ts.map +1 -1
- package/dist/flags/flag_utils.js +31 -29
- package/dist/flags/flag_utils.js.map +1 -1
- package/dist/flags/index.d.ts +3 -3
- package/dist/flags/type_utils.d.ts +1 -1
- package/dist/flags/type_utils.d.ts.map +1 -1
- package/dist/httpAuth.cjs +4 -5
- package/dist/httpAuth.cjs.map +1 -1
- package/dist/httpAuth.d.ts +1 -1
- package/dist/httpAuth.d.ts.map +1 -1
- package/dist/httpAuth.js +4 -5
- package/dist/httpAuth.js.map +1 -1
- package/dist/index.d.ts +19 -19
- package/dist/json.cjs +1 -1
- package/dist/json.cjs.map +1 -1
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +1 -1
- package/dist/json.js.map +1 -1
- package/dist/navigation.cjs +1 -1
- package/dist/navigation.cjs.map +1 -1
- package/dist/navigation.d.ts +3 -3
- package/dist/navigation.js +1 -1
- package/dist/navigation.js.map +1 -1
- package/dist/plid.cjs +4 -4
- package/dist/plid.cjs.map +1 -1
- package/dist/plid.d.ts +1 -1
- package/dist/plid.js +4 -4
- package/dist/plid.js.map +1 -1
- package/dist/pool/entry.d.ts +1 -1
- package/dist/pool/index.d.ts +3 -3
- package/dist/pool/query.cjs +23 -23
- package/dist/pool/query.cjs.map +1 -1
- package/dist/pool/query.d.ts +9 -9
- package/dist/pool/query.d.ts.map +1 -1
- package/dist/pool/query.js +23 -23
- package/dist/pool/query.js.map +1 -1
- package/dist/pool/spec.cjs +9 -9
- package/dist/pool/spec.cjs.map +1 -1
- package/dist/pool/spec.d.ts +4 -4
- package/dist/pool/spec.d.ts.map +1 -1
- package/dist/pool/spec.js +9 -9
- package/dist/pool/spec.js.map +1 -1
- package/dist/ref.cjs +20 -18
- package/dist/ref.cjs.map +1 -1
- package/dist/ref.d.ts +1 -1
- package/dist/ref.d.ts.map +1 -1
- package/dist/ref.js +20 -18
- package/dist/ref.js.map +1 -1
- package/dist/utag.d.ts +1 -1
- package/dist/util.cjs +1 -1
- package/dist/util.cjs.map +1 -1
- package/dist/util.js +1 -1
- package/dist/util.js.map +1 -1
- package/dist/value_or_error.cjs.map +1 -1
- package/dist/value_or_error.d.ts.map +1 -1
- package/dist/value_or_error.js.map +1 -1
- package/package.json +18 -17
- package/src/base32_encode.ts +12 -12
- package/src/base64.ts +12 -8
- package/src/block_state.ts +3 -3
- package/src/bmodel/block_config.ts +12 -6
- package/src/bmodel/code.ts +3 -3
- package/src/bmodel/container.ts +5 -5
- package/src/bmodel/index.ts +5 -5
- package/src/bmodel/normalization.ts +33 -25
- package/src/bmodel/types.ts +1 -1
- package/src/branding.ts +2 -2
- package/src/common_types.ts +1 -1
- package/src/driver_kit.ts +1 -1
- package/src/drivers/ChunkedStreamReader.ts +16 -14
- package/src/drivers/blob.ts +7 -11
- package/src/drivers/index.ts +8 -8
- package/src/drivers/log.ts +3 -3
- package/src/drivers/ls.ts +18 -18
- package/src/drivers/pframe/column_filter.ts +1 -1
- package/src/drivers/pframe/data_info.ts +146 -146
- package/src/drivers/pframe/data_types.ts +56 -36
- package/src/drivers/pframe/driver.ts +20 -36
- package/src/drivers/pframe/find_columns.ts +2 -2
- package/src/drivers/pframe/index.ts +14 -14
- package/src/drivers/pframe/linker_columns.test.ts +280 -273
- package/src/drivers/pframe/linker_columns.ts +65 -39
- package/src/drivers/pframe/pframe.ts +6 -9
- package/src/drivers/pframe/query/index.ts +2 -2
- package/src/drivers/pframe/query/query_common.ts +46 -46
- package/src/drivers/pframe/query/query_data.ts +17 -10
- package/src/drivers/pframe/query/query_spec.ts +18 -10
- package/src/drivers/pframe/spec/anchored.ts +44 -33
- package/src/drivers/pframe/spec/filtered_column.ts +2 -2
- package/src/drivers/pframe/spec/ids.ts +6 -6
- package/src/drivers/pframe/spec/index.ts +6 -6
- package/src/drivers/pframe/spec/native_id.ts +7 -9
- package/src/drivers/pframe/spec/selectors.test.ts +170 -146
- package/src/drivers/pframe/spec/selectors.ts +22 -31
- package/src/drivers/pframe/spec/spec.test.ts +163 -176
- package/src/drivers/pframe/spec/spec.ts +132 -117
- package/src/drivers/pframe/table.ts +2 -2
- package/src/drivers/pframe/table_calculate.ts +44 -50
- package/src/drivers/pframe/table_common.ts +10 -10
- package/src/drivers/pframe/type_util.ts +2 -7
- package/src/drivers/pframe/unique_values.ts +4 -4
- package/src/drivers/urls.ts +3 -3
- package/src/errors.test.ts +20 -20
- package/src/errors.ts +24 -20
- package/src/flags/block_flags.ts +8 -7
- package/src/flags/flag_utils.test.ts +94 -73
- package/src/flags/flag_utils.ts +73 -50
- package/src/flags/index.ts +3 -3
- package/src/flags/type_utils.ts +10 -7
- package/src/httpAuth.ts +5 -6
- package/src/index.ts +19 -19
- package/src/json.ts +28 -17
- package/src/navigation.ts +4 -4
- package/src/plid.ts +6 -6
- package/src/pool/entry.ts +1 -1
- package/src/pool/index.ts +3 -3
- package/src/pool/query.ts +52 -56
- package/src/pool/spec.ts +20 -17
- package/src/ref.ts +25 -19
- package/src/utag.ts +1 -1
- package/src/util.ts +1 -1
- package/src/value_or_error.ts +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_types.cjs","sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from '../../branding';\nimport { ValueType } from './spec/spec';\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> =\n DataType extends typeof ValueType.Int ? PVectorDataInt :\n DataType extends typeof ValueType.Long ? PVectorDataLong :\n DataType extends typeof ValueType.Float ? PVectorDataFloat :\n DataType extends typeof ValueType.Double ? PVectorDataDouble :\n DataType extends typeof ValueType.String ? PVectorDataString :\n DataType extends typeof ValueType.Bytes ? PVectorDataBytes :\n never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions, absent positions have NA values */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /**\n * Encoded bit array marking some elements of this vector as absent,\n * call {@link bitSet} to read the data.\n * */\n readonly absent: Uint8Array;\n};\n/** Table column data in comparison to the data stored in a separate PColumn\n * may have some of the values \"absent\", i.e. as a result of missing record in\n * outer join operation. This information is encoded in {@link absent} field. */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nfunction isValueAbsent(vector: PTableVector, row: number): boolean {\n return isBitSet(vector.absent, row);\n}\n\nfunction isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN((value as PVectorDataFloat[number]));\n case ValueType.Double:\n return Number.isNaN((value as PVectorDataDouble[number]));\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableAbsent = { type: 'absent' } as const;\nexport type PTableAbsent = typeof PTableAbsent;\n\n/** Type guard for absent value */\nexport function isPTableAbsent(value: unknown): value is PTableAbsent {\n return typeof value === 'object' && value !== null && 'type' in value && value.type === 'absent';\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int ? PTableValueInt :\n DataType extends typeof ValueType.Long ? PTableValueLong :\n DataType extends typeof ValueType.Float ? PTableValueFloat :\n DataType extends typeof ValueType.Double ? PTableValueDouble :\n DataType extends typeof ValueType.String ? PTableValueString :\n never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<PTableValueData<DataType>, DataType>;\nexport type PTableValue<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueData<DataType>;\nexport type PTableValueBranded<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<\n Absent = PTableAbsent,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = PTableValue<Absent, never, DataType>;\n\nexport function isPTableValueAxis<Absent, NA, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, NA, DataType>,\n isNA: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<Absent, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, PTableNA, DataType>,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n>(\n value: PTableValue<Absent, NA, DataType>,\n isNA?: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType> {\n return !(isNA ? isNA(value) : isPTableNA(value));\n}\n\nfunction pTableValueImpl<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error('Bytes not yet supported');\n }\n\n if (options && 'dataType' in options && options.dataType !== undefined && options.dataType !== valueType) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueAbsent(column, row)) {\n return options?.absent !== undefined ? options.absent : PTableAbsent;\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n }\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n }\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n }\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n }\n): PTableValue<FillAbsent, PTableNA>;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n }\n): PTableValue<PTableAbsent, FillNA, DataType>;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n }\n): PTableValue<FillAbsent, FillNA, DataType>;\nexport function pTableValue<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, PTableNA, DataType> : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n }\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n }\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n }\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n }\n): PTableValueBranded<FillAbsent, PTableNA>;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n }\n): PTableValueBranded<PTableAbsent, FillNA, DataType>;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n }\n): PTableValueBranded<FillAbsent, FillNA, DataType>;\nexport function pTableValueBranded<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n"],"names":["ValueType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data_types.cjs","sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions, absent positions have NA values */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /**\n * Encoded bit array marking some elements of this vector as absent,\n * call {@link bitSet} to read the data.\n * */\n readonly absent: Uint8Array;\n};\n/** Table column data in comparison to the data stored in a separate PColumn\n * may have some of the values \"absent\", i.e. as a result of missing record in\n * outer join operation. This information is encoded in {@link absent} field. */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nfunction isValueAbsent(vector: PTableVector, row: number): boolean {\n return isBitSet(vector.absent, row);\n}\n\nfunction isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableAbsent = { type: \"absent\" } as const;\nexport type PTableAbsent = typeof PTableAbsent;\n\n/** Type guard for absent value */\nexport function isPTableAbsent(value: unknown): value is PTableAbsent {\n return typeof value === \"object\" && value !== null && \"type\" in value && value.type === \"absent\";\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueData<DataType>;\nexport type PTableValueBranded<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<\n Absent = PTableAbsent,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = PTableValue<Absent, never, DataType>;\n\nexport function isPTableValueAxis<Absent, NA, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, NA, DataType>,\n isNA: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<Absent, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, PTableNA, DataType>,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n>(\n value: PTableValue<Absent, NA, DataType>,\n isNA?: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType> {\n return !(isNA ? isNA(value) : isPTableNA(value));\n}\n\nfunction pTableValueImpl<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueAbsent(column, row)) {\n return options?.absent !== undefined ? options.absent : PTableAbsent;\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n },\n): PTableValue<FillAbsent, PTableNA>;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<PTableAbsent, FillNA, DataType>;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillAbsent, FillNA, DataType>;\nexport function pTableValue<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported\n ? PTableValueBranded<PTableAbsent, PTableNA, DataType>\n : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n },\n): PTableValueBranded<FillAbsent, PTableNA>;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<PTableAbsent, FillNA, DataType>;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillAbsent, FillNA, DataType>;\nexport function pTableValueBranded<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n"],"names":["ValueType"],"mappings":";;;;AAiDA,SAAS,QAAQ,CAAC,SAAqB,EAAE,MAAc,EAAA;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACzC,IAAA,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC;AAC3C;AAEA,SAAS,aAAa,CAAC,MAAoB,EAAE,GAAW,EAAA;IACtD,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;AACrC;AAEA,SAAS,SAAS,CAAC,MAAoB,EAAE,GAAW,EAAA;IAClD,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;;AAGlD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B,QAAQ,SAAS;QACf,KAAKA,cAAS,CAAC,GAAG;AAChB,YAAA,OAAQ,KAAgC,KAAK,WAAW;QAC1D,KAAKA,cAAS,CAAC,IAAI;AACjB,YAAA,OAAQ,KAAiC,KAAK,CAAC,iBAAiB;QAClE,KAAKA,cAAS,CAAC,KAAK;AAClB,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAiC,CAAC;QACxD,KAAKA,cAAS,CAAC,MAAM;AACnB,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAkC,CAAC;QACzD,KAAKA,cAAS,CAAC,MAAM;YACnB,OAAQ,KAAmC,KAAK,IAAI;QACtD,KAAKA,cAAS,CAAC,KAAK;YAClB,OAAQ,KAAkC,KAAK,IAAI;AACrD,QAAA;AACE,YAAA,MAAM,KAAK,CAAC,CAAA,uBAAA,EAA0B,SAAyB,CAAA,CAAE,CAAC;;AAExE;MAEa,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ;AAG5C;AACM,SAAU,cAAc,CAAC,KAAc,EAAA;AAC3C,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;AAClG;AAEO,MAAM,QAAQ,GAAG;AAGxB;AACM,SAAU,UAAU,CAAC,KAAc,EAAA;IACvC,OAAO,KAAK,KAAK,QAAQ;AAC3B;AAgDM,SAAU,iBAAiB,CAK/B,KAAwC,EACxC,IAAgE,EAAA;AAEhE,IAAA,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAClD;AAEA,SAAS,eAAe,CAKtB,MAAoC,EACpC,GAAW,EACX,OAIC,EAAA;AAED,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI;AAC7B,IAAA,IAAI,SAAS,KAAKA,cAAS,CAAC,KAAK,EAAE;AACjC,QAAA,MAAM,KAAK,CAAC,yBAAyB,CAAC;IACxC;AAEA,IAAA,IACE,OAAO;AACP,QAAA,UAAU,IAAI,OAAO;QACrB,OAAO,CAAC,QAAQ,KAAK,SAAS;AAC9B,QAAA,OAAO,CAAC,QAAQ,KAAK,SAAS,EAC9B;QACA,MAAM,KAAK,CAAC,CAAA,wBAAA,EAA2B,OAAO,CAAC,QAAQ,CAAA,MAAA,EAAS,SAAS,CAAA,CAAE,CAAC;IAC9E;AAEA,IAAA,IAAI,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;AAC9B,QAAA,OAAO,OAAO,EAAE,MAAM,KAAK,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,YAAY;IACtE;AAEA,IAAA,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;AAC1B,QAAA,OAAO,OAAO,EAAE,EAAE,KAAK,SAAS,GAAG,OAAO,CAAC,EAAE,GAAG,QAAQ;IAC1D;IAEA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAE;IAC/B,QAAQ,SAAS;QACf,KAAKA,cAAS,CAAC,GAAG;AAChB,YAAA,OAAO,KAA+B;QACxC,KAAKA,cAAS,CAAC,IAAI;AACjB,YAAA,OAAO,MAAM,CAAC,KAAgC,CAAC;QACjD,KAAKA,cAAS,CAAC,KAAK;AAClB,YAAA,OAAO,KAAiC;QAC1C,KAAKA,cAAS,CAAC,MAAM;AACnB,YAAA,OAAO,KAAkC;QAC3C,KAAKA,cAAS,CAAC,MAAM;AACnB,YAAA,OAAQ,KAAoC;;AAElD;SAsDgB,WAAW,CAKzB,MAAoC,EACpC,GAAW,EACX,OAIC,EAAA;IAED,OAAO,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;AAC9C;SAuDgB,kBAAkB,CAKhC,MAAoC,EACpC,GAAW,EACX,OAIC,EAAA;IAED,OAAO,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;AAC9C;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Branded } from
|
|
2
|
-
import { ValueType } from
|
|
1
|
+
import type { Branded } from "../../branding";
|
|
2
|
+
import { ValueType } from "./spec/spec";
|
|
3
3
|
export type PVectorDataInt = Int32Array;
|
|
4
4
|
export type PVectorDataLong = BigInt64Array;
|
|
5
5
|
export type PVectorDataFloat = Float32Array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_types.d.ts","sourceRoot":"","sources":["../../../src/drivers/pframe/data_types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC;AACxC,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC;AAC5C,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC5C,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAC7C,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;AAClD,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC;AACrD,MAAM,MAAM,gBAAgB,CAAC,QAAQ,SAAS,SAAS,
|
|
1
|
+
{"version":3,"file":"data_types.d.ts","sourceRoot":"","sources":["../../../src/drivers/pframe/data_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,10 +31,10 @@ function isValueNA(vector, row) {
|
|
|
31
31
|
throw Error(`unsupported data type: ${valueType}`);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
const PTableAbsent = { type:
|
|
34
|
+
const PTableAbsent = { type: "absent" };
|
|
35
35
|
/** Type guard for absent value */
|
|
36
36
|
function isPTableAbsent(value) {
|
|
37
|
-
return typeof value ===
|
|
37
|
+
return typeof value === "object" && value !== null && "type" in value && value.type === "absent";
|
|
38
38
|
}
|
|
39
39
|
const PTableNA = null;
|
|
40
40
|
/** Type guard for NA value */
|
|
@@ -47,9 +47,12 @@ function isPTableValueAxis(value, isNA) {
|
|
|
47
47
|
function pTableValueImpl(column, row, options) {
|
|
48
48
|
const valueType = column.type;
|
|
49
49
|
if (valueType === ValueType.Bytes) {
|
|
50
|
-
throw Error(
|
|
50
|
+
throw Error("Bytes not yet supported");
|
|
51
51
|
}
|
|
52
|
-
if (options &&
|
|
52
|
+
if (options &&
|
|
53
|
+
"dataType" in options &&
|
|
54
|
+
options.dataType !== undefined &&
|
|
55
|
+
options.dataType !== valueType) {
|
|
53
56
|
throw Error(`expected column of type ${options.dataType}, got ${valueType}`);
|
|
54
57
|
}
|
|
55
58
|
if (isValueAbsent(column, row)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_types.js","sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from '../../branding';\nimport { ValueType } from './spec/spec';\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> =\n DataType extends typeof ValueType.Int ? PVectorDataInt :\n DataType extends typeof ValueType.Long ? PVectorDataLong :\n DataType extends typeof ValueType.Float ? PVectorDataFloat :\n DataType extends typeof ValueType.Double ? PVectorDataDouble :\n DataType extends typeof ValueType.String ? PVectorDataString :\n DataType extends typeof ValueType.Bytes ? PVectorDataBytes :\n never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions, absent positions have NA values */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /**\n * Encoded bit array marking some elements of this vector as absent,\n * call {@link bitSet} to read the data.\n * */\n readonly absent: Uint8Array;\n};\n/** Table column data in comparison to the data stored in a separate PColumn\n * may have some of the values \"absent\", i.e. as a result of missing record in\n * outer join operation. This information is encoded in {@link absent} field. */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nfunction isValueAbsent(vector: PTableVector, row: number): boolean {\n return isBitSet(vector.absent, row);\n}\n\nfunction isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN((value as PVectorDataFloat[number]));\n case ValueType.Double:\n return Number.isNaN((value as PVectorDataDouble[number]));\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableAbsent = { type: 'absent' } as const;\nexport type PTableAbsent = typeof PTableAbsent;\n\n/** Type guard for absent value */\nexport function isPTableAbsent(value: unknown): value is PTableAbsent {\n return typeof value === 'object' && value !== null && 'type' in value && value.type === 'absent';\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int ? PTableValueInt :\n DataType extends typeof ValueType.Long ? PTableValueLong :\n DataType extends typeof ValueType.Float ? PTableValueFloat :\n DataType extends typeof ValueType.Double ? PTableValueDouble :\n DataType extends typeof ValueType.String ? PTableValueString :\n never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<PTableValueData<DataType>, DataType>;\nexport type PTableValue<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueData<DataType>;\nexport type PTableValueBranded<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<\n Absent = PTableAbsent,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = PTableValue<Absent, never, DataType>;\n\nexport function isPTableValueAxis<Absent, NA, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, NA, DataType>,\n isNA: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<Absent, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, PTableNA, DataType>,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n>(\n value: PTableValue<Absent, NA, DataType>,\n isNA?: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType> {\n return !(isNA ? isNA(value) : isPTableNA(value));\n}\n\nfunction pTableValueImpl<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error('Bytes not yet supported');\n }\n\n if (options && 'dataType' in options && options.dataType !== undefined && options.dataType !== valueType) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueAbsent(column, row)) {\n return options?.absent !== undefined ? options.absent : PTableAbsent;\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n }\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n }\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n }\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n }\n): PTableValue<FillAbsent, PTableNA>;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n }\n): PTableValue<PTableAbsent, FillNA, DataType>;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n }\n): PTableValue<FillAbsent, FillNA, DataType>;\nexport function pTableValue<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, PTableNA, DataType> : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n }\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n }\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n }\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n }\n): PTableValueBranded<FillAbsent, PTableNA>;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n }\n): PTableValueBranded<PTableAbsent, FillNA, DataType>;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n }\n): PTableValueBranded<FillAbsent, FillNA, DataType>;\nexport function pTableValueBranded<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data_types.js","sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions, absent positions have NA values */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /**\n * Encoded bit array marking some elements of this vector as absent,\n * call {@link bitSet} to read the data.\n * */\n readonly absent: Uint8Array;\n};\n/** Table column data in comparison to the data stored in a separate PColumn\n * may have some of the values \"absent\", i.e. as a result of missing record in\n * outer join operation. This information is encoded in {@link absent} field. */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nfunction isValueAbsent(vector: PTableVector, row: number): boolean {\n return isBitSet(vector.absent, row);\n}\n\nfunction isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableAbsent = { type: \"absent\" } as const;\nexport type PTableAbsent = typeof PTableAbsent;\n\n/** Type guard for absent value */\nexport function isPTableAbsent(value: unknown): value is PTableAbsent {\n return typeof value === \"object\" && value !== null && \"type\" in value && value.type === \"absent\";\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueData<DataType>;\nexport type PTableValueBranded<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = Absent | NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<\n Absent = PTableAbsent,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = PTableValue<Absent, never, DataType>;\n\nexport function isPTableValueAxis<Absent, NA, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, NA, DataType>,\n isNA: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<Absent, DataType extends ValueTypeSupported>(\n value: PTableValue<Absent, PTableNA, DataType>,\n): value is PTableValueAxis<Absent, DataType>;\nexport function isPTableValueAxis<\n Absent = PTableAbsent,\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n>(\n value: PTableValue<Absent, NA, DataType>,\n isNA?: (value: PTableValue<Absent, NA, DataType>) => value is NA,\n): value is PTableValueAxis<Absent, DataType> {\n return !(isNA ? isNA(value) : isPTableNA(value));\n}\n\nfunction pTableValueImpl<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueAbsent(column, row)) {\n return options?.absent !== undefined ? options.absent : PTableAbsent;\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillAbsent, FillNA, DataType> : never;\nexport function pTableValue<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n },\n): PTableValue<FillAbsent, PTableNA>;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<PTableAbsent, FillNA, DataType>;\nexport function pTableValue<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillAbsent, FillNA, DataType>;\nexport function pTableValue<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported\n ? PTableValueBranded<PTableAbsent, PTableNA, DataType>\n : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillAbsent, FillNA, DataType> : never;\nexport function pTableValueBranded<FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n dataType: DataType;\n },\n): PTableValueBranded<FillAbsent, PTableNA>;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<PTableAbsent, FillNA, DataType>;\nexport function pTableValueBranded<FillNA, FillAbsent, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n absent: FillAbsent;\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillAbsent, FillNA, DataType>;\nexport function pTableValueBranded<\n FillAbsent = PTableAbsent,\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n absent?: FillAbsent;\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import type { Branded } from
|
|
2
|
-
import type { PTableShape, PTableVector, TableRange } from
|
|
3
|
-
import type { FindColumnsRequest, FindColumnsResponse } from
|
|
4
|
-
import type { PObjectId } from
|
|
5
|
-
import type { PColumnIdAndSpec, PColumnSpec } from
|
|
6
|
-
import type { CalculateTableDataRequest, CalculateTableDataResponse } from
|
|
7
|
-
import type { UniqueValuesRequest, UniqueValuesResponse } from
|
|
8
|
-
import type { PTableColumnSpec } from
|
|
1
|
+
import type { Branded } from "../../branding";
|
|
2
|
+
import type { PTableShape, PTableVector, TableRange } from "./data_types";
|
|
3
|
+
import type { FindColumnsRequest, FindColumnsResponse } from "./find_columns";
|
|
4
|
+
import type { PObjectId } from "../../pool";
|
|
5
|
+
import type { PColumnIdAndSpec, PColumnSpec } from "./spec/spec";
|
|
6
|
+
import type { CalculateTableDataRequest, CalculateTableDataResponse } from "./table_calculate";
|
|
7
|
+
import type { UniqueValuesRequest, UniqueValuesResponse } from "./unique_values";
|
|
8
|
+
import type { PTableColumnSpec } from "./table_common";
|
|
9
9
|
/** PFrame handle */
|
|
10
|
-
export type PFrameHandle = Branded<string,
|
|
10
|
+
export type PFrameHandle = Branded<string, "PFrame">;
|
|
11
11
|
/** PFrame handle */
|
|
12
|
-
export type PTableHandle = Branded<string,
|
|
12
|
+
export type PTableHandle = Branded<string, "PTable">;
|
|
13
13
|
/** Allows to access main data layer features of platforma */
|
|
14
14
|
export interface PFrameDriver {
|
|
15
15
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/pframe/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/pframe/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,oBAAoB;AACpB,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAErD,oBAAoB;AACpB,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAErD,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAK3B;;;SAGK;IACL,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE7F,kCAAkC;IAClC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAEtF,2EAA2E;IAC3E,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAE/D,mFAAmF;IACnF,kBAAkB,CAChB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC7C,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEvC,yFAAyF;IACzF,eAAe,CACb,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAMjC,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAErD;;;;;;;;SAQK;IACL,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAE3D;;;;;;;SAOK;IACL,OAAO,CACL,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAC5B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ColumnFilter } from
|
|
2
|
-
import type { AxisId, PColumnIdAndSpec } from
|
|
1
|
+
import type { ColumnFilter } from "./column_filter";
|
|
2
|
+
import type { AxisId, PColumnIdAndSpec } from "./spec/spec";
|
|
3
3
|
/**
|
|
4
4
|
* Request to search among existing columns in the PFrame. Two filtering
|
|
5
5
|
* criteria can be used: (1) column ашдеук, to search for columns with
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
9
|
-
export * from
|
|
10
|
-
export * from
|
|
11
|
-
export * from
|
|
12
|
-
export * from
|
|
13
|
-
export * from
|
|
14
|
-
export * from
|
|
1
|
+
export * from "./column_filter";
|
|
2
|
+
export * from "./data_info";
|
|
3
|
+
export * from "./data_types";
|
|
4
|
+
export * from "./find_columns";
|
|
5
|
+
export * from "./pframe";
|
|
6
|
+
export * from "./spec/spec";
|
|
7
|
+
export * from "./table";
|
|
8
|
+
export * from "./table_calculate";
|
|
9
|
+
export * from "./table_common";
|
|
10
|
+
export * from "./unique_values";
|
|
11
|
+
export * from "./query";
|
|
12
|
+
export * from "./spec";
|
|
13
|
+
export * from "./driver";
|
|
14
|
+
export * from "./linker_columns";
|
|
15
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -124,7 +124,9 @@ class LinkerMap {
|
|
|
124
124
|
.flatMap((targetKey) => {
|
|
125
125
|
const linkers = startKeys
|
|
126
126
|
.map((startKey) => this.searchLinkerPath(startKey, targetKey))
|
|
127
|
-
.reduce((shortestPath, path) => (shortestPath.length && shortestPath.length < path.length) || !path.length
|
|
127
|
+
.reduce((shortestPath, path) => (shortestPath.length && shortestPath.length < path.length) || !path.length
|
|
128
|
+
? shortestPath
|
|
129
|
+
: path, [])
|
|
128
130
|
.map((linker) => [linker.columnId, linker]);
|
|
129
131
|
if (!linkers.length && throwWhenNoLinkExists) {
|
|
130
132
|
throw Error(`Unable to find linker column for ${targetKey}`);
|
|
@@ -134,7 +136,8 @@ class LinkerMap {
|
|
|
134
136
|
}
|
|
135
137
|
/** Get list of axisSpecs from keys of linker columns map */
|
|
136
138
|
getAxesListFromKeysList(keys) {
|
|
137
|
-
return Array.from(new Map(keys
|
|
139
|
+
return Array.from(new Map(keys
|
|
140
|
+
.flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])
|
|
138
141
|
.map((axis) => [json.canonicalizeJson(spec.getAxisId(axis)), axis])).values());
|
|
139
142
|
}
|
|
140
143
|
/** Get axes of target axes that are impossible to be linked to source axes with current linker map */
|
|
@@ -147,7 +150,10 @@ class LinkerMap {
|
|
|
147
150
|
const targetKey = targetKeys[idx];
|
|
148
151
|
return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);
|
|
149
152
|
})
|
|
150
|
-
.flatMap((axis) => spec.getArrayFromAxisTree(spec.getAxesTree(axis)).map((axis) => [
|
|
153
|
+
.flatMap((axis) => spec.getArrayFromAxisTree(spec.getAxesTree(axis)).map((axis) => [
|
|
154
|
+
json.canonicalizeJson(spec.getAxisId(axis)),
|
|
155
|
+
axis,
|
|
156
|
+
]))).values());
|
|
151
157
|
return axes;
|
|
152
158
|
}
|
|
153
159
|
/** Get all axes that can be connected to sourceAxes by linkers */
|
|
@@ -178,8 +184,10 @@ class LinkerMap {
|
|
|
178
184
|
There are no order inside every group. */
|
|
179
185
|
static getAxesGroups(axesSpec) {
|
|
180
186
|
switch (axesSpec.length) {
|
|
181
|
-
case 0:
|
|
182
|
-
|
|
187
|
+
case 0:
|
|
188
|
+
return [];
|
|
189
|
+
case 1:
|
|
190
|
+
return [[axesSpec[0]]];
|
|
183
191
|
}
|
|
184
192
|
const axisKeys = axesSpec.map((spec$1) => json.canonicalizeJson(spec.getAxisId(spec$1)));
|
|
185
193
|
const axisParentsIdxs = axesSpec.map((spec$1) => new Set(spec$1.parentAxesSpec
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linker_columns.cjs","sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import {\n canonicalizeJson,\n parseJson,\n type CanonicalizedJson,\n} from '../../json';\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from './spec/spec';\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter((l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn))) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(right).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyLeft] of leftKeyVariants) {\n for (const [keyRight] of rightKeyVariants) {\n result.get(keyLeft)?.linkWith.set(keyRight, linker);\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n return ids.map((id: LinkerKey) => this.data.get(id)!.linkWith.get(previous[id])!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce((shortestPath, path) => (shortestPath.length && shortestPath.length < path.length) || !path.length ? shortestPath : path,\n [] as PColumnIdAndSpec[])\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys.flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) => getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [canonicalizeJson(getAxisId(axis)), axis])),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxesNormalized(\n sourceAxes: AxisSpecNormalized[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n let startKeys: CanonicalizedJson<AxisId[]>[] = [];\n\n if (matchAxisIdFn) {\n const sourceAxisIdsGrouped: AxisId[][] = sourceAxes.map((axis) => getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {\n const matched = this.keyAxesIds.find(\n (keyIds: AxisId[]) => keyIds.every(\n (linkerKeyAxisId) => sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched));\n }\n }\n } else {\n startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n }\n\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n getReachableByLinkersAxesFromAxes(\n sourceAxes: AxisSpec[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n return this.getReachableByLinkersAxesFromAxesNormalized(getNormalizedAxesList(sourceAxes), matchAxisIdFn);\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0: return [];\n case 1: return [[axesSpec[0]]];\n default: break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) => new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(`malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`);\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n };\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))));\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"names":["parseJson","readAnnotationJson","Annotation","getNormalizedAxesList","getArrayFromAxisTree","getAxesTree","canonicalizeJson","getAxisId","spec"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"linker_columns.cjs","sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import { canonicalizeJson, parseJson, type CanonicalizedJson } from \"../../json\";\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from \"./spec/spec\";\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter(\n (l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn),\n )) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map(\n (axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n },\n );\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(\n right,\n ).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyLeft] of leftKeyVariants) {\n for (const [keyRight] of rightKeyVariants) {\n result.get(keyLeft)?.linkWith.set(keyRight, linker);\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n return ids.map((id: LinkerKey) => this.data.get(id)!.linkWith.get(previous[id])!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce(\n (shortestPath, path) =>\n (shortestPath.length && shortestPath.length < path.length) || !path.length\n ? shortestPath\n : path,\n [] as PColumnIdAndSpec[],\n )\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys\n .flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [\n canonicalizeJson(getAxisId(axis)),\n axis,\n ]),\n ),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxesNormalized(\n sourceAxes: AxisSpecNormalized[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n let startKeys: CanonicalizedJson<AxisId[]>[] = [];\n\n if (matchAxisIdFn) {\n const sourceAxisIdsGrouped: AxisId[][] = sourceAxes.map((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId),\n );\n for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {\n const matched = this.keyAxesIds.find((keyIds: AxisId[]) =>\n keyIds.every((linkerKeyAxisId) =>\n sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched));\n }\n }\n } else {\n startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n }\n\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n getReachableByLinkersAxesFromAxes(\n sourceAxes: AxisSpec[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n return this.getReachableByLinkersAxesFromAxesNormalized(\n getNormalizedAxesList(sourceAxes),\n matchAxisIdFn,\n );\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0:\n return [];\n case 1:\n return [[axesSpec[0]]];\n default:\n break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) =>\n new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(\n `malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`,\n );\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n }\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(\n axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))),\n );\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"names":["parseJson","readAnnotationJson","Annotation","getNormalizedAxesList","getArrayFromAxisTree","getAxesTree","canonicalizeJson","getAxisId","spec"],"mappings":";;;;;MA0Ba,SAAS,CAAA;;AAEX,IAAA,IAAI;AAEb,IAAA,WAAA,CAAY,SAA6B,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAACA,cAAS,CAAC;IAC7C;IAEA,OAAO,WAAW,CAAC,OAA2B,EAAA;AAC5C,QAAA,MAAM,MAAM,GAAuB,IAAI,GAAG,EAAE;QAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,CACjC,CAAC,CAAC,KAAK,CAAC,CAACC,uBAAkB,CAAC,CAAC,CAAC,IAAI,EAAEC,eAAU,CAAC,cAAc,CAAC,CAC/D,EAAE;AACD,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAACC,0BAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEpF,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,gBAAA,SAAS;YACX;AACA,YAAA,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM;;;;;;;;;;AAW5B,YAAA,MAAM,eAAe,GAAwC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAC3F,CAAC,IAAI,KAAI;gBACP,MAAM,IAAI,GAAGC,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAGC,qBAAgB,CAAC,IAAI,CAAC,GAAG,CAACC,cAAS,CAAC,CAAC;AACjD,gBAAA,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;AACpB,YAAA,CAAC,CACF;AACD,YAAA,MAAM,gBAAgB,GAAwC,SAAS,CAAC,YAAY,CAClF,KAAK,CACN,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBACb,MAAM,IAAI,GAAGH,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAGC,qBAAgB,CAAC,IAAI,CAAC,GAAG,CAACC,cAAS,CAAC,CAAC;AACjD,gBAAA,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;AACpB,YAAA,CAAC,CAAC;YAEF,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,eAAe,EAAE;gBAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACxB,oBAAA,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBACjE;YACF;YACA,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,gBAAgB,EAAE;gBAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACzB,oBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBAClE;YACF;AACA,YAAA,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,eAAe,EAAE;AACvC,gBAAA,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE;AACzC,oBAAA,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AACnD,oBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;gBACrD;YACF;QACF;AACA,QAAA,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;IACzB;;AAGA,IAAA,uBAAuB,CAAC,cAA2B,EAAA;AACjD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC;AACzC,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAa;QAC7C,IAAI,QAAQ,GAAG,cAAc;AAC7B,QAAA,OAAO,QAAQ,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,GAAgB,EAAE;AAC5B,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/B,gBAAA,IAAI,CAAC,IAAI;oBAAE;gBACX,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;AAC/C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AACvE,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACvB,wBAAA,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC;oBACpC;gBACF;YACF;YACA,QAAQ,GAAG,IAAI;QACjB;AACA,QAAA,OAAO,gBAAgB;IACzB;;IAGA,gBAAgB,CAAC,QAAmB,EAAE,MAAiB,EAAA;QACrD,MAAM,QAAQ,GAAiC,EAAE;QACjD,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnC,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAa;AACjC,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,gBAAA,IAAI,CAAC,IAAI;oBAAE;gBACX,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;AAC9C,oBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,MAAM;AAC9B,oBAAA,IAAI,WAAW,KAAK,MAAM,EAAE;wBAC1B,MAAM,GAAG,GAAgB,EAAE;wBAC3B,IAAI,OAAO,GAAG,MAAM;AACpB,wBAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE;AACrC,4BAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACjB,4BAAA,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;wBAC7B;AACA,wBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACjB,wBAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAa,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAC;oBACnF;yBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACpC,wBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACrB,wBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;oBAC1B;gBACF;YACF;YACA,OAAO,GAAG,IAAI;QAChB;AACA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,uBAAuB,CAAC,EACtB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,qBAAqB,GAAG,IAAI,GAK7B,EAAA;;QAEC,MAAM,SAAS,GAAgB,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;AAEjF,QAAA,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CACL,SAAS,CAAC,YAAY,CAAC,UAAU;AAC9B,aAAA,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;AACvC,aAAA,OAAO,CAAC,CAAC,SAAS,KAAI;YACrB,MAAM,OAAO,GAAG;AACb,iBAAA,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC;iBAC5D,MAAM,CACL,CAAC,YAAY,EAAE,IAAI,KACjB,CAAC,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC;AAClE,kBAAE;AACF,kBAAE,IAAI,EACV,EAAwB;AAEzB,iBAAA,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAU,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,qBAAqB,EAAE;AAC5C,gBAAA,MAAM,KAAK,CAAC,CAAA,iCAAA,EAAoC,SAAS,CAAA,CAAE,CAAC;YAC9D;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC,CACL,CAAC,MAAM,EAAE,CACX;IACH;;AAGA,IAAA,uBAAuB,CAAC,IAAiB,EAAA;AACvC,QAAA,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CACL;AACG,aAAA,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,IAAI,EAAE;aACtD,GAAG,CAAC,CAAC,IAAI,KAAK,CAACD,qBAAgB,CAACC,cAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAC5D,CAAC,MAAM,EAAE,CACX;IACH;;IAGA,kBAAkB,CAChB,UAAgC,EAChC,UAAgC,EAAA;QAEhC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;;QAEpE,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;QAErE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACrB,IAAI,GAAG,CACL;AACG,aAAA,MAAM,CAAC,CAAC,WAAW,EAAE,GAAG,KAAI;AAC3B,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;YACjC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC;AACzF,QAAA,CAAC;aACA,OAAO,CAAC,CAAC,IAAI,KACZH,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AACpD,YAAAC,qBAAgB,CAACC,cAAS,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI;AACL,SAAA,CAAC,CACH,CACJ,CAAC,MAAM,EAAE,CACX;AACD,QAAA,OAAO,IAAI;IACb;;IAGA,2CAA2C,CACzC,UAAgC,EAChC,aAA2E,EAAA;QAE3E,IAAI,SAAS,GAAkC,EAAE;QAEjD,IAAI,aAAa,EAAE;YACjB,MAAM,oBAAoB,GAAe,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAC3DH,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAACE,cAAS,CAAC,CACvD;AACD,YAAA,KAAK,MAAM,kBAAkB,IAAI,oBAAoB,EAAE;AACrD,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAgB,KACpD,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,KAC3B,kBAAkB,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,CACxF,CACF;gBACD,IAAI,OAAO,EAAE;oBACX,SAAS,CAAC,IAAI,CAACD,qBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC3C;YACF;QACF;aAAO;YACL,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;QAChE;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;QAC7D,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;IACzD;IAEA,iCAAiC,CAC/B,UAAsB,EACtB,aAA2E,EAAA;QAE3E,OAAO,IAAI,CAAC,2CAA2C,CACrDH,0BAAqB,CAAC,UAAU,CAAC,EACjC,aAAa,CACd;IACH;IAEA,OAAO,wBAAwB,CAAC,IAAwB,EAAA;AACtD,QAAA,OAAOG,qBAAgB,CAACF,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAACE,cAAS,CAAC,CAAC;IACjF;AAEA;AAC4C;IAC5C,OAAO,aAAa,CAAC,QAA8B,EAAA;AACjD,QAAA,QAAQ,QAAQ,CAAC,MAAM;AACrB,YAAA,KAAK,CAAC;AACJ,gBAAA,OAAO,EAAE;AACX,YAAA,KAAK,CAAC;gBACJ,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;;AAK1B,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAACC,MAAI,KAAKF,qBAAgB,CAACC,cAAS,CAACC,MAAI,CAAC,CAAC,CAAC;AAC1E,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAClC,CAACA,MAAI,KACH,IAAI,GAAG,CACLA,MAAI,CAAC;AACF,aAAA,GAAG,CAAC,CAACA,MAAI,KAAKF,qBAAgB,CAACC,cAAS,CAACC,MAAI,CAAC,CAAC;AAC/C,aAAA,GAAG,CAAC,CAAC,EAAE,KAAI;YACV,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;AAChC,YAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CACb,CAAA,oBAAA,EAAuB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAE,CACjF;YACH;AACA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACL,CACJ;QAED,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpC,QAAA,MAAM,MAAM,GAAe,EAAE,CAAC;AAE9B,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;AAClC,QAAA,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,QAAA,OAAO,UAAU,KAAK,SAAS,EAAE;AAC/B,YAAA,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC;AACjC,YAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AAExB,YAAA,IAAI,qBAAqB,GAAG,CAAC,UAAU,CAAC;AACxC,YAAA,OAAO,qBAAqB,CAAC,MAAM,EAAE;AACnC,gBAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,gBAAA,KAAK,MAAM,QAAQ,IAAI,qBAAqB,EAAE;AAC5C,oBAAA,MAAM,mBAAmB,GAAG,eAAe,CAAC,QAAQ,CAAC;AACrD,oBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;wBACtB,IAAI,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;4BACzC;wBACF;AACA,wBAAA,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC;AACpC,wBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACzD,4BAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,4BAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,4BAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;wBACnB;AACF,oBAAA,CAAC,CAAC;gBACJ;AACA,gBAAA,qBAAqB,GAAG,CAAC,GAAG,IAAI,CAAC;YACnC;YAEA,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;AAC9B,YAAA,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxD;QAEA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE;;IAGA,OAAO,YAAY,CAAC,IAA0B,EAAA;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAACA,MAAI,KAAKF,qBAAgB,CAACC,cAAS,CAACC,MAAI,CAAC,CAAC,CAAC,CAC7F;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAACF,qBAAgB,CAACC,cAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClF;AACD;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type CanonicalizedJson } from
|
|
2
|
-
import { type AxisSpec, type PColumnIdAndSpec, type AxisSpecNormalized, type AxisId } from
|
|
1
|
+
import { type CanonicalizedJson } from "../../json";
|
|
2
|
+
import { type AxisSpec, type PColumnIdAndSpec, type AxisSpecNormalized, type AxisId } from "./spec/spec";
|
|
3
3
|
type LinkerKey = CanonicalizedJson<AxisId[]>;
|
|
4
4
|
export type CompositeLinkerMap = Map<LinkerKey, {
|
|
5
5
|
keyAxesSpec: AxisSpecNormalized[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linker_columns.d.ts","sourceRoot":"","sources":["../../../src/drivers/pframe/linker_columns.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"linker_columns.d.ts","sourceRoot":"","sources":["../../../src/drivers/pframe/linker_columns.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,MAAM,EAKZ,MAAM,aAAa,CAAC;AAErB,KAAK,SAAS,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7C,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAClC,SAAS,EACT;IACE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;CAC5C,CACF,CAAC;AAEF,UAAU,WAAW;IACnB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AACD,qBAAa,SAAU,YAAW,WAAW;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBAEtB,SAAS,EAAE,kBAAkB;IAIzC,IAAI,IAAI;;OAEP;IAED,IAAI,UAAU,eAEb;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE;IAwD9C,4EAA4E;IAC5E,uBAAuB,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC;IAqBpE,8EAA8E;IAC9E,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,gBAAgB,EAAE;IA+B5E,uBAAuB,CAAC,EACtB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,qBAA4B,GAC7B,EAAE;QACD,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAC3B,EAAE,EAAE,kBAAkB,EAAE,CAAC;QACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;KACjC,GAAG,gBAAgB,EAAE;IA4BtB,6DAA6D;IAC7D,uBAAuB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,kBAAkB,EAAE;IAUhE,sGAAsG;IACtG,kBAAkB,CAChB,UAAU,EAAE,kBAAkB,EAAE,EAChC,UAAU,EAAE,kBAAkB,EAAE,GAC/B,kBAAkB,EAAE;IAuBvB,kEAAkE;IAClE,2CAA2C,CACzC,UAAU,EAAE,kBAAkB,EAAE,EAChC,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,GAC1E,kBAAkB,EAAE;IAyBvB,iCAAiC,CAC/B,UAAU,EAAE,QAAQ,EAAE,EACtB,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,GAC1E,kBAAkB,EAAE;IAOvB,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,SAAS;IAIpE;gDAC4C;IAC5C,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE,EAAE;IAgE5E,0DAA0D;IAC1D,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE;CAMtE"}
|
|
@@ -122,7 +122,9 @@ class LinkerMap {
|
|
|
122
122
|
.flatMap((targetKey) => {
|
|
123
123
|
const linkers = startKeys
|
|
124
124
|
.map((startKey) => this.searchLinkerPath(startKey, targetKey))
|
|
125
|
-
.reduce((shortestPath, path) => (shortestPath.length && shortestPath.length < path.length) || !path.length
|
|
125
|
+
.reduce((shortestPath, path) => (shortestPath.length && shortestPath.length < path.length) || !path.length
|
|
126
|
+
? shortestPath
|
|
127
|
+
: path, [])
|
|
126
128
|
.map((linker) => [linker.columnId, linker]);
|
|
127
129
|
if (!linkers.length && throwWhenNoLinkExists) {
|
|
128
130
|
throw Error(`Unable to find linker column for ${targetKey}`);
|
|
@@ -132,7 +134,8 @@ class LinkerMap {
|
|
|
132
134
|
}
|
|
133
135
|
/** Get list of axisSpecs from keys of linker columns map */
|
|
134
136
|
getAxesListFromKeysList(keys) {
|
|
135
|
-
return Array.from(new Map(keys
|
|
137
|
+
return Array.from(new Map(keys
|
|
138
|
+
.flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])
|
|
136
139
|
.map((axis) => [canonicalizeJson(getAxisId(axis)), axis])).values());
|
|
137
140
|
}
|
|
138
141
|
/** Get axes of target axes that are impossible to be linked to source axes with current linker map */
|
|
@@ -145,7 +148,10 @@ class LinkerMap {
|
|
|
145
148
|
const targetKey = targetKeys[idx];
|
|
146
149
|
return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);
|
|
147
150
|
})
|
|
148
|
-
.flatMap((axis) => getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [
|
|
151
|
+
.flatMap((axis) => getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [
|
|
152
|
+
canonicalizeJson(getAxisId(axis)),
|
|
153
|
+
axis,
|
|
154
|
+
]))).values());
|
|
149
155
|
return axes;
|
|
150
156
|
}
|
|
151
157
|
/** Get all axes that can be connected to sourceAxes by linkers */
|
|
@@ -176,8 +182,10 @@ class LinkerMap {
|
|
|
176
182
|
There are no order inside every group. */
|
|
177
183
|
static getAxesGroups(axesSpec) {
|
|
178
184
|
switch (axesSpec.length) {
|
|
179
|
-
case 0:
|
|
180
|
-
|
|
185
|
+
case 0:
|
|
186
|
+
return [];
|
|
187
|
+
case 1:
|
|
188
|
+
return [[axesSpec[0]]];
|
|
181
189
|
}
|
|
182
190
|
const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));
|
|
183
191
|
const axisParentsIdxs = axesSpec.map((spec) => new Set(spec.parentAxesSpec
|