"""
Module to store the constants
"""
import numpy as np
from pyxtal.version import __version__
# Constants
# ------------------------------
tol_m = 0.3 # seperation tolerance in Angstroms
rad = np.pi / 180.0 # converting degrees to radians
deg = 180.0 / np.pi # converting radians to degrees
pyxtal_verbosity = 1 # constant for printx function
# Max number of atoms per molecule before using fast distance check
max_fast_mol_size = 30
letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
ltype_keywords = [
"triclinic",
"Triclinic",
"monoclinic",
"Monoclinic",
"orthorhombic",
"Orthorhombic",
"tetragonal",
"Tetragonal",
"trigonal",
"Trigonal",
"hexagonal",
"Hexagonal",
"cubic",
"Cubic",
"spherical",
"Spherical",
"ellipsoidal",
"Ellipsoidal",
]
single_smiles = [
"Cl-",
"F-",
"Br-",
"I-",
"Li+",
"Na+",
"Cs+",
"Rb+",
"[Cl-]",
"[F-]",
"[Br-]",
"[I-]",
"[Li+]",
"[Na+]",
"[Cs+]",
"Rb+",
]
hex_cell = np.array([[1, -0.5, 0], [0, np.sqrt(3) / 2, 0], [0, 0, 1]])
all_sym_directions = [
(1, 0, 0),
(0, 1, 0),
(0, 0, 1),
(1, 1, 1),
(1, -1, -1),
(-1, 1, -1),
(-1, -1, 1),
(1, -1, 0),
(1, 1, 0),
(0, 1, -1),
(0, 1, 1),
(-1, 0, 1),
(1, 0, 1),
(1, -2, 0),
(2, -1, 0),
]
logo = rf"""#############################################################
# ______ _ _ _ #
# (_____ \ \ \ / / | | #
# _____) ) _ \ \/ / |_ ____| | #
# | ____/ | | | ) (| _)/ _ | | #
# | | | |_| |/ /\ \ |_( (_| | |___ #
# |_| \__ /_/ \_\___)__|_|_____) #
# (____/ #
#---------------------(version {__version__:>8s})--------------------#
# A Python package for random crystal generation #
# url: https://github.com/qzhu2017/pyxtal #
# @Zhu's group at U. North Carolina at Charlotte #
#############################################################
"""
"""
References:
- International Tables for Crystallography, Volume A
"""
# Asymmetric unit bounds for 230 space groups
# Format: space_group_number x_min x_max y_min y_max z_min z_max
ASU_bounds = np.array([
[ 0, 1, 0, 1, 0, 1], # SG 1
[ 0, 1/2, 0, 1, 0, 1], # SG 2
[ 0, 1, 0, 1, 0, 1/2], # SG 3
[ 0, 1, 0, 1, 0, 1/2], # SG 4
[ 0, 1/2, 0, 1/2, 0, 1], # SG 5
[ 0, 1, 0, 1/2, 0, 1], # SG 6
[ 0, 1, 0, 1/2, 0, 1], # SG 7
[ 0, 1, 0, 1/4, 0, 1], # SG 8
[ 0, 1, 0, 1/4, 0, 1], # SG 9
[ 0, 1/2, 0, 1/2, 0, 1], # SG 10
[ 0, 1, 0, 1/4, 0, 1], # SG 11
[ 0, 1/2, 0, 1/4, 0, 1], # SG 12
[ 0, 1/2, 0, 1, 0, 1/2], # SG 13
[ 0, 1, 0, 1/4, 0, 1], # SG 14
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 15
[ 0, 1/2, 0, 1/2, 0, 1], # SG 16
[ 0, 1/2, 0, 1/2, 0, 1], # SG 17
[ 0, 1/2, 0, 1/2, 0, 1], # SG 18
[ 0, 1/2, 0, 1/2, 0, 1], # SG 19
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 20
[ 0, 1/4, 0, 1/2, 0, 1], # SG 21
[ 0, 1/4, 0, 1/4, 0, 1], # SG 22
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 23
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 24
[ 0, 1/2, 0, 1/2, 0, 1], # SG 25
[ 0, 1/2, 0, 1/2, 0, 1], # SG 26
[ 0, 1/2, 0, 1/2, 0, 1], # SG 27
[ 0, 1/4, 0, 1, 0, 1], # SG 28
[ 0, 1/4, 0, 1, 0, 1], # SG 29
[ 0, 1/2, 0, 1, 0, 1/2], # SG 30
[ 0, 1/2, 0, 1/2, 0, 1], # SG 31
[ 0, 1/2, 0, 1/2, 0, 1], # SG 32
[ 0, 1/2, 0, 1/2, 0, 1], # SG 33
[ 0, 1/2, 0, 1/2, 0, 1], # SG 34
[ 0, 1/4, 0, 1/2, 0, 1], # SG 35
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 36
[ 0, 1/4, 0, 1/2, 0, 1], # SG 37
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 38
[ 0, 1/2, 0, 1/4, 0, 1], # SG 39
[ 0, 1/4, 0, 1/2, 0, 1], # SG 40
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 41
[ 0, 1/4, 0, 1/4, 0, 1], # SG 42
[ 0, 1/4, 0, 1/4, 0, 1], # SG 43
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 44
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 45
[ 0, 1/4, 0, 1, 0, 1/2], # SG 46
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 47
[ 0, 1/4, -1/4, 1/4, 0, 1], # SG 48
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 49
[ 0, 1/4, 0, 1, 0, 1/2], # SG 50
[ 0, 1/4, 0, 1/2, 0, 1], # SG 51
[ 0, 1, 0, 1/4, 0, 1/2], # SG 52
[ 0, 1/2, 0, 1, 0, 1/4], # SG 53
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 54
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 55
[ 0, 1/4, 0, 1, 0, 1/2], # SG 56
[ 0, 1/2, 0, 1, 0, 1/4], # SG 57
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 58
[ 0, 1/4, -1/4, 1/4, 0, 1], # SG 59
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 60
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 61
[ 0, 1/2, 0, 1/4, 0, 1], # SG 62
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 63
[ 0, 1/4, 0, 1/2, 0, 1/2], # SG 64
[ 0, 1/4, 0, 1/2, 0, 1/2], # SG 65
[ 0, 1/4, 0, 1/2, 0, 1/2], # SG 66
[ 0, 1/2, 0, 1/4, 0, 1/2], # SG 67
[ 0, 1/2, 0, 1/4, 0, 1/2], # SG 68
[ 0, 1/4, 0, 1/4, 0, 1/2], # SG 69
[ 0, 1/8, -1/8, 1/8, 0, 1], # SG 70
[ 0, 1/4, 0, 1/2, 0, 1/2], # SG 71
[ 0, 1/4, 0, 1/2, 0, 1/2], # SG 72
[ 0, 1/4, 0, 1/2, 0, 1/2], # SG 73
[ 0, 1/4, 0, 1/4, 0, 1], # SG 74
[ 0, 1/2, 0, 1/2, 0, 1], # SG 75
[ 0, 1/2, 0, 1/2, 0, 1], # SG 76
[ 0, 1/2, 0, 1/2, 0, 1], # SG 77
[ 0, 1/2, 0, 1/2, 0, 1], # SG 78
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 79
[ 0, 1/2, 0, 1, 0, 1/4], # SG 80
[ 0, 1/2, 0, 1/2, 0, 1], # SG 81
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 82
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 83
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 84
[ -1/4, 1/4, -1/4, 1/4, 0, 1/2], # SG 85
[ -1/4, 1/4, -1/4, 1/4, 0, 1/2], # SG 86
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 87
[ 0, 1/4, 0, 1/4, 0, 1], # SG 88
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 89
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 90
[ 0, 1, 0, 1, 0, 1/8], # SG 91
[ 0, 1, 0, 1, 0, 1/8], # SG 92
[ 0, 1/2, 0, 1, 0, 1/4], # SG 93
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 94
[ 0, 1, 0, 1, 0, 1/8], # SG 95
[ 0, 1, 0, 1, 0, 1/8], # SG 96
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 97
[ 0, 1/2, 0, 1, 0, 1/8], # SG 98
[ 0, 1/2, 0, 1/2, 0, 1], # SG 99
[ 0, 1/2, 0, 1/2, 0, 1], # SG 100
[ 0, 1/2, 0, 1/2, 0, 1], # SG 101
[ 0, 1/2, 0, 1/2, 0, 1], # SG 102
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 103
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 104
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 105
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 106
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 107
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 108
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 109
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 110
[ 0, 1/2, 0, 1/2, 0, 1], # SG 111
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 112
[ 0, 1/2, 0, 1/2, 0, 1], # SG 113
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 114
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 115
[ 0, 1/2, 0, 1, 0, 1/4], # SG 116
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 117
[ 0, 1/2, 0, 1, 0, 1/4], # SG 118
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 119
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 120
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 121
[ 0, 1/2, 0, 1, 0, 1/8], # SG 122
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 123
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 124
[ -1/4, 1/4, -1/4, 1/4, 0, 1/2], # SG 125
[ -1/4, 1/4, -1/4, 1/4, 0, 1/4], # SG 126
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 127
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 128
[ -1/4, 1/4, -1/4, 1/4, 0, 1/2], # SG 129
[ -1/4, 1/4, -1/4, 1/4, 0, 1/4], # SG 130
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 131
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 132
[ -1/4, 1/4, -1/4, 1/4, 0, 1/4], # SG 133
[ -1/4, 1/4, -1/4, 1/4, 0, 1/2], # SG 134
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 135
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 136
[ -1/4, 1/4, -1/4, 1/4, 0, 1/4], # SG 137
[ -1/4, 1/4, -1/4, 1/4, 0, 1/2], # SG 138
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 139
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 140
[ 0, 1/2, -1/4, 1/4, 0, 1/8], # SG 141
[ 0, 1/2, -1/4, 1/4, 0, 1/8], # SG 142
[ 0, 2/3, 0, 2/3, 0, 1], # SG 143
[ 0, 1, 0, 1, 0, 1/3], # SG 144
[ 0, 1, 0, 1, 0, 1/3], # SG 145
[ 0, 2/3, 0, 2/3, 0, 1/3], # SG 146
[ 0, 2/3, 0, 2/3, 0, 1/2], # SG 147
[ 0, 2/3, 0, 2/3, 0, 1/6], # SG 148
[ 0, 2/3, 0, 2/3, 0, 1/2], # SG 149
[ 0, 2/3, 0, 2/3, 0, 1/2], # SG 150
[ 0, 1, 0, 1, 0, 1/6], # SG 151
[ 0, 1, 0, 1, 0, 1/6], # SG 152
[ 0, 1, 0, 1, 0, 1/6], # SG 153
[ 0, 1, 0, 1, 0, 1/6], # SG 154
[ 0, 2/3, 0, 2/3, 0, 1/6], # SG 155
[ 0, 2/3, 0, 2/3, 0, 1], # SG 156
[ 0, 2/3, 0, 1/2, 0, 1], # SG 157
[ 0, 2/3, 0, 2/3, 0, 1/2], # SG 158
[ 0, 2/3, 0, 2/3, 0, 1/2], # SG 159
[ 0, 2/3, 0, 2/3, 0, 1/3], # SG 160
[ 0, 2/3, 0, 2/3, 0, 1/6], # SG 161
[ 0, 2/3, 0, 1/2, 0, 1/2], # SG 162
[ 0, 2/3, 0, 2/3, 0, 1/4], # SG 163
[ 0, 2/3, 0, 1/3, 0, 1], # SG 164
[ 0, 2/3, 0, 2/3, 0, 1/4], # SG 165
[ 0, 2/3, 0, 2/3, 0, 1/6], # SG 166
[ 0, 2/3, 0, 2/3, 0, 1/12], # SG 167
[ 0, 2/3, 0, 1/2, 0, 1], # SG 168
[ 0, 1, 0, 1, 0, 1/6], # SG 169
[ 0, 1, 0, 1, 0, 1/6], # SG 170
[ 0, 1, 0, 1, 0, 1/3], # SG 171
[ 0, 1, 0, 1, 0, 1/3], # SG 172
[ 0, 2/3, 0, 2/3, 0, 1/2], # SG 173
[ 0, 2/3, 0, 2/3, 0, 1/2], # SG 174
[ 0, 2/3, 0, 1/2, 0, 1/2], # SG 175
[ 0, 2/3, 0, 2/3, 0, 1/4], # SG 176
[ 0, 2/3, 0, 1/2, 0, 1/2], # SG 177
[ 0, 1, 0, 1, 0, 1/12], # SG 178
[ 0, 1, 0, 1, 0, 1/12], # SG 179
[ 0, 1, 0, 1, 0, 1/6], # SG 180
[ 0, 1, 0, 1, 0, 1/6], # SG 181
[ 0, 2/3, 0, 2/3, 0, 1/4], # SG 182
[ 0, 2/3, 0, 1/3, 0, 1], # SG 183
[ 0, 2/3, 0, 1/2, 0, 1/2], # SG 184
[ 0, 2/3, 0, 1/2, 0, 1/2], # SG 185
[ 0, 2/3, 0, 1/3, 0, 1], # SG 186
[ 0, 2/3, 0, 2, 0, 1/2], # SG 187
[ 0, 2/3, 0, 2, 0, 1/4], # SG 188
[ 0, 2/3, 0, 1/2, 0, 1/2], # SG 189
[ 0, 2/3, 0, 2, 0, 1/4], # SG 190
[ 0, 2/3, 0, 1/3, 0, 1/2], # SG 191
[ 0, 2/3, 0, 1/2, 0, 1/4], # SG 192
[ 0, 2/3, 0, 1/2, 0, 1/4], # SG 193
[ 0, 2/3, 0, 2, 0, 1/4], # SG 194
[ 0, 1, 0, 1, 0, 1/2], # SG 195
[ 0, 1/2, 0, 1/2, -1/4, 1/4], # SG 196
[ 0, 1, 0, 1/2, 0, 1/2], # SG 197
[ 0, 1/2, 0, 1/2, -1/2, 1/2], # SG 198
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 199
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 200
[ -1/4, 3/4, -1/4, 1/4, -1/4, 1/4], # SG 201
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 202
[ -1/8, 3/8, -1/8, 1/8, -3/8, 1/8], # SG 203
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 204
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 205
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 206
[ 0, 1, 0, 1/2, 0, 1/2], # SG 207
[ 0, 1/2, 0, 1/2, -1/4, 1/4], # SG 208
[ 0, 1/2, 0, 1/4, -1/4, 1/4], # SG 209
[ 0, 1/2, -1/8, 1/8, -1/8, 1/8], # SG 210
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 211
[ 0, 1/2, 0, 3, -1/2, 1/4], # SG 212
[ -1/4, 1/2, 0, 3, 0, 1/2], # SG 213
[ -3/8, 1/8, -1/8, 1/8, -1/8, 3/8], # SG 214
[ 0, 1, 0, 1/2, 0, 1/2], # SG 215
[ 0, 1/2, 0, 1/4, -1/4, 1/4], # SG 216
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 217
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 218
[ 0, 1/2, 0, 1/4, -1/4, 1/4], # SG 219
[ 1/4, 1/2, 1/4, 1/2, 0, 1/2], # SG 220
[ 0, 1/2, 0, 1/2, 0, 1/2], # SG 221
[ 1/4, 3/4, 1/4, 3, 1/4, 3/4], # SG 222
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 223
[ 1/4, 3, 1/4, 3, 0, 1/2], # SG 224
[ 0, 1/2, 0, 1/4, 0, 1/4], # SG 225
[ 0, 1/2, 0, 1/4, 0, 1/4], # SG 226
[ -1/8, 3/8, -1/8, 0, -1/4, 0], # SG 227
[ -1/8, 3/8, -1/8, 0, -1/4, 0], # SG 228
[ 0, 1/2, 0, 1/2, 0, 1/4], # SG 229
[ -1/8, 1/8, -1/8, 1/8, 0, 1/4], # SG 230
])
# Dictionary mapping space group numbers to their additional ASU conditions
# Format: {space_group: [(condition_function, description), ...]}
ASU_ADDITIONAL_CONDITIONS = {
# Tetragonal Space Groups
75: [("x <= y", "x ≤ y")], # P4
76: [("x <= y", "x ≤ y")], # P4₁
77: [("x <= y", "x ≤ y")], # P4₂
78: [("x <= y", "x ≤ y")], # P4₃
81: [("x <= y", "x ≤ y")], # P-4
83: [("x <= y", "x ≤ y")], # P4/m
84: [("x <= y", "x ≤ y")], # P4₂/m
85: [("x <= y", "x ≤ y")], # P4/n
86: [("x <= y", "x ≤ y")], # P4₂/n
89: [("x <= y", "x ≤ y")], # P422
90: [("x <= y", "x ≤ y")], # P42₁2
91: [("x <= y", "x ≤ y")], # P4₁22
92: [("x <= y", "x ≤ y")], # P4₁2₁2
93: [("x <= y", "x ≤ y")], # P4₂22
94: [("x <= y", "x ≤ y")], # P4₂2₁2
95: [("x <= y", "x ≤ y")], # P4₃22
96: [("x <= y", "x ≤ y")], # P4₃2₁2
99: [("x <= y", "x ≤ y")], # P4mm
100: [("x <= y", "x ≤ y")], # P4bm
101: [("x <= y", "x ≤ y")], # P4₂cm
102: [("x <= y", "x ≤ y")], # P4₂nm
103: [("x <= y", "x ≤ y")], # P4cc
104: [("x <= y", "x ≤ y")], # P4nc
105: [("x <= y", "x ≤ y")], # P4₂mc
106: [("x <= y", "x ≤ y")], # P4₂bc
107: [("x <= y", "x ≤ y")], # I4mm
108: [("x <= y", "x ≤ y")], # I4cm
111: [("x <= y", "x ≤ y")], # P-42m
112: [("x <= y", "x ≤ y")], # P-42c
113: [("x <= y", "x ≤ y")], # P-42₁m
114: [("x <= y", "x ≤ y")], # P-42₁c
115: [("x <= y", "x ≤ y")], # P-4m2
116: [("x <= y", "x ≤ y")], # P-4c2
117: [("x <= y", "x ≤ y")], # P-4b2
118: [("x <= y", "x ≤ y")], # P-4n2
119: [("x <= y", "x ≤ y")], # I-4m2
120: [("x <= y", "x ≤ y")], # I-4c2
123: [("x <= y", "x ≤ y")], # P4/mmm
124: [("x <= y", "x ≤ y")], # P4/mcc
125: [("x <= y", "x ≤ y")], # P4/nbm
126: [("x <= y", "x ≤ y")], # P4/nnc
127: [("x <= y", "x ≤ y")], # P4/mbm
128: [("x <= y", "x ≤ y")], # P4/mnc
129: [("x <= y", "x ≤ y")], # P4/nmm
130: [("x <= y", "x ≤ y")], # P4/ncc
131: [("x <= y", "x ≤ y")], # P4₂/mmc
132: [("x <= y", "x ≤ y")], # P4₂/mcm
133: [("x <= y", "x ≤ y")], # P4₂/nbc
134: [("x <= y", "x ≤ y")], # P4₂/nnm
135: [("x <= y", "x ≤ y")], # P4₂/mbc
136: [("x <= y", "x ≤ y")], # P4₂/mnm
137: [("x <= y", "x ≤ y")], # P4₂/nmc
138: [("x <= y", "x ≤ y")], # P4₂/ncm
139: [("x <= y", "x ≤ y")], # I4/mmm
140: [("x <= y", "x ≤ y")], # I4/mcm
141: [("x <= y", "x ≤ y")], # I4₁/amd
142: [("x <= y", "x ≤ y")], # I4₁/acd
# Trigonal Space Groups (with hexagonal axes)
143: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P3
144: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P3₁
145: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P3₂
149: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P312
150: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P321
151: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P3₁12
152: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P3₁21
153: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P3₂12
154: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P3₂21
156: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P3m1
157: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P31m
158: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P3c1
159: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P31c
162: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P-31m
163: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P-31c
164: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P-3m1
165: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P-3c1
# Trigonal Space Groups with R centering
146: [
("x <= (1 + y) / 2", "x ≤ (1+y)/2"),
("y <= min(1 - x, (1 + x) / 2)", "y ≤ min(1-x, (1+x)/2)")
], # R3 (hexagonal)
# Hexagonal Space Groups
168: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6
169: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₁
170: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₅
171: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₂
172: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₄
173: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₃
175: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6/m
176: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₃/m
177: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P622
178: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₁22
179: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₅22
180: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₂22
181: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₄22
182: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₃22
183: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6mm
184: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6cc
185: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₃cm
186: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₃mc
187: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P-6m2
188: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P-6c2
189: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P-62m
190: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P-62c
191: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6/mmm
192: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6/mcc
193: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₃/mcm
194: [("x <= y", "x ≤ y"), ("y <= 0.5", "y ≤ 1/2")], # P6₃/mmc
# Cubic Space Groups
195: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # P23
196: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # F23
197: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # I23
198: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # P2₁3
199: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # I2₁3
200: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Pm-3
201: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Pn-3
202: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Fm-3
203: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Fd-3
204: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Im-3
205: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Pa-3
206: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Ia-3
207: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # P432
208: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # P4₂32
209: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # F432
210: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # F4₁32
211: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # I432
212: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # P4₃32
213: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # P4₁32
214: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # I4₁32
215: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # P-43m
216: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # F-43m
217: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # I-43m
218: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # P-43n
219: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # F-43c
220: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # I-43d
221: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Pm-3m
222: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Pn-3n
223: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Pm-3n
224: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Pn-3m
225: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Fm-3m
226: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Fm-3c
227: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Fd-3m
228: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Fd-3c
229: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Im-3m
230: [("x <= y", "x ≤ y"), ("y <= z", "y ≤ z")], # Ia-3d
}
[docs]
def get_additional_asu_conditions(space_group: int):
"""
Get additional ASU conditions for a space group.
Args:
space_group: Space group number (1-230)
Returns:
List of tuples (condition_string, description) or empty list
"""
return ASU_ADDITIONAL_CONDITIONS.get(space_group, [])