diffpy.structure 3.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. diffpy/Structure.py +35 -0
  2. diffpy/__init__.py +23 -0
  3. diffpy/structure/__init__.py +93 -0
  4. diffpy/structure/_legacy_importer.py +88 -0
  5. diffpy/structure/apps/__init__.py +17 -0
  6. diffpy/structure/apps/anyeye.py +284 -0
  7. diffpy/structure/apps/transtru.py +126 -0
  8. diffpy/structure/atom.py +544 -0
  9. diffpy/structure/expansion/__init__.py +27 -0
  10. diffpy/structure/expansion/makeellipsoid.py +129 -0
  11. diffpy/structure/expansion/shapeutils.py +44 -0
  12. diffpy/structure/expansion/supercell_mod.py +91 -0
  13. diffpy/structure/lattice.py +663 -0
  14. diffpy/structure/mmlibspacegroups.py +8154 -0
  15. diffpy/structure/parsers/__init__.py +83 -0
  16. diffpy/structure/parsers/p_auto.py +217 -0
  17. diffpy/structure/parsers/p_cif.py +876 -0
  18. diffpy/structure/parsers/p_discus.py +312 -0
  19. diffpy/structure/parsers/p_pdb.py +405 -0
  20. diffpy/structure/parsers/p_pdffit.py +290 -0
  21. diffpy/structure/parsers/p_rawxyz.py +149 -0
  22. diffpy/structure/parsers/p_xcfg.py +457 -0
  23. diffpy/structure/parsers/p_xyz.py +161 -0
  24. diffpy/structure/parsers/parser_index_mod.py +108 -0
  25. diffpy/structure/parsers/structureparser.py +80 -0
  26. diffpy/structure/pdffitstructure.py +109 -0
  27. diffpy/structure/sgtbxspacegroups.py +5198 -0
  28. diffpy/structure/spacegroupmod.py +329 -0
  29. diffpy/structure/spacegroups.py +1441 -0
  30. diffpy/structure/structure.py +866 -0
  31. diffpy/structure/structureerrors.py +35 -0
  32. diffpy/structure/symmetryutilities.py +1100 -0
  33. diffpy/structure/utils.py +126 -0
  34. diffpy/structure/version.py +26 -0
  35. diffpy.structure-3.2.0.dist-info/AUTHORS.rst +13 -0
  36. diffpy.structure-3.2.0.dist-info/LICENSE.rst +141 -0
  37. diffpy.structure-3.2.0.dist-info/LICENSE_DANSE.rst +50 -0
  38. diffpy.structure-3.2.0.dist-info/LICENSE_pymmlib.rst +203 -0
  39. diffpy.structure-3.2.0.dist-info/METADATA +197 -0
  40. diffpy.structure-3.2.0.dist-info/RECORD +42 -0
  41. diffpy.structure-3.2.0.dist-info/WHEEL +5 -0
  42. diffpy.structure-3.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1441 @@
