@@ -464,19 +464,19 @@ def test_array_1d(self):
464
464
assert_array_equal (A , T [slice (None )])
465
465
assert_array_equal (A [:10 ], T [:10 ])
466
466
assert_array_equal (A [10 :20 ], T [10 :20 ])
467
- assert_array_equal (A [- 10 :], T [- 10 :])
467
+ assert_array_equal (A [- 10 :], T [1050 - 10 :])
468
468
469
469
# ellipsis
470
470
assert_array_equal (A [:10 , ...], T [:10 , ...])
471
471
assert_array_equal (A [10 :50 , ...], T [10 :50 , ...])
472
- assert_array_equal (A [- 50 :, ...], T [- 50 :, ...])
472
+ assert_array_equal (A [- 50 :, ...], T [1050 - 50 :, ...])
473
473
assert_array_equal (A [..., :10 ], T [..., :10 ])
474
474
assert_array_equal (A [..., 10 :20 ], T [..., 10 :20 ])
475
- assert_array_equal (A [..., - 50 :], T [..., - 50 :])
475
+ assert_array_equal (A [..., - 50 :], T [..., 1050 - 50 :])
476
476
477
477
# across tiles
478
478
assert_array_equal (A [:150 ], T [:150 ])
479
- assert_array_equal (A [- 250 :], T [- 250 :])
479
+ assert_array_equal (A [- 250 :], T [1050 - 250 :])
480
480
481
481
# point index
482
482
self .assertEqual (A [0 ], T [0 ])
@@ -503,7 +503,7 @@ def test_array_1d(self):
503
503
# basic step
504
504
assert_array_equal (A [:50 :2 ], T [:50 :2 ])
505
505
assert_array_equal (A [:2 :50 ], T [:2 :50 ])
506
- assert_array_equal (A [10 :- 1 :50 ], T [10 :- 1 :50 ])
506
+ assert_array_equal (A [10 :- 1 :50 ], T [10 :1050 :50 ])
507
507
508
508
# indexing errors
509
509
with self .assertRaises (IndexError ):
@@ -637,46 +637,46 @@ def test_array_2d(self):
637
637
assert_array_equal (A [:10 ], T [:10 ])
638
638
assert_array_equal (A [:10 ], T [:10 ])
639
639
assert_array_equal (A [10 :20 ], T [10 :20 ])
640
- assert_array_equal (A [- 10 :], T [- 10 :])
640
+ assert_array_equal (A [- 10 :], T [1000 - 10 :])
641
641
assert_array_equal (A [:10 , :], T [:10 , :])
642
642
assert_array_equal (A [10 :20 , :], T [10 :20 , :])
643
- assert_array_equal (A [- 10 :, :], T [- 10 :, :])
643
+ assert_array_equal (A [- 10 :, :], T [1000 - 10 :, :])
644
644
assert_array_equal (A [:10 , ...], T [:10 , ...])
645
645
assert_array_equal (A [10 :20 , ...], T [10 :20 , ...])
646
- assert_array_equal (A [- 10 :, ...], T [- 10 :, ...])
646
+ assert_array_equal (A [- 10 :, ...], T [1000 - 10 :, ...])
647
647
assert_array_equal (A [:10 , :, ...], T [:10 , :, ...])
648
648
assert_array_equal (A [10 :20 , :, ...], T [10 :20 , :, ...])
649
- assert_array_equal (A [- 10 :, :, ...], T [- 10 :, :, ...])
649
+ assert_array_equal (A [- 10 :, :, ...], T [1000 - 10 :, :, ...])
650
650
651
651
# slice second dimension
652
652
assert_array_equal (A [:, :2 ], T [:, :2 ])
653
653
assert_array_equal (A [:, 2 :4 ], T [:, 2 :4 ])
654
- assert_array_equal (A [:, - 2 :], T [:, - 2 :])
654
+ assert_array_equal (A [:, - 2 :], T [:, 10 - 2 :])
655
655
assert_array_equal (A [..., :2 ], T [..., :2 ])
656
656
assert_array_equal (A [..., 2 :4 ], T [..., 2 :4 ])
657
- assert_array_equal (A [..., - 2 :], T [..., - 2 :])
657
+ assert_array_equal (A [..., - 2 :], T [..., 10 - 2 :])
658
658
assert_array_equal (A [:, ..., :2 ], T [:, ..., :2 ])
659
659
assert_array_equal (A [:, ..., 2 :4 ], T [:, ..., 2 :4 ])
660
- assert_array_equal (A [:, ..., - 2 :], T [:, ..., - 2 :])
660
+ assert_array_equal (A [:, ..., - 2 :], T [:, ..., 10 - 2 :])
661
661
662
662
# slice both dimensions
663
663
assert_array_equal (A [:10 , :2 ], T [:10 , :2 ])
664
664
assert_array_equal (A [10 :20 , 2 :4 ], T [10 :20 , 2 :4 ])
665
- assert_array_equal (A [- 10 :, - 2 :], T [- 10 :, - 2 :])
665
+ assert_array_equal (A [- 10 :, - 2 :], T [1000 - 10 :, 10 - 2 :])
666
666
667
667
# slice across tile boundries
668
668
assert_array_equal (A [:110 ], T [:110 ])
669
669
assert_array_equal (A [190 :310 ], T [190 :310 ])
670
- assert_array_equal (A [- 110 :], T [- 110 :])
670
+ assert_array_equal (A [- 110 :], T [1000 - 110 :])
671
671
assert_array_equal (A [:110 , :], T [:110 , :])
672
672
assert_array_equal (A [190 :310 , :], T [190 :310 , :])
673
- assert_array_equal (A [- 110 :, :], T [- 110 :, :])
673
+ assert_array_equal (A [- 110 :, :], T [1000 - 110 :, :])
674
674
assert_array_equal (A [:, :3 ], T [:, :3 ])
675
675
assert_array_equal (A [:, 3 :7 ], T [:, 3 :7 ])
676
- assert_array_equal (A [:, - 3 :], T [:, - 3 :])
676
+ assert_array_equal (A [:, - 3 :], T [:, 10 - 3 :])
677
677
assert_array_equal (A [:110 , :3 ], T [:110 , :3 ])
678
678
assert_array_equal (A [190 :310 , 3 :7 ], T [190 :310 , 3 :7 ])
679
- assert_array_equal (A [- 110 :, - 3 :], T [- 110 :, - 3 :])
679
+ assert_array_equal (A [- 110 :, - 3 :], T [1000 - 110 :, 10 - 3 :])
680
680
681
681
# single row/col/item
682
682
assert_array_equal (A [0 ], T [0 ])
@@ -1247,7 +1247,7 @@ def test_varlen_sparse_all_empty_strings(self):
1247
1247
1248
1248
with tiledb .open (uri , mode = "r" ) as T :
1249
1249
# check interior range
1250
- assert_array_equal (A [1 :- 1 ], T [2 : - 1 ]["a1" ])
1250
+ assert_array_equal (A [1 :- 1 ], T [1 : dim_len - 1 ]["a1" ])
1251
1251
assert_array_equal (A [1 :- 1 ], T .multi_index [2 : dim_len - 1 ]["a1" ])
1252
1252
1253
1253
def test_varlen_write_unicode (self ):
@@ -1521,6 +1521,51 @@ def test_array_varlen_2d_s_fixed(self):
1521
1521
with tiledb .DenseArray (uri ) as T :
1522
1522
assert_array_equal (A , T )
1523
1523
1524
+ @pytest .mark .parametrize ("lo,hi" , [(- 20 , - 10 ), (- 10 , 0 ), (0 , 10 ), (10 , 20 )])
1525
+ def test_dense_array_with_negative_positive_domain (self , lo , hi ):
1526
+ path = self .path ("test_dense_array_with_negative_domain" )
1527
+ attr = tiledb .Attr (dtype = np .uint8 )
1528
+ dom = tiledb .Domain (tiledb .Dim ("X" , domain = (- 20 , 20 ), dtype = np .int64 ))
1529
+ schema = tiledb .ArraySchema (domain = dom , sparse = False , attrs = [attr ])
1530
+ tiledb .Array .create (path , schema )
1531
+ data = np .random .randint (10 , size = (hi - lo ))
1532
+
1533
+ with tiledb .open (path , "w" ) as A :
1534
+ A [lo :hi ] = data
1535
+
1536
+ with tiledb .open (path , "r" ) as A :
1537
+ assert_array_equal (A [lo :hi ], data [:])
1538
+
1539
+ @pytest .mark .parametrize ("lo,hi" , [(- 20 , - 10 ), (- 20 , - 15 ), (- 15 , - 10 ), (- 17 , - 13 )])
1540
+ def test_dense_array_with_negative_negative_domain (self , lo , hi ):
1541
+ path = self .path ("test_dense_array_with_negative_negative_domain" )
1542
+ attr = tiledb .Attr (dtype = np .uint8 )
1543
+ dom = tiledb .Domain (tiledb .Dim ("X" , domain = (- 20 , - 10 ), dtype = np .int64 ))
1544
+ schema = tiledb .ArraySchema (domain = dom , sparse = False , attrs = [attr ])
1545
+ tiledb .Array .create (path , schema )
1546
+ data = np .random .randint (10 , size = (hi - lo ))
1547
+
1548
+ with tiledb .open (path , "w" ) as A :
1549
+ A [lo :hi ] = data
1550
+
1551
+ with tiledb .open (path , "r" ) as A :
1552
+ assert_array_equal (A [lo :hi ], data [:])
1553
+
1554
+ @pytest .mark .parametrize ("lo,hi" , [(10 , 20 ), (10 , 15 ), (12 , 15 ), (17 , 20 )])
1555
+ def test_dense_array_with_offset_domain (self , lo , hi ):
1556
+ path = self .path ("test_dense_array_with_offset_domain" )
1557
+ attr = tiledb .Attr (dtype = np .uint8 )
1558
+ dom = tiledb .Domain (tiledb .Dim ("X" , domain = (10 , 20 ), dtype = np .int64 ))
1559
+ schema = tiledb .ArraySchema (domain = dom , sparse = False , attrs = [attr ])
1560
+ tiledb .Array .create (path , schema )
1561
+ data = np .random .randint (10 , size = (hi - lo ))
1562
+
1563
+ with tiledb .open (path , "w" ) as A :
1564
+ A [lo :hi ] = data
1565
+
1566
+ with tiledb .open (path , "r" ) as A :
1567
+ assert_array_equal (A [lo :hi ], data [:])
1568
+
1524
1569
1525
1570
class TestSparseArray (DiskTestCase ):
1526
1571
@pytest .mark .xfail
@@ -2345,7 +2390,7 @@ def _test_index(self, A, T, idx):
2345
2390
slice (0 , 1050 ),
2346
2391
slice (50 , 150 ),
2347
2392
slice (0 , 2000 ),
2348
- slice (- 150 , - 50 ),
2393
+ slice (1050 - 150 , 1050 - 50 ),
2349
2394
# TODO: indexing failures
2350
2395
# slice(-2000, 2000),
2351
2396
# slice(0, 0), # empty result
0 commit comments