Source code for pyxtal.constants

"""
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, [])