def exercise_gruber_1973_example(): start = ucgmx((4, 136, 76, -155, -31, 44)) assert start.is_similar_to( uctbx.unit_cell( (2, 11.66, 8.718, 139 + 40 / 60., 152 + 45 / 60., 19 + 24 / 60.))) buerger = ucgmx((4, 16, 16, -16, -1, -3)) assert buerger.is_similar_to( uctbx.unit_cell((2, 4, 4, 120, 93.5833, 100.807))) niggli = ucgmx((4, 16, 16, 16, 3, 4)) assert niggli.is_similar_to( uctbx.unit_cell((2, 4, 4, 60, 79.1931, 75.5225))) red = reduction_base.gruber_parameterization(start) assert not red.is_buerger_cell() assert approx_equal(red.as_gruber_matrix(), (4, 136, 76, -155, -31, 44)) assert approx_equal(red.as_niggli_matrix(), (4, 136, 76, -155 / 2., -31 / 2., 44 / 2.)) assert approx_equal(red.as_sym_mat3(), (4, 136, 76, 44 / 2., -31 / 2., -155 / 2.)) assert red.as_unit_cell().is_similar_to(start) red = reduction_base.gruber_parameterization(buerger) assert red.is_buerger_cell() assert not red.is_niggli_cell() red = reduction_base.gruber_parameterization(niggli) assert red.is_niggli_cell() red = reduce(start) assert red.as_unit_cell().is_similar_to(niggli) assert red.r_inv().elems == (-1, 5, 9, 0, -1, -1, 0, 0, 1) assert red.n_iterations() == 29 red = reduce(buerger) assert red.as_unit_cell().is_similar_to(niggli) assert red.r_inv().elems == (-1, 0, 0, 0, 1, 1, 0, 1, 0) assert red.n_iterations() == 4 red = reduce(niggli) assert red.as_unit_cell().is_similar_to(niggli) assert red.r_inv().elems == (1, 0, 0, 0, 1, 0, 0, 0, 1) assert red.n_iterations() == 1 try: red = krivy_gruber_1976.reduction(buerger, iteration_limit=1) except krivy_gruber_1976.iteration_limit_exceeded: pass else: raise Exception_expected assert not start.is_buerger_cell() assert not start.is_niggli_cell() assert buerger.is_buerger_cell() assert not buerger.is_niggli_cell() assert niggli.is_buerger_cell() assert niggli.is_niggli_cell() red = start.niggli_reduction() assert red.n_iterations() == 29 assert start.niggli_cell().is_similar_to(niggli)
def exercise_gruber_1973_example(): start = ucgmx((4,136,76,-155,-31,44)) assert start.is_similar_to(uctbx.unit_cell( (2, 11.66, 8.718, 139+40/60., 152+45/60., 19+24/60.))) buerger = ucgmx((4,16,16,-16,-1,-3)) assert buerger.is_similar_to(uctbx.unit_cell( (2, 4, 4, 120, 93.5833, 100.807))) niggli = ucgmx((4,16,16,16,3,4)) assert niggli.is_similar_to(uctbx.unit_cell( (2, 4, 4, 60, 79.1931, 75.5225))) red = reduction_base.gruber_parameterization(start) assert not red.is_buerger_cell() assert approx_equal(red.as_gruber_matrix(), (4,136,76,-155,-31,44)) assert approx_equal(red.as_niggli_matrix(), (4,136,76,-155/2.,-31/2.,44/2.)) assert approx_equal(red.as_sym_mat3(), (4,136,76,44/2.,-31/2.,-155/2.)) assert red.as_unit_cell().is_similar_to(start) red = reduction_base.gruber_parameterization(buerger) assert red.is_buerger_cell() assert not red.is_niggli_cell() red = reduction_base.gruber_parameterization(niggli) assert red.is_niggli_cell() red = reduce(start) assert red.as_unit_cell().is_similar_to(niggli) assert red.r_inv().elems == (-1, 5, 9, 0, -1, -1, 0, 0, 1) assert red.n_iterations() == 29 red = reduce(buerger) assert red.as_unit_cell().is_similar_to(niggli) assert red.r_inv().elems == (-1, 0, 0, 0, 1, 1, 0, 1, 0) assert red.n_iterations() == 4 red = reduce(niggli) assert red.as_unit_cell().is_similar_to(niggli) assert red.r_inv().elems == (1, 0, 0, 0, 1, 0, 0, 0, 1) assert red.n_iterations() == 1 try: red = krivy_gruber_1976.reduction(buerger, iteration_limit=1) except krivy_gruber_1976.iteration_limit_exceeded: pass else: raise Exception_expected assert not start.is_buerger_cell() assert not start.is_niggli_cell() assert buerger.is_buerger_cell() assert not buerger.is_niggli_cell() assert niggli.is_buerger_cell() assert niggli.is_niggli_cell() red = start.niggli_reduction() assert red.n_iterations() == 29 assert start.niggli_cell().is_similar_to(niggli)
def exercise_krivy_gruber_1976_example(): start = ucgmx((9, 27, 4, -5, -4, -22)) assert start.is_similar_to( uctbx.unit_cell( (3, 5.196, 2, 103 + 55 / 60., 109 + 28 / 60., 134 + 53 / 60.))) for gmx in ((4, 9, 9, -8, -1, -4), (4, 9, 9, 9, 1, 4)): red = reduction_base.gruber_parameterization(ucgmx(gmx)) assert red.is_buerger_cell() assert not red.is_niggli_cell() niggli = ucgmx((4, 9, 9, 9, 3, 4)) assert niggli.is_similar_to( uctbx.unit_cell((2, 3, 3, 60, 75 + 31 / 60., 70 + 32 / 60.))) red = reduction_base.gruber_parameterization(niggli) assert red.is_niggli_cell() red = reduce(start) assert red.as_unit_cell().is_similar_to(niggli) assert red.r_inv().elems == (0, 1, 2, 0, 0, 1, 1, 1, 2) assert red.n_iterations() == 11
def exercise_krivy_gruber_1976_example(): start = ucgmx((9,27,4,-5,-4,-22)) assert start.is_similar_to(uctbx.unit_cell( (3, 5.196, 2, 103+55/60., 109+28/60., 134+53/60.))) for gmx in ((4,9,9,-8,-1,-4), (4,9,9,9,1,4)): red = reduction_base.gruber_parameterization(ucgmx(gmx)) assert red.is_buerger_cell() assert not red.is_niggli_cell() niggli = ucgmx((4,9,9,9,3,4)) assert niggli.is_similar_to(uctbx.unit_cell( (2, 3, 3, 60, 75+31/60., 70+32/60.))) red = reduction_base.gruber_parameterization(niggli) assert red.is_niggli_cell() red = reduce(start) assert red.as_unit_cell().is_similar_to(niggli) assert red.r_inv().elems == (0, 1, 2, 0, 0, 1, 1, 1, 2) assert red.n_iterations() == 11
def is_niggli_cell(self, relative_epsilon=None): from cctbx.uctbx.reduction_base import gruber_parameterization return gruber_parameterization(self, relative_epsilon).is_niggli_cell()
def is_niggli_cell(self, relative_epsilon=None): from cctbx.uctbx.reduction_base import gruber_parameterization return gruber_parameterization(self, relative_epsilon).is_niggli_cell()
def exercise_gruber_types(n_trials_per_type, dump=0, verbose=0): mk2_sets = gruber_1973_table_1.get_mk2_sets() type_conditions = gruber_1973_table_1.get_type_conditions() random_unimodular = random_unimodular_integer_matrix_generator() have_errors = False for k in range(1, 29): set = mk2_sets[k] tc = type_conditions[k] if (0 or verbose): print(" ", tc.ck_types, tc.defks) n_errors = 0 for i_trial in range(n_trials_per_type): gruber_matrix = random_gruber_matrix(tc) type_cell = ucgmx(gruber_matrix) if (0 or verbose): print(" ", gruber_matrix) print(" ", type_cell) red = reduction_base.gruber_parameterization(type_cell) assert red.is_niggli_cell() n_different_cells = 0 for m in set: other_cell = type_cell.change_basis( m.inverse().transpose().elems, 1) if (0 or verbose): print(" ", m.elems, m.determinant()) print(" ", other_cell) red = reduction_base.gruber_parameterization(other_cell) if (not red.is_buerger_cell()): print(" Error: Transformed cell is not a Buerger cell.") print(" gruber_matrix:", gruber_matrix) n_errors += 1 else: n_different_cells += 1 if (red.is_niggli_cell()): if (not other_cell.is_similar_to(type_cell)): print( " Error: Transformed cell is a Niggli cell.") print(" gruber_matrix:", gruber_matrix) n_errors += 1 else: krivy_cell = reduce(type_cell).as_unit_cell() assert krivy_cell.is_similar_to(type_cell) krivy_cell = reduce(other_cell).as_unit_cell() assert krivy_cell.is_similar_to(type_cell) r_inv = random_unimodular.next().elems random_cell = type_cell.change_basis(r_inv, 1) if (0 or verbose): print(" Random:", random_cell, r_inv) red = reduce(random_cell) krivy_cell = red.as_unit_cell() if (dump): print("type_cell:", type_cell) print("random_cell:", random_cell) print("krivy_cell:", krivy_cell) print() if (not krivy_cell.is_similar_to(type_cell)): print(" Error: Random cell recovery.") print(" gruber_matrix:", gruber_matrix) print(" r_inv:", r_inv) print(" red.as_gruber_matrix():", red.as_gruber_matrix()) n_errors += 1 if (n_different_cells == 0): print( " Error: Transformation does not yield different cells.") n_errors += 1 raise RuntimeError if ((0 or verbose) and n_errors != 0): print("Errors for type %d:" % k, n_errors) if (n_errors != 0): have_errors = True assert not have_errors
def exercise_gruber_types(n_trials_per_type, dump=0, verbose=0): mk2_sets = gruber_1973_table_1.get_mk2_sets() type_conditions = gruber_1973_table_1.get_type_conditions() random_unimodular = random_unimodular_integer_matrix_generator() have_errors = False for k in xrange(1,29): set = mk2_sets[k] tc = type_conditions[k] if (0 or verbose): print " ", tc.ck_types, tc.defks n_errors = 0 for i_trial in xrange(n_trials_per_type): gruber_matrix = random_gruber_matrix(tc) type_cell = ucgmx(gruber_matrix) if (0 or verbose): print " ", gruber_matrix print " ", type_cell red = reduction_base.gruber_parameterization(type_cell) assert red.is_niggli_cell() n_different_cells = 0 for m in set: other_cell = type_cell.change_basis(m.inverse().transpose().elems, 1) if (0 or verbose): print " ", m.elems, m.determinant() print " ", other_cell red = reduction_base.gruber_parameterization(other_cell) if (not red.is_buerger_cell()): print " Error: Transformed cell is not a Buerger cell." print " gruber_matrix:", gruber_matrix n_errors += 1 else: n_different_cells += 1 if (red.is_niggli_cell()): if (not other_cell.is_similar_to(type_cell)): print " Error: Transformed cell is a Niggli cell." print " gruber_matrix:", gruber_matrix n_errors += 1 else: krivy_cell = reduce(type_cell).as_unit_cell() assert krivy_cell.is_similar_to(type_cell) krivy_cell = reduce(other_cell).as_unit_cell() assert krivy_cell.is_similar_to(type_cell) r_inv = random_unimodular.next().elems random_cell = type_cell.change_basis(r_inv, 1) if (0 or verbose): print " Random:", random_cell, r_inv red = reduce(random_cell) krivy_cell = red.as_unit_cell() if (dump): print "type_cell:", type_cell print "random_cell:", random_cell print "krivy_cell:", krivy_cell print if (not krivy_cell.is_similar_to(type_cell)): print " Error: Random cell recovery." print " gruber_matrix:", gruber_matrix print " r_inv:", r_inv print " red.as_gruber_matrix():", red.as_gruber_matrix() n_errors += 1 if (n_different_cells == 0): print " Error: Transformation does not yield different cells." n_errors += 1 raise RuntimeError if ((0 or verbose) and n_errors != 0): print "Errors for type %d:" % k, n_errors if (n_errors != 0): have_errors = True assert not have_errors