UNPKG

differential-privacy

Version:

Implements Global Differential Privacy for almost any numeric function

128 lines 4.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.newKeyValueView = exports.newArrayView = void 0; function newArrayView(srcArray) { var lazyArray = { forEach: function (callback) { srcArray.forEach(function (val, index) { callback(val, index); }); }, get: function (index) { return srcArray[index]; }, map: function (callback) { return srcArray .map(function (el, index) { return callback(el, index); }); }, newShadowIterator: function () { return newArrayViewSubsetIterator(lazyArray); }, }; return lazyArray; } exports.newArrayView = newArrayView; function newKeyValueView(srcKeyVals) { var lazyKeyValues = { forEach: function (callback) { for (var key in srcKeyVals) { callback(srcKeyVals[key], key); } }, get: function (index) { return srcKeyVals[index]; }, map: function (callback) { var mapped = []; for (var key in srcKeyVals) { mapped.push(callback(srcKeyVals[key], key)); } return mapped; }, newShadowIterator: function () { return newKeyValueViewSubsetIterator(lazyKeyValues); }, }; return lazyKeyValues; } exports.newKeyValueView = newKeyValueView; function newIgnoreIndexArrayView(srcArray, ignoreIndex) { var lazyArray = { forEach: function (callback) { srcArray.forEach(function (val, index) { if (index !== ignoreIndex) { callback(val, index - (index >= ignoreIndex ? 1 : 0)); } }); }, get: function (index) { var trueIndex = index < ignoreIndex ? index : (index + 1); return srcArray.get(trueIndex); }, map: function (callback) { var mapped = []; srcArray.forEach(function (el, index) { if (index !== ignoreIndex) { mapped.push(callback(el, index - (index >= ignoreIndex ? 1 : 0))); } }); return mapped; }, newShadowIterator: function () { return newArrayViewSubsetIterator(lazyArray); }, }; return lazyArray; } function newIgnoreKeyKeyValueView(srcKV, ignoreKey) { var lazyKeyValues = { forEach: function (callback) { srcKV.forEach(function (value, key) { if (key !== ignoreKey) { callback(value, key); } }); }, get: function (index) { return srcKV.get(index); }, map: function (callback) { var mapped = []; srcKV.forEach(function (value, key) { if (key !== ignoreKey) { mapped.push(callback(value, key)); } }); return mapped; }, newShadowIterator: function () { return newKeyValueViewSubsetIterator(lazyKeyValues); }, }; return lazyKeyValues; } function newArrayViewSubsetIterator(dataset) { var index = -1; var dataCopy = dataset.map(function (el) { return el; }); var datasetCopy = newArrayView(dataCopy); return { next: function () { index++; var isDone = index >= (dataCopy.length - 1); var dynamicArr = index >= dataCopy.length ? undefined : newIgnoreIndexArrayView(datasetCopy, index); return { done: isDone, value: dynamicArr, }; }, }; } function newKeyValueViewSubsetIterator(dataset) { var dataCopy = {}; dataset.forEach(function (val, key) { return dataCopy[key] = val; }); var keys = Object.keys(dataCopy); var datasetCopy = newKeyValueView(dataCopy); var index = -1; return { next: function () { index++; var isDone = index >= (keys.length - 1); var dynamicArr = index >= keys.length ? undefined : newIgnoreKeyKeyValueView(datasetCopy, keys[index]); return { done: isDone, value: dynamicArr, }; }, }; } //# sourceMappingURL=datastructures.js.map