def exercise_is_redundant():
  edge_list = double_banana_edge_list
  for n in [2,3]:
    perm = [0,1,2]
    while True:
      el = [edge_list[i] for i in perm]
      rrfrm = row_reduced_float_rigidity_matrix(
        n_dim=3, n_vertices=3, edge_list=el[:n])
      if (n == 2):
        assert rrfrm.dof() == 7
      else:
        assert rrfrm.dof() == 6
      for edge in el[:n]:
        assert rrfrm.is_redundant(edge=edge)
      if (n == 2):
        assert not rrfrm.is_redundant(el[2])
      update_repeat_log(nr=rrfrm.repeats)
      if (not next_permutation(perm)):
        break
  #
  rrfrm = row_reduced_float_rigidity_matrix(
    n_dim=3, n_vertices=5, edge_list=edge_list[:9])
  assert rrfrm.dof() == 6
  for edge in edge_list[:9]:
    assert rrfrm.is_redundant(edge=edge)
  update_repeat_log(nr=rrfrm.repeats)
  #
  rrfrm = row_reduced_float_rigidity_matrix(
    n_dim=3, n_vertices=8, edge_list=edge_list)
  assert rrfrm.dof() == 7
  for edge in edge_list:
    assert rrfrm.is_redundant(edge=edge)
  assert rrfrm.is_redundant(edge=(3,4))
  for i in [0,1,2]:
    for j in [5,6,7]:
      assert not rrfrm.is_redundant(edge=(i,j))
  update_repeat_log(nr=rrfrm.repeats)
  #
  edge_list = [ # octahedron
    (0,1),(0,2),(0,3),(0,4),
    (1,2),(2,3),(3,4),(4,1),
    (5,1),(5,2),(5,3),(5,4)]
  rrfrm = row_reduced_float_rigidity_matrix(
    n_dim=3, n_vertices=6, edge_list=edge_list)
  assert rrfrm.dof() == 6
  assert rrfrm.is_redundant(edge=(0,5))
  assert rrfrm.is_redundant(edge=(1,3))
  assert rrfrm.is_redundant(edge=(1,3))
  update_repeat_log(nr=rrfrm.repeats)
  #
  del edge_list[3]
  rrfrm = row_reduced_float_rigidity_matrix(
    n_dim=3, n_vertices=6, edge_list=edge_list)
  assert rrfrm.dof() == 7
  assert not rrfrm.is_redundant(edge=(0,5))
  assert not rrfrm.is_redundant(edge=(1,3))
  assert not rrfrm.is_redundant(edge=(1,3))
  update_repeat_log(nr=rrfrm.repeats)
Example #2
0
def exercise_next_permutation():
    from libtbx.math_utils import next_permutation
    seq = []
    assert next_permutation(seq) is False
    seq = [0]
    assert next_permutation(seq) is False
    seq = [0, 1]
    assert next_permutation(seq)
    assert seq == [1, 0]
    assert not next_permutation(seq)
    assert seq == [0, 1]
    seq = [0, 1, 2]
    result = []
    while True:
        result.append(tuple(seq))
        if (not next_permutation(seq)):
            break
    assert result == [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1),
                      (2, 1, 0)]
    assert seq == [0, 1, 2]
    expected_n = 1
    for m in xrange(1, 7):
        expected_n *= m
        seq = range(m)
        n = 0
        while True:
            n += 1
            if (not next_permutation(seq)):
                break
        assert seq == range(m)
        assert n == expected_n
Example #3
0
def exercise_next_permutation():
  from libtbx.math_utils import next_permutation
  seq = []
  assert next_permutation(seq) is False
  seq = [0]
  assert next_permutation(seq) is False
  seq = [0,1]
  assert next_permutation(seq)
  assert seq == [1, 0]
  assert not next_permutation(seq)
  assert seq == [0, 1]
  seq = [0,1,2]
  result = []
  while True:
    result.append(tuple(seq))
    if (not next_permutation(seq)):
      break
  assert result == [
    (0, 1, 2),
    (0, 2, 1),
    (1, 0, 2),
    (1, 2, 0),
    (2, 0, 1),
    (2, 1, 0)]
  assert seq == [0,1,2]
  expected_n = 1
  for m in xrange(1,7):
    expected_n *= m
    seq = range(m)
    n = 0
    while True:
      n += 1
      if (not next_permutation(seq)):
        break
    assert seq == range(m)
    assert n == expected_n