def test__random_int(self): val = 10 rnd = OrbRing.random_int(val) print(rnd) assert rnd in range(-val, val + 1)
def random( self, coef_bnd = 3, random_pmat = True ): ''' Sets (restricted) random values for "self.omat", "self.vmat" and "self.pmat". Parameters ---------- coef_bnd : int Positive integer. random_pmat : boolean Returns ------- self Notes ----- The translation coefficients of "self.vmat" are in the interval: [-coef_bnd, +coef_bnd]. If "random_pmat== True", then "self.pmat" is set to a random value (P1), and otherwise "self.pmat" is set to a standard projection (P0). ''' ch_lst = ['r', 's', 'p', 'm', 'a'] # # random self.pmat # Pn = {True:'P1', False:'P0'}[random_pmat] self.pmat = get_mat( Pn, 'I', 'I' ) self.info_dct['pmat'] = ( Pn, 'I', 'I' ) # # random self.omat # rnd = OrbRing.random_elt( [0, 1] ) if rnd == 0: ch_str = ''.join( [OrbRing.random_elt( ch_lst ) for i in range( 4 ) ] ) B_str = 'O' + ch_str rnd2 = OrbRing.random_elt( [0, 1] ) if rnd2 == 0: A_str = 'I' C_str = 'I' else: p = sage_Permutations( range( 1, 8 + 1 ) ) rp = p.random_element() rpI = sage_Permutation( rp ).inverse() A_str = 'E' + str( list( rpI ) ) C_str = 'E' + str( list( rp ) ) elif rnd == 1: A_str = 'I' B_str = 'tT' C_str = 'I' self.omat = get_mat( A_str, B_str, C_str ) self.info_dct['omat'] = ( A_str, B_str, C_str ) # # random self.vmat # # All the coefficients are bound by coef_size-n for some integer n. coef_size = OrbRing.random_elt( range( 1, coef_bnd + 1 ) ) # A -- self.vmat t_lst = [OrbRing.random_int( coef_size ) for i in range( 7 )] A_str = 'T' + str( t_lst ) # B -- self.vmat" # note that small angles means small coefficients angle_lst = [ OrbRing.random_elt( range( 0, 360 ) ) for i in range( 4 ) ] ch_str = ''.join( [OrbRing.random_elt( ch_lst ) for i in range( 4 ) ] ) B_str = 'R' + ch_str + str( angle_lst ) # C -- self.vmat rnd = OrbRing.random_elt( [0, 1, 2] ) if rnd == 0: C_str = 'T' + str( [-t_lst[i] for i in range( 7 )] ) # inverse elif rnd == 1: C_str = 'T' + str( [OrbRing.random_int( coef_size ) for i in range( 7 )] ) elif rnd == 2: C_str = 'I' # A*B*C -- self.vmat self.vmat = get_mat( A_str, B_str, C_str ) self.info_dct['vmat'] = ( A_str, B_str, C_str ) return self