@@ -5807,6 +5807,63 @@ def test_astype_attrs(self):
5807
5807
assert not data .astype (float , keep_attrs = False ).attrs
5808
5808
assert not data .astype (float , keep_attrs = False ).var1 .attrs
5809
5809
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
+
5810
5867
5811
5868
# Py.test tests
5812
5869
0 commit comments