From 8ab4ab9cbb0caa3c8ebdb54a94263ee960864a00 Mon Sep 17 00:00:00 2001 From: Lukas Heinrich Date: Sat, 30 Oct 2021 14:43:40 +0200 Subject: [PATCH 1/2] diffable model! --- src/pyhf/constraints.py | 13 +++++++++---- src/pyhf/modifiers/histosys.py | 8 +++++++- src/pyhf/modifiers/shapefactor.py | 4 ++-- src/pyhf/modifiers/shapesys.py | 4 ++-- src/pyhf/modifiers/staterror.py | 4 ++-- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/pyhf/constraints.py b/src/pyhf/constraints.py index 30ef835e79..35c981f09c 100644 --- a/src/pyhf/constraints.py +++ b/src/pyhf/constraints.py @@ -10,7 +10,6 @@ def __dir__(): return __all__ - class gaussian_constraint_combined: def __init__(self, pdfconfig, batch_size=None): default_backend = pyhf.default_backend @@ -45,7 +44,9 @@ def __init__(self, pdfconfig, batch_size=None): if not parset.pdf_type == 'normal': continue - normal_constraint_data.append(thisauxdata) + normal_constraint_data.append( + default_backend.astensor(thisauxdata) + ) # many constraints are defined on a unit gaussian # but we reserved the possibility that a paramset @@ -53,9 +54,13 @@ def __init__(self, pdfconfig, batch_size=None): # by the paramset associated to staterror modifiers. # Such parsets define a 'sigmas' attribute try: - normal_constraint_sigmas.append(parset.sigmas) + normal_constraint_sigmas.append( + default_backend.astensor(parset.sigmas) + ) except AttributeError: - normal_constraint_sigmas.append([1.0] * len(thisauxdata)) + normal_constraint_sigmas.append( + default_backend.astensor([1.0] * len(thisauxdata)) + ) self._normal_data = None self._sigmas = None diff --git a/src/pyhf/modifiers/histosys.py b/src/pyhf/modifiers/histosys.py index d23e6c1ff3..4c4c0d2b81 100644 --- a/src/pyhf/modifiers/histosys.py +++ b/src/pyhf/modifiers/histosys.py @@ -31,11 +31,17 @@ def __init__(self, config): self.required_parsets = {} def collect(self, thismod, nom): + default_backend = pyhf.default_backend lo_data = thismod['data']['lo_data'] if thismod else nom hi_data = thismod['data']['hi_data'] if thismod else nom maskval = bool(thismod) mask = [maskval] * len(nom) - return {'lo_data': lo_data, 'hi_data': hi_data, 'mask': mask, 'nom_data': nom} + return { + 'lo_data': default_backend.astensor(lo_data), + 'hi_data': default_backend.astensor(hi_data), + 'mask': default_backend.astensor(mask, dtype = 'bool'), + 'nom_data': default_backend.astensor(nom) + } def append(self, key, channel, sample, thismod, defined_samp): self.builder_data.setdefault(key, {}).setdefault(sample, {}).setdefault( diff --git a/src/pyhf/modifiers/shapefactor.py b/src/pyhf/modifiers/shapefactor.py index 6c65c2e8c9..9359faa70e 100644 --- a/src/pyhf/modifiers/shapefactor.py +++ b/src/pyhf/modifiers/shapefactor.py @@ -142,9 +142,9 @@ def __init__(self, modifiers, pdfconfig, builder_data, batch_size=None): for m in keys ] - global_concatenated_bin_indices = [ + global_concatenated_bin_indices = default_backend.astensor([ [[j for c in pdfconfig.channels for j in range(pdfconfig.channel_nbins[c])]] - ] + ]) self._access_field = default_backend.tile( global_concatenated_bin_indices, diff --git a/src/pyhf/modifiers/shapesys.py b/src/pyhf/modifiers/shapesys.py index 5b5466857f..2341ff3a17 100644 --- a/src/pyhf/modifiers/shapesys.py +++ b/src/pyhf/modifiers/shapesys.py @@ -117,9 +117,9 @@ def __init__(self, modifiers, pdfconfig, builder_data, batch_size=None): for m in keys ] ) - global_concatenated_bin_indices = [ + global_concatenated_bin_indices = default_backend.astensor([ [[j for c in pdfconfig.channels for j in range(pdfconfig.channel_nbins[c])]] - ] + ]) self._access_field = default_backend.tile( global_concatenated_bin_indices, diff --git a/src/pyhf/modifiers/staterror.py b/src/pyhf/modifiers/staterror.py index e028b8f5db..2b3be5bdfc 100644 --- a/src/pyhf/modifiers/staterror.py +++ b/src/pyhf/modifiers/staterror.py @@ -144,9 +144,9 @@ def __init__(self, modifiers, pdfconfig, builder_data, batch_size=None): for m in keys ] ) - global_concatenated_bin_indices = [ + global_concatenated_bin_indices = default_backend.astensor([ [[j for c in pdfconfig.channels for j in range(pdfconfig.channel_nbins[c])]] - ] + ]) self._access_field = default_backend.tile( global_concatenated_bin_indices, From 471dcf0c0f97bc32131f006fa37b5437583fddac Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 30 Oct 2021 16:33:04 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/pyhf/constraints.py | 9 +++------ src/pyhf/modifiers/histosys.py | 4 ++-- src/pyhf/modifiers/shapefactor.py | 14 +++++++++++--- src/pyhf/modifiers/shapesys.py | 14 +++++++++++--- src/pyhf/modifiers/staterror.py | 14 +++++++++++--- 5 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/pyhf/constraints.py b/src/pyhf/constraints.py index 35c981f09c..73b45b05c5 100644 --- a/src/pyhf/constraints.py +++ b/src/pyhf/constraints.py @@ -10,6 +10,7 @@ def __dir__(): return __all__ + class gaussian_constraint_combined: def __init__(self, pdfconfig, batch_size=None): default_backend = pyhf.default_backend @@ -44,9 +45,7 @@ def __init__(self, pdfconfig, batch_size=None): if not parset.pdf_type == 'normal': continue - normal_constraint_data.append( - default_backend.astensor(thisauxdata) - ) + normal_constraint_data.append(default_backend.astensor(thisauxdata)) # many constraints are defined on a unit gaussian # but we reserved the possibility that a paramset @@ -54,9 +53,7 @@ def __init__(self, pdfconfig, batch_size=None): # by the paramset associated to staterror modifiers. # Such parsets define a 'sigmas' attribute try: - normal_constraint_sigmas.append( - default_backend.astensor(parset.sigmas) - ) + normal_constraint_sigmas.append(default_backend.astensor(parset.sigmas)) except AttributeError: normal_constraint_sigmas.append( default_backend.astensor([1.0] * len(thisauxdata)) diff --git a/src/pyhf/modifiers/histosys.py b/src/pyhf/modifiers/histosys.py index 4c4c0d2b81..31c059c68d 100644 --- a/src/pyhf/modifiers/histosys.py +++ b/src/pyhf/modifiers/histosys.py @@ -39,8 +39,8 @@ def collect(self, thismod, nom): return { 'lo_data': default_backend.astensor(lo_data), 'hi_data': default_backend.astensor(hi_data), - 'mask': default_backend.astensor(mask, dtype = 'bool'), - 'nom_data': default_backend.astensor(nom) + 'mask': default_backend.astensor(mask, dtype='bool'), + 'nom_data': default_backend.astensor(nom), } def append(self, key, channel, sample, thismod, defined_samp): diff --git a/src/pyhf/modifiers/shapefactor.py b/src/pyhf/modifiers/shapefactor.py index 9359faa70e..b0a0abb003 100644 --- a/src/pyhf/modifiers/shapefactor.py +++ b/src/pyhf/modifiers/shapefactor.py @@ -142,9 +142,17 @@ def __init__(self, modifiers, pdfconfig, builder_data, batch_size=None): for m in keys ] - global_concatenated_bin_indices = default_backend.astensor([ - [[j for c in pdfconfig.channels for j in range(pdfconfig.channel_nbins[c])]] - ]) + global_concatenated_bin_indices = default_backend.astensor( + [ + [ + [ + j + for c in pdfconfig.channels + for j in range(pdfconfig.channel_nbins[c]) + ] + ] + ] + ) self._access_field = default_backend.tile( global_concatenated_bin_indices, diff --git a/src/pyhf/modifiers/shapesys.py b/src/pyhf/modifiers/shapesys.py index 2341ff3a17..078db7253b 100644 --- a/src/pyhf/modifiers/shapesys.py +++ b/src/pyhf/modifiers/shapesys.py @@ -117,9 +117,17 @@ def __init__(self, modifiers, pdfconfig, builder_data, batch_size=None): for m in keys ] ) - global_concatenated_bin_indices = default_backend.astensor([ - [[j for c in pdfconfig.channels for j in range(pdfconfig.channel_nbins[c])]] - ]) + global_concatenated_bin_indices = default_backend.astensor( + [ + [ + [ + j + for c in pdfconfig.channels + for j in range(pdfconfig.channel_nbins[c]) + ] + ] + ] + ) self._access_field = default_backend.tile( global_concatenated_bin_indices, diff --git a/src/pyhf/modifiers/staterror.py b/src/pyhf/modifiers/staterror.py index 2b3be5bdfc..377610010b 100644 --- a/src/pyhf/modifiers/staterror.py +++ b/src/pyhf/modifiers/staterror.py @@ -144,9 +144,17 @@ def __init__(self, modifiers, pdfconfig, builder_data, batch_size=None): for m in keys ] ) - global_concatenated_bin_indices = default_backend.astensor([ - [[j for c in pdfconfig.channels for j in range(pdfconfig.channel_nbins[c])]] - ]) + global_concatenated_bin_indices = default_backend.astensor( + [ + [ + [ + j + for c in pdfconfig.channels + for j in range(pdfconfig.channel_nbins[c]) + ] + ] + ] + ) self._access_field = default_backend.tile( global_concatenated_bin_indices,