1
+ #!/usr/bin/env python
2
+ ##############################################################################
3
+ #
4
+ # diffpy.structure by DANSE Diffraction group
5
+ # Simon J. L. Billinge
6
+ # (c) 2011 Trustees of the Columbia University
7
+ # in the City of New York. All rights reserved.
8
+ #
9
+ # File coded by: Pavol Juhas
10
+ #
11
+ # See AUTHORS.txt for a list of people who contributed.
12
+ # See LICENSE_DANSE.txt for license information.
13
+ #
14
+ ##############################################################################
15
+
16
+ """Space group classes and definitions from mmLib and sgtbx.
17
+
18
+ Attributes
19
+ ----------
20
+ SpaceGroupList : list
21
+ List of all spacegroup definitions.
22
+ """
23
+
24
+ import copy
25
+ from itertools import zip_longest
26
+
27
+ from diffpy.structure.mmlibspacegroups import (
28
+ mmLibSpaceGroupList,
29
+ sg1,
30
+ sg2,
31
+ sg3,
32
+ sg4,
33
+ sg5,
34
+ sg6,
35
+ sg7,
36
+ sg8,
37
+ sg9,
38
+ sg10,
39
+ sg11,
40
+ sg12,
41
+ sg13,
42
+ sg14,
43
+ sg15,
44
+ sg16,
45
+ sg17,
46
+ sg18,
47
+ sg19,
48
+ sg20,
49
+ sg21,
50
+ sg22,
51
+ sg23,
52
+ sg24,
53
+ sg25,
54
+ sg26,
55
+ sg27,
56
+ sg28,
57
+ sg29,
58
+ sg30,
59
+ sg31,
60
+ sg32,
61
+ sg33,
62
+ sg34,
63
+ sg35,
64
+ sg36,
65
+ sg37,
66
+ sg38,
67
+ sg39,
68
+ sg40,
69
+ sg41,
70
+ sg42,
71
+ sg43,
72
+ sg44,
73
+ sg45,
74
+ sg46,
75
+ sg47,
76
+ sg48,
77
+ sg49,
78
+ sg50,
79
+ sg51,
80
+ sg52,
81
+ sg53,
82
+ sg54,
83
+ sg55,
84
+ sg56,
85
+ sg57,
86
+ sg58,
87
+ sg59,
88
+ sg60,
89
+ sg61,
90
+ sg62,
91
+ sg63,
92
+ sg64,
93
+ sg65,
94
+ sg66,
95
+ sg67,
96
+ sg68,
97
+ sg69,
98
+ sg70,
99
+ sg71,
100
+ sg72,
101
+ sg73,
102
+ sg74,
103
+ sg75,
104
+ sg76,
105
+ sg77,
106
+ sg78,
107
+ sg79,
108
+ sg80,
109
+ sg81,
110
+ sg82,
111
+ sg83,
112
+ sg84,
113
+ sg85,
114
+ sg86,
115
+ sg87,
116
+ sg88,
117
+ sg89,
118
+ sg90,
119
+ sg91,
120
+ sg92,
121
+ sg93,
122
+ sg94,
123
+ sg95,
124
+ sg96,
125
+ sg97,
126
+ sg98,
127
+ sg99,
128
+ sg100,
129
+ sg101,
130
+ sg102,
131
+ sg103,
132
+ sg104,
133
+ sg105,
134
+ sg106,
135
+ sg107,
136
+ sg108,
137
+ sg109,
138
+ sg110,
139
+ sg111,
140
+ sg112,
141
+ sg113,
142
+ sg114,
143
+ sg115,
144
+ sg116,
145
+ sg117,
146
+ sg118,
147
+ sg119,
148
+ sg120,
149
+ sg121,
150
+ sg122,
151
+ sg123,
152
+ sg124,
153
+ sg125,
154
+ sg126,
155
+ sg127,
156
+ sg128,
157
+ sg129,
158
+ sg130,
159
+ sg131,
160
+ sg132,
161
+ sg133,
162
+ sg134,
163
+ sg135,
164
+ sg136,
165
+ sg137,
166
+ sg138,
167
+ sg139,
168
+ sg140,
169
+ sg141,
170
+ sg142,
171
+ sg143,
172
+ sg144,
173
+ sg145,
174
+ sg146,
175
+ sg147,
176
+ sg148,
177
+ sg149,
178
+ sg150,
179
+ sg151,
180
+ sg152,
181
+ sg153,
182
+ sg154,
183
+ sg155,
184
+ sg156,
185
+ sg157,
186
+ sg158,
187
+ sg159,
188
+ sg160,
189
+ sg161,
190
+ sg162,
191
+ sg163,
192
+ sg164,
193
+ sg165,
194
+ sg166,
195
+ sg167,
196
+ sg168,
197
+ sg169,
198
+ sg170,
199
+ sg171,
200
+ sg172,
201
+ sg173,
202
+ sg174,
203
+ sg175,
204
+ sg176,
205
+ sg177,
206
+ sg178,
207
+ sg179,
208
+ sg180,
209
+ sg181,
210
+ sg182,
211
+ sg183,
212
+ sg184,
213
+ sg185,
214
+ sg186,
215
+ sg187,
216
+ sg188,
217
+ sg189,
218
+ sg190,
219
+ sg191,
220
+ sg192,
221
+ sg193,
222
+ sg194,
223
+ sg195,
224
+ sg196,
225
+ sg197,
226
+ sg198,
227
+ sg199,
228
+ sg200,
229
+ sg201,
230
+ sg202,
231
+ sg203,
232
+ sg204,
233
+ sg205,
234
+ sg206,
235
+ sg207,
236
+ sg208,
237
+ sg209,
238
+ sg210,
239
+ sg211,
240
+ sg212,
241
+ sg213,
242
+ sg214,
243
+ sg215,
244
+ sg216,
245
+ sg217,
246
+ sg218,
247
+ sg219,
248
+ sg220,
249
+ sg221,
250
+ sg222,
251
+ sg223,
252
+ sg224,
253
+ sg225,
254
+ sg226,
255
+ sg227,
256
+ sg228,
257
+ sg229,
258
+ sg230,
259
+ sg1003,
260
+ sg1004,
261
+ sg1005,
262
+ sg1006,
263
+ sg1007,
264
+ sg1008,
265
+ sg1009,
266
+ sg1010,
267
+ sg1011,
268
+ sg1012,
269
+ sg1013,
270
+ sg1014,
271
+ sg1015,
272
+ sg1017,
273
+ sg1018,
274
+ sg1020,
275
+ sg1021,
276
+ sg1022,
277
+ sg1023,
278
+ sg1059,
279
+ sg1094,
280
+ sg1146,
281
+ sg1148,
282
+ sg1155,
283
+ sg1160,
284
+ sg1161,
285
+ sg1166,
286
+ sg1167,
287
+ sg1197,
288
+ sg2005,
289
+ sg2017,
290
+ sg2018,
291
+ sg3004,
292
+ sg3005,
293
+ sg3018,
294
+ )
295
+ from diffpy.structure.sgtbxspacegroups import (
296
+ sg1025,
297
+ sg1026,
298
+ sg1027,
299
+ sg1028,
300
+ sg1029,
301
+ sg1030,
302
+ sg1031,
303
+ sg1032,
304
+ sg1033,
305
+ sg1034,
306
+ sg1035,
307
+ sg1036,
308
+ sg1037,
309
+ sg1038,
310
+ sg1039,
311
+ sg1040,
312
+ sg1041,
313
+ sg1042,
314
+ sg1043,
315
+ sg1044,
316
+ sg1045,
317
+ sg1046,
318
+ sg1049,
319
+ sg1050,
320
+ sg1051,
321
+ sg1052,
322
+ sg1053,
323
+ sg1054,
324
+ sg1055,
325
+ sg1056,
326
+ sg1057,
327
+ sg1058,
328
+ sg1060,
329
+ sg1061,
330
+ sg1062,
331
+ sg1063,
332
+ sg1064,
333
+ sg1065,
334
+ sg1066,
335
+ sg1067,
336
+ sg1068,
337
+ sg1072,
338
+ sg1073,
339
+ sg1074,
340
+ sg2003,
341
+ sg2004,
342
+ sg2006,
343
+ sg2007,
344
+ sg2008,
345
+ sg2009,
346
+ sg2010,
347
+ sg2011,
348
+ sg2012,
349
+ sg2013,
350
+ sg2014,
351
+ sg2015,
352
+ sg2020,
353
+ sg2021,
354
+ sg2025,
355
+ sg2026,
356
+ sg2027,
357
+ sg2028,
358
+ sg2029,
359
+ sg2030,
360
+ sg2031,
361
+ sg2032,
362
+ sg2033,
363
+ sg2034,
364
+ sg2035,
365
+ sg2036,
366
+ sg2037,
367
+ sg2038,
368
+ sg2039,
369
+ sg2040,
370
+ sg2041,
371
+ sg2042,
372
+ sg2043,
373
+ sg2044,
374
+ sg2045,
375
+ sg2046,
376
+ sg2049,
377
+ sg2050,
378
+ sg2051,
379
+ sg2052,
380
+ sg2053,
381
+ sg2054,
382
+ sg2055,
383
+ sg2056,
384
+ sg2057,
385
+ sg2058,
386
+ sg2059,
387
+ sg2060,
388
+ sg2062,
389
+ sg2063,
390
+ sg2064,
391
+ sg2065,
392
+ sg2066,
393
+ sg2067,
394
+ sg2068,
395
+ sg2072,
396
+ sg2074,
397
+ sg3007,
398
+ sg3008,
399
+ sg3009,
400
+ sg3012,
401
+ sg3013,
402
+ sg3014,
403
+ sg3015,
404
+ sg3020,
405
+ sg3021,
406
+ sg3026,
407
+ sg3028,
408
+ sg3029,
409
+ sg3030,
410
+ sg3031,
411
+ sg3033,
412
+ sg3036,
413
+ sg3038,
414
+ sg3039,
415
+ sg3040,
416
+ sg3041,
417
+ sg3046,
418
+ sg3050,
419
+ sg3051,
420
+ sg3052,
421
+ sg3053,
422
+ sg3054,
423
+ sg3057,
424
+ sg3059,
425
+ sg3060,
426
+ sg3062,
427
+ sg3063,
428
+ sg3064,
429
+ sg3067,
430
+ sg3068,
431
+ sg3074,
432
+ sg4005,
433
+ sg4007,
434
+ sg4008,
435
+ sg4009,
436
+ sg4012,
437
+ sg4013,
438
+ sg4014,
439
+ sg4015,
440
+ sg4026,
441
+ sg4028,
442
+ sg4029,
443
+ sg4030,
444
+ sg4031,
445
+ sg4033,
446
+ sg4036,
447
+ sg4038,
448
+ sg4039,
449
+ sg4040,
450
+ sg4041,
451
+ sg4046,
452
+ sg4050,
453
+ sg4051,
454
+ sg4052,
455
+ sg4053,
456
+ sg4054,
457
+ sg4057,
458
+ sg4059,
459
+ sg4060,
460
+ sg4062,
461
+ sg4063,
462
+ sg4064,
463
+ sg4067,
464
+ sg4068,
465
+ sg4074,
466
+ sg5005,
467
+ sg5007,
468
+ sg5008,
469
+ sg5009,
470
+ sg5012,
471
+ sg5013,
472
+ sg5014,
473
+ sg5015,
474
+ sg5026,
475
+ sg5028,
476
+ sg5029,
477
+ sg5030,
478
+ sg5031,
479
+ sg5033,
480
+ sg5036,
481
+ sg5038,
482
+ sg5039,
483
+ sg5040,
484
+ sg5041,
485
+ sg5046,
486
+ sg5051,
487
+ sg5052,
488
+ sg5053,
489
+ sg5054,
490
+ sg5057,
491
+ sg5059,
492
+ sg5060,
493
+ sg5062,
494
+ sg5063,
495
+ sg5064,
496
+ sg5067,
497
+ sg5068,
498
+ sg5074,
499
+ sg6005,
500
+ sg6007,
501
+ sg6008,
502
+ sg6009,
503
+ sg6012,
504
+ sg6013,
505
+ sg6014,
506
+ sg6015,
507
+ sg6068,
508
+ sg7005,
509
+ sg7007,
510
+ sg7008,
511
+ sg7009,
512
+ sg7012,
513
+ sg7013,
514
+ sg7014,
515
+ sg7015,
516
+ sg7068,
517
+ sg8005,
518
+ sg8007,
519
+ sg8008,
520
+ sg8009,
521
+ sg8012,
522
+ sg8013,
523
+ sg8014,
524
+ sg8015,
525
+ sg9005,
526
+ sg9009,
527
+ sg9015,
528
+ sg10005,
529
+ sg10009,
530
+ sg10015,
531
+ sg11009,
532
+ sg11015,
533
+ sg12009,
534
+ sg12015,
535
+ sg13009,
536
+ sg13015,
537
+ sg14009,
538
+ sg14015,
539
+ sg15009,
540
+ sg15015,
541
+ sg16009,
542
+ sg16015,
543
+ sg17009,
544
+ sg17015,
545
+ sgtbxSpaceGroupList,
546
+ )
547
+ from diffpy.structure.spacegroupmod import (
548
+ Rot_mX_mXY_mZ,
549
+ Rot_mX_mXY_Z,
550
+ Rot_mX_mY_mZ,
551
+ Rot_mX_mY_Z,
552
+ Rot_mX_mZ_mY,
553
+ Rot_mX_mZ_Y,
554
+ Rot_mX_Y_mZ,
555
+ Rot_mX_Y_Z,
556
+ Rot_mX_Z_mY,
557
+ Rot_mX_Z_Y,
558
+ Rot_mXY_mX_mZ,
559
+ Rot_mXY_mX_Z,
560
+ Rot_mXY_Y_mZ,
561
+ Rot_mXY_Y_Z,
562
+ Rot_mY_mX_mZ,
563
+ Rot_mY_mX_Z,
564
+ Rot_mY_mZ_mX,
565
+ Rot_mY_mZ_X,
566
+ Rot_mY_X_mZ,
567
+ Rot_mY_X_Z,
568
+ Rot_mY_XmY_mZ,
569
+ Rot_mY_XmY_Z,
570
+ Rot_mY_Z_mX,
571
+ Rot_mY_Z_X,
572
+ Rot_mZ_mX_mY,
573
+ Rot_mZ_mX_Y,
574
+ Rot_mZ_mY_mX,
575
+ Rot_mZ_mY_X,
576
+ Rot_mZ_X_mY,
577
+ Rot_mZ_X_Y,
578
+ Rot_mZ_Y_mX,
579
+ Rot_mZ_Y_X,
580
+ Rot_X_mY_mZ,
581
+ Rot_X_mY_Z,
582
+ Rot_X_mZ_mY,
583
+ Rot_X_mZ_Y,
584
+ Rot_X_XmY_mZ,
585
+ Rot_X_XmY_Z,
586
+ Rot_X_Y_mZ,
587
+ Rot_X_Y_Z,
588
+ Rot_X_Z_mY,
589
+ Rot_X_Z_Y,
590
+ Rot_XmY_mY_mZ,
591
+ Rot_XmY_mY_Z,
592
+ Rot_XmY_X_mZ,
593
+ Rot_XmY_X_Z,
594
+ Rot_Y_mX_mZ,
595
+ Rot_Y_mX_Z,
596
+ Rot_Y_mXY_mZ,
597
+ Rot_Y_mXY_Z,
598
+ Rot_Y_mZ_mX,
599
+ Rot_Y_mZ_X,
600
+ Rot_Y_X_mZ,
601
+ Rot_Y_X_Z,
602
+ Rot_Y_Z_mX,
603
+ Rot_Y_Z_X,
604
+ Rot_Z_mX_mY,
605
+ Rot_Z_mX_Y,
606
+ Rot_Z_mY_mX,
607
+ Rot_Z_mY_X,
608
+ Rot_Z_X_mY,
609
+ Rot_Z_X_Y,
610
+ Rot_Z_Y_mX,
611
+ Rot_Z_Y_X,
612
+ SpaceGroup,
613
+ SymOp,
614
+ Tr_0_0_0,
615
+ Tr_0_0_12,
616
+ Tr_0_0_13,
617
+ Tr_0_0_14,
618
+ Tr_0_0_16,
619
+ Tr_0_0_23,
620
+ Tr_0_0_34,
621
+ Tr_0_0_56,
622
+ Tr_0_12_0,
623
+ Tr_0_12_12,
624
+ Tr_0_12_14,
625
+ Tr_0_12_34,
626
+ Tr_12_0_0,
627
+ Tr_12_0_12,
628
+ Tr_12_0_14,
629
+ Tr_12_0_34,
630
+ Tr_12_12_0,
631
+ Tr_12_12_12,
632
+ Tr_12_12_14,
633
+ Tr_12_12_34,
634
+ Tr_13_23_16,
635
+ Tr_13_23_23,
636
+ Tr_14_14_14,
637
+ Tr_14_14_34,
638
+ Tr_14_34_14,
639
+ Tr_14_34_34,
640
+ Tr_23_13_13,
641
+ Tr_23_13_56,
642
+ Tr_34_14_14,
643
+ Tr_34_14_34,
644
+ Tr_34_34_14,
645
+ Tr_34_34_34,
646
+ )
647
+
648
+ # Import SpaceGroup objects --------------------------------------------------
649
+
650
+
651
+ SpaceGroupList = mmLibSpaceGroupList + sgtbxSpaceGroupList
652
+
653
+
654
+ def GetSpaceGroup(sgid):
655
+ """Returns the SpaceGroup instance for the given identifier.
656
+
657
+ Parameters
658
+ ----------
659
+ sgid : str, int
660
+ space group symbol, either `short_name` or `pdb_name`,
661
+ whatever it means in mmlib. Can be also an integer.
662
+
663
+ Returns
664
+ -------
665
+ SpaceGroup
666
+ The SpaceGroup object for the given identifier.
667
+
668
+ Raises
669
+ ------
670
+ ValueError
671
+ When the identifier is not found.
672
+ """
673
+ if not _sg_lookup_table:
674
+ _buildSGLookupTable()
675
+ if sgid in _sg_lookup_table:
676
+ return _sg_lookup_table[sgid]
677
+ # Try different versions of sgid, first make sure it is a string
678
+ emsg = "Unknown space group identifier %r" % sgid
679
+ if not isinstance(sgid, str):
680
+ raise ValueError(emsg)
681
+ sgbare = sgid.strip()
682
+ # short_name case adjusted
683
+ sgkey = sgbare.replace(" ", "")
684
+ sgkey = sgkey[:1].upper() + sgkey[1:].lower()
685
+ if sgkey in _sg_lookup_table:
686
+ return _sg_lookup_table[sgkey]
687
+ # pdb_name case adjusted
688
+ sgkey = sgbare[:1].upper() + sgbare[1:].lower()
689
+ if sgkey in _sg_lookup_table:
690
+ return _sg_lookup_table[sgkey]
691
+ # nothing worked, sgid is unknown identifier
692
+ raise ValueError(emsg)
693
+
694
+
695
+ def IsSpaceGroupIdentifier(sgid):
696
+ """Check if identifier can be used as an argument to `GetSpaceGroup`.
697
+
698
+ Returns
699
+ -------
700
+ bool
701
+ """
702
+ try:
703
+ GetSpaceGroup(sgid)
704
+ rv = True
705
+ except ValueError:
706
+ rv = False
707
+ return rv
708
+
709
+
710
+ def FindSpaceGroup(symops, shuffle=False):
711
+ """Lookup SpaceGroup from a given list of symmetry operations.
712
+
713
+ Parameters
714
+ ----------
715
+ symops : list
716
+ The list of `SymOp` objects for which to find SpaceGroup.
717
+ shuffle : bool, Optional
718
+ Flag for allowing different order of symops in the returned
719
+ SpaceGroup. The default is ``False``.
720
+
721
+ Returns
722
+ -------
723
+ SpaceGroup
724
+ The SpaceGroup object with equivalent list of symmetry
725
+ operations. Return predefined SpaceGroup instance when
726
+ symmetry operations have the same order or when the
727
+ `shuffle` flag is set.
728
+
729
+ Raises
730
+ ------
731
+ ValueError
732
+ When `symops` do not match any known SpaceGroup.
733
+ """
734
+
735
+ tb = _getSGHashLookupTable()
736
+ hh = _hashSymOpList(symops)
737
+ if hh not in tb:
738
+ raise ValueError("Cannot find SpaceGroup for the specified symops.")
739
+ rv = tb[hh]
740
+ if not shuffle:
741
+ zz = zip_longest(rv.iter_symops(), symops, fillvalue="")
742
+ sameorder = all(str(o0) == str(o1) for o0, o1 in zz)
743
+ if not sameorder:
744
+ rv = copy.copy(rv)
745
+ rv.symop_list = symops
746
+ return rv
747
+
748
+
749
+ def _hashSymOpList(symops):
750
+ """Return hash value for a sequence of `SymOp` objects.
751
+
752
+ The symops are sorted so the results is independent of symops order.
753
+
754
+ Parameters
755
+ ----------
756
+ symops : sequence
757
+ The sequence of `SymOp` objects to be hashed
758
+
759
+ Returns
760
+ -------
761
+ int
762
+ The hash value.
763
+ """
764
+ ssop = sorted(str(o) for o in symops)
765
+ rv = hash(tuple(ssop))
766
+ return rv
767
+
768
+
769
+ def _buildSGLookupTable():
770
+ """Rebuild space group lookup table from the `SpaceGroupList` data.
771
+ This routine updates the global `_sg_lookup_table` dictionary.
772
+ """
773
+ _sg_lookup_table.clear()
774
+ for sg in SpaceGroupList:
775
+ _sg_lookup_table.setdefault(sg.number, sg)
776
+ _sg_lookup_table.setdefault(str(sg.number), sg)
777
+ _sg_lookup_table.setdefault(sg.short_name, sg)
778
+ _sg_lookup_table.setdefault(sg.pdb_name, sg)
779
+ # extra aliases obtained from matching code in
780
+ # cctbx::sgtbx::symbols::find_main_symbol_dict_entry
781
+ alias_hmname = [
782
+ ("Pm3", "P m -3"),
783
+ ("Pn3", "P n -3"),
784
+ ("Fm3", "F m -3"),
785
+ ("Fd3", "F d -3"),
786
+ ("Im3", "I m -3"),
787
+ ("Pa3", "P a -3"),
788
+ ("Ia3", "I a -3"),
789
+ ("Pm3m", "P m -3 m"),
790
+ ("Pn3n", "P n -3 n"),
791
+ ("Pm3n", "P m -3 n"),
792
+ ("Pn3m", "P n -3 m"),
793
+ ("Fm3m", "F m -3 m"),
794
+ ("Fm3c", "F m -3 c"),
795
+ ("Fd3m", "F d -3 m"),
796
+ ("Fd3c", "F d -3 c"),
797
+ ("Im3m", "I m -3 m"),
798
+ ("Ia3d", "I a -3 d"),
799
+ ]
800
+ for a, hm in alias_hmname:
801
+ hmbare = hm.replace(" ", "")
802
+ _sg_lookup_table.setdefault(a, _sg_lookup_table[hmbare])
803
+ # make sure None does not sneak into the dictionary
804
+ assert None not in _sg_lookup_table
805
+ return
806
+
807
+
808
+ _sg_lookup_table = {}
809
+
810
+
811
+ def _getSGHashLookupTable():
812
+ """Return lookup table of symop hashes to standard `SpaceGroup` objects."""
813
+ if _sg_hash_lookup_table:
814
+ return _sg_hash_lookup_table
815
+ for sg in SpaceGroupList:
816
+ h = _hashSymOpList(sg.symop_list)
817
+ _sg_hash_lookup_table[h] = sg
818
+ assert len(_sg_hash_lookup_table) == len(SpaceGroupList)
819
+ return _getSGHashLookupTable()
820
+
821
+
822
+ _sg_hash_lookup_table = {}
823
+
824
+ # silence pyflakes checker
825
+ assert all(
826
+ o is not None
827
+ for o in (
828
+ SpaceGroup,
829
+ SymOp,
830
+ Rot_X_Y_Z,
831
+ Rot_mX_mY_mZ,
832
+ Rot_mX_Y_mZ,
833
+ Rot_X_mY_Z,
834
+ Rot_mX_mY_Z,
835
+ Rot_X_mY_mZ,
836
+ Rot_mX_Y_Z,
837
+ Rot_X_Y_mZ,
838
+ Rot_mY_X_Z,
839
+ Rot_Y_mX_Z,
840
+ Rot_Y_mX_mZ,
841
+ Rot_mY_X_mZ,
842
+ Rot_Y_X_mZ,
843
+ Rot_mY_mX_mZ,
844
+ Rot_mY_mX_Z,
845
+ Rot_Y_X_Z,
846
+ Rot_mY_XmY_Z,
847
+ Rot_mXY_mX_Z,
848
+ Rot_Z_X_Y,
849
+ Rot_Y_Z_X,
850
+ Rot_Y_mXY_mZ,
851
+ Rot_XmY_X_mZ,
852
+ Rot_mZ_mX_mY,
853
+ Rot_mY_mZ_mX,
854
+ Rot_mXY_Y_mZ,
855
+ Rot_X_XmY_mZ,
856
+ Rot_XmY_mY_mZ,
857
+ Rot_mX_mXY_mZ,
858
+ Rot_mX_mZ_mY,
859
+ Rot_mZ_mY_mX,
860
+ Rot_mXY_Y_Z,
861
+ Rot_X_XmY_Z,
862
+ Rot_XmY_mY_Z,
863
+ Rot_mX_mXY_Z,
864
+ Rot_X_Z_Y,
865
+ Rot_Z_Y_X,
866
+ Rot_Y_mXY_Z,
867
+ Rot_XmY_X_Z,
868
+ Rot_mY_XmY_mZ,
869
+ Rot_mXY_mX_mZ,
870
+ Rot_Z_mX_mY,
871
+ Rot_mZ_mX_Y,
872
+ Rot_mZ_X_mY,
873
+ Rot_mY_Z_mX,
874
+ Rot_Y_mZ_mX,
875
+ Rot_mY_mZ_X,
876
+ Rot_mZ_X_Y,
877
+ Rot_Z_X_mY,
878
+ Rot_Z_mX_Y,
879
+ Rot_Y_mZ_X,
880
+ Rot_mY_Z_X,
881
+ Rot_Y_Z_mX,
882
+ Rot_X_Z_mY,
883
+ Rot_mX_Z_Y,
884
+ Rot_X_mZ_Y,
885
+ Rot_Z_Y_mX,
886
+ Rot_Z_mY_X,
887
+ Rot_mZ_Y_X,
888
+ Rot_mX_Z_mY,
889
+ Rot_mX_mZ_Y,
890
+ Rot_X_mZ_mY,
891
+ Rot_Z_mY_mX,
892
+ Rot_mZ_Y_mX,
893
+ Rot_mZ_mY_X,
894
+ Tr_0_0_0,
895
+ Tr_0_12_0,
896
+ Tr_12_12_0,
897
+ Tr_0_0_12,
898
+ Tr_12_12_12,
899
+ Tr_0_12_12,
900
+ Tr_12_0_12,
901
+ Tr_12_0_0,
902
+ Tr_14_14_14,
903
+ Tr_14_34_34,
904
+ Tr_34_14_34,
905
+ Tr_34_34_14,
906
+ Tr_0_0_14,
907
+ Tr_0_0_34,
908
+ Tr_0_12_14,
909
+ Tr_12_0_34,
910
+ Tr_12_12_14,
911
+ Tr_12_12_34,
912
+ Tr_0_12_34,
913
+ Tr_12_0_14,
914
+ Tr_0_0_13,
915
+ Tr_0_0_23,
916
+ Tr_23_13_13,
917
+ Tr_13_23_23,
918
+ Tr_23_13_56,
919
+ Tr_13_23_16,
920
+ Tr_0_0_56,
921
+ Tr_0_0_16,
922
+ Tr_34_14_14,
923
+ Tr_34_34_34,
924
+ Tr_14_14_34,
925
+ Tr_14_34_14,
926
+ sg1,
927
+ sg2,
928
+ sg3,
929
+ sg4,
930
+ sg5,
931
+ sg6,
932
+ sg7,
933
+ sg8,
934
+ sg9,
935
+ sg10,
936
+ sg11,
937
+ sg12,
938
+ sg13,
939
+ sg14,
940
+ sg15,
941
+ sg16,
942
+ sg17,
943
+ sg18,
944
+ sg19,
945
+ sg20,
946
+ sg21,
947
+ sg22,
948
+ sg23,
949
+ sg24,
950
+ sg25,
951
+ sg26,
952
+ sg27,
953
+ sg28,
954
+ sg29,
955
+ sg30,
956
+ sg31,
957
+ sg32,
958
+ sg33,
959
+ sg34,
960
+ sg35,
961
+ sg36,
962
+ sg37,
963
+ sg38,
964
+ sg39,
965
+ sg40,
966
+ sg41,
967
+ sg42,
968
+ sg43,
969
+ sg44,
970
+ sg45,
971
+ sg46,
972
+ sg47,
973
+ sg48,
974
+ sg49,
975
+ sg50,
976
+ sg51,
977
+ sg52,
978
+ sg53,
979
+ sg54,
980
+ sg55,
981
+ sg56,
982
+ sg57,
983
+ sg58,
984
+ sg59,
985
+ sg60,
986
+ sg61,
987
+ sg62,
988
+ sg63,
989
+ sg64,
990
+ sg65,
991
+ sg66,
992
+ sg67,
993
+ sg68,
994
+ sg69,
995
+ sg70,
996
+ sg71,
997
+ sg72,
998
+ sg73,
999
+ sg74,
1000
+ sg75,
1001
+ sg76,
1002
+ sg77,
1003
+ sg78,
1004
+ sg79,
1005
+ sg80,
1006
+ sg81,
1007
+ sg82,
1008
+ sg83,
1009
+ sg84,
1010
+ sg85,
1011
+ sg86,
1012
+ sg87,
1013
+ sg88,
1014
+ sg89,
1015
+ sg90,
1016
+ sg91,
1017
+ sg92,
1018
+ sg93,
1019
+ sg94,
1020
+ sg95,
1021
+ sg96,
1022
+ sg97,
1023
+ sg98,
1024
+ sg99,
1025
+ sg100,
1026
+ sg101,
1027
+ sg102,
1028
+ sg103,
1029
+ sg104,
1030
+ sg105,
1031
+ sg106,
1032
+ sg107,
1033
+ sg108,
1034
+ sg109,
1035
+ sg110,
1036
+ sg111,
1037
+ sg112,
1038
+ sg113,
1039
+ sg114,
1040
+ sg115,
1041
+ sg116,
1042
+ sg117,
1043
+ sg118,
1044
+ sg119,
1045
+ sg120,
1046
+ sg121,
1047
+ sg122,
1048
+ sg123,
1049
+ sg124,
1050
+ sg125,
1051
+ sg126,
1052
+ sg127,
1053
+ sg128,
1054
+ sg129,
1055
+ sg130,
1056
+ sg131,
1057
+ sg132,
1058
+ sg133,
1059
+ sg134,
1060
+ sg135,
1061
+ sg136,
1062
+ sg137,
1063
+ sg138,
1064
+ sg139,
1065
+ sg140,
1066
+ sg141,
1067
+ sg142,
1068
+ sg143,
1069
+ sg144,
1070
+ sg145,
1071
+ sg146,
1072
+ sg1146,
1073
+ sg147,
1074
+ sg148,
1075
+ sg1148,
1076
+ sg149,
1077
+ sg150,
1078
+ sg151,
1079
+ sg152,
1080
+ sg153,
1081
+ sg154,
1082
+ sg155,
1083
+ sg1155,
1084
+ sg156,
1085
+ sg157,
1086
+ sg158,
1087
+ sg159,
1088
+ sg160,
1089
+ sg1160,
1090
+ sg161,
1091
+ sg1161,
1092
+ sg162,
1093
+ sg163,
1094
+ sg164,
1095
+ sg165,
1096
+ sg166,
1097
+ sg1166,
1098
+ sg167,
1099
+ sg1167,
1100
+ sg168,
1101
+ sg169,
1102
+ sg170,
1103
+ sg171,
1104
+ sg172,
1105
+ sg173,
1106
+ sg174,
1107
+ sg175,
1108
+ sg176,
1109
+ sg177,
1110
+ sg178,
1111
+ sg179,
1112
+ sg180,
1113
+ sg181,
1114
+ sg182,
1115
+ sg183,
1116
+ sg184,
1117
+ sg185,
1118
+ sg186,
1119
+ sg187,
1120
+ sg188,
1121
+ sg189,
1122
+ sg190,
1123
+ sg191,
1124
+ sg192,
1125
+ sg193,
1126
+ sg194,
1127
+ sg195,
1128
+ sg196,
1129
+ sg197,
1130
+ sg198,
1131
+ sg199,
1132
+ sg200,
1133
+ sg201,
1134
+ sg202,
1135
+ sg203,
1136
+ sg204,
1137
+ sg205,
1138
+ sg206,
1139
+ sg207,
1140
+ sg208,
1141
+ sg209,
1142
+ sg210,
1143
+ sg211,
1144
+ sg212,
1145
+ sg213,
1146
+ sg214,
1147
+ sg215,
1148
+ sg216,
1149
+ sg217,
1150
+ sg218,
1151
+ sg219,
1152
+ sg220,
1153
+ sg221,
1154
+ sg222,
1155
+ sg223,
1156
+ sg224,
1157
+ sg225,
1158
+ sg226,
1159
+ sg227,
1160
+ sg228,
1161
+ sg229,
1162
+ sg230,
1163
+ sg1003,
1164
+ sg1004,
1165
+ sg3004,
1166
+ sg1005,
1167
+ sg2005,
1168
+ sg3005,
1169
+ sg1006,
1170
+ sg1007,
1171
+ sg1008,
1172
+ sg1009,
1173
+ sg1010,
1174
+ sg1011,
1175
+ sg1012,
1176
+ sg1013,
1177
+ sg1014,
1178
+ sg1015,
1179
+ sg1017,
1180
+ sg2017,
1181
+ sg1018,
1182
+ sg2018,
1183
+ sg3018,
1184
+ sg1020,
1185
+ sg1021,
1186
+ sg1022,
1187
+ sg1023,
1188
+ sg1059,
1189
+ sg1094,
1190
+ sg1197,
1191
+ sg2003,
1192
+ sg2004,
1193
+ sg4005,
1194
+ sg5005,
1195
+ sg6005,
1196
+ sg7005,
1197
+ sg8005,
1198
+ sg9005,
1199
+ sg10005,
1200
+ sg2006,
1201
+ sg2007,
1202
+ sg3007,
1203
+ sg4007,
1204
+ sg5007,
1205
+ sg6007,
1206
+ sg7007,
1207
+ sg8007,
1208
+ sg2008,
1209
+ sg3008,
1210
+ sg4008,
1211
+ sg5008,
1212
+ sg6008,
1213
+ sg7008,
1214
+ sg8008,
1215
+ sg2009,
1216
+ sg3009,
1217
+ sg4009,
1218
+ sg5009,
1219
+ sg6009,
1220
+ sg7009,
1221
+ sg8009,
1222
+ sg9009,
1223
+ sg10009,
1224
+ sg11009,
1225
+ sg12009,
1226
+ sg13009,
1227
+ sg14009,
1228
+ sg15009,
1229
+ sg16009,
1230
+ sg17009,
1231
+ sg2010,
1232
+ sg2011,
1233
+ sg2012,
1234
+ sg3012,
1235
+ sg4012,
1236
+ sg5012,
1237
+ sg6012,
1238
+ sg7012,
1239
+ sg8012,
1240
+ sg2013,
1241
+ sg3013,
1242
+ sg4013,
1243
+ sg5013,
1244
+ sg6013,
1245
+ sg7013,
1246
+ sg8013,
1247
+ sg2014,
1248
+ sg3014,
1249
+ sg4014,
1250
+ sg5014,
1251
+ sg6014,
1252
+ sg7014,
1253
+ sg8014,
1254
+ sg2015,
1255
+ sg3015,
1256
+ sg4015,
1257
+ sg5015,
1258
+ sg6015,
1259
+ sg7015,
1260
+ sg8015,
1261
+ sg9015,
1262
+ sg10015,
1263
+ sg11015,
1264
+ sg12015,
1265
+ sg13015,
1266
+ sg14015,
1267
+ sg15015,
1268
+ sg16015,
1269
+ sg17015,
1270
+ sg2020,
1271
+ sg3020,
1272
+ sg2021,
1273
+ sg3021,
1274
+ sg1025,
1275
+ sg2025,
1276
+ sg1026,
1277
+ sg2026,
1278
+ sg3026,
1279
+ sg4026,
1280
+ sg5026,
1281
+ sg1027,
1282
+ sg2027,
1283
+ sg1028,
1284
+ sg2028,
1285
+ sg3028,
1286
+ sg4028,
1287
+ sg5028,
1288
+ sg1029,
1289
+ sg2029,
1290
+ sg3029,
1291
+ sg4029,
1292
+ sg5029,
1293
+ sg1030,
1294
+ sg2030,
1295
+ sg3030,
1296
+ sg4030,
1297
+ sg5030,
1298
+ sg1031,
1299
+ sg2031,
1300
+ sg3031,
1301
+ sg4031,
1302
+ sg5031,
1303
+ sg1032,
1304
+ sg2032,
1305
+ sg1033,
1306
+ sg2033,
1307
+ sg3033,
1308
+ sg4033,
1309
+ sg5033,
1310
+ sg1034,
1311
+ sg2034,
1312
+ sg1035,
1313
+ sg2035,
1314
+ sg1036,
1315
+ sg2036,
1316
+ sg3036,
1317
+ sg4036,
1318
+ sg5036,
1319
+ sg1037,
1320
+ sg2037,
1321
+ sg1038,
1322
+ sg2038,
1323
+ sg3038,
1324
+ sg4038,
1325
+ sg5038,
1326
+ sg1039,
1327
+ sg2039,
1328
+ sg3039,
1329
+ sg4039,
1330
+ sg5039,
1331
+ sg1040,
1332
+ sg2040,
1333
+ sg3040,
1334
+ sg4040,
1335
+ sg5040,
1336
+ sg1041,
1337
+ sg2041,
1338
+ sg3041,
1339
+ sg4041,
1340
+ sg5041,
1341
+ sg1042,
1342
+ sg2042,
1343
+ sg1043,
1344
+ sg2043,
1345
+ sg1044,
1346
+ sg2044,
1347
+ sg1045,
1348
+ sg2045,
1349
+ sg1046,
1350
+ sg2046,
1351
+ sg3046,
1352
+ sg4046,
1353
+ sg5046,
1354
+ sg1049,
1355
+ sg2049,
1356
+ sg1050,
1357
+ sg2050,
1358
+ sg3050,
1359
+ sg4050,
1360
+ sg1051,
1361
+ sg2051,
1362
+ sg3051,
1363
+ sg4051,
1364
+ sg5051,
1365
+ sg1052,
1366
+ sg2052,
1367
+ sg3052,
1368
+ sg4052,
1369
+ sg5052,
1370
+ sg1053,
1371
+ sg2053,
1372
+ sg3053,
1373
+ sg4053,
1374
+ sg5053,
1375
+ sg1054,
1376
+ sg2054,
1377
+ sg3054,
1378
+ sg4054,
1379
+ sg5054,
1380
+ sg1055,
1381
+ sg2055,
1382
+ sg1056,
1383
+ sg2056,
1384
+ sg1057,
1385
+ sg2057,
1386
+ sg3057,
1387
+ sg4057,
1388
+ sg5057,
1389
+ sg1058,
1390
+ sg2058,
1391
+ sg2059,
1392
+ sg3059,
1393
+ sg4059,
1394
+ sg5059,
1395
+ sg1060,
1396
+ sg2060,
1397
+ sg3060,
1398
+ sg4060,
1399
+ sg5060,
1400
+ sg1061,
1401
+ sg1062,
1402
+ sg2062,
1403
+ sg3062,
1404
+ sg4062,
1405
+ sg5062,
1406
+ sg1063,
1407
+ sg2063,
1408
+ sg3063,
1409
+ sg4063,
1410
+ sg5063,
1411
+ sg1064,
1412
+ sg2064,
1413
+ sg3064,
1414
+ sg4064,
1415
+ sg5064,
1416
+ sg1065,
1417
+ sg2065,
1418
+ sg1066,
1419
+ sg2066,
1420
+ sg1067,
1421
+ sg2067,
1422
+ sg3067,
1423
+ sg4067,
1424
+ sg5067,
1425
+ sg1068,
1426
+ sg2068,
1427
+ sg3068,
1428
+ sg4068,
1429
+ sg5068,
1430
+ sg6068,
1431
+ sg7068,
1432
+ sg1072,
1433
+ sg2072,
1434
+ sg1073,
1435
+ sg1074,
1436
+ sg2074,
1437
+ sg3074,
1438
+ sg4074,
1439
+ sg5074,
1440
+ )
1441
+ )