from pymatgen.io.cif import CifParser from pymatgen.symmetry.analyzer import SpacegroupAnalyzer def get_members(var): class_type = var.__class__ funcs = [method for method in dir(class_type) if callable(getattr(class_type, method))] vars = [method for method in dir(class_type) if not callable(getattr(class_type, method))] return funcs, vars, getattr(var, "__dict__", None) def print_variables(varname, var): print("") print("---------------------------------------------------") if var is None: print(f"variable {varname} is None") return var_type = type(var) if var_type is int or var_type is float or var_type is bool or var_type is str \ or var_type is list or var_type is tuple or var_type is dict: print(f"variable {varname}: type={var_type} var=", var) return module_name = getattr(var, '__module__') print(f"{module_name} class for variable {varname}:") funcs, vars, dict_var = get_members(var) print(" functions:") for f in funcs: try: ret = getattr(var, f)() except: ret = None if ret is not None: try: print(f" {f}() = ", ret) except: pass else: print(f" {f}()", ) # print(" vars :", vars) # print(" dict_var :", dict_var) print("") print(" Variables:") for varname in vars: try: v = getattr(var, varname) except: v = None if v is not None: print(f" {varname}:", v, type(v)) else: print(f" {varname}:", 'None') path = 'SrTiO3.cif' parser = CifParser(path) print_variables("parser", parser) mat = parser.get_structures(primitive = False, symmetrized = False)[0] #print_variables("mat", mat) sga = SpacegroupAnalyzer(mat) #print_variables("sga", sga) mat_sym = sga.get_symmetrized_structure() #print_variables("mat_sym", mat_sym) #lat_SrTiO3 = mat.lattice #print(lat_SrTiO3) eq_sites = mat_sym.equivalent_sites print_variables("eq_sites", eq_sites) asym_unit = [site[0] for site in eq_sites] print("mat_sym=", mat_sym) print("asym_unit=", asym_unit) print_variables("asym_unit[0]", asym_unit[0]) #print_variables("asym_unit[0]._abc_impl", asym_unit[0]._abc_impl) print_variables("asym_unit[0].specie", asym_unit[0].specie) print_variables("asym_unit[0].species", asym_unit[0].species)