@tensorflow/tfjs-node
Version:
This repository provides native TensorFlow execution in backend JavaScript applications under the Node.js runtime, accelerated by the TensorFlow C binary under the hood. It provides the same API as [TensorFlow.js](https://js.tensorflow.org/api/latest/).
80 lines (73 loc) • 2.83 kB
JavaScript
/**
* @license
* Copyright 2019 Google LLC. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =============================================================================
*/
/**
* Ensures that the GPU and CPU packages align.
*/
const fs = require('fs');
const cpuPackage = require('../../tfjs-node/package.json');
const gpuPackage = require('../../tfjs-node-gpu/package.json');
process.on('unhandledRejection', e => {
throw e;
});
/**
* Ensure package.json aligns.
*/
const FIELDS_TO_IGNORE = [
'name', 'scripts/install', 'scripts/test', 'scripts/prepare', 'scripts/prep',
'scripts/upload-windows-addon', 'scripts/build-npm',
'scripts/prep-gpu-windows', 'binary/package_name', 'repository/directory',
];
const cpuPackageKeys = Object.keys(cpuPackage);
const gpuPackageKeys = Object.keys(gpuPackage);
cpuPackageKeys.forEach((key, i) => {
if (gpuPackageKeys[i] != cpuPackageKeys[i]) {
throw new Error(
`CPU and GPU package have different keys: ` +
`${gpuPackageKeys[i]} and ${cpuPackageKeys[i]}.`);
}
});
if (cpuPackageKeys.length != gpuPackageKeys.length) {
throw new Error(`CPU and GPU package.jsons have different top-level fields.`);
}
// Ensure the cpu and gpu packages have the same keys.
cpuPackageKeys.forEach(key => {
const cpuPackageValue = cpuPackage[key];
const gpuPackageValue = gpuPackage[key];
if (typeof cpuPackageValue !== 'object') {
if (cpuPackageValue != gpuPackageValue &&
FIELDS_TO_IGNORE.indexOf(key) === -1) {
throw new Error(
`CPU package key '${key}' with value ` +
`${JSON.stringify(cpuPackageValue)} does not match GPU value ` +
`${JSON.stringify(gpuPackageValue)}.`);
}
} else {
const cpuFieldKeys = Object.keys(cpuPackageValue);
cpuFieldKeys.forEach(fieldKey => {
const cpuFieldValue = '' + cpuPackageValue[fieldKey];
const gpuFieldValue = '' + gpuPackageValue[fieldKey];
const deepKey = `${key}/${fieldKey}`;
if (cpuFieldValue !== gpuFieldValue &&
FIELDS_TO_IGNORE.indexOf(deepKey) === -1) {
throw new Error(
`CPU package key '${deepKey}' with value ` +
`${JSON.stringify(cpuFieldValue)} does not match GPU value ` +
`${JSON.stringify(gpuFieldValue)}.`);
}
});
}
});