def __init__(self, *args, **kwds): super(restrained_crystal_structure_builder, self).__init__(*args, **kwds) geom = geometry_restraints adp = adp_restraints self._proxies = {} self._proxies = { 'bond': geometry_restraints.shared_bond_simple_proxy(), 'angle': geometry_restraints.shared_angle_proxy(), 'dihedral': geometry_restraints.shared_dihedral_proxy(), 'planarity': geometry_restraints.shared_planarity_proxy(), 'chirality': geometry_restraints.shared_chirality_proxy(), 'bond_similarity': geometry_restraints.shared_bond_similarity_proxy(), 'adp_similarity': adp_restraints.shared_adp_similarity_proxy(), 'rigid_bond': adp_restraints.shared_rigid_bond_proxy(), 'isotropic_adp': adp_restraints.shared_isotropic_adp_proxy(), 'fixed_u_eq_adp': adp_restraints.shared_fixed_u_eq_adp_proxy(), 'adp_u_eq_similarity': adp_restraints.shared_adp_u_eq_similarity_proxy(), 'adp_volume_similarity': adp_restraints.shared_adp_volume_similarity_proxy(), }
def __init__(self, xray_structure=None, pair_sym_table=None, proxies=None, i_seqs=None, sigma=0.04, sigma_terminal=None, buffer_thickness=3.5): assert [xray_structure, pair_sym_table].count(None) == 1 if i_seqs is not None and len(i_seqs) == 0: i_seqs = None if sigma_terminal is None: sigma_terminal = 2 * sigma if proxies is None: proxies = adp_restraints.shared_adp_similarity_proxy() if pair_sym_table is None: asu_mappings = xray_structure.asu_mappings( buffer_thickness=buffer_thickness) pair_asu_table = crystal.pair_asu_table(asu_mappings=asu_mappings) scattering_types = xray_structure.scatterers( ).extract_scattering_types() pair_asu_table.add_covalent_pairs( scattering_types, exclude_scattering_types=flex.std_string(("H", "D"))) pair_sym_table = pair_asu_table.extract_pair_sym_table() connectivity = pair_sym_table.full_simple_connectivity() for i_seq, j_seq_dict in enumerate(pair_sym_table): if i_seqs is not None and i_seq not in i_seqs: continue for j_seq, sym_ops in j_seq_dict.items(): if i_seqs is not None and j_seq not in i_seqs: continue for sym_op in sym_ops: if sym_op.is_unit_mx(): i_is_terminal = (connectivity[i_seq].size() <= 1) j_is_terminal = (connectivity[j_seq].size() <= 1) if i_is_terminal or j_is_terminal: weight = 1 / (sigma_terminal * sigma_terminal) else: weight = 1 / (sigma * sigma) proxies.append( adp_restraints.adp_similarity_proxy(i_seqs=(i_seq, j_seq), weight=weight)) break self.proxies = proxies
def __init__( self, xray_structure=None, pair_sym_table=None, proxies=None, i_seqs=None, sigma=0.04, sigma_terminal=None, buffer_thickness=3.5, ): assert [xray_structure, pair_sym_table].count(None) == 1 if i_seqs is not None and len(i_seqs) == 0: i_seqs = None if sigma_terminal is None: sigma_terminal = 2 * sigma if proxies is None: proxies = adp_restraints.shared_adp_similarity_proxy() if pair_sym_table is None: asu_mappings = xray_structure.asu_mappings(buffer_thickness=buffer_thickness) pair_asu_table = crystal.pair_asu_table(asu_mappings=asu_mappings) scattering_types = xray_structure.scatterers().extract_scattering_types() pair_asu_table.add_covalent_pairs(scattering_types, exclude_scattering_types=flex.std_string(("H", "D"))) pair_sym_table = pair_asu_table.extract_pair_sym_table() connectivity = pair_sym_table.full_simple_connectivity() for i_seq, j_seq_dict in enumerate(pair_sym_table): if i_seqs is not None and i_seq not in i_seqs: continue for j_seq, sym_ops in j_seq_dict.items(): if i_seqs is not None and j_seq not in i_seqs: continue for sym_op in sym_ops: if sym_op.is_unit_mx(): i_is_terminal = connectivity[i_seq].size() <= 1 j_is_terminal = connectivity[j_seq].size() <= 1 if i_is_terminal or j_is_terminal: weight = 1 / (sigma_terminal * sigma_terminal) else: weight = 1 / (sigma * sigma) proxies.append(adp_restraints.adp_similarity_proxy(i_seqs=(i_seq, j_seq), weight=weight)) break self.proxies = proxies
def exercise_proxy_show(): sites_cart = flex.vec3_double(( (-3.1739,10.8317,7.5653),(-2.5419,9.7567,6.6306), (-3.3369,8.8794,4.5191),(-3.4640,9.9882,5.3896))) site_labels = ("C1", "C2", "O16", "N8") u_cart = flex.sym_mat3_double(( (0.0153,0.0206,0.0234,0.0035,-0.0052,-0.0051), (0.0185,0.0109,0.0206,0.0005,-0.0010,0.0002), (0.0295,0.0203,0.0218,-0.0010,-0.0003,-0.0044), (0.0159,0.0154,0.0206,-0.0003,0.0004,0.0036))) u_iso = flex.double((-1,-1,-1,-1)) use_u_aniso = flex.bool((True,True,True,True)) # proxies = adp_restraints.shared_adp_similarity_proxy() sio = StringIO() proxies.show_sorted( by_value="residual", u_cart=flex.sym_mat3_double(), u_iso=flex.double(), use_u_aniso=flex.bool(), f=sio) assert not show_diff(sio.getvalue(), """\ ADP similarity restraints: 0 """) proxies = adp_restraints.shared_adp_similarity_proxy([ adp_restraints.adp_similarity_proxy(i_seqs=[0,1],weight=25), adp_restraints.adp_similarity_proxy(i_seqs=[2,3],weight=0.3)]) sio = StringIO() proxies.show_sorted( by_value="residual", u_cart=u_cart, u_iso=u_iso, use_u_aniso=use_u_aniso, f=sio, prefix=":") assert not show_diff(sio.getvalue(), """\ :ADP similarity restraints: 2 :Sorted by residual: :scatterers 0 : 1 : delta sigma weight rms_deltas residual : U11 -3.20e-03 2.00e-01 2.50e+01 4.96e-03 5.54e-03 : U22 9.70e-03 2.00e-01 2.50e+01 : U33 2.80e-03 2.00e-01 2.50e+01 : U12 3.00e-03 2.00e-01 2.50e+01 : U13 -4.20e-03 2.00e-01 2.50e+01 : U23 -5.30e-03 2.00e-01 2.50e+01 :scatterers 2 : 3 : delta sigma weight rms_deltas residual : U11 1.36e-02 1.83e+00 3.00e-01 6.15e-03 1.02e-04 : U22 4.90e-03 1.83e+00 3.00e-01 : U33 1.20e-03 1.83e+00 3.00e-01 : U12 -7.00e-04 1.83e+00 3.00e-01 : U13 -7.00e-04 1.83e+00 3.00e-01 : U23 -8.00e-03 1.83e+00 3.00e-01 """) sio = StringIO() proxies.show_sorted( by_value="rms_deltas", site_labels=site_labels, u_cart=u_cart, u_iso=flex.double((0.024,0.031,0.021,0.028)), use_u_aniso=flex.bool((False,False,False,False)), f=sio, prefix="=") assert not show_diff(sio.getvalue(), """\ =ADP similarity restraints: 2 =Sorted by rms_deltas: =scatterers C1 = C2 = delta sigma weight residual = Uiso -7.00e-03 2.00e-01 2.50e+01 1.22e-03 =scatterers O16 = N8 = delta sigma weight residual = Uiso -7.00e-03 1.83e+00 3.00e-01 1.47e-05 """) # proxies = adp_restraints.shared_isotropic_adp_proxy() sio = StringIO() proxies.show_sorted( by_value="residual", u_cart=flex.sym_mat3_double(), u_iso=u_iso, use_u_aniso=use_u_aniso, f=sio) assert not show_diff(sio.getvalue(), """\ Isotropic ADP restraints: 0 """) proxies = adp_restraints.shared_isotropic_adp_proxy([ adp_restraints.isotropic_adp_proxy(i_seqs=(0,),weight=25), adp_restraints.isotropic_adp_proxy(i_seqs=(2,),weight=0.3)]) sio = StringIO() proxies.show_sorted( by_value="residual", site_labels=site_labels, u_cart=u_cart, u_iso=u_iso, use_u_aniso=use_u_aniso, f=sio, prefix=" ") assert not show_diff(sio.getvalue(), """\ Isotropic ADP restraints: 2 Sorted by residual: scatterer C1 delta sigma weight rms_deltas residual U11 -4.47e-03 2.00e-01 2.50e+01 4.27e-03 4.11e-03 U22 8.33e-04 2.00e-01 2.50e+01 U33 3.63e-03 2.00e-01 2.50e+01 U12 3.50e-03 2.00e-01 2.50e+01 U13 -5.20e-03 2.00e-01 2.50e+01 U23 -5.10e-03 2.00e-01 2.50e+01 scatterer O16 delta sigma weight rms_deltas residual U11 5.63e-03 1.83e+00 3.00e-01 3.16e-03 2.69e-05 U22 -3.57e-03 1.83e+00 3.00e-01 U33 -2.07e-03 1.83e+00 3.00e-01 U12 -1.00e-03 1.83e+00 3.00e-01 U13 -3.00e-04 1.83e+00 3.00e-01 U23 -4.40e-03 1.83e+00 3.00e-01 """) sio = StringIO() proxies.show_sorted( by_value="rms_deltas", u_cart=u_cart, u_iso=u_iso, use_u_aniso=use_u_aniso, f=sio, prefix="$") assert not show_diff(sio.getvalue(), """\ $Isotropic ADP restraints: 2 $Sorted by rms_deltas: $scatterer 0 $ delta sigma weight rms_deltas residual $ U11 -4.47e-03 2.00e-01 2.50e+01 4.27e-03 4.11e-03 $ U22 8.33e-04 2.00e-01 2.50e+01 $ U33 3.63e-03 2.00e-01 2.50e+01 $ U12 3.50e-03 2.00e-01 2.50e+01 $ U13 -5.20e-03 2.00e-01 2.50e+01 $ U23 -5.10e-03 2.00e-01 2.50e+01 $scatterer 2 $ delta sigma weight rms_deltas residual $ U11 5.63e-03 1.83e+00 3.00e-01 3.16e-03 2.69e-05 $ U22 -3.57e-03 1.83e+00 3.00e-01 $ U33 -2.07e-03 1.83e+00 3.00e-01 $ U12 -1.00e-03 1.83e+00 3.00e-01 $ U13 -3.00e-04 1.83e+00 3.00e-01 $ U23 -4.40e-03 1.83e+00 3.00e-01 """) # proxies = adp_restraints.shared_rigid_bond_proxy() sio = StringIO() proxies.show_sorted( by_value="residual", sites_cart=flex.vec3_double(), u_cart=flex.sym_mat3_double(), f=sio) assert not show_diff(sio.getvalue(), """\ Rigid bond restraints: 0 """) proxies = adp_restraints.shared_rigid_bond_proxy([ adp_restraints.rigid_bond_proxy(i_seqs=(0,1),weight=25), adp_restraints.rigid_bond_proxy(i_seqs=(0,2),weight=15), adp_restraints.rigid_bond_proxy(i_seqs=(2,3),weight=25), adp_restraints.rigid_bond_proxy(i_seqs=(3,1),weight=30)]) sio = StringIO() proxies.show_sorted( by_value="residual", sites_cart=sites_cart, site_labels=site_labels, u_cart=u_cart, f=sio, prefix="*") assert not show_diff(sio.getvalue(), """\ *Rigid bond restraints: 4 *Sorted by residual: *scatterers O16 * N8 * delta_z sigma weight residual * -3.96e-03 2.00e-01 2.50e+01 3.92e-04 *scatterers C1 * C2 * delta_z sigma weight residual * 1.08e-03 2.00e-01 2.50e+01 2.89e-05 *scatterers C1 * O16 * delta_z sigma weight residual * 4.03e-04 2.58e-01 1.50e+01 2.44e-06 *scatterers N8 * C2 * delta_z sigma weight residual * -1.54e-04 1.83e-01 3.00e+01 7.16e-07 """) sio = StringIO() proxies.show_sorted( by_value="delta", sites_cart=sites_cart, u_cart=u_cart, f=sio, prefix="||", max_items=2) assert not show_diff(sio.getvalue(), """\ ||Rigid bond restraints: 4 ||Sorted by delta: ||scatterers 2 || 3 || delta_z sigma weight residual || -3.96e-03 2.00e-01 2.50e+01 3.92e-04 ||scatterers 0 || 1 || delta_z sigma weight residual || 1.08e-03 2.00e-01 2.50e+01 2.89e-05 ||... (remaining 2 not shown) """)
def exercise_adp_similarity(): u_cart = ((1,3,2,4,3,6),(2,4,2,6,5,1)) u_iso = (-1,-1) use_u_aniso = (True, True) weight = 1 a = adp_restraints.adp_similarity( u_cart=u_cart, weight=weight) assert approx_equal(a.use_u_aniso, use_u_aniso) assert a.weight == weight assert approx_equal(a.residual(), 68) assert approx_equal(a.gradients2(), ((-2.0, -2.0, 0.0, -8.0, -8.0, 20.0), (2.0, 2.0, -0.0, 8.0, 8.0, -20.0))) assert approx_equal(a.deltas(), (-1.0, -1.0, 0.0, -2.0, -2.0, 5.0)) assert approx_equal(a.rms_deltas(), 2.7487370837451071) # u_cart = ((1,3,2,4,3,6),(-1,-1,-1,-1,-1,-1)) u_iso = (-1,2) use_u_aniso = (True, False) a = adp_restraints.adp_similarity( u_cart[0], u_iso[1], weight=weight) assert approx_equal(a.use_u_aniso, use_u_aniso) assert a.weight == weight assert approx_equal(a.residual(), 124) assert approx_equal(a.gradients2(), ((-2, 2, 0, 16, 12, 24), (2, -2, 0, -16, -12, -24))) assert approx_equal(a.deltas(), (-1, 1, 0, 4, 3, 6)) assert approx_equal(a.rms_deltas(), 3.711842908553348) # i_seqs_aa = (1,2) # () - () i_seqs_ai = (1,0) # () - o i_seqs_ia = (3,2) # o - () i_seqs_ii = (0,3) # o - o p_aa = adp_restraints.adp_similarity_proxy(i_seqs=i_seqs_aa,weight=weight) p_ai = adp_restraints.adp_similarity_proxy(i_seqs=i_seqs_ai,weight=weight) p_ia = adp_restraints.adp_similarity_proxy(i_seqs=i_seqs_ia,weight=weight) p_ii = adp_restraints.adp_similarity_proxy(i_seqs=i_seqs_ii,weight=weight) assert p_aa.i_seqs == i_seqs_aa assert p_aa.weight == weight u_cart = flex.sym_mat3_double(((-1,-1,-1,-1,-1,-1), (1,2,2,4,3,6), (2,4,2,6,5,1), (-1,-1,-1,-1,-1,-1))) u_iso = flex.double((1,-1,-1,2)) use_u_aniso = flex.bool((False, True,True,False)) for p in (p_aa,p_ai,p_ia,p_ii): params = adp_restraint_params(u_cart=u_cart, u_iso=u_iso, use_u_aniso=use_u_aniso) a = adp_restraints.adp_similarity(params, proxy=p) assert approx_equal(a.weight, weight) # gradients_aniso_cart = flex.sym_mat3_double(u_cart.size(), (0,0,0,0,0,0)) gradients_iso = flex.double(u_cart.size(), 0) proxies = adp_restraints.shared_adp_similarity_proxy([p,p]) residuals = adp_restraints.adp_similarity_residuals(params, proxies=proxies) assert approx_equal(residuals, (a.residual(),a.residual())) deltas_rms = adp_restraints.adp_similarity_deltas_rms(params, proxies=proxies) assert approx_equal(deltas_rms, (a.rms_deltas(),a.rms_deltas())) residual_sum = adp_restraints.adp_similarity_residual_sum( params, proxies=proxies, gradients_aniso_cart=gradients_aniso_cart, gradients_iso=gradients_iso) assert approx_equal(residual_sum, 2 * a.residual()) fd_grads_aniso, fd_grads_iso = finite_difference_gradients( restraint_type=adp_restraints.adp_similarity, proxy=p, u_cart=u_cart, u_iso=u_iso, use_u_aniso=use_u_aniso) for g,e in zip(gradients_aniso_cart, fd_grads_aniso): assert approx_equal(g, matrix.col(e)*2) for g,e in zip(gradients_iso, fd_grads_iso): assert approx_equal(g, e*2) # # check frame invariance of residual # u_cart_1 = matrix.sym(sym_mat3=(0.1,0.2,0.05,0.03,0.02,0.01)) u_cart_2 = matrix.sym(sym_mat3=(0.21,0.32,0.11,0.02,0.02,0.07)) u_cart = (u_cart_1.as_sym_mat3(),u_cart_2.as_sym_mat3()) u_iso = (-1, -1) use_u_aniso = (True, True) a = adp_restraints.adp_similarity(u_cart, weight=1) expected_residual = a.residual() gen = flex.mersenne_twister() for i in range(20): R = matrix.rec(gen.random_double_r3_rotation_matrix(),(3,3)) u_cart_1_rot = R * u_cart_1 * R.transpose() u_cart_2_rot = R * u_cart_2 * R.transpose() u_cart = (u_cart_1_rot.as_sym_mat3(),u_cart_2_rot.as_sym_mat3()) a = adp_restraints.adp_similarity(u_cart, weight=1) assert approx_equal(a.residual(), expected_residual)
def exercise_proxy_show(): if sys.platform.startswith("win") and sys.version_info[:2] < (2,6): # This appears to be a windows-specific bug with string formatting # for python versions prior to 2.6, where the exponent is printed # with 3 digits rather than 2. print "Skipping exercise_proxy_show()" return sites_cart = flex.vec3_double(( (-3.1739,10.8317,7.5653),(-2.5419,9.7567,6.6306), (-3.3369,8.8794,4.5191),(-3.4640,9.9882,5.3896))) site_labels = ("C1", "C2", "O16", "N8") u_cart = flex.sym_mat3_double(( (0.0153,0.0206,0.0234,0.0035,-0.0052,-0.0051), (0.0185,0.0109,0.0206,0.0005,-0.0010,0.0002), (0.0295,0.0203,0.0218,-0.0010,-0.0003,-0.0044), (0.0159,0.0154,0.0206,-0.0003,0.0004,0.0036))) u_iso = flex.double((-1,-1,-1,-1)) use_u_aniso = flex.bool((True,True,True,True)) # proxies = adp_restraints.shared_adp_similarity_proxy() sio = StringIO() proxies.show_sorted( by_value="residual", u_cart=flex.sym_mat3_double(), u_iso=flex.double(), use_u_aniso=flex.bool(), f=sio) assert not show_diff(sio.getvalue(), """\ ADP similarity restraints: 0 """) proxies = adp_restraints.shared_adp_similarity_proxy([ adp_restraints.adp_similarity_proxy(i_seqs=[0,1],weight=25), adp_restraints.adp_similarity_proxy(i_seqs=[2,3],weight=0.3)]) sio = StringIO() proxies.show_sorted( by_value="residual", u_cart=u_cart, u_iso=u_iso, use_u_aniso=use_u_aniso, f=sio, prefix=":") assert not show_diff(sio.getvalue(), """\ :ADP similarity restraints: 2 :Sorted by residual: :scatterers 0 : 1 : delta sigma weight rms_deltas residual : U11 -3.20e-03 2.00e-01 2.50e+01 4.96e-03 5.54e-03 : U22 9.70e-03 2.00e-01 2.50e+01 : U33 2.80e-03 2.00e-01 2.50e+01 : U12 3.00e-03 2.00e-01 2.50e+01 : U13 -4.20e-03 2.00e-01 2.50e+01 : U23 -5.30e-03 2.00e-01 2.50e+01 :scatterers 2 : 3 : delta sigma weight rms_deltas residual : U11 1.36e-02 1.83e+00 3.00e-01 6.15e-03 1.02e-04 : U22 4.90e-03 1.83e+00 3.00e-01 : U33 1.20e-03 1.83e+00 3.00e-01 : U12 -7.00e-04 1.83e+00 3.00e-01 : U13 -7.00e-04 1.83e+00 3.00e-01 : U23 -8.00e-03 1.83e+00 3.00e-01 """) sio = StringIO() proxies.show_sorted( by_value="rms_deltas", site_labels=site_labels, u_cart=u_cart, u_iso=flex.double((0.024,0.031,0.021,0.028)), use_u_aniso=flex.bool((False,False,False,False)), f=sio, prefix="=") assert not show_diff(sio.getvalue(), """\ =ADP similarity restraints: 2 =Sorted by rms_deltas: =scatterers C1 = C2 = delta sigma weight residual = Uiso -7.00e-03 2.00e-01 2.50e+01 1.22e-03 =scatterers O16 = N8 = delta sigma weight residual = Uiso -7.00e-03 1.83e+00 3.00e-01 1.47e-05 """) # proxies = adp_restraints.shared_isotropic_adp_proxy() sio = StringIO() proxies.show_sorted( by_value="residual", u_cart=flex.sym_mat3_double(), u_iso=u_iso, use_u_aniso=use_u_aniso, f=sio) assert not show_diff(sio.getvalue(), """\ Isotropic ADP restraints: 0 """) proxies = adp_restraints.shared_isotropic_adp_proxy([ adp_restraints.isotropic_adp_proxy(i_seqs=(0,),weight=25), adp_restraints.isotropic_adp_proxy(i_seqs=(2,),weight=0.3)]) sio = StringIO() proxies.show_sorted( by_value="residual", site_labels=site_labels, u_cart=u_cart, u_iso=u_iso, use_u_aniso=use_u_aniso, f=sio, prefix=" ") assert not show_diff(sio.getvalue(), """\ Isotropic ADP restraints: 2 Sorted by residual: scatterer C1 delta sigma weight rms_deltas residual U11 -4.47e-03 2.00e-01 2.50e+01 4.27e-03 4.11e-03 U22 8.33e-04 2.00e-01 2.50e+01 U33 3.63e-03 2.00e-01 2.50e+01 U12 3.50e-03 2.00e-01 2.50e+01 U13 -5.20e-03 2.00e-01 2.50e+01 U23 -5.10e-03 2.00e-01 2.50e+01 scatterer O16 delta sigma weight rms_deltas residual U11 5.63e-03 1.83e+00 3.00e-01 3.16e-03 2.69e-05 U22 -3.57e-03 1.83e+00 3.00e-01 U33 -2.07e-03 1.83e+00 3.00e-01 U12 -1.00e-03 1.83e+00 3.00e-01 U13 -3.00e-04 1.83e+00 3.00e-01 U23 -4.40e-03 1.83e+00 3.00e-01 """) sio = StringIO() proxies.show_sorted( by_value="rms_deltas", u_cart=u_cart, u_iso=u_iso, use_u_aniso=use_u_aniso, f=sio, prefix="$") assert not show_diff(sio.getvalue(), """\ $Isotropic ADP restraints: 2 $Sorted by rms_deltas: $scatterer 0 $ delta sigma weight rms_deltas residual $ U11 -4.47e-03 2.00e-01 2.50e+01 4.27e-03 4.11e-03 $ U22 8.33e-04 2.00e-01 2.50e+01 $ U33 3.63e-03 2.00e-01 2.50e+01 $ U12 3.50e-03 2.00e-01 2.50e+01 $ U13 -5.20e-03 2.00e-01 2.50e+01 $ U23 -5.10e-03 2.00e-01 2.50e+01 $scatterer 2 $ delta sigma weight rms_deltas residual $ U11 5.63e-03 1.83e+00 3.00e-01 3.16e-03 2.69e-05 $ U22 -3.57e-03 1.83e+00 3.00e-01 $ U33 -2.07e-03 1.83e+00 3.00e-01 $ U12 -1.00e-03 1.83e+00 3.00e-01 $ U13 -3.00e-04 1.83e+00 3.00e-01 $ U23 -4.40e-03 1.83e+00 3.00e-01 """) # proxies = adp_restraints.shared_rigid_bond_proxy() sio = StringIO() proxies.show_sorted( by_value="residual", sites_cart=flex.vec3_double(), u_cart=flex.sym_mat3_double(), f=sio) assert not show_diff(sio.getvalue(), """\ Rigid bond restraints: 0 """) proxies = adp_restraints.shared_rigid_bond_proxy([ adp_restraints.rigid_bond_proxy(i_seqs=(0,1),weight=25), adp_restraints.rigid_bond_proxy(i_seqs=(0,2),weight=15), adp_restraints.rigid_bond_proxy(i_seqs=(2,3),weight=25), adp_restraints.rigid_bond_proxy(i_seqs=(3,1),weight=30)]) sio = StringIO() proxies.show_sorted( by_value="residual", sites_cart=sites_cart, site_labels=site_labels, u_cart=u_cart, f=sio, prefix="*") assert not show_diff(sio.getvalue(), """\ *Rigid bond restraints: 4 *Sorted by residual: *scatterers O16 * N8 * delta_z sigma weight residual * -3.96e-03 2.00e-01 2.50e+01 3.92e-04 *scatterers C1 * C2 * delta_z sigma weight residual * 1.08e-03 2.00e-01 2.50e+01 2.89e-05 *scatterers C1 * O16 * delta_z sigma weight residual * 4.03e-04 2.58e-01 1.50e+01 2.44e-06 *scatterers N8 * C2 * delta_z sigma weight residual * -1.54e-04 1.83e-01 3.00e+01 7.16e-07 """) sio = StringIO() proxies.show_sorted( by_value="delta", sites_cart=sites_cart, u_cart=u_cart, f=sio, prefix="||", max_items=2) assert not show_diff(sio.getvalue(), """\ ||Rigid bond restraints: 4 ||Sorted by delta: ||scatterers 2 || 3 || delta_z sigma weight residual || -3.96e-03 2.00e-01 2.50e+01 3.92e-04 ||scatterers 0 || 1 || delta_z sigma weight residual || 1.08e-03 2.00e-01 2.50e+01 2.89e-05 ||... (remaining 2 not shown) """)