pyro/infer/tracegraph_elbo.py

Killed 107 out of 143 mutants

Survived

Survived mutation testing. These mutants show holes in your test suite.

Mutant 4

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -22,7 +22,7 @@
     """
     # XXX default for baseline_beta currently set here
     options_dict = site["infer"].get("baseline", {}).copy()
-    options_tuple = (options_dict.pop('nn_baseline', None),
+    options_tuple = (options_dict.pop('XXnn_baselineXX', None),
                      options_dict.pop('nn_baseline_input', None),
                      options_dict.pop('use_decaying_avg_baseline', False),
                      options_dict.pop('baseline_beta', 0.90),

Mutant 5

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -23,7 +23,7 @@
     # XXX default for baseline_beta currently set here
     options_dict = site["infer"].get("baseline", {}).copy()
     options_tuple = (options_dict.pop('nn_baseline', None),
-                     options_dict.pop('nn_baseline_input', None),
+                     options_dict.pop('XXnn_baseline_inputXX', None),
                      options_dict.pop('use_decaying_avg_baseline', False),
                      options_dict.pop('baseline_beta', 0.90),
                      options_dict.pop('baseline_value', None))

Mutant 7

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -24,7 +24,7 @@
     options_dict = site["infer"].get("baseline", {}).copy()
     options_tuple = (options_dict.pop('nn_baseline', None),
                      options_dict.pop('nn_baseline_input', None),
-                     options_dict.pop('use_decaying_avg_baseline', False),
+                     options_dict.pop('use_decaying_avg_baseline', True),
                      options_dict.pop('baseline_beta', 0.90),
                      options_dict.pop('baseline_value', None))
     if options_dict:

Mutant 9

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -25,7 +25,7 @@
     options_tuple = (options_dict.pop('nn_baseline', None),
                      options_dict.pop('nn_baseline_input', None),
                      options_dict.pop('use_decaying_avg_baseline', False),
-                     options_dict.pop('baseline_beta', 0.90),
+                     options_dict.pop('baseline_beta', 1.9),
                      options_dict.pop('baseline_value', None))
     if options_dict:
         raise ValueError("Unrecognized baseline options: {}".format(options_dict.keys()))

Mutant 10

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -26,7 +26,7 @@
                      options_dict.pop('nn_baseline_input', None),
                      options_dict.pop('use_decaying_avg_baseline', False),
                      options_dict.pop('baseline_beta', 0.90),
-                     options_dict.pop('baseline_value', None))
+                     options_dict.pop('XXbaseline_valueXX', None))
     if options_dict:
         raise ValueError("Unrecognized baseline options: {}".format(options_dict.keys()))
     return options_tuple

Mutant 12

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -36,7 +36,7 @@
 
     # XXX should the average baseline be in the param store as below?
 
-    baseline = 0.0
+    baseline = 1.0
     baseline_loss = 0.0
 
     (nn_baseline, nn_baseline_input, use_decaying_avg_baseline, baseline_beta,

Mutant 14

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -37,7 +37,7 @@
     # XXX should the average baseline be in the param store as below?
 
     baseline = 0.0
-    baseline_loss = 0.0
+    baseline_loss = 1.0
 
     (nn_baseline, nn_baseline_input, use_decaying_avg_baseline, baseline_beta,
         baseline_value) = _get_baseline_options(guide_site)

Mutant 18

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -42,7 +42,7 @@
     (nn_baseline, nn_baseline_input, use_decaying_avg_baseline, baseline_beta,
         baseline_value) = _get_baseline_options(guide_site)
 
-    use_nn_baseline = nn_baseline is not None
+    use_nn_baseline = None
     use_baseline_value = baseline_value is not None
 
     use_baseline = use_nn_baseline or use_decaying_avg_baseline or use_baseline_value

Mutant 20

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -43,7 +43,7 @@
         baseline_value) = _get_baseline_options(guide_site)
 
     use_nn_baseline = nn_baseline is not None
-    use_baseline_value = baseline_value is not None
+    use_baseline_value = None
 
     use_baseline = use_nn_baseline or use_decaying_avg_baseline or use_baseline_value
 

Mutant 24

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -47,7 +47,7 @@
 
     use_baseline = use_nn_baseline or use_decaying_avg_baseline or use_baseline_value
 
-    assert(not (use_nn_baseline and use_baseline_value)), \
+    assert(not (use_nn_baseline or use_baseline_value)), \
         "cannot use baseline_value and nn_baseline simultaneously"
     if use_decaying_avg_baseline:
         dc_shape = downstream_cost.shape

Mutant 26

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -51,7 +51,7 @@
         "cannot use baseline_value and nn_baseline simultaneously"
     if use_decaying_avg_baseline:
         dc_shape = downstream_cost.shape
-        param_name = "__baseline_avg_downstream_cost_" + node
+        param_name = "XX__baseline_avg_downstream_cost_XX" + node
         with torch.no_grad():
             avg_downstream_cost_old = pyro.param(param_name,
                                                  torch.zeros(dc_shape, device=guide_site['value'].device))

Mutant 28

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -51,7 +51,7 @@
         "cannot use baseline_value and nn_baseline simultaneously"
     if use_decaying_avg_baseline:
         dc_shape = downstream_cost.shape
-        param_name = "__baseline_avg_downstream_cost_" + node
+        param_name = None
         with torch.no_grad():
             avg_downstream_cost_old = pyro.param(param_name,
                                                  torch.zeros(dc_shape, device=guide_site['value'].device))

Mutant 38

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -58,7 +58,7 @@
             avg_downstream_cost_new = (1 - baseline_beta) * downstream_cost + \
                 baseline_beta * avg_downstream_cost_old
         pyro.get_param_store()[param_name] = avg_downstream_cost_new
-        baseline += avg_downstream_cost_old
+        baseline = avg_downstream_cost_old
     if use_nn_baseline:
         # block nn_baseline_input gradients except in baseline loss
         baseline += nn_baseline(detach_iterable(nn_baseline_input))

Mutant 40

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -65,7 +65,7 @@
     elif use_baseline_value:
         # it's on the user to make sure baseline_value tape only points to baseline params
         baseline += baseline_value
-    if use_nn_baseline or use_baseline_value:
+    if use_nn_baseline and use_baseline_value:
         # accumulate baseline loss
         baseline_loss += torch.pow(downstream_cost.detach() - baseline, 2.0).sum()
 

Mutant 58

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -100,7 +100,7 @@
         nodes_included_in_sum = set([node])
         downstream_guide_cost_nodes[node] = set([node])
         # make more efficient by ordering children appropriately (higher children first)
-        children = [(k, -ordered_guide_nodes_dict[k]) for k in guide_trace.successors(node)]
+        children = [(k, +ordered_guide_nodes_dict[k]) for k in guide_trace.successors(node)]
         sorted_children = sorted(children, key=itemgetter(1))
         for child, _ in sorted_children:
             child_cost_nodes = downstream_guide_cost_nodes[child]

Mutant 72

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -145,7 +145,7 @@
     # terms depending on the parameterization. This reduces the variance of the
     # gradient under some conditions.
 
-    elbo = 0.0
+    elbo = 1.0
     surrogate_elbo = 0.0
 
     # Bring log p(x, z|...) terms into both the ELBO and the surrogate

Mutant 74

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -146,7 +146,7 @@
     # gradient under some conditions.
 
     elbo = 0.0
-    surrogate_elbo = 0.0
+    surrogate_elbo = 1.0
 
     # Bring log p(x, z|...) terms into both the ELBO and the surrogate
     for name, site in model_trace.nodes.items():

Mutant 79

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -151,7 +151,7 @@
     # Bring log p(x, z|...) terms into both the ELBO and the surrogate
     for name, site in model_trace.nodes.items():
         if site["type"] == "sample":
-            elbo += site["log_prob_sum"]
+            elbo = site["log_prob_sum"]
             surrogate_elbo += site["log_prob_sum"]
 
     # Bring log q(z|...) terms into the ELBO, and effective terms into the

Mutant 80

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -151,7 +151,7 @@
     # Bring log p(x, z|...) terms into both the ELBO and the surrogate
     for name, site in model_trace.nodes.items():
         if site["type"] == "sample":
-            elbo += site["log_prob_sum"]
+            elbo -= site["log_prob_sum"]
             surrogate_elbo += site["log_prob_sum"]
 
     # Bring log q(z|...) terms into the ELBO, and effective terms into the

Mutant 88

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -161,7 +161,7 @@
     # site[`score_parts`] are used.
     for name, site in guide_trace.nodes.items():
         if site["type"] == "sample":
-            elbo -= site["log_prob_sum"]
+            elbo = site["log_prob_sum"]
             entropy_term = site["score_parts"].entropy_term
             # For fully reparameterized terms, this entropy_term is log q(z|...)
             # For fully non-reparameterized terms, it is zero

Mutant 89

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -161,7 +161,7 @@
     # site[`score_parts`] are used.
     for name, site in guide_trace.nodes.items():
         if site["type"] == "sample":
-            elbo -= site["log_prob_sum"]
+            elbo += site["log_prob_sum"]
             entropy_term = site["score_parts"].entropy_term
             # For fully reparameterized terms, this entropy_term is log q(z|...)
             # For fully non-reparameterized terms, it is zero

Mutant 96

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -175,7 +175,7 @@
     # construct all the reinforce-like terms.
     # we include only downstream costs to reduce variance
     # optionally include baselines to further reduce variance
-    surrogate_elbo = 0.0
+    surrogate_elbo = 1.0
     baseline_loss = 0.0
     for node in non_reparam_nodes:
         guide_site = guide_trace.nodes[node]

Mutant 98

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -176,7 +176,7 @@
     # we include only downstream costs to reduce variance
     # optionally include baselines to further reduce variance
     surrogate_elbo = 0.0
-    baseline_loss = 0.0
+    baseline_loss = 1.0
     for node in non_reparam_nodes:
         guide_site = guide_trace.nodes[node]
         downstream_cost = downstream_costs[node]

Mutant 107

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -186,7 +186,7 @@
 
         if use_baseline:
             downstream_cost = downstream_cost - baseline
-            baseline_loss = baseline_loss + baseline_loss_term
+            baseline_loss = baseline_loss - baseline_loss_term
 
         surrogate_elbo += (score_function * downstream_cost.detach()).sum()
 

Mutant 117

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -257,7 +257,7 @@
         torch_backward(surrogate_loss, retain_graph=self.retain_graph)
 
         elbo = torch_item(elbo)
-        loss = -elbo
+        loss = +elbo
         warn_if_nan(loss, "loss")
         return loss
 

Mutant 119

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -258,7 +258,7 @@
 
         elbo = torch_item(elbo)
         loss = -elbo
-        warn_if_nan(loss, "loss")
+        warn_if_nan(loss, "XXlossXX")
         return loss
 
     def _loss_and_surrogate_loss(self, model, guide, args, kwargs):

Mutant 120

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -263,7 +263,7 @@
 
     def _loss_and_surrogate_loss(self, model, guide, args, kwargs):
 
-        loss = 0.0
+        loss = 1.0
         surrogate_loss = 0.0
 
         for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs):

Mutant 122

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -264,7 +264,7 @@
     def _loss_and_surrogate_loss(self, model, guide, args, kwargs):
 
         loss = 0.0
-        surrogate_loss = 0.0
+        surrogate_loss = 1.0
 
         for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs):
 

Mutant 125

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -269,7 +269,7 @@
         for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs):
 
             lp, slp = self._loss_and_surrogate_loss_particle(model_trace, guide_trace)
-            loss += lp
+            loss = lp
             surrogate_loss += slp
 
         loss /= self.num_particles

Mutant 126

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -269,7 +269,7 @@
         for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs):
 
             lp, slp = self._loss_and_surrogate_loss_particle(model_trace, guide_trace)
-            loss += lp
+            loss -= lp
             surrogate_loss += slp
 
         loss /= self.num_particles

Mutant 127

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -270,7 +270,7 @@
 
             lp, slp = self._loss_and_surrogate_loss_particle(model_trace, guide_trace)
             loss += lp
-            surrogate_loss += slp
+            surrogate_loss = slp
 
         loss /= self.num_particles
         surrogate_loss /= self.num_particles

Mutant 129

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -272,7 +272,7 @@
             loss += lp
             surrogate_loss += slp
 
-        loss /= self.num_particles
+        loss = self.num_particles
         surrogate_loss /= self.num_particles
 
         return loss, surrogate_loss

Mutant 130

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -272,7 +272,7 @@
             loss += lp
             surrogate_loss += slp
 
-        loss /= self.num_particles
+        loss *= self.num_particles
         surrogate_loss /= self.num_particles
 
         return loss, surrogate_loss

Mutant 132

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -273,7 +273,7 @@
             surrogate_loss += slp
 
         loss /= self.num_particles
-        surrogate_loss /= self.num_particles
+        surrogate_loss *= self.num_particles
 
         return loss, surrogate_loss
 

Mutant 134

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -281,7 +281,7 @@
 
         # compute elbo for reparameterized nodes
         elbo, surrogate_elbo = _compute_elbo_reparam(model_trace, guide_trace)
-        baseline_loss = 0.0
+        baseline_loss = 1.0
 
         # the following computations are only necessary if we have non-reparameterizable nodes
         non_reparam_nodes = set(guide_trace.nonreparam_stochastic_nodes)

Mutant 142

--- pyro/infer/tracegraph_elbo.py
+++ pyro/infer/tracegraph_elbo.py
@@ -292,7 +292,7 @@
                                                                            downstream_costs)
             surrogate_elbo += surrogate_elbo_term
 
-        surrogate_loss = -surrogate_elbo + baseline_loss
+        surrogate_loss = -surrogate_elbo - baseline_loss
 
         return elbo, surrogate_loss