@@ -5807,6 +5807,63 @@ def test_astype_attrs(self):
58075807 assert not data .astype (float , keep_attrs = False ).attrs
58085808 assert not data .astype (float , keep_attrs = False ).var1 .attrs
58095809
5810+ def test_query_single_dim (self ):
5811+ """Test querying a single dimension."""
5812+
5813+ # setup test data
5814+ np .random .seed (42 )
5815+ a = np .arange (0 , 10 , 1 )
5816+ b = np .random .randint (0 , 100 , size = 10 )
5817+ c = np .linspace (0 , 1 , 20 )
5818+ d = np .arange (0 , 200 ).reshape (10 , 20 )
5819+ ds = Dataset (
5820+ {"a" : ("x" , a ), "b" : ("x" , b ), "c" : ("y" , c ), "d" : (("x" , "y" ), d )}
5821+ )
5822+
5823+ # query single dim, single variable
5824+ actual = ds .query (x = "a > 5" )
5825+ expect = ds .isel (x = (a > 5 ))
5826+ assert_identical (expect , actual )
5827+
5828+ # query single dim, single variable, via dict
5829+ actual = ds .query (dict (x = "a > 5" ))
5830+ expect = ds .isel (dict (x = (a > 5 )))
5831+ assert_identical (expect , actual )
5832+
5833+ # query single dim, single variable
5834+ actual = ds .query (x = "b > 50" )
5835+ expect = ds .isel (x = (b > 50 ))
5836+ assert_identical (expect , actual )
5837+
5838+ # query single dim, single variable
5839+ actual = ds .query (y = "c < .5" )
5840+ expect = ds .isel (y = (c < 0.5 ))
5841+ assert_identical (expect , actual )
5842+
5843+ # query single dim, multiple variables
5844+ actual = ds .query (x = "(a > 5) & (b > 50)" )
5845+ expect = ds .isel (x = ((a > 5 ) & (b > 50 )))
5846+ assert_identical (expect , actual )
5847+
5848+ # support pandas query parser
5849+ actual = ds .query (x = "(a > 5) and (b > 50)" )
5850+ expect = ds .isel (x = ((a > 5 ) & (b > 50 )))
5851+ assert_identical (expect , actual )
5852+
5853+ # query multiple dims via kwargs
5854+ actual = ds .query (x = "a > 5" , y = "c < .5" )
5855+ expect = ds .isel (x = (a > 5 ), y = (c < 0.5 ))
5856+ assert_identical (expect , actual )
5857+
5858+ # query multiple dims via dict
5859+ actual = ds .query (dict (x = "a > 5" , y = "c < .5" ))
5860+ expect = ds .isel (dict (x = (a > 5 ), y = (c < 0.5 )))
5861+ assert_identical (expect , actual )
5862+
5863+ # TODO test error handling
5864+
5865+ # TODO test dask data variables
5866+
58105867
58115868# Py.test tests
58125869
0 commit comments