source: trunk/testinp/genselftest.py

Last change on this file was 57, checked in by toby, 12 years ago

fixup unit test for GSASIIspg.py; provide files & Makefile for pyspg.for

File size: 10.0 KB
Line 
1'''
2 this generates space group tables for all 230 space groups in
3 standard settings using the GSASIIspc.SpcGroup routine. A number
4 of redundant tests are computed, so more than 230 test cases are generated.
5
6 The output from this is placed in spctestinp.py which contains two dictionaries,
7 SGdat and SGlist that can be used for testing.
8
9'''
10import sys
11import datetime
12sys.path.append('..')
13import GSASIIspc
14
15sgdat = {}
16sglist = {}
17def GenSGdat(spc):
18    (E,D) = GSASIIspc.SpcGroup(spc)
19    if E: 
20        print >> sys.stderr, "error on: ",spc
21    else:
22        sgdat[spc] = D
23        sglist[spc] = GSASIIspc.SGPrint(D)
24
25duplist = []
26######################################################################
27#cubic (36)
28######################################################################
29GenSGdat('p 2 3')
30GenSGdat('f 2 3')
31GenSGdat('i 2 3')
32GenSGdat('p 21 3')
33GenSGdat('i 21 3')
34GenSGdat('p m 3')
35GenSGdat('p n -3')
36GenSGdat('f m 3')
37GenSGdat('f d 3')
38GenSGdat('i m 3')
39GenSGdat('p a 3')
40GenSGdat('i a 3')
41GenSGdat('p 4 3 2')
42GenSGdat('p 42 3 2')
43GenSGdat('f 4 3 2')
44GenSGdat('f 41 3 2')
45GenSGdat('i 4 3 2')
46GenSGdat('p 43 3 2')
47GenSGdat('p 41 3 2')
48GenSGdat('i 41 3 2')
49GenSGdat('p -4 3 m')
50GenSGdat('f -4 3 m')
51GenSGdat('i -4 3 m')
52GenSGdat('p -4 3 n')
53GenSGdat('f -4 3 c')
54GenSGdat('i -4 3 d')
55GenSGdat('p m -3 m')
56GenSGdat('p n -3 n')
57GenSGdat('p m -3 n')
58GenSGdat('p n -3 m')
59GenSGdat('f m -3 m')
60GenSGdat('f m -3 c')
61GenSGdat('f d -3 m')
62GenSGdat('f d -3 c')
63GenSGdat('i m -3 m')
64GenSGdat('i a -3 d')
65# duplicates (IT A naming)
66GenSGdat('p m -3') # dup: as before
67duplist.append(('p m 3', 'p m -3'))
68GenSGdat('f m -3') # dup: as before
69duplist.append(('f m 3','f m -3'))
70GenSGdat('f d -3') # dup: as before
71duplist.append(('f d 3','f d -3'))
72GenSGdat('i m -3') # dup: as before
73duplist.append(('i m 3','i m -3'))
74GenSGdat('p a -3') # dup: as before
75duplist.append(('p a 3','p a -3'))
76GenSGdat('i a -3') # dup: as before
77duplist.append(('i a 3','i a -3'))
78######################################################################
79# ortho (59)
80######################################################################
81GenSGdat('p 2 2 2')
82GenSGdat('p 2 2 21')
83GenSGdat('p 21 21 2')
84GenSGdat('p 21 21 21')
85GenSGdat('c 2 2 21')
86GenSGdat('c 2 2 2')
87GenSGdat('f 2 2 2')
88GenSGdat('i 2 2 2')
89GenSGdat('i 21 21 21')
90GenSGdat('p m m 2')
91GenSGdat('p m c 21')
92GenSGdat('p c c 2')
93GenSGdat('p m a 2')
94GenSGdat('p c a 21')
95GenSGdat('p n c 2')
96GenSGdat('p m n 21')
97GenSGdat('p b a 2')
98GenSGdat('p n a 21')
99GenSGdat('p n n 2')
100GenSGdat('c m m 2')
101GenSGdat('c m c 21')
102GenSGdat('c c c 2')
103GenSGdat('a m m 2')
104GenSGdat('a b m 2')
105GenSGdat('a m a 2')
106GenSGdat('a b a 2')
107GenSGdat('f m m 2')
108GenSGdat('f d d 2')
109GenSGdat('i m m 2')
110GenSGdat('i b a 2')
111GenSGdat('i m a 2')
112GenSGdat('p m m m')
113GenSGdat('p n n n')
114GenSGdat('p c c m')
115GenSGdat('p b a n')
116GenSGdat('p m m a')
117GenSGdat('p n n a')
118GenSGdat('p m n a')
119GenSGdat('p c c a')
120GenSGdat('p b a m')
121GenSGdat('p c c n')
122GenSGdat('p b c m')
123GenSGdat('p n n m')
124GenSGdat('p m m n')
125GenSGdat('p b c n')
126GenSGdat('p b c a')
127GenSGdat('p n m a')
128GenSGdat('c m c m')
129GenSGdat('c m c a')
130GenSGdat('c m m m')
131GenSGdat('c c c m')
132GenSGdat('c m m a')
133GenSGdat('c c c a')
134GenSGdat('f m m m')
135GenSGdat('f d d d')
136GenSGdat('i m m m')
137GenSGdat('i b a m')
138GenSGdat('i b c a')
139GenSGdat('i m m a')
140######################################################################
141# tetragonal (68)
142######################################################################
143GenSGdat('p 4')
144GenSGdat('p 41')
145GenSGdat('p 42')
146GenSGdat('p 43')
147GenSGdat('i 4')
148GenSGdat('i 41')
149GenSGdat('p -4')
150GenSGdat('i -4')
151GenSGdat('p 4/m')
152GenSGdat('p 42/m')
153GenSGdat('p 4/n')
154GenSGdat('p 42/n')
155GenSGdat('i 4/m')
156GenSGdat('i 41/a')
157GenSGdat('p 4 2 2')
158GenSGdat('p 4 21 2')
159GenSGdat('p 41 2 2')
160GenSGdat('p 41 21 2')
161GenSGdat('p 42 2 2')
162GenSGdat('p 42 21 2')
163GenSGdat('p 43 2 2')
164GenSGdat('p 43 21 2')
165GenSGdat('i 4 2 2')
166GenSGdat('i 41 2 2')
167GenSGdat('p 4 m m')
168GenSGdat('p 4 b m')
169GenSGdat('p 42 c m')
170GenSGdat('p 42 n m')
171GenSGdat('p 4 c c')
172GenSGdat('p 4 n c')
173GenSGdat('p 42 m c')
174GenSGdat('p 42 b c')
175GenSGdat('i 4 m m')
176GenSGdat('i 4 c m')
177GenSGdat('i 41 m d')
178GenSGdat('i 41 c d')
179GenSGdat('p -4 2 m')
180GenSGdat('p -4 2 c')
181GenSGdat('p -4 21 m')
182GenSGdat('p -4 21 c')
183GenSGdat('p -4 m 2')
184GenSGdat('p -4 c 2')
185GenSGdat('p -4 b 2')
186GenSGdat('p -4 n 2')
187GenSGdat('i -4 m 2')
188GenSGdat('i -4 c 2')
189GenSGdat('i -4 2 m')
190GenSGdat('i -4 2 d')
191GenSGdat('p 4/m m m')
192GenSGdat('p 4/m c c')
193GenSGdat('p 4/n b m')
194GenSGdat('p 4/n n c')
195GenSGdat('p 4/m b m')
196GenSGdat('p 4/m n c')
197GenSGdat('p 4/n m m')
198GenSGdat('p 4/n c c')
199GenSGdat('p 42/m m c')
200GenSGdat('p 42/m c m')
201GenSGdat('p 42/n b c')
202GenSGdat('p 42/n n m')
203GenSGdat('p 42/m b c')
204GenSGdat('p 42/m n m')
205GenSGdat('p 42/n m c')
206GenSGdat('p 42/n c m')
207GenSGdat('i 4/m m m')
208GenSGdat('i 4/m c m ')
209GenSGdat('i 41/a m d')
210GenSGdat('i 41/a c d')
211# duplicate -- note gives wrong Laue class
212#GenSGdat('i 41 1 1') # dup: as before
213#duplist.append(('i 41','i 41 1 1'))
214#GenSGdat('p 4/n 1 ') # does not work
215######################################################################
216# triclinic (2)
217######################################################################
218GenSGdat('p 1')
219GenSGdat('p -1')
220######################################################################
221# monoclinic (13)
222######################################################################
223GenSGdat('p 2')
224GenSGdat('p 21')
225GenSGdat('c 2')
226GenSGdat('p m')
227GenSGdat('p c')
228GenSGdat('c m')
229GenSGdat('c c')
230GenSGdat('p 2/m')
231GenSGdat('p 21/m')
232GenSGdat('c 2/m')
233GenSGdat('p 2/c')
234GenSGdat('p 21/c')
235GenSGdat('c 2/c')
236# duplicates
237GenSGdat('c 1 2 1') # dup: as before
238duplist.append(('c 2','c 1 2 1'))
239GenSGdat('c 1 2/c 1') # dup: as before
240duplist.append(('c 2/c','c 1 2/c 1'))
241GenSGdat('p 1 2/m 1') # dup: as before
242duplist.append(('p 2/m','p 1 2/m 1'))
243######################################################################
244# trigonal (25)
245######################################################################
246GenSGdat('p 3')
247GenSGdat('p 31')
248GenSGdat('p 32')
249GenSGdat('r 3')
250GenSGdat('p -3')
251GenSGdat('r -3')
252GenSGdat('p 3 1 2')
253GenSGdat('p 3 2 1')
254GenSGdat('p 31 1 2')
255GenSGdat('p 31 2 1')
256GenSGdat('p 32 1 2')
257GenSGdat('p 32 2 1')
258GenSGdat('r 3 2')
259GenSGdat('p 3 m 1')
260GenSGdat('p 3 1 m')
261GenSGdat('p 3 c 1')
262GenSGdat('p 3 1 c')
263GenSGdat('r 3 m')
264GenSGdat('r 3 c')
265GenSGdat('p -3 1 m')
266GenSGdat('p -3 1 c')
267GenSGdat('p -3 m 1')
268GenSGdat('p -3 c 1')
269GenSGdat('r -3 m') 
270GenSGdat('r -3 c')
271# duplicate
272GenSGdat('r 3 r') # dup: rhomb setting
273GenSGdat('r -3 r') # dup: rhomb setting
274GenSGdat('r 3 2 r') # dup: rhomb setting
275GenSGdat('r -3 c r') # dup: rhomb setting
276GenSGdat('r 3 m r') # dup: rhomb setting
277GenSGdat('r 3 c r') # dup: rhomb setting
278GenSGdat('r -3 m r') # dup: rhomb setting
279GenSGdat('p 32 1 1') # dup: as before
280duplist.append(('p 32','p 32 1 1'))
281GenSGdat('r 3 2 h') # dup: hex setting
282duplist.append(('r 3 2','r 3 2 h'))
283GenSGdat('r 3 m h') # dup: hex setting
284duplist.append(('r 3 m','r 3 m h'))
285######################################################################
286# hexagonal (27)
287######################################################################
288GenSGdat('p 6')
289GenSGdat('p 61')
290GenSGdat('p 65')
291GenSGdat('p 62')
292GenSGdat('p 64')
293GenSGdat('p 63')
294GenSGdat('p -6')
295GenSGdat('p 6/m')
296GenSGdat('p 63/m')
297GenSGdat('p 6 2 2')
298GenSGdat('p 61 2 2')
299GenSGdat('p 65 2 2')
300GenSGdat('p 62 2 2')
301GenSGdat('p 64 2 2')
302GenSGdat('p 63 2 2')
303GenSGdat('p 6 m m')
304GenSGdat('p 6 c c')
305GenSGdat('p 63 c m')
306GenSGdat('p 63 m c')
307GenSGdat('p -6 m 2')
308GenSGdat('p -6 c 2')
309GenSGdat('p -6 2 m')
310GenSGdat('p -6 2 c')
311GenSGdat('p 6/m m m')
312GenSGdat('p 6/m c c')
313GenSGdat('p 63/m c m')
314GenSGdat('p 63/m m c')
315# duplicate
316GenSGdat('p 65 1 1') # dup: as before
317duplist.append(('p 65','p 65 1 1'))
318GenSGdat('p 6/m 1 1') # dup: as before
319duplist.append(('p 6/m','p 6/m 1 1'))
320######################################################################
321# non-standard space group settings
322######################################################################G
323GenSGdat('p 1 1 2/m') # dup: non-standard
324GenSGdat('p 2/m 1 1') # dup: non-standard
325GenSGdat('F -1')      # dup: non-standard
326GenSGdat('a 2 2 2')   # dup: non-standard
327
328# do a bit of internal consistency checking
329import numpy as np
330array = np.array
331float32=np.float32
332# check for internal agreement with duplicates
333for key1,key2 in duplist:
334    msg = "checking %s against %s" % (key1, key2)
335    keys = sgdat[key1].keys()
336    assert len(keys) == len(sgdat[key2].keys()), msg
337    for key in keys:
338        if key == 'SGOps':
339            assert len(sgdat[key2][key]) == len(sgdat[key1][key]), msg
340            for i in range(len(sgdat[key2][key])):
341                assert np.allclose(sgdat[key1][key][i][0],sgdat[key2][key][i][0]), msg
342                assert np.allclose(sgdat[key1][key][i][1],sgdat[key2][key][i][1]), msg
343        elif key == 'SGCen':
344            assert len(sgdat[key2][key]) == len(sgdat[key1][key]), msg
345            for i in range(len(sgdat[key2][key])):
346                assert np.allclose(sgdat[key1][key][i][0],sgdat[key2][key][i][0]), msg
347                assert np.allclose(sgdat[key1][key][i][1],sgdat[key2][key][i][1]), msg
348        elif key == 'SpGrp': # expect this to differ
349            pass
350        else:
351            assert sgdat[key1][key] == sgdat[key2][key], msg+': key = '+key
352
353
354fp = open('spctestinp.py','w')
355fp.write("# output from GSASIIspc computed on platform %s on %s\n" %
356         (sys.platform, datetime.date.today()) )
357fp.write("import numpy as np\n")
358fp.write("array = np.array\n")
359fp.write("float32=np.float32\n")
360fp.write('# testing %s space groups (25 dups/non-standard)\n' % len(sgdat))
361fp.write('SGdat = {\n')
362for spc in sgdat:
363    fp.write('"%s": %s ,\n' % (spc,sgdat[spc],))
364fp.write("}\n")
365
366fp.write('SGlist = {\n')
367for spc in sgdat:
368    fp.write('"%s": %s ,\n' % (spc,sglist[spc],))
369fp.write("}\n")
370fp.close()
Note: See TracBrowser for help on using the repository browser.