pymc3/step_methods/hmc/nuts.py
Killed 118 out of 232 mutantsSurvived
Survived mutation testing. These mutants show holes in your test suite.Mutant 352
--- 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 353
--- 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 354
--- 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 355
--- 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 356
--- 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 370
--- 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 371
--- 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 374
--- 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 376
--- 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 377
--- 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 378
--- 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 382
--- 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 383
--- 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 384
--- 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 385
--- 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 386
--- 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 - 2
divergence_info, turning = tree.extend(direction)
if divergence_info or turning:
Mutant 394
--- 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 395
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -195,7 +195,7 @@
return Competence.INCOMPATIBLE
def warnings(self):
- warnings = super().warnings()
+ warnings = None
n_samples = self._samples_after_tune
n_treedepth = self._reached_max_treedepth
Mutant 398
--- 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 399
--- 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 400
--- 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 401
--- 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 402
--- 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 403
--- 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 404
--- 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 407
--- 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 410
--- 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 417
--- 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 419
--- 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 421
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -244,7 +244,7 @@
self.proposal = Proposal(
start.q, start.q_grad, start.energy, 1.0, start.model_logp)
self.depth = 0
- self.log_size = 0
+ self.log_size = 1
self.log_accept_sum = -np.inf
self.mean_tree_accept = 0.
self.n_proposals = 0
Mutant 425
--- 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 426
--- 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 427
--- 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 430
--- 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 432
--- 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 433
--- 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 > 1:
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 440
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -273,7 +273,7 @@
self.right = tree.right
else:
tree, diverging, turning = self._build_subtree(
- self.left, self.depth, floatX(np.asarray(-self.step_size)))
+ self.left, self.depth, floatX(np.asarray(+self.step_size)))
leftmost_begin, leftmost_end = tree.right, tree.left
rightmost_begin, rightmost_end = self.left, self.right
leftmost_p_sum = tree.p_sum
Mutant 447
--- 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 = 1
self.n_proposals += tree.n_proposals
if diverging or turning:
Mutant 449
--- 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 450
--- 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 451
--- 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 454
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -287,7 +287,7 @@
return diverging, turning
size1, size2 = self.log_size, tree.log_size
- if logbern(size2 - size1):
+ if logbern(size2 + size1):
self.proposal = tree.proposal
self.log_size = np.logaddexp(self.log_size, tree.log_size)
Mutant 458
--- 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 459
--- 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 460
--- 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 461
--- 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 > 1:
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 464
--- 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 465
--- 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) <= 1) 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 466
--- 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 467
--- 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) <= 1)
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 468
--- 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 470
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -300,7 +300,7 @@
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)
- p_sum1 = leftmost_p_sum + rightmost_begin.p
+ 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)
Mutant 472
--- 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 473
--- 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 474
--- 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 475
--- 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) <= 1)
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 476
--- 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 478
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -302,7 +302,7 @@
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
+ 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 480
--- 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 481
--- 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) <= 1) or (p_sum2.dot(rightmost_end.v) <= 0)
turning = (turning | turning1 | turning2)
return diverging, turning
Mutant 482
--- 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 483
--- 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) <= 1)
turning = (turning | turning1 | turning2)
return diverging, turning
Mutant 484
--- 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 486
--- 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 487
--- 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 488
--- 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 = None
return diverging, turning
Mutant 492
--- 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 494
--- 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 497
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -328,7 +328,7 @@
# 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
# if h - H0 < 0
- log_p_accept = -energy_change + min(0., -energy_change)
+ log_p_accept = -energy_change + min(1.0, -energy_change)
log_size = -energy_change
proposal = Proposal(
right.q, right.q_grad, right.energy, log_p_accept,
Mutant 503
--- 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 506
--- 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 508
--- 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 509
--- 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 510
--- 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 511
--- 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 512
--- 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 515
--- 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 516
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -345,7 +345,7 @@
return tree, divergance_info, False
def _build_subtree(self, left, depth, epsilon):
- if depth == 0:
+ if depth != 0:
return self._single_step(left, epsilon)
tree1, diverging, turning = self._build_subtree(
Mutant 521
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -350,7 +350,7 @@
tree1, diverging, turning = self._build_subtree(
left, depth - 1, epsilon)
- if diverging or turning:
+ if diverging and turning:
return tree1, diverging, turning
tree2, diverging, turning = self._build_subtree(
Mutant 526
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -358,7 +358,7 @@
left, right = tree1.left, tree2.right
- if not (diverging or turning):
+ if (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)
# Additional U turn check only when depth > 1 to avoid redundant work.
Mutant 527
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -358,7 +358,7 @@
left, right = tree1.left, tree2.right
- if not (diverging or turning):
+ if not (diverging and turning):
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.
Mutant 530
--- 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 531
--- 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) <= 1) 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 532
--- 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 533
--- 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) <= 1)
# 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 534
--- 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 536
--- 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 537
--- 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 538
--- 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 539
--- 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 540
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -363,7 +363,7 @@
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
+ 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)
Mutant 542
--- 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 543
--- 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) <= 1) 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 544
--- 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 545
--- 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) <= 1)
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 546
--- 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 548
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -365,7 +365,7 @@
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
+ 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 550
--- 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 551
--- 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) <= 1) or (p_sum2.dot(tree2.right.v) <= 0)
turning = (turning | turning1 | turning2)
log_size = np.logaddexp(tree1.log_size, tree2.log_size)
Mutant 552
--- 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 553
--- 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) <= 1)
turning = (turning | turning1 | turning2)
log_size = np.logaddexp(tree1.log_size, tree2.log_size)
Mutant 554
--- 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 556
--- 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 557
--- 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 558
--- 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 = None
log_size = np.logaddexp(tree1.log_size, tree2.log_size)
log_accept_sum = np.logaddexp(tree1.log_accept_sum,
Mutant 561
--- pymc3/step_methods/hmc/nuts.py
+++ pymc3/step_methods/hmc/nuts.py
@@ -372,7 +372,7 @@
log_size = np.logaddexp(tree1.log_size, tree2.log_size)
log_accept_sum = np.logaddexp(tree1.log_accept_sum,
tree2.log_accept_sum)
- if logbern(tree2.log_size - log_size):
+ if logbern(tree2.log_size + log_size):
proposal = tree2.proposal
else:
proposal = tree1.proposal
Mutant 564
--- 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 565
--- 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 566
--- 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 567
--- 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 568
--- 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 571
--- 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 572
--- 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 > 1:
# Remove contribution from initial state which is always a perfect
# accept
sum_weight = np.expm1(self.log_size)
Mutant 579
--- 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,