@@ -3352,8 +3352,8 @@ def get_symmetry_dataset(self, backend: Literal["moyopy"], **kwargs) -> moyopy.M
3352
3352
def get_symmetry_dataset (self , backend : Literal ["spglib" ], ** kwargs ) -> spglib .SpglibDataset : ...
3353
3353
3354
3354
def get_symmetry_dataset (
3355
- self , backend : Literal ["moyopy" , "spglib" ] = "spglib" , ** kwargs
3356
- ) -> moyopy .MoyoDataset | spglib .SpglibDataset :
3355
+ self , backend : Literal ["moyopy" , "spglib" ] = "spglib" , return_raw_dataset = False , ** kwargs
3356
+ ) -> dict | moyopy .MoyoDataset | spglib .SpglibDataset :
3357
3357
"""Get a symmetry dataset from the structure using either moyopy or spglib backend.
3358
3358
3359
3359
If using the spglib backend (default), please cite:
@@ -3365,6 +3365,9 @@ def get_symmetry_dataset(
3365
3365
Args:
3366
3366
backend ("moyopy" | "spglib"): Which symmetry analysis backend to use.
3367
3367
Defaults to "spglib".
3368
+ return_raw_dataset (bool): Whether to return the raw Dataset object from the backend. The default is
3369
+ False, which returns a dict with a common subset of the data present in both datasets. If you use the
3370
+ raw Dataset object, we do not guarantee that the format of the output is not going to change.
3368
3371
**kwargs: Additional arguments passed to the respective backend's constructor.
3369
3372
For spglib, these are passed to SpacegroupAnalyzer (e.g. symprec, angle_tolerance).
3370
3373
For moyopy, these are passed to MoyoDataset constructor.
@@ -3376,6 +3379,9 @@ def get_symmetry_dataset(
3376
3379
ImportError: If the requested backend is not installed.
3377
3380
ValueError: If an invalid backend is specified.
3378
3381
"""
3382
+ if backend not in ("moyopy" , "spglib" ):
3383
+ raise ValueError (f"Invalid { backend = } , must be one of moyopy or spglib." )
3384
+
3379
3385
if backend == "moyopy" :
3380
3386
try :
3381
3387
import moyopy
@@ -3385,16 +3391,31 @@ def get_symmetry_dataset(
3385
3391
3386
3392
# Convert structure to MoyoDataset format
3387
3393
moyo_cell = moyopy .interface .MoyoAdapter .from_structure (self )
3388
- return moyopy .MoyoDataset (cell = moyo_cell , ** kwargs )
3394
+ dataset = moyopy .MoyoDataset (cell = moyo_cell , ** kwargs )
3389
3395
3390
- if backend == "spglib" :
3396
+ else :
3391
3397
from pymatgen .symmetry .analyzer import SpacegroupAnalyzer
3392
3398
3393
3399
sga = SpacegroupAnalyzer (self , ** kwargs )
3394
- return sga .get_symmetry_dataset ()
3400
+ dataset = sga .get_symmetry_dataset ()
3401
+
3402
+ if return_raw_dataset :
3403
+ return dataset
3404
+
3405
+ dictdata = {k : getattr (dataset , k ) for k in ("hall_number" , "number" , "site_symmetry_symbols" , "wyckoffs" )}
3406
+
3407
+ if backend == "spglib" :
3408
+ dictdata ["international" ] = dataset .international
3409
+ dictdata ["orbits" ] = dataset .crystallographic_orbits
3410
+ dictdata ["std_origin_shift" ] = dataset .origin_shift
3411
+ else :
3412
+ from pymatgen .symmetry .groups import SpaceGroup
3413
+
3414
+ dictdata ["international" ] = SpaceGroup .from_int_number (dataset .number ).symbol
3415
+ dictdata ["orbits" ] = dataset .orbits
3416
+ dictdata ["std_origin_shift" ] = dataset .std_origin_shift
3395
3417
3396
- valid_backends = ("moyopy" , "spglib" )
3397
- raise ValueError (f"Invalid { backend = } , must be one of { valid_backends } " )
3418
+ return dictdata
3398
3419
3399
3420
3400
3421
class IMolecule (SiteCollection , MSONable ):
0 commit comments