File: api.md

package info (click to toggle)
spglib 2.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 14,180 kB
  • sloc: ansic: 125,066; python: 7,717; cpp: 2,197; f90: 2,143; ruby: 792; makefile: 22; sh: 18
file content (693 lines) | stat: -rw-r--r-- 25,567 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
# C-APIs

## Version

### `spg_get_major_version`, `spg_get_minor_version`, `spg_get_micro_version`

**New in version 1.8.3**

Version number of spglib is obtained. These three functions return
integers that correspond to spglib version [major].[minor].[micro].

## Error

### `spg_get_error_code` and `spg_get_error_message`

**New in version 1.9.5**

**Be careful. These are not thread safe, i.e., only safely usable
when calling one spglib function per process.**

These functions is used to see roughly why spglib failed.

```c
SpglibError spg_get_error_code(void);
```

```c
char * spg_get_error_message(SpglibError spglib_error);
```

The `SpglibError` type is a enum type as shown below.

```c
typedef enum {
   SPGLIB_SUCCESS = 0,
   SPGERR_SPACEGROUP_SEARCH_FAILED,
   SPGERR_CELL_STANDARDIZATION_FAILED,
   SPGERR_SYMMETRY_OPERATION_SEARCH_FAILED,
   SPGERR_ATOMS_TOO_CLOSE,
   SPGERR_POINTGROUP_NOT_FOUND,
   SPGERR_NIGGLI_FAILED,
   SPGERR_DELAUNAY_FAILED,
   SPGERR_ARRAY_SIZE_SHORTAGE,
   SPGERR_NONE,
} SpglibError;
```

The usage is as follows

```c
SpglibError error;
error = spg_get_error_code();
printf("%s\n", spg_get_error_message(error));
```

## Space-group symmetry search

(api_spg_get_symmetry)=

### `spg_get_symmetry`

This function finds a set of representative symmetry operations for
primitive cells or its extension with lattice translations for
supercells. 0 is returned if it failed.

```c
int spg_get_symmetry(int rotation[][3][3],
                     double translation[][3],
                     const int max_size,
                     const double lattice[3][3],
                     const double position[][3],
                     const int types[],
                     const int num_atom,
                     const double symprec);
```

The operations are stored in `rotation` and `translation`. The
number of operations is return as the return value. Rotations and
translations are given in fractional coordinates, and `rotation[i]`
and `translation[i]` with same index give a symmetry operations,
i.e., these have to be used together.

As an exceptional case, if a supercell (or non-primitive cell) has the
basis vectors whose lattice breaks crystallographic point group, the
crystallographic symmetry operations are searched within this broken
symmetry, i.e., at most the crystallographic point group found in this
case is the point group of the lattice. For example, this happens for
the $2\times 1\times 1$ supercell of a conventional cubic unit
cell. This may not be understandable in crystallographic sense, but is
practically useful treatment for research in computational materials
science.

(api_spg_get_dataset)=

### `spg_get_dataset` and `spg_get_dataset_with_hall_number`

**Changed in version 1.8.1**

For an input unit cell structure, symmetry operations of the crystal
are searched. Then they are compared with the crystallographic
database and the space group type is determined. The result is
returned as the `SpglibDataset` structure as a dataset.

The detail of the dataset is given at [](dataset.md).

Dataset corresponding to the space group type in the standard setting
is obtained by `spg_get_dataset`. Here the standard setting means
the first top one among the Hall symbols listed for each space group
type. For example, H setting (hexagonal lattice) is chosen for
rhombohedral crystals. `spg_get_dataset_with_hall_number` explained
below is used to choose different settings such as R setting of
rhombohedral crystals. If this symmetry search fails, `NULL` is
returned in version 1.8.1 or later (spacegroup_number = 0 is returned
in the previous versions). In this function, the other
crystallographic setting is not obtained.

