@@ -16,10 +16,11 @@ class AbsorptionRester(BaseRester):
1616 def search (
1717 self ,
1818 material_ids : str | list [str ] | None = None ,
19- chemsys : str | list [str ] | None = None ,
20- elements : list [str ] | None = None ,
21- exclude_elements : list [str ] | None = None ,
22- formula : list [str ] | None = None ,
19+ num_sites : int | tuple [int , int ] | None = None ,
20+ num_elements : int | tuple [int , int ] | None = None ,
21+ volume : float | tuple [float , float ] | None = None ,
22+ density : float | tuple [float , float ] | None = None ,
23+ band_gap : float | tuple [float , float ] | None = None ,
2324 num_chunks : int | None = None ,
2425 chunk_size : int = 1000 ,
2526 all_fields : bool = True ,
@@ -29,13 +30,6 @@ def search(
2930
3031 Arguments:
3132 material_ids (str, List[str]): Search for optical absorption data associated with the specified Material IDs
32- chemsys (str, List[str]): A chemical system or list of chemical systems
33- (e.g., Li-Fe-O, Si-*, [Si-O, Li-Fe-P]).
34- elements (List[str]): A list of elements.
35- exclude_elements (List[str]): A list of elements to exclude.
36- formula (str, List[str]): A formula including anonymized formula
37- or wild cards (e.g., Fe2O3, ABO3, Si*). A list of chemical formulas can also be passed
38- (e.g., [Fe2O3, ABO3]).
3933 num_chunks (int): Maximum number of chunks of data to yield. None will yield all possible.
4034 chunk_size (int): Number of data entries per chunk.
4135 all_fields (bool): Whether to return all fields in the document. Defaults to True.
@@ -46,23 +40,25 @@ def search(
4640 """
4741 query_params = defaultdict (dict ) # type: dict
4842
49- if formula :
50- if isinstance (formula , str ):
51- formula = [formula ]
52-
53- query_params .update ({"formula" : "," .join (formula )})
54-
55- if chemsys :
56- if isinstance (chemsys , str ):
57- chemsys = [chemsys ]
58-
59- query_params .update ({"chemsys" : "," .join (chemsys )})
60-
61- if elements :
62- query_params .update ({"elements" : "," .join (elements )})
63-
64- if exclude_elements :
65- query_params .update ({"exclude_elements" : "," .join (exclude_elements )})
43+ aliased = {
44+ "num_sites" : "nsites" ,
45+ "num_elements" : "nelements" ,
46+ "band_gap" : "bandgap" ,
47+ }
48+ user_query = locals ()
49+ for k in ("num_sites" ,"num_elements" ,"volume" ,"density" ,"band_gap" ):
50+ if (value := user_query .get (k )) is not None :
51+ if k in ("num_sites" ,"num_elements" ) and isinstance (value , int ):
52+ value = (value , value )
53+ elif k in ("volume" ,"density" ,"band_gap" ) and isinstance (value ,int | float ):
54+ value = (value - 1e-2 , value + 1e-2 )
55+
56+ query_params .update (
57+ {
58+ f"{ aliased .get (k ,k )} _min" : value [0 ],
59+ f"{ aliased .get (k ,k )} _max" : value [1 ],
60+ }
61+ )
6662
6763 if material_ids :
6864 if isinstance (material_ids , str ):
@@ -77,7 +73,6 @@ def search(
7773 }
7874
7975 return super ()._search (
80- formulae = formula ,
8176 num_chunks = num_chunks ,
8277 chunk_size = chunk_size ,
8378 all_fields = all_fields ,
0 commit comments