From 0a72384e5d6b8cbed749477b6ae03667c9ec88d0 Mon Sep 17 00:00:00 2001 From: WenheLI Date: Tue, 23 Jul 2019 22:51:29 +0800 Subject: [PATCH 1/9] Add inital support --- .tslint/noImportsFromDistRule.js | 44 ++++++++++++++++++++++++++++++++ .tslint/noImportsFromDistRule.ts | 30 ++++++++++++++++++++++ tslint.json | 2 ++ 3 files changed, 76 insertions(+) create mode 100644 .tslint/noImportsFromDistRule.js create mode 100644 .tslint/noImportsFromDistRule.ts diff --git a/.tslint/noImportsFromDistRule.js b/.tslint/noImportsFromDistRule.js new file mode 100644 index 00000000..11c53758 --- /dev/null +++ b/.tslint/noImportsFromDistRule.js @@ -0,0 +1,44 @@ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +exports.__esModule = true; +var Lint = require("tslint"); +var Rule = /** @class */ (function (_super) { + __extends(Rule, _super); + function Rule() { + return _super !== null && _super.apply(this, arguments) || this; + } + Rule.prototype.apply = function (sourceFile) { + return this.applyWithWalker(new NoImportsFromDistWalker(sourceFile, this.getOptions())); + }; + Rule.FAILURE_STRING = "importing from dist/ is prohibited. Please use public API"; + return Rule; +}(Lint.Rules.AbstractRule)); +exports.Rule = Rule; +var NoImportsFromDistWalker = /** @class */ (function (_super) { + __extends(NoImportsFromDistWalker, _super); + function NoImportsFromDistWalker() { + return _super !== null && _super.apply(this, arguments) || this; + } + NoImportsFromDistWalker.prototype.visitImportDeclaration = function (node) { + var importFrom = node.moduleSpecifier.getText(); + var reg = /@tensorflow\/tfjs[-a-z]*\/dist/; + if (importFrom.match(reg)) { + var fix = new Lint.Replacement(node.moduleSpecifier.getStart(), node.moduleSpecifier.getWidth(), importFrom.replace(/\/dist[\/]*/, '')); + this.addFailure(this.createFailure(node.moduleSpecifier.getStart(), node.moduleSpecifier.getWidth(), Rule.FAILURE_STRING, fix)); + } + _super.prototype.visitImportDeclaration.call(this, node); + }; + return NoImportsFromDistWalker; +}(Lint.RuleWalker)); diff --git a/.tslint/noImportsFromDistRule.ts b/.tslint/noImportsFromDistRule.ts new file mode 100644 index 00000000..583ad119 --- /dev/null +++ b/.tslint/noImportsFromDistRule.ts @@ -0,0 +1,30 @@ +import * as Lint from "tslint"; +import * as ts from "typescript"; + +export class Rule extends Lint.Rules.AbstractRule { + public static FAILURE_STRING = "importing from dist/ is prohibited. Please use public API"; + + public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { + return this.applyWithWalker( + new NoImportsFromDistWalker(sourceFile, this.getOptions())); + } +} + +class NoImportsFromDistWalker extends Lint.RuleWalker { + public visitImportDeclaration(node: ts.ImportDeclaration) { + const importFrom = node.moduleSpecifier.getText(); + const reg = /@tensorflow\/tfjs[-a-z]*\/dist/; + if (importFrom.match(reg)) { + const fix = new Lint.Replacement(node.moduleSpecifier.getStart(), + node.moduleSpecifier.getWidth(), + importFrom.replace(/\/dist[\/]*/, '')); + + this.addFailure(this.createFailure(node.moduleSpecifier.getStart(), + node.moduleSpecifier.getWidth(), + Rule.FAILURE_STRING, fix)); + } + + super.visitImportDeclaration(node); + } + +} diff --git a/tslint.json b/tslint.json index 0f38101d..fce97dd6 100644 --- a/tslint.json +++ b/tslint.json @@ -1,4 +1,5 @@ { + "rulesDirectory": ".tslint", "rules": { "array-type": [true, "array-simple"], "arrow-return-shorthand": true, @@ -36,6 +37,7 @@ "no-reference": true, "no-require-imports": true, "no-string-throw": true, + "no-imports-from-dist": true, "no-unused-expression": true, "no-unused-variable": true, "no-var-keyword": true, From dcbc97b72e62b9a36d7c92f61ffdaa6c67ebd74b Mon Sep 17 00:00:00 2001 From: WenheLI Date: Tue, 23 Jul 2019 23:57:50 +0800 Subject: [PATCH 2/9] remove dist --- src/io/file_system_test.ts | 4 +++- src/nodejs_kernel_backend.ts | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/io/file_system_test.ts b/src/io/file_system_test.ts index 67fda2d7..43673ef0 100644 --- a/src/io/file_system_test.ts +++ b/src/io/file_system_test.ts @@ -16,7 +16,7 @@ */ import * as tfc from '@tensorflow/tfjs-core'; -import {expectArraysClose} from '@tensorflow/tfjs-core/dist/test_util'; +import {test_util} from '@tensorflow/tfjs-core/'; import * as fs from 'fs'; import * as path from 'path'; import * as rimraf from 'rimraf'; @@ -25,6 +25,8 @@ import {promisify} from 'util'; import * as tfn from '../index'; import {NodeFileSystem, nodeFileSystemRouter} from './file_system'; +const {expectArraysClose} = test_util; + describe('File system IOHandler', () => { const mkdtemp = promisify(fs.mkdtemp); const readFile = promisify(fs.readFile); diff --git a/src/nodejs_kernel_backend.ts b/src/nodejs_kernel_backend.ts index 610ed29c..230a9b6f 100644 --- a/src/nodejs_kernel_backend.ts +++ b/src/nodejs_kernel_backend.ts @@ -17,8 +17,9 @@ // tslint:disable-next-line:max-line-length import {BackendTimingInfo, DataMover, DataType, fill, KernelBackend, ones, Rank, rsqrt, Scalar, scalar, ShapeMap, Tensor, Tensor1D, tensor1d, Tensor2D, tensor2d, Tensor3D, tensor3d, Tensor4D, tidy, util} from '@tensorflow/tfjs-core'; +// tslint:disable-next-line:no-imports-from-dist import {EPSILON_FLOAT32} from '@tensorflow/tfjs-core/dist/backends/backend'; -import {Conv2DInfo, Conv3DInfo} from '@tensorflow/tfjs-core/dist/ops/conv_util'; +import {Conv2DInfo, Conv3DInfo} from '@tensorflow/tfjs-core'; import {Activation} from '@tensorflow/tfjs-core/dist/ops/fused_util'; import {Tensor5D} from '@tensorflow/tfjs-core/dist/tensor'; import {BackendValues, upcastType} from '@tensorflow/tfjs-core/dist/types'; From c970c844a0244d6a7d8d8b4c9540df1182ca6e06 Mon Sep 17 00:00:00 2001 From: WenheLI Date: Wed, 24 Jul 2019 16:17:51 +0800 Subject: [PATCH 3/9] remove dist --- src/nodejs_kernel_backend.ts | 9 ++++----- src/nodejs_kernel_backend_test.ts | 6 +++--- src/run_tests.ts | 1 + src/tfjs_binding.ts | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/nodejs_kernel_backend.ts b/src/nodejs_kernel_backend.ts index 230a9b6f..c2218556 100644 --- a/src/nodejs_kernel_backend.ts +++ b/src/nodejs_kernel_backend.ts @@ -17,12 +17,11 @@ // tslint:disable-next-line:max-line-length import {BackendTimingInfo, DataMover, DataType, fill, KernelBackend, ones, Rank, rsqrt, Scalar, scalar, ShapeMap, Tensor, Tensor1D, tensor1d, Tensor2D, tensor2d, Tensor3D, tensor3d, Tensor4D, tidy, util} from '@tensorflow/tfjs-core'; -// tslint:disable-next-line:no-imports-from-dist -import {EPSILON_FLOAT32} from '@tensorflow/tfjs-core/dist/backends/backend'; +import {EPSILON_FLOAT32} from '@tensorflow/tfjs-core'; import {Conv2DInfo, Conv3DInfo} from '@tensorflow/tfjs-core'; -import {Activation} from '@tensorflow/tfjs-core/dist/ops/fused_util'; -import {Tensor5D} from '@tensorflow/tfjs-core/dist/tensor'; -import {BackendValues, upcastType} from '@tensorflow/tfjs-core/dist/types'; +import {Activation} from '@tensorflow/tfjs-core'; +import {Tensor5D} from '@tensorflow/tfjs-core'; +import {BackendValues, upcastType} from '@tensorflow/tfjs-core'; import {isNullOrUndefined} from 'util'; import {Int64Scalar} from './int64_tensors'; // tslint:disable-next-line:max-line-length diff --git a/src/nodejs_kernel_backend_test.ts b/src/nodejs_kernel_backend_test.ts index aff316b3..76d220aa 100644 --- a/src/nodejs_kernel_backend_test.ts +++ b/src/nodejs_kernel_backend_test.ts @@ -16,11 +16,11 @@ */ import * as tf from '@tensorflow/tfjs-core'; -import {Tensor5D} from '@tensorflow/tfjs-core/dist/tensor'; +import {Tensor5D} from '@tensorflow/tfjs-core'; // tslint:disable-next-line:max-line-length -import {expectArraysClose} from '@tensorflow/tfjs-core/dist/test_util'; +import {test_util} from '@tensorflow/tfjs-core'; import {NodeJSKernelBackend} from './nodejs_kernel_backend'; - +const {expectArraysClose} = test_util; describe('delayed upload', () => { it('should handle data before op execution', async () => { const t = tf.tensor1d([1, 2, 3]); diff --git a/src/run_tests.ts b/src/run_tests.ts index a8f4b28d..c0e2ca36 100644 --- a/src/run_tests.ts +++ b/src/run_tests.ts @@ -17,6 +17,7 @@ // We import index.ts so that the Node backend gets registered. import './index'; +// tslint:disable-next-line:no-imports-from-dist import * as jasmine_util from '@tensorflow/tfjs-core/dist/jasmine_util'; Error.stackTraceLimit = Infinity; diff --git a/src/tfjs_binding.ts b/src/tfjs_binding.ts index ddcede2a..0b7ccd15 100644 --- a/src/tfjs_binding.ts +++ b/src/tfjs_binding.ts @@ -15,7 +15,7 @@ * ============================================================================= */ -import {BackendValues} from '@tensorflow/tfjs-core/dist/types'; +import {BackendValues} from '@tensorflow/tfjs-core'; export declare class TensorMetadata { id: number; From 4791a15feb8a4eb35ca15f21472ae222592aa822 Mon Sep 17 00:00:00 2001 From: WenheLI Date: Thu, 25 Jul 2019 21:42:47 +0800 Subject: [PATCH 4/9] min0or changes --- src/io/file_system_test.ts | 8 +++----- src/nodejs_kernel_backend_test.ts | 7 +++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/io/file_system_test.ts b/src/io/file_system_test.ts index 43673ef0..1fd0332e 100644 --- a/src/io/file_system_test.ts +++ b/src/io/file_system_test.ts @@ -25,8 +25,6 @@ import {promisify} from 'util'; import * as tfn from '../index'; import {NodeFileSystem, nodeFileSystemRouter} from './file_system'; -const {expectArraysClose} = test_util; - describe('File system IOHandler', () => { const mkdtemp = promisify(fs.mkdtemp); const readFile = promisify(fs.readFile); @@ -225,7 +223,7 @@ describe('File system IOHandler', () => { dtype: 'float32', } ]); - expectArraysClose( + test_util.expectArraysClose( new Float32Array(modelArtifacts.weightData), new Float32Array([-1.1, -3.3, -3.3, -7.7])); done(); @@ -348,7 +346,7 @@ describe('File system IOHandler', () => { new NodeFileSystem([`${modelPath}`, `${modelManifestJSONPath}`]); handler.load() .then(modelArtifacts => { - expectArraysClose( + test_util.expectArraysClose( new Uint8Array(modelArtifacts.modelTopology as ArrayBuffer), new Uint8Array(modelData)); expect(modelArtifacts.weightSpecs).toEqual([ @@ -363,7 +361,7 @@ describe('File system IOHandler', () => { dtype: 'float32', } ]); - expectArraysClose( + test_util.expectArraysClose( new Float32Array(modelArtifacts.weightData), new Float32Array([-1.1, -3.3, -3.3, -7.7])); done(); diff --git a/src/nodejs_kernel_backend_test.ts b/src/nodejs_kernel_backend_test.ts index 76d220aa..357af140 100644 --- a/src/nodejs_kernel_backend_test.ts +++ b/src/nodejs_kernel_backend_test.ts @@ -17,17 +17,16 @@ import * as tf from '@tensorflow/tfjs-core'; import {Tensor5D} from '@tensorflow/tfjs-core'; -// tslint:disable-next-line:max-line-length import {test_util} from '@tensorflow/tfjs-core'; import {NodeJSKernelBackend} from './nodejs_kernel_backend'; -const {expectArraysClose} = test_util; + describe('delayed upload', () => { it('should handle data before op execution', async () => { const t = tf.tensor1d([1, 2, 3]); - expectArraysClose(await t.data(), [1, 2, 3]); + test_util.expectArraysClose(await t.data(), [1, 2, 3]); const r = t.add(tf.tensor1d([4, 5, 6])); - expectArraysClose(await r.data(), [5, 7, 9]); + test_util.expectArraysClose(await r.data(), [5, 7, 9]); }); it('Should not cache tensors in the tensor map for device support. ', () => { From 39c4b4ace808caf35deacc427a60883518083725 Mon Sep 17 00:00:00 2001 From: WenheLI Date: Thu, 25 Jul 2019 23:21:23 +0800 Subject: [PATCH 5/9] Add con2dinfo --- src/nodejs_kernel_backend.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/nodejs_kernel_backend.ts b/src/nodejs_kernel_backend.ts index c2218556..510de53b 100644 --- a/src/nodejs_kernel_backend.ts +++ b/src/nodejs_kernel_backend.ts @@ -18,7 +18,7 @@ // tslint:disable-next-line:max-line-length import {BackendTimingInfo, DataMover, DataType, fill, KernelBackend, ones, Rank, rsqrt, Scalar, scalar, ShapeMap, Tensor, Tensor1D, tensor1d, Tensor2D, tensor2d, Tensor3D, tensor3d, Tensor4D, tidy, util} from '@tensorflow/tfjs-core'; import {EPSILON_FLOAT32} from '@tensorflow/tfjs-core'; -import {Conv2DInfo, Conv3DInfo} from '@tensorflow/tfjs-core'; +import {backend_util} from '@tensorflow/tfjs-core'; import {Activation} from '@tensorflow/tfjs-core'; import {Tensor5D} from '@tensorflow/tfjs-core'; import {BackendValues, upcastType} from '@tensorflow/tfjs-core'; @@ -28,6 +28,8 @@ import {Int64Scalar} from './int64_tensors'; import {createTensorsTypeOpAttr, createTypeOpAttr, getTFDType} from './ops/op_utils'; import {TensorMetadata, TFEOpAttr, TFJSBinding} from './tfjs_binding'; +type Conv2DInfo = backend_util.Conv2DInfo; + type TensorInfo = { shape: number[], dtype: number, @@ -785,6 +787,7 @@ export class NodeJSKernelBackend extends KernelBackend { return this.select(nans, x, stepNoNans) as T; } + // tslint:disable-next-line:max-line-length conv2d(x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D { if (convInfo.padInfo.type !== 'VALID' && convInfo.padInfo.type !== 'SAME') { throw new Error( @@ -810,6 +813,7 @@ export class NodeJSKernelBackend extends KernelBackend { return this.executeSingleOutput('Conv2D', opAttrs, [x, filter]) as Tensor4D; } + // tslint:disable-next-line:max-line-length conv2dDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D { if (convInfo.padInfo.type !== 'VALID' && convInfo.padInfo.type !== 'SAME') { @@ -838,6 +842,7 @@ export class NodeJSKernelBackend extends KernelBackend { Tensor4D; } + // tslint:disable-next-line:max-line-length conv2dDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: Conv2DInfo): Tensor4D { if (convInfo.padInfo.type !== 'VALID' && convInfo.padInfo.type !== 'SAME') { throw new Error( @@ -865,6 +870,7 @@ export class NodeJSKernelBackend extends KernelBackend { Tensor4D; } + // tslint:disable-next-line:max-line-length depthwiseConv2DDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D { const strides = [1, convInfo.strideHeight, convInfo.strideWidth, 1]; From b3b09fc2e0da5a23a0c5c161d50e00b4c88ec1ac Mon Sep 17 00:00:00 2001 From: WenheLI Date: Thu, 25 Jul 2019 23:24:30 +0800 Subject: [PATCH 6/9] remove tslint ignore --- src/nodejs_kernel_backend.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/nodejs_kernel_backend.ts b/src/nodejs_kernel_backend.ts index 510de53b..4f11c6a3 100644 --- a/src/nodejs_kernel_backend.ts +++ b/src/nodejs_kernel_backend.ts @@ -787,7 +787,6 @@ export class NodeJSKernelBackend extends KernelBackend { return this.select(nans, x, stepNoNans) as T; } - // tslint:disable-next-line:max-line-length conv2d(x: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D { if (convInfo.padInfo.type !== 'VALID' && convInfo.padInfo.type !== 'SAME') { throw new Error( @@ -813,7 +812,6 @@ export class NodeJSKernelBackend extends KernelBackend { return this.executeSingleOutput('Conv2D', opAttrs, [x, filter]) as Tensor4D; } - // tslint:disable-next-line:max-line-length conv2dDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D { if (convInfo.padInfo.type !== 'VALID' && convInfo.padInfo.type !== 'SAME') { @@ -842,7 +840,6 @@ export class NodeJSKernelBackend extends KernelBackend { Tensor4D; } - // tslint:disable-next-line:max-line-length conv2dDerFilter(x: Tensor4D, dy: Tensor4D, convInfo: Conv2DInfo): Tensor4D { if (convInfo.padInfo.type !== 'VALID' && convInfo.padInfo.type !== 'SAME') { throw new Error( @@ -870,7 +867,6 @@ export class NodeJSKernelBackend extends KernelBackend { Tensor4D; } - // tslint:disable-next-line:max-line-length depthwiseConv2DDerInput(dy: Tensor4D, filter: Tensor4D, convInfo: Conv2DInfo): Tensor4D { const strides = [1, convInfo.strideHeight, convInfo.strideWidth, 1]; From 1ac759f16d824bd85960ecb7c0c43267c59e8320 Mon Sep 17 00:00:00 2001 From: WenheLI Date: Thu, 25 Jul 2019 23:37:44 +0800 Subject: [PATCH 7/9] fix some import from backend_util --- src/nodejs_kernel_backend.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/nodejs_kernel_backend.ts b/src/nodejs_kernel_backend.ts index 4f11c6a3..5bcd6024 100644 --- a/src/nodejs_kernel_backend.ts +++ b/src/nodejs_kernel_backend.ts @@ -17,11 +17,9 @@ // tslint:disable-next-line:max-line-length import {BackendTimingInfo, DataMover, DataType, fill, KernelBackend, ones, Rank, rsqrt, Scalar, scalar, ShapeMap, Tensor, Tensor1D, tensor1d, Tensor2D, tensor2d, Tensor3D, tensor3d, Tensor4D, tidy, util} from '@tensorflow/tfjs-core'; -import {EPSILON_FLOAT32} from '@tensorflow/tfjs-core'; import {backend_util} from '@tensorflow/tfjs-core'; -import {Activation} from '@tensorflow/tfjs-core'; import {Tensor5D} from '@tensorflow/tfjs-core'; -import {BackendValues, upcastType} from '@tensorflow/tfjs-core'; +import {BackendValues} from '@tensorflow/tfjs-core'; import {isNullOrUndefined} from 'util'; import {Int64Scalar} from './int64_tensors'; // tslint:disable-next-line:max-line-length @@ -39,6 +37,8 @@ type TensorInfo = { interface DataId {} +const {upcastType} = backend_util; + export class NodeJSKernelBackend extends KernelBackend { binding: TFJSBinding; isGPUPackage: boolean; @@ -165,7 +165,7 @@ export class NodeJSKernelBackend extends KernelBackend { } epsilon(): number { - return EPSILON_FLOAT32; + return backend_util.EPSILON_FLOAT32; } /** @@ -348,7 +348,7 @@ export class NodeJSKernelBackend extends KernelBackend { fusedBatchMatMul( a: Tensor3D, b: Tensor3D, transposeA: boolean, transposeB: boolean, - bias?: Tensor, activation?: Activation): Tensor3D { + bias?: Tensor, activation?: backend_util.Activation): Tensor3D { // Core TensorFlow does not have a fused BatchMatMul op. Combine calls to // achieve the same results: let result = this.batchMatMul(a, b, transposeA, transposeB); From 9254cc253610dbdfa8d9088e74b41c500454654e Mon Sep 17 00:00:00 2001 From: WenheLI Date: Fri, 26 Jul 2019 20:15:29 +0800 Subject: [PATCH 8/9] Add epsilon --- src/nodejs_kernel_backend.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/nodejs_kernel_backend.ts b/src/nodejs_kernel_backend.ts index 5bcd6024..399c18e2 100644 --- a/src/nodejs_kernel_backend.ts +++ b/src/nodejs_kernel_backend.ts @@ -38,6 +38,7 @@ type TensorInfo = { interface DataId {} const {upcastType} = backend_util; +const EPSILON_FLOAT32 = 1e-7; export class NodeJSKernelBackend extends KernelBackend { binding: TFJSBinding; @@ -165,7 +166,7 @@ export class NodeJSKernelBackend extends KernelBackend { } epsilon(): number { - return backend_util.EPSILON_FLOAT32; + return EPSILON_FLOAT32; } /** From 2b425602066ee39471dc31001b148b671984dcb7 Mon Sep 17 00:00:00 2001 From: WenheLI Date: Thu, 1 Aug 2019 21:43:45 +0800 Subject: [PATCH 9/9] add backendvalues --- src/nodejs_kernel_backend.ts | 2 +- src/tfjs_binding.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/nodejs_kernel_backend.ts b/src/nodejs_kernel_backend.ts index 399c18e2..ad950a80 100644 --- a/src/nodejs_kernel_backend.ts +++ b/src/nodejs_kernel_backend.ts @@ -19,7 +19,6 @@ import {BackendTimingInfo, DataMover, DataType, fill, KernelBackend, ones, Rank, rsqrt, Scalar, scalar, ShapeMap, Tensor, Tensor1D, tensor1d, Tensor2D, tensor2d, Tensor3D, tensor3d, Tensor4D, tidy, util} from '@tensorflow/tfjs-core'; import {backend_util} from '@tensorflow/tfjs-core'; import {Tensor5D} from '@tensorflow/tfjs-core'; -import {BackendValues} from '@tensorflow/tfjs-core'; import {isNullOrUndefined} from 'util'; import {Int64Scalar} from './int64_tensors'; // tslint:disable-next-line:max-line-length @@ -27,6 +26,7 @@ import {createTensorsTypeOpAttr, createTypeOpAttr, getTFDType} from './ops/op_ut import {TensorMetadata, TFEOpAttr, TFJSBinding} from './tfjs_binding'; type Conv2DInfo = backend_util.Conv2DInfo; +type BackendValues = backend_util.BackendValues; type TensorInfo = { shape: number[], diff --git a/src/tfjs_binding.ts b/src/tfjs_binding.ts index 0b7ccd15..67b0994e 100644 --- a/src/tfjs_binding.ts +++ b/src/tfjs_binding.ts @@ -15,7 +15,8 @@ * ============================================================================= */ -import {BackendValues} from '@tensorflow/tfjs-core'; +import {backend_util} from '@tensorflow/tfjs-core'; +type BackendValues = backend_util.BackendValues; export declare class TensorMetadata { id: number;