Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion sql/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.7
1.0.9
4 changes: 2 additions & 2 deletions sql/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "smartnoise-sql"
version = "1.0.7"
version = "1.0.9"
description = "Differentially Private SQL Queries"
authors = ["SmartNoise Team <smartnoise@opendp.org>"]
license = "MIT"
Expand All @@ -11,7 +11,7 @@ readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.9,<3.14"
opendp = ">=0.8.0,<0.13.0"
opendp = ">=0.8.0,<=0.14.1"
antlr4-python3-runtime = "4.9.3"
PyYAML = "^6.0.1"
graphviz = ">=0.17,<1.0"
Expand Down
2 changes: 1 addition & 1 deletion sql/snsql/sql/_mechanisms/approx_bounds.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def edges(idx):
enable_features('floating-point', 'contrib')
discovered_scale = 1.0 / epsilon

input_domain = dp.atom_domain(T=float)
input_domain = dp.atom_domain(T=float, nan=False)
input_metric = dp.absolute_distance(T=float)

meas = make_laplace(input_domain, input_metric, discovered_scale)
Expand Down
4 changes: 2 additions & 2 deletions sql/snsql/sql/_mechanisms/gaussian.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def _compute_noise_scale(self):
raise ValueError(f"Noise scale is too large using epsilon={self.epsilon} and bounds ({lower}, {upper}) with {self.mechanism}. Try preprocessing to reduce senstivity, or try different privacy parameters.")
enable_features('floating-point', 'contrib')

input_domain = dp.vector_domain(dp.atom_domain(T=float))
input_domain = dp.vector_domain(dp.atom_domain(T=float, nan=False))
input_metric = dp.symmetric_distance()

bounded_sum = (input_domain, input_metric) >> dp.t.then_clamp(bounds=bounds) >> dp.t.then_sum()
Expand Down Expand Up @@ -68,7 +68,7 @@ def release(self, vals):
enable_features('contrib')
bit_depth = self.bit_depth
set_default_int_type(f"i{bit_depth}")
meas = make_gaussian(dp.atom_domain(T=float), dp.absolute_distance(T=float), self.scale)
meas = make_gaussian(dp.atom_domain(T=float, nan=False), dp.absolute_distance(T=float), self.scale)
vals = [meas(float(v)) for v in vals]
return vals
def accuracy(self, alpha):
Expand Down
4 changes: 2 additions & 2 deletions sql/snsql/sql/_mechanisms/laplace.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def _compute_noise_scale(self):

enable_features('floating-point', 'contrib')

input_domain = dp.vector_domain(dp.atom_domain(T=float))
input_domain = dp.vector_domain(dp.atom_domain(T=float, nan=False))
input_metric = dp.symmetric_distance()

bounded_sum = (input_domain, input_metric) >> dp.t.then_clamp(bounds=bounds) >> dp.t.then_sum()
Expand All @@ -64,7 +64,7 @@ def threshold(self):
return thresh
def release(self, vals):
enable_features('floating-point', 'contrib')
input_domain = dp.atom_domain(T=float)
input_domain = dp.atom_domain(T=float, nan=False)
input_metric = dp.absolute_distance(T=float)
meas = make_laplace(input_domain, input_metric, self.scale)
vals = [meas(float(v)) for v in vals]
Expand Down
10 changes: 5 additions & 5 deletions synth/snsynth/transform/standard.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,18 +68,18 @@ def _fit_finish(self):

enable_features("floating-point", "contrib")

input_domain = dp.vector_domain(dp.atom_domain(T=float), size=n)
input_domain = dp.vector_domain(dp.atom_domain(T=float, nan=False), size=n)
input_metric = dp.symmetric_distance()

var_pre = (input_domain, input_metric) >> dp.t.then_clamp(bounds) >> dp.t.then_variance()
mean_pre = (input_domain, input_metric) >> dp.t.then_clamp(bounds) >> dp.t.then_mean()

v_e = self.epsilon * 0.8
m_e = self.epsilon - v_e
v_s = binary_search_param(lambda s: var_pre >> make_laplace(dp.atom_domain(T=float), dp.absolute_distance(T=float), s), d_in=1, d_out=v_e, T=float)
m_s = binary_search_param(lambda s: mean_pre >> make_laplace(dp.atom_domain(T=float), dp.absolute_distance(T=float), s), d_in=1, d_out=m_e, T=float)
dpvar = var_pre >> make_laplace(dp.atom_domain(T=float), dp.absolute_distance(T=float), v_s)
dpmean = mean_pre >> make_laplace(dp.atom_domain(T=float), dp.absolute_distance(T=float), m_s)
v_s = binary_search_param(lambda s: var_pre >> make_laplace(dp.atom_domain(T=float, nan=False), dp.absolute_distance(T=float), s), d_in=1, d_out=v_e, T=float)
m_s = binary_search_param(lambda s: mean_pre >> make_laplace(dp.atom_domain(T=float, nan=False), dp.absolute_distance(T=float), s), d_in=1, d_out=m_e, T=float)
dpvar = var_pre >> make_laplace(dp.atom_domain(T=float, nan=False), dp.absolute_distance(T=float), v_s)
dpmean = mean_pre >> make_laplace(dp.atom_domain(T=float, nan=False), dp.absolute_distance(T=float), m_s)

self.var = dpvar(np.array(self._fit_vals))
self.var = np.clip(self.var, 0.001, (self.fit_upper - self.fit_lower) ** 2 / 4)
Expand Down
6 changes: 3 additions & 3 deletions synth/snsynth/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def exponential_mechanism(qualities, epsilon, sensitivity=1.0, base_measure=None

def gaussian_noise(sigma, size=None):
enable_features('floating-point', 'contrib')
input_domain = dp.atom_domain(T=float)
input_domain = dp.atom_domain(T=float, nan=False)
input_metric = dp.absolute_distance(T=float)
meas = make_gaussian(input_domain, input_metric, sigma)
if size is None:
Expand All @@ -40,7 +40,7 @@ def gaussian_noise(sigma, size=None):

def laplace_noise(scale, size=None):
enable_features('floating-point', 'contrib')
input_domain = dp.atom_domain(T=float)
input_domain = dp.atom_domain(T=float, nan=False)
input_metric = dp.absolute_distance(T=float)
meas = make_laplace(input_domain, input_metric, scale)
if size is None:
Expand All @@ -52,7 +52,7 @@ def cdp_rho(epsilon, delta, max_contrib=1):
# return a rho that satisfies (epsilon, delta)
budget = (epsilon, delta)
enable_features('floating-point', 'contrib')
input_domain = dp.atom_domain(T=float)
input_domain = dp.atom_domain(T=float, nan=False)
input_metric = dp.absolute_distance(T=float)
def make_adp_gauss(scale):
test_gauss = make_gaussian(input_domain, input_metric, scale)
Expand Down