Fix imports in symmetries.py

Former-commit-id: 54104859c5858f92fdef0250991802629003e144
This commit is contained in:
Marek Nečada 2019-12-19 05:30:46 +02:00
parent dc5d2cde0b
commit b6e6554323
1 changed files with 49 additions and 47 deletions

View File

@ -5,10 +5,12 @@ from cmath import exp, pi
from math import sqrt from math import sqrt
import numpy as np import numpy as np
np.set_printoptions(linewidth=200) np.set_printoptions(linewidth=200)
import qpms
import numbers import numbers
import re import re
ň = None ň = None
from .tmatrices import zflip_tyty, xflip_tyty, yflip_tyty, zrotN_tyty, WignerD_yy_fromvector, identity_tyty, apply_ndmatrix_left
from .cyquaternions import IRot3
from .cycommon import get_mn_y
s3long = np.sqrt(np.longdouble(3.)) s3long = np.sqrt(np.longdouble(3.))
@ -66,7 +68,7 @@ class SVWFPointGroupInfo: # only for point groups, coz in svwf_rep() I use I_tyt
self.rep3d_gens = rep3d_gens self.rep3d_gens = rep3d_gens
self.rep3d = None if rep3d_gens is None else generate_grouprep( self.rep3d = None if rep3d_gens is None else generate_grouprep(
self.permgroup, self.permgroup,
qpms.IRot3(), IRot3(),
permgroupgens, rep3d_gens, permgroupgens, rep3d_gens,
immultop = None, imcmp = (lambda x, y: x.isclose(y)) immultop = None, imcmp = (lambda x, y: x.isclose(y))
) )
@ -81,7 +83,7 @@ class SVWFPointGroupInfo: # only for point groups, coz in svwf_rep() I use I_tyt
This method generates full SVWF (reducible) representation of the group. This method generates full SVWF (reducible) representation of the group.
''' '''
svwfgens = self.svwf_rep_gen_func(lMax, *rep_gen_func_args, **rep_gen_func_kwargs) svwfgens = self.svwf_rep_gen_func(lMax, *rep_gen_func_args, **rep_gen_func_kwargs)
my, ny = qpms.get_mn_y(lMax) my, ny = get_mn_y(lMax)
nelem = len(my) nelem = len(my)
I_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * np.eye(nelem), 2,1) I_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * np.eye(nelem), 2,1)
return generate_grouprep(self.permgroup, I_tyty, self.permgroupgens, svwfgens, immultop = mmult_tyty, imcmp = np.allclose) return generate_grouprep(self.permgroup, I_tyty, self.permgroupgens, svwfgens, immultop = mmult_tyty, imcmp = np.allclose)
@ -206,9 +208,9 @@ nun = np.array(((-1/2,s3long/2),(s3long/2,1/2)))
def mmult_tyty(a, b): def mmult_tyty(a, b):
return(qpms.apply_ndmatrix_left(a, b, (-4,-3))) return(apply_ndmatrix_left(a, b, (-4,-3)))
def mmult_ptypty(a, b): def mmult_ptypty(a, b):
return(qpms.apply_ndmatrix_left(a, b, (-6,-5,-4))) return(apply_ndmatrix_left(a, b, (-6,-5,-4)))
def gen_point_group_svwfrep_irreps(permgroup, matrix_irreps_dict, sphrep_full): def gen_point_group_svwfrep_irreps(permgroup, matrix_irreps_dict, sphrep_full):
''' '''
@ -346,14 +348,14 @@ def gen_point_D3h_svwf_rep(lMax, vflip = 'x'):
as an array with indices [k,l,t,y,t,y] as an array with indices [k,l,t,y,t,y]
''' '''
my, ny = qpms.get_mn_y(lMax) my, ny = get_mn_y(lMax)
nelem = len(my) nelem = len(my)
C3_yy = qpms.WignerD_yy_fromvector(lMax, np.array([0,0,2*pi/3])) C3_yy = WignerD_yy_fromvector(lMax, np.array([0,0,2*pi/3]))
C3_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * C3_yy, 2,1) C3_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * C3_yy, 2,1)
zfl_tyty = qpms.zflip_tyty(lMax) zfl_tyty = zflip_tyty(lMax)
#yfl_tyty = qpms.yflip_tyty(lMax) #yfl_tyty = yflip_tyty(lMax)
#xfl_tyty = qpms.xflip_tyty(lMax) #xfl_tyty = xflip_tyty(lMax)
vfl_tyty = qpms.yflip_tyty(lMax) if vflip == 'y' else qpms.xflip_tyty(lMax) vfl_tyty = yflip_tyty(lMax) if vflip == 'y' else xflip_tyty(lMax)
I_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * np.eye(nelem), 2,1) I_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * np.eye(nelem), 2,1)
order = D3h_permgroup.order() order = D3h_permgroup.order()
sphrep_full = generate_grouprep(D3h_permgroup, I_tyty, D3h_srcgens, [C3_tyty, vfl_tyty, zfl_tyty], sphrep_full = generate_grouprep(D3h_permgroup, I_tyty, D3h_srcgens, [C3_tyty, vfl_tyty, zfl_tyty],
@ -382,14 +384,14 @@ def gen_point_D3h_svwf_rep(lMax, vflip = 'x'):
return sphreps return sphreps
def gen_hexlattice_Kpoint_svwf_rep(lMax, psi, vflip = 'x'): def gen_hexlattice_Kpoint_svwf_rep(lMax, psi, vflip = 'x'):
my, ny = qpms.get_mn_y(lMax) my, ny = get_mn_y(lMax)
nelem = len(my) nelem = len(my)
C3_yy = qpms.WignerD_yy_fromvector(lMax, np.array([0,0,2*pi/3])) C3_yy = WignerD_yy_fromvector(lMax, np.array([0,0,2*pi/3]))
C3_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * C3_yy, 2,1) C3_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * C3_yy, 2,1)
zfl_tyty = qpms.zflip_tyty(lMax) zfl_tyty = zflip_tyty(lMax)
#yfl_tyty = qpms.yflip_tyty(lMax) #yfl_tyty = yflip_tyty(lMax)
#xfl_tyty = qpms.xflip_tyty(lMax) #xfl_tyty = xflip_tyty(lMax)
vfl_tyty = qpms.yflip_tyty(lMax) if vflip == 'y' else qpms.xflip_tyty(lMax) vfl_tyty = yflip_tyty(lMax) if vflip == 'y' else xflip_tyty(lMax)
I_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * np.eye(nelem), 2,1) I_tyty = np.moveaxis(np.eye(2)[:,:,ň,ň] * np.eye(nelem), 2,1)
hex_C3_K_ptypty = np.diag([exp(-psi*1j*2*pi/3),exp(+psi*1j*2*pi/3)])[:,ň,ň,:,ň,ň] * C3_tyty[ň,:,:,ň,:,:] hex_C3_K_ptypty = np.diag([exp(-psi*1j*2*pi/3),exp(+psi*1j*2*pi/3)])[:,ň,ň,:,ň,ň] * C3_tyty[ň,:,:,ň,:,:]
hex_zfl_ptypty = np.eye(2)[:,ň,ň,:,ň,ň] * zfl_tyty[ň,:,:,ň,:,:] hex_zfl_ptypty = np.eye(2)[:,ň,ň,:,ň,ň] * zfl_tyty[ň,:,:,ň,:,:]
@ -492,10 +494,10 @@ point_group_info = { # representation info of some useful point groups
"A" : (1,), "A" : (1,),
}, },
# function that generates a tuple with svwf representation generators # function that generates a tuple with svwf representation generators
lambda lMax : (qpms.identity_tyty(lMax),), lambda lMax : (identity_tyty(lMax),),
# quaternion rep generators # quaternion rep generators
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.identity(), IRot3.identity(),
) )
), ),
'C2' : SVWFPointGroupInfo('C2', 'C2' : SVWFPointGroupInfo('C2',
@ -509,10 +511,10 @@ point_group_info = { # representation info of some useful point groups
'B': (-1,), 'B': (-1,),
}, },
# function that generates a tuple with svwf representation generators # function that generates a tuple with svwf representation generators
lambda lMax : (qpms.zrotN_tyty(2, lMax),), lambda lMax : (zrotN_tyty(2, lMax),),
# quaternion rep generators # quaternion rep generators
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.zrotN(2), IRot3.zrotN(2),
) )
), ),
@ -530,11 +532,11 @@ point_group_info = { # representation info of some useful point groups
'B1': (1,-1), 'B1': (1,-1),
}, },
# function that generates a tuple with svwf representation generators # function that generates a tuple with svwf representation generators
lambda lMax : (qpms.xflip_tyty(lMax), qpms.yflip_tyty(lMax)), lambda lMax : (xflip_tyty(lMax), yflip_tyty(lMax)),
# quaternion rep generators # quaternion rep generators
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.xflip(), IRot3.xflip(),
qpms.IRot3.yflip(), IRot3.yflip(),
) )
), ),
@ -559,12 +561,12 @@ point_group_info = { # representation info of some useful point groups
"B1''": (-1,1,-1), "B1''": (-1,1,-1),
}, },
# function that generates a tuple with svwf representation generators # function that generates a tuple with svwf representation generators
lambda lMax : (qpms.xflip_tyty(lMax), qpms.yflip_tyty(lMax), qpms.zflip_tyty(lMax)), lambda lMax : (xflip_tyty(lMax), yflip_tyty(lMax), zflip_tyty(lMax)),
# quaternion rep generators # quaternion rep generators
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.xflip(), IRot3.xflip(),
qpms.IRot3.yflip(), IRot3.yflip(),
qpms.IRot3.zflip(), IRot3.zflip(),
) )
), ),
'C4' : SVWFPointGroupInfo('C4', 'C4' : SVWFPointGroupInfo('C4',
@ -579,10 +581,10 @@ point_group_info = { # representation info of some useful point groups
'2E': (1j,), '2E': (1j,),
}, },
# function that generates a tuple with svwf representation generators # function that generates a tuple with svwf representation generators
lambda lMax : (qpms.zrotN_tyty(4, lMax), ), lambda lMax : (zrotN_tyty(4, lMax), ),
# quaternion rep generators # quaternion rep generators
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.zrotN(4), IRot3.zrotN(4),
) )
), ),
'C4v' : SVWFPointGroupInfo('C4v', 'C4v' : SVWFPointGroupInfo('C4v',
@ -600,11 +602,11 @@ point_group_info = { # representation info of some useful point groups
'B2': (-1,-1), 'B2': (-1,-1),
}, },
# function that generates a tuple with svwf representation generators # function that generates a tuple with svwf representation generators
lambda lMax : (qpms.zrotN_tyty(4, lMax), qpms.xflip_tyty(lMax)), lambda lMax : (zrotN_tyty(4, lMax), xflip_tyty(lMax)),
# quaternion rep generators # quaternion rep generators
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.zrotN(4), IRot3.zrotN(4),
qpms.IRot3.xflip(), IRot3.xflip(),
) )
), ),
'D4h' : SVWFPointGroupInfo('D4h', 'D4h' : SVWFPointGroupInfo('D4h',
@ -627,12 +629,12 @@ point_group_info = { # representation info of some useful point groups
"B2''": (-1,1,-1), "B2''": (-1,1,-1),
}, },
# function that generates a tuple with svwf representation generators # function that generates a tuple with svwf representation generators
lambda lMax : (qpms.zrotN_tyty(4, lMax), qpms.xflip_tyty(lMax), qpms.zflip_tyty(lMax)), lambda lMax : (zrotN_tyty(4, lMax), xflip_tyty(lMax), zflip_tyty(lMax)),
# quaternion rep generators # quaternion rep generators
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.zrotN(4), IRot3.zrotN(4),
qpms.IRot3.xflip(), IRot3.xflip(),
qpms.IRot3.zflip(), IRot3.zflip(),
) )
), ),
'D3h' : SVWFPointGroupInfo('D3h', 'D3h' : SVWFPointGroupInfo('D3h',
@ -652,12 +654,12 @@ point_group_info = { # representation info of some useful point groups
"A2''" : (1,1,-1), "A2''" : (1,1,-1),
}, },
# function that generates a tuple with svwf representation generators # function that generates a tuple with svwf representation generators
lambda lMax, vflip: (qpms.zrotN_tyty(3, lMax), qpms.yflip_tyty(lMax) if vflip == 'y' else qpms.xflip_tyty(lMax), qpms.zflip_tyty(lMax)), lambda lMax, vflip: (zrotN_tyty(3, lMax), yflip_tyty(lMax) if vflip == 'y' else xflip_tyty(lMax), zflip_tyty(lMax)),
# quaternion rep generators # quaternion rep generators
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.zrotN(3), IRot3.zrotN(3),
qpms.IRot3.xflip(), # if vflip == 'y' else qpms.IRot3.xflip(), # FIXME enable to choose IRot3.xflip(), # if vflip == 'y' else IRot3.xflip(), # FIXME enable to choose
qpms.IRot3.zflip(), IRot3.zflip(),
) )
), ),
'x_and_z_flip': SVWFPointGroupInfo( 'x_and_z_flip': SVWFPointGroupInfo(
@ -672,10 +674,10 @@ point_group_info = { # representation info of some useful point groups
"P''": (-1,-1), "P''": (-1,-1),
"R''": (1, -1), "R''": (1, -1),
}, },
lambda lMax : (qpms.xflip_tyty(lMax), qpms.zflip_tyty(lMax)), lambda lMax : (xflip_tyty(lMax), zflip_tyty(lMax)),
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.xflip(), IRot3.xflip(),
qpms.IRot3.zflip(), IRot3.zflip(),
) )
), ),
@ -691,10 +693,10 @@ point_group_info = { # representation info of some useful point groups
"P''": (-1,-1), "P''": (-1,-1),
"R''": (1, -1), "R''": (1, -1),
}, },
lambda lMax : (qpms.yflip_tyty(lMax), qpms.zflip_tyty(lMax)), lambda lMax : (yflip_tyty(lMax), zflip_tyty(lMax)),
rep3d_gens = ( rep3d_gens = (
qpms.IRot3.yflip(), IRot3.yflip(),
qpms.IRot3.zflip(), IRot3.zflip(),
) )
), ),
} }