pymc3/step_methods/hmc/nuts.py
Killed 149 out of 232 mutantsSurvived
Survived mutation testing. These mutants show holes in your test suite.Mutant 519
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -30,7 +30,7 @@
def logbern(log_p):
if np.isnan(log_p):
raise FloatingPointError("log_p can't be nan.")
- return np.log(nr.uniform()) < log_p
+ return np.log(nr.uniform()) <= log_p
class NUTS(BaseHMC):
Mutant 520
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -84,7 +84,7 @@
Sampler: Adaptively Setting Path Lengths in Hamiltonian Monte Carlo.
"""
- name = 'nuts'
+ name = 'XXnutsXX'
default_blocked = True
generates_stats = True
Mutant 521
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -84,7 +84,7 @@
Sampler: Adaptively Setting Path Lengths in Hamiltonian Monte Carlo.
"""
- name = 'nuts'
+ name = None
default_blocked = True
generates_stats = True
Mutant 522
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -86,7 +86,7 @@
name = 'nuts'
- default_blocked = True
+ default_blocked = False
generates_stats = True
stats_dtypes = [{
'depth': np.int64,
Mutant 523
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -86,7 +86,7 @@
name = 'nuts'
- default_blocked = True
+ default_blocked = None
generates_stats = True
stats_dtypes = [{
'depth': np.int64,
Mutant 537
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -102,7 +102,7 @@
'model_logp': np.float64,
}]
- def __init__(self, vars=None, max_treedepth=10, early_max_treedepth=8,
+ def __init__(self, vars=None, max_treedepth=11, early_max_treedepth=8,
**kwargs):
R"""Set up the No-U-Turn sampler.
Mutant 538
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -102,7 +102,7 @@
'model_logp': np.float64,
}]
- def __init__(self, vars=None, max_treedepth=10, early_max_treedepth=8,
+ def __init__(self, vars=None, max_treedepth=10, early_max_treedepth=9,
**kwargs):
R"""Set up the No-U-Turn sampler.
Mutant 541
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -163,7 +163,7 @@
self.max_treedepth = max_treedepth
self.early_max_treedepth = early_max_treedepth
- self._reached_max_treedepth = 0
+ self._reached_max_treedepth = 1
def _hamiltonian_step(self, start, p0, step_size):
if self.tune and self.iter_count < 200:
Mutant 543
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -166,7 +166,7 @@
self._reached_max_treedepth = 0
def _hamiltonian_step(self, start, p0, step_size):
- if self.tune and self.iter_count < 200:
+ if self.tune and self.iter_count <= 200:
max_treedepth = self.early_max_treedepth
else:
max_treedepth = self.max_treedepth
Mutant 544
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -166,7 +166,7 @@
self._reached_max_treedepth = 0
def _hamiltonian_step(self, start, p0, step_size):
- if self.tune and self.iter_count < 200:
+ if self.tune and self.iter_count < 201:
max_treedepth = self.early_max_treedepth
else:
max_treedepth = self.max_treedepth
Mutant 545
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -166,7 +166,7 @@
self._reached_max_treedepth = 0
def _hamiltonian_step(self, start, p0, step_size):
- if self.tune and self.iter_count < 200:
+ if self.tune or self.iter_count < 200:
max_treedepth = self.early_max_treedepth
else:
max_treedepth = self.max_treedepth
Mutant 549
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -174,7 +174,7 @@
tree = _Tree(len(p0), self.integrator, start, step_size, self.Emax)
for _ in range(max_treedepth):
- direction = logbern(np.log(0.5)) * 2 - 1
+ direction = logbern(np.log(1.5)) * 2 - 1
divergence_info, turning = tree.extend(direction)
if divergence_info or turning:
Mutant 551
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -174,7 +174,7 @@
tree = _Tree(len(p0), self.integrator, start, step_size, self.Emax)
for _ in range(max_treedepth):
- direction = logbern(np.log(0.5)) * 2 - 1
+ direction = logbern(np.log(0.5)) * 3 - 1
divergence_info, turning = tree.extend(direction)
if divergence_info or turning:
Mutant 552
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -174,7 +174,7 @@
tree = _Tree(len(p0), self.integrator, start, step_size, self.Emax)
for _ in range(max_treedepth):
- direction = logbern(np.log(0.5)) * 2 - 1
+ direction = logbern(np.log(0.5)) * 2 + 1
divergence_info, turning = tree.extend(direction)
if divergence_info or turning:
Mutant 561
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -187,7 +187,6 @@
accept_stat = stats['mean_tree_accept']
return HMCStepData(tree.proposal, accept_stat, divergence_info, stats)
- @staticmethod
def competence(var, has_grad):
"""Check how appropriate this class is for sampling a random variable."""
if var.dtype in continuous_types and has_grad:
Mutant 565
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -199,7 +199,7 @@
n_samples = self._samples_after_tune
n_treedepth = self._reached_max_treedepth
- if n_samples > 0 and n_treedepth / float(n_samples) > 0.05:
+ if n_samples >= 0 and n_treedepth / float(n_samples) > 0.05:
msg = ('The chain reached the maximum tree depth. Increase '
'max_treedepth, increase target_accept or reparameterize.')
warn = SamplerWarning(WarningType.TREEDEPTH, msg, 'warn',
Mutant 566
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -199,7 +199,7 @@
n_samples = self._samples_after_tune
n_treedepth = self._reached_max_treedepth
- if n_samples > 0 and n_treedepth / float(n_samples) > 0.05:
+ if n_samples > 1 and n_treedepth / float(n_samples) > 0.05:
msg = ('The chain reached the maximum tree depth. Increase '
'max_treedepth, increase target_accept or reparameterize.')
warn = SamplerWarning(WarningType.TREEDEPTH, msg, 'warn',
Mutant 567
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -199,7 +199,7 @@
n_samples = self._samples_after_tune
n_treedepth = self._reached_max_treedepth
- if n_samples > 0 and n_treedepth / float(n_samples) > 0.05:
+ if n_samples > 0 and n_treedepth * float(n_samples) > 0.05:
msg = ('The chain reached the maximum tree depth. Increase '
'max_treedepth, increase target_accept or reparameterize.')
warn = SamplerWarning(WarningType.TREEDEPTH, msg, 'warn',
Mutant 568
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -199,7 +199,7 @@
n_samples = self._samples_after_tune
n_treedepth = self._reached_max_treedepth
- if n_samples > 0 and n_treedepth / float(n_samples) > 0.05:
+ if n_samples > 0 and n_treedepth / float(n_samples) >= 0.05:
msg = ('The chain reached the maximum tree depth. Increase '
'max_treedepth, increase target_accept or reparameterize.')
warn = SamplerWarning(WarningType.TREEDEPTH, msg, 'warn',
Mutant 569
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -199,7 +199,7 @@
n_samples = self._samples_after_tune
n_treedepth = self._reached_max_treedepth
- if n_samples > 0 and n_treedepth / float(n_samples) > 0.05:
+ if n_samples > 0 and n_treedepth / float(n_samples) > 1.05:
msg = ('The chain reached the maximum tree depth. Increase '
'max_treedepth, increase target_accept or reparameterize.')
warn = SamplerWarning(WarningType.TREEDEPTH, msg, 'warn',
Mutant 570
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -199,7 +199,7 @@
n_samples = self._samples_after_tune
n_treedepth = self._reached_max_treedepth
- if n_samples > 0 and n_treedepth / float(n_samples) > 0.05:
+ if n_samples > 0 or n_treedepth / float(n_samples) > 0.05:
msg = ('The chain reached the maximum tree depth. Increase '
'max_treedepth, increase target_accept or reparameterize.')
warn = SamplerWarning(WarningType.TREEDEPTH, msg, 'warn',
Mutant 571
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -209,7 +209,7 @@
# A proposal for the next position
-Proposal = namedtuple("Proposal", "q, q_grad, energy, log_p_accept, logp")
+Proposal = namedtuple("XXProposalXX", "q, q_grad, energy, log_p_accept, logp")
# A subtree of the binary tree built by nuts.
Subtree = namedtuple(
Mutant 574
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -213,7 +213,7 @@
# A subtree of the binary tree built by nuts.
Subtree = namedtuple(
- "Subtree",
+ "XXSubtreeXX",
"left, right, p_sum, proposal, log_size, log_accept_sum, n_proposals")
Mutant 577
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -233,7 +233,7 @@
The maximum energy change to accept before aborting the
transition as diverging.
"""
- self.ndim = ndim
+ self.ndim = None
self.integrator = integrator
self.start = start
self.step_size = step_size
Mutant 584
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -242,7 +242,7 @@
self.left = self.right = start
self.proposal = Proposal(
- start.q, start.q_grad, start.energy, 1.0, start.model_logp)
+ start.q, start.q_grad, start.energy, 2.0, start.model_logp)
self.depth = 0
self.log_size = 0
self.log_accept_sum = -np.inf
Mutant 586
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -243,7 +243,7 @@
self.left = self.right = start
self.proposal = Proposal(
start.q, start.q_grad, start.energy, 1.0, start.model_logp)
- self.depth = 0
+ self.depth = 1
self.log_size = 0
self.log_accept_sum = -np.inf
self.mean_tree_accept = 0.
Mutant 592
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -246,7 +246,7 @@
self.depth = 0
self.log_size = 0
self.log_accept_sum = -np.inf
- self.mean_tree_accept = 0.
+ self.mean_tree_accept = 1.0
self.n_proposals = 0
self.p_sum = start.p.copy()
self.max_energy_change = 0
Mutant 593
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -246,7 +246,7 @@
self.depth = 0
self.log_size = 0
self.log_accept_sum = -np.inf
- self.mean_tree_accept = 0.
+ self.mean_tree_accept = None
self.n_proposals = 0
self.p_sum = start.p.copy()
self.max_energy_change = 0
Mutant 594
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -247,7 +247,7 @@
self.log_size = 0
self.log_accept_sum = -np.inf
self.mean_tree_accept = 0.
- self.n_proposals = 0
+ self.n_proposals = 1
self.p_sum = start.p.copy()
self.max_energy_change = 0
Mutant 597
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -249,7 +249,7 @@
self.mean_tree_accept = 0.
self.n_proposals = 0
self.p_sum = start.p.copy()
- self.max_energy_change = 0
+ self.max_energy_change = 1
def extend(self, direction):
"""Double the treesize by extending the tree in the given direction.
Mutant 599
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -263,7 +263,7 @@
the tree extension was stopped because the termination criterior
was reached (the trajectory is turning back).
"""
- if direction > 0:
+ if direction >= 0:
tree, diverging, turning = self._build_subtree(
self.right, self.depth, floatX(np.asarray(self.step_size)))
leftmost_begin, leftmost_end = self.left, self.right
Mutant 616
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -280,7 +280,7 @@
rightmost_p_sum = self.p_sum
self.left = tree.right
- self.depth += 1
+ self.depth += 2
self.n_proposals += tree.n_proposals
if diverging or turning:
Mutant 617
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -281,7 +281,7 @@
self.left = tree.right
self.depth += 1
- self.n_proposals += tree.n_proposals
+ self.n_proposals = tree.n_proposals
if diverging or turning:
return diverging, turning
Mutant 618
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -281,7 +281,7 @@
self.left = tree.right
self.depth += 1
- self.n_proposals += tree.n_proposals
+ self.n_proposals -= tree.n_proposals
if diverging or turning:
return diverging, turning
Mutant 625
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -293,7 +293,7 @@
self.log_size = np.logaddexp(self.log_size, tree.log_size)
self.log_accept_sum = np.logaddexp(self.log_accept_sum,
tree.log_accept_sum)
- self.p_sum[:] += tree.p_sum
+ self.p_sum[:] = tree.p_sum
# Additional turning check only when tree depth > 0 to avoid redundant work
if self.depth > 0:
Mutant 627
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -296,7 +296,7 @@
self.p_sum[:] += tree.p_sum
# Additional turning check only when tree depth > 0 to avoid redundant work
- if self.depth > 0:
+ if self.depth >= 0:
left, right = self.left, self.right
p_sum = self.p_sum
turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
Mutant 631
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -299,7 +299,7 @@
if self.depth > 0:
left, right = self.left, self.right
p_sum = self.p_sum
- turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
+ turning = (p_sum.dot(left.v) < 0) or (p_sum.dot(right.v) <= 0)
p_sum1 = leftmost_p_sum + rightmost_begin.p
turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
Mutant 633
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -299,7 +299,7 @@
if self.depth > 0:
left, right = self.left, self.right
p_sum = self.p_sum
- turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
+ turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) < 0)
p_sum1 = leftmost_p_sum + rightmost_begin.p
turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
Mutant 635
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -299,7 +299,7 @@
if self.depth > 0:
left, right = self.left, self.right
p_sum = self.p_sum
- turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
+ turning = (p_sum.dot(left.v) <= 0) and (p_sum.dot(right.v) <= 0)
p_sum1 = leftmost_p_sum + rightmost_begin.p
turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
Mutant 639
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -301,7 +301,7 @@
p_sum = self.p_sum
turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
p_sum1 = leftmost_p_sum + rightmost_begin.p
- turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
+ turning1 = (p_sum1.dot(leftmost_begin.v) < 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) <= 0)
turning = (turning | turning1 | turning2)
Mutant 640
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -301,7 +301,7 @@
p_sum = self.p_sum
turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
p_sum1 = leftmost_p_sum + rightmost_begin.p
- turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
+ turning1 = (p_sum1.dot(leftmost_begin.v) <= 1) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) <= 0)
turning = (turning | turning1 | turning2)
Mutant 641
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -301,7 +301,7 @@
p_sum = self.p_sum
turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
p_sum1 = leftmost_p_sum + rightmost_begin.p
- turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
+ turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) < 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) <= 0)
turning = (turning | turning1 | turning2)
Mutant 643
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -301,7 +301,7 @@
p_sum = self.p_sum
turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
p_sum1 = leftmost_p_sum + rightmost_begin.p
- turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
+ turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) and (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) <= 0)
turning = (turning | turning1 | turning2)
Mutant 647
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -303,7 +303,7 @@
p_sum1 = leftmost_p_sum + rightmost_begin.p
turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
- turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) <= 0)
+ turning2 = (p_sum2.dot(leftmost_end.v) < 0) or (p_sum2.dot(rightmost_end.v) <= 0)
turning = (turning | turning1 | turning2)
return diverging, turning
Mutant 649
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -303,7 +303,7 @@
p_sum1 = leftmost_p_sum + rightmost_begin.p
turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
- turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) <= 0)
+ turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) < 0)
turning = (turning | turning1 | turning2)
return diverging, turning
Mutant 651
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -303,7 +303,7 @@
p_sum1 = leftmost_p_sum + rightmost_begin.p
turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
- turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) <= 0)
+ turning2 = (p_sum2.dot(leftmost_end.v) <= 0) and (p_sum2.dot(rightmost_end.v) <= 0)
turning = (turning | turning1 | turning2)
return diverging, turning
Mutant 653
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -304,7 +304,7 @@
turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) <= 0)
- turning = (turning | turning1 | turning2)
+ turning = (turning & turning1 | turning2)
return diverging, turning
Mutant 654
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -304,7 +304,7 @@
turning1 = (p_sum1.dot(leftmost_begin.v) <= 0) or (p_sum1.dot(rightmost_begin.v) <= 0)
p_sum2 = leftmost_end.p + rightmost_p_sum
turning2 = (p_sum2.dot(leftmost_end.v) <= 0) or (p_sum2.dot(rightmost_end.v) <= 0)
- turning = (turning | turning1 | turning2)
+ turning = (turning | turning1 & turning2)
return diverging, turning
Mutant 659
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -321,7 +321,7 @@
if np.isnan(energy_change):
energy_change = np.inf
- if np.abs(energy_change) > np.abs(self.max_energy_change):
+ if np.abs(energy_change) >= np.abs(self.max_energy_change):
self.max_energy_change = energy_change
if np.abs(energy_change) < self.Emax:
# Acceptance statistic
Mutant 661
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -323,7 +323,7 @@
if np.abs(energy_change) > np.abs(self.max_energy_change):
self.max_energy_change = energy_change
- if np.abs(energy_change) < self.Emax:
+ if np.abs(energy_change) <= self.Emax:
# Acceptance statistic
# e^{H(q_0, p_0) - H(q_n, p_n)} max(1, e^{H(q_0, p_0) - H(q_n, p_n)})
# Saturated Metropolis accept probability with Boltzmann weight
Mutant 670
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -334,7 +334,7 @@
right.q, right.q_grad, right.energy, log_p_accept,
right.model_logp)
tree = Subtree(right, right, right.p,
- proposal, log_size, log_p_accept, 1)
+ proposal, log_size, log_p_accept, 2)
return tree, None, False
else:
error_msg = ("Energy change in leapfrog step is too large: %s."
Mutant 673
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -337,7 +337,7 @@
proposal, log_size, log_p_accept, 1)
return tree, None, False
else:
- error_msg = ("Energy change in leapfrog step is too large: %s."
+ error_msg = ("XXEnergy change in leapfrog step is too large: %s.XX"
% energy_change)
error = None
tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
Mutant 674
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -338,7 +338,7 @@
return tree, None, False
else:
error_msg = ("Energy change in leapfrog step is too large: %s."
- % energy_change)
+ / energy_change)
error = None
tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
divergance_info = DivergenceInfo(error_msg, error, left)
Mutant 675
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -337,8 +337,7 @@
proposal, log_size, log_p_accept, 1)
return tree, None, False
else:
- error_msg = ("Energy change in leapfrog step is too large: %s."
- % energy_change)
+ error_msg = None
error = None
tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
divergance_info = DivergenceInfo(error_msg, error, left)
Mutant 676
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -339,7 +339,7 @@
else:
error_msg = ("Energy change in leapfrog step is too large: %s."
% energy_change)
- error = None
+ error = ""
tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
divergance_info = DivergenceInfo(error_msg, error, left)
return tree, divergance_info, False
Mutant 677
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -340,7 +340,7 @@
error_msg = ("Energy change in leapfrog step is too large: %s."
% energy_change)
error = None
- tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
+ tree = Subtree(None, None, None, None, +np.inf, -np.inf, 1)
divergance_info = DivergenceInfo(error_msg, error, left)
return tree, divergance_info, False
Mutant 678
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -340,7 +340,7 @@
error_msg = ("Energy change in leapfrog step is too large: %s."
% energy_change)
error = None
- tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
+ tree = Subtree(None, None, None, None, -np.inf, +np.inf, 1)
divergance_info = DivergenceInfo(error_msg, error, left)
return tree, divergance_info, False
Mutant 679
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -340,7 +340,7 @@
error_msg = ("Energy change in leapfrog step is too large: %s."
% energy_change)
error = None
- tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
+ tree = Subtree(None, None, None, None, -np.inf, -np.inf, 2)
divergance_info = DivergenceInfo(error_msg, error, left)
return tree, divergance_info, False
Mutant 680
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -340,7 +340,7 @@
error_msg = ("Energy change in leapfrog step is too large: %s."
% energy_change)
error = None
- tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
+ tree = None
divergance_info = DivergenceInfo(error_msg, error, left)
return tree, divergance_info, False
Mutant 681
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -341,7 +341,7 @@
% energy_change)
error = None
tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
- divergance_info = DivergenceInfo(error_msg, error, left)
+ divergance_info = None
return tree, divergance_info, False
def _build_subtree(self, left, depth, epsilon):
Mutant 682
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -342,7 +342,7 @@
error = None
tree = Subtree(None, None, None, None, -np.inf, -np.inf, 1)
divergance_info = DivergenceInfo(error_msg, error, left)
- return tree, divergance_info, False
+ return tree, divergance_info, True
def _build_subtree(self, left, depth, epsilon):
if depth == 0:
Mutant 697
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -360,7 +360,7 @@
if not (diverging or turning):
p_sum = tree1.p_sum + tree2.p_sum
- turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
+ turning = (p_sum.dot(left.v) < 0) or (p_sum.dot(right.v) <= 0)
# Additional U turn check only when depth > 1 to avoid redundant work.
if depth - 1 > 0:
p_sum1 = tree1.p_sum + tree2.left.p
Mutant 699
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -360,7 +360,7 @@
if not (diverging or turning):
p_sum = tree1.p_sum + tree2.p_sum
- turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
+ turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) < 0)
# Additional U turn check only when depth > 1 to avoid redundant work.
if depth - 1 > 0:
p_sum1 = tree1.p_sum + tree2.left.p
Mutant 701
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -360,7 +360,7 @@
if not (diverging or turning):
p_sum = tree1.p_sum + tree2.p_sum
- turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
+ turning = (p_sum.dot(left.v) <= 0) and (p_sum.dot(right.v) <= 0)
# Additional U turn check only when depth > 1 to avoid redundant work.
if depth - 1 > 0:
p_sum1 = tree1.p_sum + tree2.left.p
Mutant 703
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -362,7 +362,7 @@
p_sum = tree1.p_sum + tree2.p_sum
turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
# Additional U turn check only when depth > 1 to avoid redundant work.
- if depth - 1 > 0:
+ if depth + 1 > 0:
p_sum1 = tree1.p_sum + tree2.left.p
turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
Mutant 704
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -362,7 +362,7 @@
p_sum = tree1.p_sum + tree2.p_sum
turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
# Additional U turn check only when depth > 1 to avoid redundant work.
- if depth - 1 > 0:
+ if depth - 2 > 0:
p_sum1 = tree1.p_sum + tree2.left.p
turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
Mutant 705
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -362,7 +362,7 @@
p_sum = tree1.p_sum + tree2.p_sum
turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
# Additional U turn check only when depth > 1 to avoid redundant work.
- if depth - 1 > 0:
+ if depth - 1 >= 0:
p_sum1 = tree1.p_sum + tree2.left.p
turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
Mutant 706
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -362,7 +362,7 @@
p_sum = tree1.p_sum + tree2.p_sum
turning = (p_sum.dot(left.v) <= 0) or (p_sum.dot(right.v) <= 0)
# Additional U turn check only when depth > 1 to avoid redundant work.
- if depth - 1 > 0:
+ if depth - 1 > 1:
p_sum1 = tree1.p_sum + tree2.left.p
turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
Mutant 709
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -364,7 +364,7 @@
# Additional U turn check only when depth > 1 to avoid redundant work.
if depth - 1 > 0:
p_sum1 = tree1.p_sum + tree2.left.p
- turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
+ turning1 = (p_sum1.dot(tree1.left.v) < 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
turning2 = (p_sum2.dot(tree1.right.v) <= 0) or (p_sum2.dot(tree2.right.v) <= 0)
turning = (turning | turning1 | turning2)
Mutant 711
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -364,7 +364,7 @@
# Additional U turn check only when depth > 1 to avoid redundant work.
if depth - 1 > 0:
p_sum1 = tree1.p_sum + tree2.left.p
- turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
+ turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) < 0)
p_sum2 = tree1.right.p + tree2.p_sum
turning2 = (p_sum2.dot(tree1.right.v) <= 0) or (p_sum2.dot(tree2.right.v) <= 0)
turning = (turning | turning1 | turning2)
Mutant 713
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -364,7 +364,7 @@
# Additional U turn check only when depth > 1 to avoid redundant work.
if depth - 1 > 0:
p_sum1 = tree1.p_sum + tree2.left.p
- turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
+ turning1 = (p_sum1.dot(tree1.left.v) <= 0) and (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
turning2 = (p_sum2.dot(tree1.right.v) <= 0) or (p_sum2.dot(tree2.right.v) <= 0)
turning = (turning | turning1 | turning2)
Mutant 717
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -366,7 +366,7 @@
p_sum1 = tree1.p_sum + tree2.left.p
turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
- turning2 = (p_sum2.dot(tree1.right.v) <= 0) or (p_sum2.dot(tree2.right.v) <= 0)
+ turning2 = (p_sum2.dot(tree1.right.v) < 0) or (p_sum2.dot(tree2.right.v) <= 0)
turning = (turning | turning1 | turning2)
log_size = np.logaddexp(tree1.log_size, tree2.log_size)
Mutant 719
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -366,7 +366,7 @@
p_sum1 = tree1.p_sum + tree2.left.p
turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
- turning2 = (p_sum2.dot(tree1.right.v) <= 0) or (p_sum2.dot(tree2.right.v) <= 0)
+ turning2 = (p_sum2.dot(tree1.right.v) <= 0) or (p_sum2.dot(tree2.right.v) < 0)
turning = (turning | turning1 | turning2)
log_size = np.logaddexp(tree1.log_size, tree2.log_size)
Mutant 721
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -366,7 +366,7 @@
p_sum1 = tree1.p_sum + tree2.left.p
turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
- turning2 = (p_sum2.dot(tree1.right.v) <= 0) or (p_sum2.dot(tree2.right.v) <= 0)
+ turning2 = (p_sum2.dot(tree1.right.v) <= 0) and (p_sum2.dot(tree2.right.v) <= 0)
turning = (turning | turning1 | turning2)
log_size = np.logaddexp(tree1.log_size, tree2.log_size)
Mutant 723
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -367,7 +367,7 @@
turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
turning2 = (p_sum2.dot(tree1.right.v) <= 0) or (p_sum2.dot(tree2.right.v) <= 0)
- turning = (turning | turning1 | turning2)
+ turning = (turning & turning1 | turning2)
log_size = np.logaddexp(tree1.log_size, tree2.log_size)
log_accept_sum = np.logaddexp(tree1.log_accept_sum,
Mutant 724
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -367,7 +367,7 @@
turning1 = (p_sum1.dot(tree1.left.v) <= 0) or (p_sum1.dot(tree2.left.v) <= 0)
p_sum2 = tree1.right.p + tree2.p_sum
turning2 = (p_sum2.dot(tree1.right.v) <= 0) or (p_sum2.dot(tree2.right.v) <= 0)
- turning = (turning | turning1 | turning2)
+ turning = (turning | turning1 & turning2)
log_size = np.logaddexp(tree1.log_size, tree2.log_size)
log_accept_sum = np.logaddexp(tree1.log_accept_sum,
Mutant 731
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -377,7 +377,7 @@
else:
proposal = tree1.proposal
else:
- p_sum = tree1.p_sum
+ p_sum = None
log_size = tree1.log_size
log_accept_sum = tree1.log_accept_sum
proposal = tree1.proposal
Mutant 732
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -378,7 +378,7 @@
proposal = tree1.proposal
else:
p_sum = tree1.p_sum
- log_size = tree1.log_size
+ log_size = None
log_accept_sum = tree1.log_accept_sum
proposal = tree1.proposal
Mutant 733
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -379,7 +379,7 @@
else:
p_sum = tree1.p_sum
log_size = tree1.log_size
- log_accept_sum = tree1.log_accept_sum
+ log_accept_sum = None
proposal = tree1.proposal
n_proposals = tree1.n_proposals + tree2.n_proposals
Mutant 734
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -380,7 +380,7 @@
p_sum = tree1.p_sum
log_size = tree1.log_size
log_accept_sum = tree1.log_accept_sum
- proposal = tree1.proposal
+ proposal = None
n_proposals = tree1.n_proposals + tree2.n_proposals
Mutant 735
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -382,7 +382,7 @@
log_accept_sum = tree1.log_accept_sum
proposal = tree1.proposal
- n_proposals = tree1.n_proposals + tree2.n_proposals
+ n_proposals = tree1.n_proposals - tree2.n_proposals
tree = Subtree(left, right, p_sum, proposal,
log_size, log_accept_sum, n_proposals)
Mutant 738
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -390,7 +390,7 @@
def stats(self):
# Update accept stat if any subtrees were accepted
- if self.log_size > 0:
+ if self.log_size >= 0:
# Remove contribution from initial state which is always a perfect
# accept
sum_weight = np.expm1(self.log_size)
Mutant 746
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -398,7 +398,7 @@
return {
'depth': self.depth,
'mean_tree_accept': self.mean_tree_accept,
- 'energy_error': self.proposal.energy - self.start.energy,
+ 'energy_error': self.proposal.energy + self.start.energy,
'energy': self.proposal.energy,
'tree_size': self.n_proposals,
'max_energy_error': self.max_energy_change,