differential-privacy
Version:
Implements Global Differential Privacy for almost any numeric function
128 lines • 4.31 kB
JavaScript
;
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