def linear_combination_trial_vectors(): u = sparse.vector(8, {1: 1.1, 3: 1.3}) v = sparse.vector(8, {0: 2.0, 2: 2.2, 3: 2.3, 4: 2.4}) w = list(-2*u.as_dense_vector() + 3*v.as_dense_vector()) yield u, v, w random_vectors = scitbx.random.variate( sparse.vector_distribution( 8, density=0.4, elements=scitbx.random.uniform_distribution(min=-2, max=2))) u = random_vectors.next() v = random_vectors.next() w = list(-2*u.as_dense_vector() + 3*v.as_dense_vector()) yield u, v, w
def exercise_matrix(): a = sparse.matrix(10, 7) assert a.n_rows == 10 and a.n_cols == 7 for c in a.cols(): assert c.is_structurally_zero() a[0, 1] = 1. a[9, 5] = 2. assert a.non_zeroes == 2 for i in xrange(10): for j in xrange(7): if (i, j) == (0, 1): assert a[i, j] == 1. elif (i, j) == (9, 5): assert a[i, j] == 2. else: assert a[i, j] == 0, (i, j, a[i, j]) a = sparse.matrix(6, 3) assert a.n_rows == 6 a[1, 1] = 1. a[3, 2] = 2. a[5, 1] = 2. a[4, 0] = 1. assert a.non_zeroes == 4 assert a.n_rows == 6 a[7, 0] = 1. assert a[7, 0] == 0 assert a.n_rows == 6 a = sparse.matrix(4, 3) a[0, 1] = 1.01 b = sparse.matrix(4, 3) b[0, 1] = 1.02 b[3, 2] = 0.001 approx_equal = sparse.approx_equal(tolerance=0.1) assert approx_equal(a, b) m = 10 a = sparse.matrix(m, 2) columns = (sparse.matrix_column(m, { 1: 0.1, 2: 0.2 }), sparse.matrix_column(m, { 4: 0.4, 8: 0.8 })) a[:, 0] = columns[0] a[:, 1] = columns[1] assert a[:, 0], a[:, 1] == columns try: a[1, :] = sparse.vector(2, {1: 1}) raise Exception_expected except RuntimeError, e: assert str(e)
def exercise_matrix(): a = sparse.matrix(10,7) assert a.n_rows == 10 and a.n_cols == 7 for c in a.cols(): assert c.is_structurally_zero() a[0,1] = 1. a[9,5] = 2. assert a.non_zeroes == 2 for i in xrange(10): for j in xrange(7): if (i,j) == (0,1): assert a[i,j] == 1. elif (i,j) == (9,5): assert a[i,j] == 2. else: assert a[i,j] == 0, (i, j, a[i,j]) a = sparse.matrix(6, 3) assert a.n_rows == 6 a[1,1] = 1. a[3,2] = 2. a[5,1] = 2. a[4,0] = 1. assert a.non_zeroes == 4 assert a.n_rows == 6 a[7,0] = 1. assert a[7,0] == 0 assert a.n_rows == 6 a = sparse.matrix(4,3) a[0,1] = 1.01 b = sparse.matrix(4,3) b[0,1] = 1.02 b[3,2] = 0.001 approx_equal = sparse.approx_equal(tolerance=0.1) assert approx_equal(a,b) m = 10 a = sparse.matrix(m, 2) columns = ( sparse.matrix_column(m, {1:0.1, 2:0.2}), sparse.matrix_column(m, {4:0.4, 8:0.8}) ) a[:,0] = columns[0] a[:,1] = columns[1] assert a[:,0], a[:,1] == columns try: a[1,:] = sparse.vector(2, {1:1}) raise Exception_expected except RuntimeError, e: assert str(e)
def value_weight(self, x, param): pass # use sparse storage as only self._naverage (default 3) values are non-zero weight = sparse.vector(self._nvalues) # normalised coordinate z = (x - self._x0) / self._spacing sumwv = 0.0 sumweight = 0.0 # get values values = param.value if self._nvalues <= 3: i1 = 0 i2 = self._nvalues else: # in this case, 1st point in array (index 0) is at position -0.5 # find the nearest naverage points that bracket z i1 = int(round(z - self._half_naverage)) + 1 i2 = i1 + self._naverage if i1 < 0: # beginning of range i1 = 0 i2 = max(2, i2) # ensure a separation of at least 2 if i2 > self._nvalues: i2 = self._nvalues i1 = min(i1, self._nvalues - 2) # ensure separation of >= 2 # now do stuff for i in range(i1, i2): ds = (z - self._positions[i]) / self._sigma w = exp(-ds*ds) sumwv += w * values[i] sumweight += w weight[i] = w if sumweight > 0.0: value = sumwv / sumweight; else: value = 0 return value, weight, sumweight
def exercise_dot_product(): u = sparse.vector(8, {0: 1, 3: 2, 6: 3}) v = sparse.vector(8, {1: 1, 3: 2, 5: 6}) assert u * v == 4
def exercise_vector(): v = sparse.vector(5) assert v.size == 5 assert v.is_structurally_zero() v[1] = 2 v[2] = 0 v[3] = 6 assert list(v) == [(1, 2.), (2, 0.), (3, 6.)] assert list(v.compact()) == [(1, 2.), (2, 0.), (3, 6.)] assert [v[i] for i in range(5)] == [0, 2, 0, 6, 0] p = flex.size_t([1, 2, 3, 4, 0]) assert list(v.permute(p)) == [(2, 2.), (3, 0.), (4, 6.)] assert v.non_zeroes == 3 v = sparse.vector(10) v[7] = -5 v[1] = -1 v[4] = 0 v[1] = 2 v[9] = 9. v[7] = 6 v[4] = 1 v[1] = 3 v[4] = 0 assert list(v.compact()) == [(1, 3.), (4, 0.), (7, 6.), (9, 9.)] assert ([v.is_structural_zero(i) for i in range(10)] == [ True, False, True, True, False, True, True, False, True, False ]) v = sparse.vector(10) v[4] += 1 v[5] += 2 v[4] += 2 v[5] = 1 v[3] = 2 v[5] += 3 assert list(v.compact()) == [(3, 2.), (4, 3.), (5, 4.)] assert v.non_zeroes == 3 v = sparse.vector(6) v[3] = 1 v[2] = 1 v[5] = 1 assert v.size == 6 v[7] = 1 assert v[7] == 0 assert v.size == 6 u = flex.double((1, -1, 2, 0, -2)) v = sparse.vector(5) v[0] = 10 v[3] = 4 v[4] = 5 assert u * v == 0 u = sparse.vector(10, {1: 1, 3: 3, 7: 7}) v = sparse.vector(10, {0: -1, 1: 2, 7: -1, 8: 2}) assert u * v == -5 assert sparse.weighted_dot(u, flex.double_range(10), v) == -47 a = flex.double() for i in range(10): for j in range(i, 10): a.append(1 / (i + j + 1)) assert approx_equal(sparse.quadratic_form(u, a, v), 4003 / 1980, eps=1e-15) assert approx_equal(sparse.quadratic_form(a, u), sparse.quadratic_form(u, a, u), eps=1e-15) sparse_approx_equal = sparse.approx_equal(tolerance=0.1) u = sparse.vector(4) u[0] = 1.01 v = sparse.vector(4) v[0] = 1.02 v[3] = 0.001 assert sparse_approx_equal(u, v) u = sparse.vector(4) v = sparse.vector(4) v[3] = 0.001 assert sparse_approx_equal(u, v) u = sparse.vector(5, {3: 0.3, 1: 0.1}) assert list(u.as_dense_vector()) == [0, 0.1, 0, 0.3, 0] try: sparse.vector(4, [1, 2, 3, 4]) raise Exception_expected except Exception as e: assert e.__class__.__module__ == 'Boost.Python' assert e.__class__.__name__ == 'ArgumentError' u = sparse.vector(4, {1: 1, 3: 3}) v = flex.double([1, 2, 3, 4]) assert u * v == 14 u = sparse.vector(5) s = flex.bool((True, False, False, True, True)) v = flex.double((1, 2, 3, 4, 5)) u.set_selected(s, v) assert u == sparse.vector(5, {0: 1, 3: 4, 4: 5}) u = sparse.vector(7) i = flex.size_t((2, 4, 5)) v = flex.double((-2.0, -4.0, -5.0)) u.set_selected(i, v) assert u == sparse.vector(7, {2: -2.0, 4: -4.0, 5: -5.0}) sparse_approx_equal = sparse.approx_equal(tolerance=1e-15) def linear_combination_trial_vectors(): u = sparse.vector(8, {1: 1.1, 3: 1.3}) v = sparse.vector(8, {0: 2.0, 2: 2.2, 3: 2.3, 4: 2.4}) w = list(-2 * u.as_dense_vector() + 3 * v.as_dense_vector()) yield u, v, w random_vectors = scitbx.random.variate( sparse.vector_distribution( 8, density=0.4, elements=scitbx.random.uniform_distribution(min=-2, max=2))) u = next(random_vectors) v = next(random_vectors) w = list(-2 * u.as_dense_vector() + 3 * v.as_dense_vector()) yield u, v, w for u, v, w in itertools.islice(linear_combination_trial_vectors(), 50): w1 = -2 * u + 3 * v w2 = 3 * v - 2 * u assert sparse_approx_equal(w1, w2) assert approx_equal(list(w1.as_dense_vector()), w, eps=1e-15) w1 += 2 * u w1 /= 3 assert sparse_approx_equal(w1, v) w2 -= 3 * v w2 /= -2 assert sparse_approx_equal(w2, u) u = sparse.vector(3, {1: 2}) v = u / 2 assert v == sparse.vector(3, {1: 1})
def exercise_vector(): v = sparse.vector(5) assert v.size == 5 assert v.is_structurally_zero() v[1] = 2 v[2] = 0 v[3] = 6 assert list(v) == [(1, 2.), (2, 0.), (3, 6.)] assert list(v.compact()) == [(1, 2.), (2, 0.), (3, 6.)] assert [v[i] for i in xrange(5)] == [0, 2, 0, 6, 0] p = flex.size_t([1, 2, 3, 4, 0]) assert list(v.permute(p)) == [(2, 2.), (3, 0.), (4, 6.)] assert v.non_zeroes == 3 v = sparse.vector(10) v[7] = -5 v[1] = -1 v[4] = 0 v[1] = 2 v[9] = 9. v[7] = 6 v[4] = 1 v[1] = 3 v[4] = 0 assert list(v.compact()) == [(1, 3.), (4, 0.), (7, 6.), (9, 9.)] assert ([v.is_structural_zero(i) for i in xrange(10)] == [ True, False, True, True, False, True, True, False, True, False ]) v = sparse.vector(10) v[4] += 1 v[5] += 2 v[4] += 2 v[5] = 1 v[3] = 2 v[5] += 3 assert list(v.compact()) == [(3, 2.), (4, 3.), (5, 4.)] assert v.non_zeroes == 3 v = sparse.vector(6) v[3] = 1 v[2] = 1 v[5] = 1 assert v.size == 6 v[7] = 1 assert v[7] == 0 assert v.size == 6 u = flex.double((1, -1, 2, 0, -2)) v = sparse.vector(5) v[0] = 10 v[3] = 4 v[4] = 5 assert u * v == 0 u = sparse.vector(10, {1: 1, 3: 3, 7: 7}) v = sparse.vector(10, {0: -1, 1: 2, 7: -1, 8: 2}) assert u * v == -5 assert sparse.weighted_dot(u, flex.double_range(10), v) == -47 a = flex.double() for i in xrange(10): for j in xrange(i, 10): a.append(1 / (i + j + 1)) assert approx_equal(sparse.quadratic_form(u, a, v), 4003 / 1980, eps=1e-15) assert approx_equal(sparse.quadratic_form(a, u), sparse.quadratic_form(u, a, u), eps=1e-15) sparse_approx_equal = sparse.approx_equal(tolerance=0.1) u = sparse.vector(4) u[0] = 1.01 v = sparse.vector(4) v[0] = 1.02 v[3] = 0.001 assert sparse_approx_equal(u, v) u = sparse.vector(4) v = sparse.vector(4) v[3] = 0.001 assert sparse_approx_equal(u, v) u = sparse.vector(5, {3: 0.3, 1: 0.1}) assert list(u.as_dense_vector()) == [0, 0.1, 0, 0.3, 0] try: sparse.vector(4, [1, 2, 3, 4]) raise Exception_expected except Exception, e: assert e.__class__.__module__ == 'Boost.Python' assert e.__class__.__name__ == 'ArgumentError'
u = sparse.vector(4) v = sparse.vector(4) v[3] = 0.001 assert sparse_approx_equal(u, v) u = sparse.vector(5, {3: 0.3, 1: 0.1}) assert list(u.as_dense_vector()) == [0, 0.1, 0, 0.3, 0] try: sparse.vector(4, [1, 2, 3, 4]) raise Exception_expected except Exception, e: assert e.__class__.__module__ == 'Boost.Python' assert e.__class__.__name__ == 'ArgumentError' u = sparse.vector(4, {1: 1, 3: 3}) v = flex.double([1, 2, 3, 4]) assert u * v == 14 u = sparse.vector(5) s = flex.bool((True, False, False, True, True)) v = flex.double((1, 2, 3, 4, 5)) u.set_selected(s, v) assert u == sparse.vector(5, {0: 1, 3: 4, 4: 5}) u = sparse.vector(7) i = flex.size_t((2, 4, 5)) v = flex.double((-2.0, -4.0, -5.0)) u.set_selected(i, v) assert u == sparse.vector(7, {2: -2.0, 4: -4.0, 5: -5.0})
def exercise_vector(): v = sparse.vector(5) assert v.size == 5 assert v.is_structurally_zero() v[1] = 2 v[2] = 0 v[3] = 6 assert list(v) == [(1,2.), (2,0.), (3,6.)] assert list(v.compact()) == [(1,2.), (2,0.), (3,6.)] assert [ v[i] for i in xrange(5) ] == [0, 2, 0, 6, 0] p = flex.size_t([1,2,3,4,0]) assert list(v.permute(p)) == [(2,2.), (3,0.), (4,6.)] assert v.non_zeroes == 3 v = sparse.vector(10) v[7] = -5 v[1] = -1 v[4] = 0 v[1] = 2 v[9] = 9. v[7] = 6 v[4] = 1 v[1] = 3 v[4] = 0 assert list(v.compact()) == [(1,3.), (4,0.), (7,6.), (9,9.)] assert ([ v.is_structural_zero(i) for i in xrange(10) ] == [ True, False, True, True, False, True, True, False, True, False ]) v = sparse.vector(10) v[4] += 1 v[5] += 2 v[4] += 2 v[5] = 1 v[3] = 2 v[5] += 3 assert list(v.compact()) == [ (3,2.), (4,3.), (5,4.) ] assert v.non_zeroes == 3 v = sparse.vector(6) v[3] = 1 v[2] = 1 v[5] = 1 assert v.size == 6 v[7] = 1 assert v[7] == 0 assert v.size == 6 u = flex.double((1, -1, 2, 0, -2)) v = sparse.vector(5) v[0] = 10 v[3] = 4 v[4] = 5 assert u*v == 0 u = sparse.vector(10, {1:1, 3:3, 7:7}) v = sparse.vector(10, {0:-1, 1:2, 7:-1, 8:2}) assert u*v == -5 assert sparse.weighted_dot(u, flex.double_range(10), v) == -47 a = flex.double() for i in xrange(10): for j in xrange(i,10): a.append(1/(i+j+1)) assert approx_equal(sparse.quadratic_form(u, a, v), 4003/1980, eps=1e-15) assert approx_equal(sparse.quadratic_form(a, u), sparse.quadratic_form(u, a, u), eps=1e-15) sparse_approx_equal = sparse.approx_equal(tolerance=0.1) u = sparse.vector(4) u[0] = 1.01 v = sparse.vector(4) v[0] = 1.02 v[3] = 0.001 assert sparse_approx_equal(u,v) u = sparse.vector(4) v = sparse.vector(4) v[3] = 0.001 assert sparse_approx_equal(u,v) u = sparse.vector(5, {3: 0.3, 1: 0.1}) assert list(u.as_dense_vector()) == [ 0, 0.1, 0, 0.3, 0 ] try: sparse.vector(4, [1, 2, 3, 4]) raise Exception_expected except Exception, e: assert e.__class__.__module__ == 'Boost.Python' assert e.__class__.__name__ == 'ArgumentError'
def exercise_dot_product(): u = sparse.vector(8, {0:1, 3:2, 6:3}) v = sparse.vector(8, {1:1, 3:2, 5:6}) assert u*v == 4
u = sparse.vector(4) v = sparse.vector(4) v[3] = 0.001 assert sparse_approx_equal(u,v) u = sparse.vector(5, {3: 0.3, 1: 0.1}) assert list(u.as_dense_vector()) == [ 0, 0.1, 0, 0.3, 0 ] try: sparse.vector(4, [1, 2, 3, 4]) raise Exception_expected except Exception, e: assert e.__class__.__module__ == 'Boost.Python' assert e.__class__.__name__ == 'ArgumentError' u = sparse.vector(4, {1: 1, 3: 3}) v = flex.double([1, 2, 3, 4]) assert u*v == 14 u = sparse.vector(5) s = flex.bool((True, False, False, True, True)) v = flex.double((1, 2, 3, 4, 5)) u.set_selected(s, v) assert u == sparse.vector(5, {0:1, 3:4, 4:5}) u = sparse.vector(7) i = flex.size_t((2, 4, 5)) v = flex.double((-2.0, -4.0, -5.0)) u.set_selected(i, v) assert u == sparse.vector(7, {2:-2.0, 4:-4.0, 5:-5.0})