def exercise_python_code(): r = rational.int assert rational.from_string("1") == 1 assert rational.from_string("2/4").as_tuple() == (1,2) assert rational.vector((2,3,4), 3) == [r(d,3) for d in (2,3,4)] assert rational.vector((2,3,4), (3,4,5)) == [ r(d,n) for d,n in zip((2,3,4), (3,4,5))] assert rational.lcm_denominators(array=[]) == 1 assert rational.lcm_denominators(array=[r(3,4)]) == 4 assert rational.lcm_denominators(array=[r(3,4), r(5,6)]) == 12
def exercise_python_code(): r = rational.int assert rational.from_string("1") == 1 assert rational.from_string("2/4").as_tuple() == (1, 2) assert rational.vector((2, 3, 4), 3) == [r(d, 3) for d in (2, 3, 4)] assert rational.vector( (2, 3, 4), (3, 4, 5)) == [r(d, n) for d, n in zip((2, 3, 4), (3, 4, 5))] assert rational.lcm_denominators(array=[]) == 1 assert rational.lcm_denominators(array=[r(3, 4)]) == 4 assert rational.lcm_denominators(array=[r(3, 4), r(5, 6)]) == 12
def sample_asu(asu, n=(12, 12, 12), shape=False, is_stripped_asu=False): n_redundancies = 0 u_grid = [] for i in xrange(n[0]): b = [] for j in xrange(n[1]): c = [] for k in xrange(n[2]): c.append(0) b.append(c) u_grid.append(b) r_grid = [] colored_grid_points = [] for i in xrange(-n[0] // 2, n[0] + 1): b = [] for j in xrange(-n[1] // 2, n[1] + 1): c = [] for k in xrange(-n[2] // 2, n[2] + 1): frac = rational.vector((i, j, k), n) f = asu.is_inside(frac) fv = asu.is_inside(frac, shape_only=True) if (len(asu.in_which_cuts(frac)) != 0 and fv): colored_grid_points.append( colored_grid_point(frac, jv_asu.select_color(f))) if (shape): if (not fv): assert not f else: fv = False if (f or fv): i_pr = i % n[0] j_pr = j % n[1] k_pr = k % n[2] if (u_grid[i_pr][j_pr][k_pr] != 0): n_redundancies += 1 if (not is_stripped_asu): print "Redundancy at", (i, j, k), (i_pr, j_pr, k_pr) if (f): u_grid[i_pr][j_pr][k_pr] = 1 c.append(1) else: u_grid[i_pr][j_pr][k_pr] = 2 c.append(2) else: c.append(0) b.append(c) r_grid.append(b) return u_grid, r_grid, colored_grid_points, n_redundancies
def recolor_grid_points(gridding, colored_grid_points, redundancies, verbose): color_srv = color_server() processed_points = {} for symop, pairs in redundancies: if (verbose): print "Coloring %d redundancies:" % len(pairs), symop sys.stdout.flush() colored_point_dict = {} for colored_point in colored_grid_points: colored_point_dict[colored_point.site] = colored_point colors = color_srv.next() for pair in pairs: for point, color in zip(pair, colors): frac = tuple(rational.vector(point, gridding)) if (not frac in processed_points): processed_points[frac] = 1 colored_point_dict[frac].color = color
def analyze_redundancies(asu, n, redundancies, verbose=1): if (len(redundancies) == 0): return print("Overview:") for symop, pairs in redundancies: print(symop, ": number of redundancies:", len(pairs)) print(" ", rt_mx_analysis(sgtbx.rt_mx(symop))) print("Details:") for symop, pairs in redundancies: print(symop, ": number of redundancies:", len(pairs)) print(" ", rt_mx_analysis(sgtbx.rt_mx(symop))) all_cuts = dicts.with_default_factory(dict) not_in_cuts = {} for pair in pairs: for point in pair: cuts = asu.in_which_cuts(rational.vector(point, n)) if (len(cuts) == 0): not_in_cuts[point] = 1 all_cuts[tuple(cuts)][point] = 1 print(" In cuts:") for cuts, points in all_cuts.items(): print(" ", end=' ') show_amp = False for cut in cuts: if (show_amp): print("&", end=' ') print(cut, end=' ') show_amp = True print("#points: %d:" % len(points), end=' ') # FIXME : ordering of keys in py2/3 is different print(str(list(points.keys())[:4]).replace(" ", "")) if (verbose): print(" Pairs:") for pair in pairs: print(" ", pair) if (len(not_in_cuts) > 0): print(" Not in cuts:") for point in not_in_cuts.keys(): print(" ", point) raise AssertionError("Some redundant points not in any cuts.") print()
def check_multiplicities(asu, n): space_group = sgtbx.space_group(asu.hall_symbol) all_cuts = asu.extract_all_cuts() print "Total number of cuts:", len(all_cuts) def get_code(point): result = 0 bit = 1 for cut in all_cuts: if (cut.evaluate(point) == 0): result += bit bit *= 2 return result mults_by_code = {} for i in xrange(-n[0] // 2, n[0] + 1): for j in xrange(-n[1] // 2, n[1] + 1): for k in xrange(-n[2] // 2, n[2] + 1): point = rational.vector((i, j, k), n) if (asu.is_inside(point)): code = get_code(point) if (code != 0): m = space_group.multiplicity(site=point) mults_by_code.setdefault(code, set()).add(m) for code, mults in mults_by_code.items(): if (len(mults) != 1): print "PROBLEM:", space_group.type().number(), mults_by_code break else: print "cut intersection multiplicities unique:" order_z = space_group.order_z() tab_codes = [] for code in sorted(mults_by_code.keys()): m = list(mults_by_code[code])[0] if (m != order_z): print code, m tab_codes.append((code, m)) print "Number of cut intersection codes:", len(tab_codes)
def analyze_redundancies(asu, n, redundancies, verbose=1): if (len(redundancies) == 0): return print "Overview:" for symop, pairs in redundancies: print symop, ": number of redundancies:", len(pairs) print " ", rt_mx_analysis(sgtbx.rt_mx(symop)) print "Details:" for symop, pairs in redundancies: print symop, ": number of redundancies:", len(pairs) print " ", rt_mx_analysis(sgtbx.rt_mx(symop)) all_cuts = dicts.with_default_factory(dict) not_in_cuts = {} for pair in pairs: for point in pair: cuts = asu.in_which_cuts(rational.vector(point, n)) if (len(cuts) == 0): not_in_cuts[point] = 1 all_cuts[tuple(cuts)][point] = 1 print " In cuts:" for cuts, points in all_cuts.items(): print " ", show_amp = False for cut in cuts: if (show_amp): print "&", print cut, show_amp = True print "#points: %d:" % len(points), print str(points.keys()[:4]).replace(" ", "") if (verbose): print " Pairs:" for pair in pairs: print " ", pair if (len(not_in_cuts) > 0): print " Not in cuts:" for point in not_in_cuts.keys(): print " ", point raise AssertionError, "Some redundant points not in any cuts." print
def as_rational(self): return matrix.sqr(rational.vector(self.num(), self.den()))