コード例 #1
0
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
コード例 #2
0
ファイル: tst_rational.py プロジェクト: yayahjb/cctbx_project
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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()
コード例 #6
0
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)
コード例 #7
0
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
コード例 #8
0
 def as_rational(self):
     return matrix.sqr(rational.vector(self.num(), self.den()))
コード例 #9
0
ファイル: __init__.py プロジェクト: cctbx/cctbx-playground
 def as_rational(self):
   return matrix.sqr(rational.vector(self.num(), self.den()))