```c
SpglibDataset * spg_get_dataset(const double lattice[3][3],
                                const double position[][3],
                                const int types[],
                                const int num_atom,
                                const double symprec);
```

To specify the other crystallographic choice (setting, origin, axis,
or cell choice), `spg_get_dataset_with_hall_number` is used.

```c
SpglibDataset * spg_get_dataset_with_hall_number(const double lattice[3][3],
                                                 const double position[][3],
                                                 const int types[],
                                                 const int num_atom,
                                                 const int hall_number,
                                                 const double symprec)
```

where `hall_number` is used to specify the choice. The possible
choices and those serial numbers are found at [list of space groups
(Seto's web site)](https://yseto.net/en/sg/sg1).
The crystal structure has to possess the space-group type of the Hall
symbol. If the symmetry search fails or the specified `hall_number`
is not in the list of Hall symbols for the space group type of the
crystal structure, `spacegroup_number` in the `SpglibDataset`
structure is set 0.

Finally, its allocated memory space must be freed by calling
`spg_free_dataset`.

### `spg_free_dataset`

Allocated memory space of the C-structure of `SpglibDataset` is
freed by calling `spg_free_dataset`.

```c
void spg_free_dataset(SpglibDataset *dataset);
```

### `spg_get_multiplicity`

This function returns exact number of symmetry operations. 0 is
returned when it failed.

```c
int spg_get_multiplicity(const double lattice[3][3],
                         const double position[][3],
                         const int types[],
                         const int num_atom,
                         const double symprec);
```

This function may be used in advance to allocate memory space for
symmetry operations.

## Space-group type search

### `spg_get_international`

Space group type is found and returned in international table symbol
to `symbol` and also as a number (return value). 0 is returned if
it failed.

```c
int spg_get_international(char symbol[11],
                          const double lattice[3][3],
                          const double position[][3],
                          const int types[],
                          const int num_atom,
                          const double symprec);
```

### `spg_get_schoenflies`

Space group type is found and returned in schoenflies to `symbol`
and also as a number (return value). 0 is returned if it failed.

```c
int spg_get_schoenflies(char symbol[7],
                        const double lattice[3][3],
                        const double position[][3],
                        const int types[],
                        const int num_atom,
                        const double symprec);
```

## Standardization and finding primitive cell

### `spg_standardize_cell`

The standardized unit cell (see {ref}`def_standardized_unit_cell`) is
generated from an input unit cell structure and its symmetry found by
the symmetry search. The choice of the setting for each space group
type is as explained for {ref}`spg_get_dataset <api_spg_get_dataset>`.
Usually `to_primitive=0` and `no_idealize=0` are recommended to
set and this setting results in the same behavior as
`spg_refine_cell`. 0 is returned if it failed.

```c
int spg_standardize_cell(double lattice[3][3],
                         double position[][3],
                         int types[],
                         const int num_atom,
                         const int to_primitive,
                         const int no_idealize,
                         const double symprec);
```

Number of atoms in the found standardized unit (primitive) cell is
returned.

`to_primitive=1` is used to create the standardized primitive cell
with the transformation matrices shown at
{ref}`def_standardized_primitive_cell`, otherwise `to_primitive=0`
must be specified. The found basis vectors and
atomic point coordinates and types are overwritten in `lattice`,
`position`, and `types`, respectively. Therefore with
`to_primitive=0`, at a maximum four times larger array size for
`position` and `types` than the those size of the input unit cell
is required to store a standardized unit cell with face centring found
in the case that the input unit cell is a primitive cell.

`no_idealize=0` is used to idealize the lengths and angles of basis
vectors with adjusting the positions of atoms to nearest exact
positions according to crystal symmetry. However the crystal can be
rotated in Cartesian coordinates by the idealization of the basis
vectors. `no_idealize=1` disables this. The detail of the
idealization (`no_idealize=0`) is written at
{ref}`def_idealize_cell`. `no_idealize=1` may be useful when we want
to leave basis vectors and atomic positions in Cartesian coordinates
fixed.

### `spg_find_primitive`

**Behavior is changed. This function is now a shortcut of**
`spg_standardize_cell` **with**
`to_primitive=1` **and** `no_idealize=0`.

A primitive cell is found from an input unit cell. 0 is returned if it
failed.

```c
int spg_find_primitive(double lattice[3][3],
                       double position[][3],
                       int types[],
                       const int num_atom,
                       const double symprec);
```

`lattice`, `position`, and `types` are overwritten. Number of
atoms in the found primitive cell is returned. The crystal can be
rotated by this function. To avoid this, please use
`spg_standardize_cell` with `to_primitive=1` and `no_idealize=1`
although the crystal structure is not idealized.

### `spg_refine_cell`

**This function exists for backward compatibility since it is same
as** `spg_standardize_cell` **with** `to_primitive=0` **and**
`no_idealize=0`.

The standardized crystal structure is obtained from a non-standard
crystal structure which may be slightly distorted within a symmetry
recognition tolerance, or whose primitive vectors are differently
chosen, etc. 0 is returned if it failed.

```c
int spg_refine_cell(double lattice[3][3],
                    double position[][3],
                    int types[],
                    const int num_atom,
                    const double symprec);
```

The calculated standardized lattice and atomic positions overwrites
`lattice`, `position`, and `types`. The number of atoms in the
standardized unit cell is returned as the return value. When the input
unit cell is a primitive cell and is the face centring symmetry, the
number of the atoms returned becomes four times large. Since this
function does not have any means of checking the array size (memory
space) of these variables, the array size (memory space) for
`position` and `types` should be prepared **four times more** than
those required for the input unit cell in general.

## Space-group dataset access

### `spg_get_symmetry_from_database`

This function allows to directly access to the space group operations
in the spglib database (spg_database.c). To specify the space group
type with a specific choice, `hall_number` is used. The definition
of `hall_number` is found at
{ref}`dataset_spg_get_dataset_spacegroup_type`. 0 is returned when it
failed.

```c
int spg_get_symmetry_from_database(int rotations[192][3][3],
                                   double translations[192][3],
                                   const int hall_number);
```

The returned value is the number of space group operations. The space
group operations are stored in `rotations` and `translations`.

(api_spg_spacegroup_type)=

### `spg_get_spacegroup_type`

**Changed at version 1.9.4: Some members are added and the member name 'setting' is changed to 'choice'.**
**Changed at version 2.0: Add 'hall_number' member.**

This function allows to directly access to the space-group-type
database in spglib (spg_database.c). To specify the space group type
with a specific choice, `hall_number` is used. The definition of
`hall_number` is found at
{ref}`dataset_spg_get_dataset_spacegroup_type`.
`number = 0` is returned when it failed.

```c
SpglibSpacegroupType spg_get_spacegroup_type(const int hall_number)
```

`SpglibSpacegroupType` structure is as follows:

```c
typedef struct {
    int number;
    char international_short[11];
    char international_full[20];
    char international[32];
    char schoenflies[7];
    int hall_number;
    char hall_symbol[17];
    char choice[6];
    char pointgroup_international[6];
    char pointgroup_schoenflies[4];
    int arithmetic_crystal_class_number;
    char arithmetic_crystal_class_symbol[7];
} SpglibSpacegroupType;
```

(api_spg_get_spacegroup_type_from_symmetry)=

### `spg_get_spacegroup_type_from_symmetry`

**New at version 2.0**

Return space-group type information from symmetry operations.
This is the replacement of `spg_get_hall_number_from_symmetry` (deprecated at v2.0).

This is expected to work well for the set of symmetry operations whose
distortion is small. The aim of making this feature is to find
space-group-type for the set of symmetry operations given by the other
source than spglib.

```c
SpglibSpacegroupType spg_get_spacegroup_type_from_symmetry(
    const int rotations[][3][3], const double translations[][3],
    const int num_operations, const double lattice[3][3], const double symprec
);
```

The `SpglibSpacegroupType` structure is explained at
{ref}`api_spg_spacegroup_type`. The parameter `lattice` should be the same as
that used to find `rotations` and `translations`. If it is unknown, the
following may be a possible choice:

```
lattice[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
```

unless the `rotations` and `translations` were obtained for an unusual (very
oblique) choice of basis vectors.

## Magnetic symmetry

### `spg_get_symmetry_with_collinear_spin`

This function finds symmetry operations with collinear polarizations
(spins) on atoms. Except for the argument of `const double spins[]`,
the usage is basically the same as `spg_get_symmetry`, but as an
output, `equivalent_atoms` are obtained. The size of this array is
the same of `num_atom`. See {ref}`dataset_spg_get_dataset_site_symmetry`
for the definition `equivalent_atoms`. 0 is returned when it failed.

```c
int spg_get_symmetry_with_collinear_spin(int rotation[][3][3],
                                         double translation[][3],
                                         int equivalent_atoms[],
                                         const int max_size,
                                         const double lattice[3][3],
                                         const double position[][3],
                                         const int types[],
                                         const double spins[],
                                         const int num_atom,
                                         const double symprec);
```

### `spg_get_symmetry_with_site_tensors`

**Experimental: new at version 2.0**

Returns magnetic symmetry operations represented by `rotation`, `translation`, and `spin_flips`
from crystal structure with `lattice`, `position`, `types`, and `tensors`.
When you need magnetic symmetry operations of non-collinear spins, set `tensor_rank=1`, `is_axial=1`,
and `tensors` with length `num_atom * 3` (ordered by $[ m_{1x}, m_{1y}, m_{1z}, \dots ]$)
in cartesian coordinates.
For other combinations of `tensor_rank` and `is_axial`, see [](development/magnetic_symmetry_flags.md).
Returned `spin_flips` represents sign of site tensors after applying time-reversal operations:
1 for non time reversal, and -1 for time reversal.

```c
int spg_get_symmetry_with_site_tensors(
    int rotation[][3][3], double translation[][3], int equivalent_atoms[],
    double primitive_lattice[3][3], int *spin_flips, const int max_size,
    const double lattice[3][3], const double position[][3],
    const int types[], const double *tensors, const int tensor_rank,
    const int num_atom, const int with_time_reversal, const int is_axial,
    const double symprec);
```

### `spg_get_magnetic_dataset`

**Experimental: new at version 2.0**

Return magnetic symmetry operations and standardized structure of given structure with site tensors.

- To search magnetic symmetry operations of a structure with collinear spins, set `tensor_rank=0`,
  `is_axial=0`, and `tensors` with length `num_atom`
- To search magnetic symmetry operations of a structure with non-collinear spins, set `tensor_rank=1`,
  `is_axial=1`, and `tensors` with length `num_atom * 3` in cartesian coordinates.

The description of returned dataset is given at {ref}`magnetic_spglib_dataset`.

```c
SpglibMagneticDataset *spg_get_magnetic_dataset(
    const double lattice[3][3], const double position[][3],
    const int types[], const double *tensors, const int tensor_rank,
    const int num_atom, const int is_axial, const double symprec);
```

### `spg_get_magnetic_symmetry_from_database`

**Experimental: new at version 2.0**

Magnetic space-group operations in built-in database are accessed by UNI
number, which is defined as number from 1 to 1651.
Optionally alternative settings can be specified with hall_number.
For type-I, type-II, and type-III magnetic space groups, `hall_number`
changes settings in family space group.
For type-IV, `hall_number` changes settings in maximal space group.
When `hall_number = 0`, the smallest hall number corresponding to uni_number is
used.

```c
int spg_get_magnetic_symmetry_from_database(int rotations[384][3][3],
                                            double translations[384][3],
                                            int time_reversals[384],
                                            const int uni_number,
                                            const int hall_number);
```

### `spg_free_magnetic_dataset`

**Experimental: new at version 2.0**

```c
void spg_free_magnetic_dataset(SpglibMagneticDataset *dataset);
```

(api_get_magnetic_spacegroup_type)=

### `spg_get_magnetic_spacegroup_type`

**Experimental: new at version 2.0**

Magnetic space-group type information is accessed by serial number of UNI (or BNS) symbols.
The serial number is between 1 and 1651.

```c
SpglibMagneticSpacegroupType spg_get_magnetic_spacegroup_type(
    const int uni_number);
```

Returned `SpglibMagneticSpacegroupType` is the following C-structure:

```c
typedef struct {
    int uni_number;
    int litvin_number;
    char bns_number[8];
    char og_number[12];
    int number;
    int type;
} SpglibMagneticSpacegroupType;
```

- `uni_number` serial number of UNI (or BNS) symbols
- `litvin_number` serial number in Litvin's [Magnetic group tables](https://www.iucr.org/publ/978-0-9553602-2-0)
- `bns_number` BNS number e.g. "151.32"
- `og_number` OG number e.g. "153.4.1270"
- `number` ITA's serial number of space group for reference setting
- `type` Type of MSG from 1 to 4

### `spg_get_magnetic_spacegroup_type_from_symmetry`

**Experimental: new at version 2.0**

Return magnetic space-group type information from magnetic symmetry operations.
`time_reversals` takes 0 for ordinary operations and 1 for time-reversal operations.

```c
SpglibMagneticSpacegroupType spg_get_magnetic_spacegroup_type_from_symmetry(
    const int rotations[][3][3], const double translations[][3],
    const int *time_reversals, const int num_operations,
    const double lattice[3][3], const double symprec
);
```

See {ref}`api_get_magnetic_spacegroup_type` for returned `SpglibMagneticSpacegroupType`.

## Lattice reduction

### `spg_niggli_reduce`

Niggli reduction is applied to input basis vectors `lattice` and the
reduced basis vectors are overwritten to `lattice`. 0 is returned if
it failed.

```c
int spg_niggli_reduce(double lattice[3][3], const double symprec);
```

The transformation from original basis vectors $( \mathbf{a}
\; \mathbf{b} \; \mathbf{c} )$ to final basis vectors $(
\mathbf{a}' \; \mathbf{b}' \; \mathbf{c}' )$ is achieved by linear
combination of basis vectors with integer coefficients without
rotating coordinates. Therefore the transformation matrix is obtained
by $\boldsymbol{P} = ( \mathbf{a} \; \mathbf{b} \; \mathbf{c} )
( \mathbf{a}' \; \mathbf{b}' \; \mathbf{c}' )^{-1}$ and the matrix
elements have to be almost integers.

### `spg_delaunay_reduce`

Delaunay reduction is applied to input basis vectors `lattice` and
the reduced basis vectors are overwritten to `lattice`. 0 is
returned if it failed.

```c
int spg_delaunay_reduce(double lattice[3][3], const double symprec);
```

The transformation from original basis vectors $( \mathbf{a}
\; \mathbf{b} \; \mathbf{c} )$ to final basis vectors $(
\mathbf{a}' \; \mathbf{b}' \; \mathbf{c}' )$ is achieved by linear
combination of basis vectors with integer coefficients without
rotating coordinates. Therefore the transformation matrix is obtained
by $\boldsymbol{P} = ( \mathbf{a} \; \mathbf{b} \; \mathbf{c} )
( \mathbf{a}' \; \mathbf{b}' \; \mathbf{c}' )^{-1}$ and the matrix
elements have to be almost integers.

## Kpoints

### `spg_get_ir_reciprocal_mesh`

Irreducible reciprocal grid points are searched from uniform mesh grid
points specified by `mesh` and `is_shift`.

```c
int spg_get_ir_reciprocal_mesh(int grid_address[][3],
                               int map[],
                               const int mesh[3],
                               const int is_shift[3],
                               const int is_time_reversal,
                               const double lattice[3][3],
                               const double position[][3],
                               const int types[],
                               const int num_atom,
                               const double symprec)
```

`mesh` stores three integers. Reciprocal primitive vectors are
divided by the number stored in `mesh` with (0,0,0) point
centering. The center of grid mesh is shifted +1/2 of a grid spacing
along corresponding reciprocal axis by setting 1 to a `is_shift`
element. No grid mesh shift is made if 0 is set for `is_shift`.

The reducible uniform grid points are returned in fractional coordinates
as `grid_address`. A map between reducible and irreducible points are
returned as `map` as in the indices of `grid_address`. The number of
the irreducible k-points are returned as the return value. The time
reversal symmetry is imposed by setting `is_time_reversal` 1.

Grid points are stored in the order that runs left most element
first, e.g. (4x4x4 mesh).

```
[[ 0  0  0]
 [ 1  0  0]
 [ 2  0  0]
 [-1  0  0]
 [ 0  1  0]
 [ 1  1  0]
 [ 2  1  0]
 [-1  1  0]
 ....      ]
```

where the first index runs first. k-qpoints are calculated by
`(grid_address + is_shift / 2) / mesh`. A grid point index is
recovered from `grid_address` by `numpy.dot(grid_address % mesh, [1, mesh[0], mesh[0] * mesh[1]])` in Python-numpy notation, where
`%` always returns non-negative integers. The order of
`grid_address` can be changed so that the last index runs first by
setting the macro `GRID_ORDER_XYZ` in `kpoint.c`. In this case the
grid point index is recovered by `numpy.dot(grid_address % mesh, [mesh[2] * mesh[1], mesh[2], 1])`.

### `spg_get_stabilized_reciprocal_mesh`

The irreducible k-points are searched from unique k-point mesh grids
from direct (real space) basis vectors and a set of rotation parts of
symmetry operations in direct space with one or multiple
stabilizers.

```c
int spg_get_stabilized_reciprocal_mesh(int grid_address[][3],
                                       int map[],
                                       const int mesh[3],
                                       const int is_shift[3],
                                       const int is_time_reversal,
                                       const int num_rot,
                                       const int rotations[][3][3],
                                       const int num_q,
                                       const double qpoints[][3])
```

The stabilizers are written in fractional coordinates. Number of the
stabilizers are given by `num_q`. Symmetrically equivalent k-points
(stars) in fractional coordinates are stored in `map` as indices of
`grid_address`. The number of reduced k-points with the stabilizers
are returned as the return value.

This function can be used to obtain all mesh grid points by setting
`num_rot = 1`, `rotations = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}`,
`num_q = 1`, and `qpoints = {0, 0, 0}`.

## Deprecated

### `spg_get_hall_number_from_symmetry`

**Deprecated at version 2.0. This function is replaced by
{ref}`api_spg_get_spacegroup_type_from_symmetry`.**

Return one of `hall_number` corresponding to a space-group type of the given
set of symmetry operations. When multiple `hall_number` exist for the
space-group type, the smallest one (the first description of the space-group
type in International Tables for Crystallography) is chosen. The definition of
`hall_number` is found at {ref}`dataset_spg_get_dataset_spacegroup_type` and
the corresponding space-group-type information is obtained through
{ref}`api_spg_spacegroup_type`.

This is expected to work well for the set of symmetry operations whose
distortion is small. The aim of making this feature is to find
space-group-type for the set of symmetry operations given by the other
source than spglib.

Note that the definition of `symprec` is
different from usual one, but is given in the fractional
coordinates and so it should be small like `1e-5`.

```c
int spg_get_hall_number_from_symmetry(const int rotation[][3][3],
                                       const double translation[][3],
                                       const int num_operations,
                                       const double symprec)
```