@@ -1314,12 +1314,20 @@ def __init__(self, store, s, func, where, nrows, start=None, stop=None,
1314
1314
self .s = s
1315
1315
self .func = func
1316
1316
self .where = where
1317
- self .nrows = nrows or 0
1318
- self .start = start or 0
1319
1317
1320
- if stop is None :
1321
- stop = self .nrows
1322
- self .stop = min (self .nrows , stop )
1318
+ # set start/stop if they are not set if we are a table
1319
+ if self .s .is_table :
1320
+ if nrows is None :
1321
+ nrows = 0
1322
+ if start is None :
1323
+ start = 0
1324
+ if stop is None :
1325
+ stop = nrows
1326
+ stop = min (nrows , stop )
1327
+
1328
+ self .nrows = nrows
1329
+ self .start = start
1330
+ self .stop = stop
1323
1331
1324
1332
self .coordinates = None
1325
1333
if iterator or chunksize is not None :
@@ -2303,14 +2311,23 @@ def f(values, freq=None, tz=None):
2303
2311
return klass
2304
2312
2305
2313
def validate_read (self , kwargs ):
2306
- if kwargs .get ('columns' ) is not None :
2314
+ """
2315
+ remove table keywords from kwargs and return
2316
+ raise if any keywords are passed which are not-None
2317
+ """
2318
+ kwargs = copy .copy (kwargs )
2319
+
2320
+ columns = kwargs .pop ('columns' , None )
2321
+ if columns is not None :
2307
2322
raise TypeError ("cannot pass a column specification when reading "
2308
2323
"a Fixed format store. this store must be "
2309
2324
"selected in its entirety" )
2310
- if kwargs .get ('where' ) is not None :
2325
+ where = kwargs .pop ('where' , None )
2326
+ if where is not None :
2311
2327
raise TypeError ("cannot pass a where specification when reading "
2312
2328
"from a Fixed format store. this store must be "
2313
2329
"selected in its entirety" )
2330
+ return kwargs
2314
2331
2315
2332
@property
2316
2333
def is_exists (self ):
@@ -2329,11 +2346,11 @@ def get_attrs(self):
2329
2346
def write (self , obj , ** kwargs ):
2330
2347
self .set_attrs ()
2331
2348
2332
- def read_array (self , key ):
2349
+ def read_array (self , key , start = None , stop = None ):
2333
2350
""" read an array for the specified node (off of group """
2334
2351
import tables
2335
2352
node = getattr (self .group , key )
2336
- data = node [: ]
2353
+ data = node [start : stop ]
2337
2354
attrs = node ._v_attrs
2338
2355
2339
2356
transposed = getattr (attrs , 'transposed' , False )
@@ -2363,17 +2380,17 @@ def read_array(self, key):
2363
2380
else :
2364
2381
return ret
2365
2382
2366
- def read_index (self , key ):
2383
+ def read_index (self , key , ** kwargs ):
2367
2384
variety = _ensure_decoded (getattr (self .attrs , '%s_variety' % key ))
2368
2385
2369
2386
if variety == u ('multi' ):
2370
- return self .read_multi_index (key )
2387
+ return self .read_multi_index (key , ** kwargs )
2371
2388
elif variety == u ('block' ):
2372
- return self .read_block_index (key )
2389
+ return self .read_block_index (key , ** kwargs )
2373
2390
elif variety == u ('sparseint' ):
2374
- return self .read_sparse_intindex (key )
2391
+ return self .read_sparse_intindex (key , ** kwargs )
2375
2392
elif variety == u ('regular' ):
2376
- _ , index = self .read_index_node (getattr (self .group , key ))
2393
+ _ , index = self .read_index_node (getattr (self .group , key ), ** kwargs )
2377
2394
return index
2378
2395
else : # pragma: no cover
2379
2396
raise TypeError ('unrecognized index variety: %s' % variety )
@@ -2411,19 +2428,19 @@ def write_block_index(self, key, index):
2411
2428
self .write_array ('%s_blengths' % key , index .blengths )
2412
2429
setattr (self .attrs , '%s_length' % key , index .length )
2413
2430
2414
- def read_block_index (self , key ):
2431
+ def read_block_index (self , key , ** kwargs ):
2415
2432
length = getattr (self .attrs , '%s_length' % key )
2416
- blocs = self .read_array ('%s_blocs' % key )
2417
- blengths = self .read_array ('%s_blengths' % key )
2433
+ blocs = self .read_array ('%s_blocs' % key , ** kwargs )
2434
+ blengths = self .read_array ('%s_blengths' % key , ** kwargs )
2418
2435
return BlockIndex (length , blocs , blengths )
2419
2436
2420
2437
def write_sparse_intindex (self , key , index ):
2421
2438
self .write_array ('%s_indices' % key , index .indices )
2422
2439
setattr (self .attrs , '%s_length' % key , index .length )
2423
2440
2424
- def read_sparse_intindex (self , key ):
2441
+ def read_sparse_intindex (self , key , ** kwargs ):
2425
2442
length = getattr (self .attrs , '%s_length' % key )
2426
- indices = self .read_array ('%s_indices' % key )
2443
+ indices = self .read_array ('%s_indices' % key , ** kwargs )
2427
2444
return IntIndex (length , indices )
2428
2445
2429
2446
def write_multi_index (self , key , index ):
@@ -2448,27 +2465,28 @@ def write_multi_index(self, key, index):
2448
2465
label_key = '%s_label%d' % (key , i )
2449
2466
self .write_array (label_key , lab )
2450
2467
2451
- def read_multi_index (self , key ):
2468
+ def read_multi_index (self , key , ** kwargs ):
2452
2469
nlevels = getattr (self .attrs , '%s_nlevels' % key )
2453
2470
2454
2471
levels = []
2455
2472
labels = []
2456
2473
names = []
2457
2474
for i in range (nlevels ):
2458
2475
level_key = '%s_level%d' % (key , i )
2459
- name , lev = self .read_index_node (getattr (self .group , level_key ))
2476
+ name , lev = self .read_index_node (getattr (self .group , level_key ),
2477
+ ** kwargs )
2460
2478
levels .append (lev )
2461
2479
names .append (name )
2462
2480
2463
2481
label_key = '%s_label%d' % (key , i )
2464
- lab = self .read_array (label_key )
2482
+ lab = self .read_array (label_key , ** kwargs )
2465
2483
labels .append (lab )
2466
2484
2467
2485
return MultiIndex (levels = levels , labels = labels , names = names ,
2468
2486
verify_integrity = True )
2469
2487
2470
- def read_index_node (self , node ):
2471
- data = node [: ]
2488
+ def read_index_node (self , node , start = None , stop = None ):
2489
+ data = node [start : stop ]
2472
2490
# If the index was an empty array write_array_empty() will
2473
2491
# have written a sentinel. Here we relace it with the original.
2474
2492
if ('shape' in node ._v_attrs and
@@ -2607,17 +2625,17 @@ def write_array(self, key, value, items=None):
2607
2625
2608
2626
class LegacyFixed (GenericFixed ):
2609
2627
2610
- def read_index_legacy (self , key ):
2628
+ def read_index_legacy (self , key , start = None , stop = None ):
2611
2629
node = getattr (self .group , key )
2612
- data = node [: ]
2630
+ data = node [start : stop ]
2613
2631
kind = node ._v_attrs .kind
2614
2632
return _unconvert_index_legacy (data , kind , encoding = self .encoding )
2615
2633
2616
2634
2617
2635
class LegacySeriesFixed (LegacyFixed ):
2618
2636
2619
2637
def read (self , ** kwargs ):
2620
- self .validate_read (kwargs )
2638
+ kwargs = self .validate_read (kwargs )
2621
2639
index = self .read_index_legacy ('index' )
2622
2640
values = self .read_array ('values' )
2623
2641
return Series (values , index = index )
@@ -2626,7 +2644,7 @@ def read(self, **kwargs):
2626
2644
class LegacyFrameFixed (LegacyFixed ):
2627
2645
2628
2646
def read (self , ** kwargs ):
2629
- self .validate_read (kwargs )
2647
+ kwargs = self .validate_read (kwargs )
2630
2648
index = self .read_index_legacy ('index' )
2631
2649
columns = self .read_index_legacy ('columns' )
2632
2650
values = self .read_array ('values' )
@@ -2645,9 +2663,9 @@ def shape(self):
2645
2663
return None
2646
2664
2647
2665
def read (self , ** kwargs ):
2648
- self .validate_read (kwargs )
2649
- index = self .read_index ('index' )
2650
- values = self .read_array ('values' )
2666
+ kwargs = self .validate_read (kwargs )
2667
+ index = self .read_index ('index' , ** kwargs )
2668
+ values = self .read_array ('values' , ** kwargs )
2651
2669
return Series (values , index = index , name = self .name )
2652
2670
2653
2671
def write (self , obj , ** kwargs ):
@@ -2657,12 +2675,25 @@ def write(self, obj, **kwargs):
2657
2675
self .attrs .name = obj .name
2658
2676
2659
2677
2660
- class SparseSeriesFixed (GenericFixed ):
2678
+ class SparseFixed (GenericFixed ):
2679
+
2680
+ def validate_read (self , kwargs ):
2681
+ """
2682
+ we don't support start, stop kwds in Sparse
2683
+ """
2684
+ kwargs = super (SparseFixed , self ).validate_read (kwargs )
2685
+ if 'start' in kwargs or 'stop' in kwargs :
2686
+ raise NotImplementedError ("start and/or stop are not supported "
2687
+ "in fixed Sparse reading" )
2688
+ return kwargs
2689
+
2690
+
2691
+ class SparseSeriesFixed (SparseFixed ):
2661
2692
pandas_kind = u ('sparse_series' )
2662
2693
attributes = ['name' , 'fill_value' , 'kind' ]
2663
2694
2664
2695
def read (self , ** kwargs ):
2665
- self .validate_read (kwargs )
2696
+ kwargs = self .validate_read (kwargs )
2666
2697
index = self .read_index ('index' )
2667
2698
sp_values = self .read_array ('sp_values' )
2668
2699
sp_index = self .read_index ('sp_index' )
@@ -2681,12 +2712,12 @@ def write(self, obj, **kwargs):
2681
2712
self .attrs .kind = obj .kind
2682
2713
2683
2714
2684
- class SparseFrameFixed (GenericFixed ):
2715
+ class SparseFrameFixed (SparseFixed ):
2685
2716
pandas_kind = u ('sparse_frame' )
2686
2717
attributes = ['default_kind' , 'default_fill_value' ]
2687
2718
2688
2719
def read (self , ** kwargs ):
2689
- self .validate_read (kwargs )
2720
+ kwargs = self .validate_read (kwargs )
2690
2721
columns = self .read_index ('columns' )
2691
2722
sdict = {}
2692
2723
for c in columns :
@@ -2714,12 +2745,12 @@ def write(self, obj, **kwargs):
2714
2745
self .write_index ('columns' , obj .columns )
2715
2746
2716
2747
2717
- class SparsePanelFixed (GenericFixed ):
2748
+ class SparsePanelFixed (SparseFixed ):
2718
2749
pandas_kind = u ('sparse_panel' )
2719
2750
attributes = ['default_kind' , 'default_fill_value' ]
2720
2751
2721
2752
def read (self , ** kwargs ):
2722
- self .validate_read (kwargs )
2753
+ kwargs = self .validate_read (kwargs )
2723
2754
items = self .read_index ('items' )
2724
2755
2725
2756
sdict = {}
@@ -2782,19 +2813,26 @@ def shape(self):
2782
2813
except :
2783
2814
return None
2784
2815
2785
- def read (self , ** kwargs ):
2786
- self .validate_read (kwargs )
2816
+ def read (self , start = None , stop = None , ** kwargs ):
2817
+ # start, stop applied to rows, so 0th axis only
2818
+
2819
+ kwargs = self .validate_read (kwargs )
2820
+ select_axis = self .obj_type ()._get_block_manager_axis (0 )
2787
2821
2788
2822
axes = []
2789
2823
for i in range (self .ndim ):
2790
- ax = self .read_index ('axis%d' % i )
2824
+
2825
+ _start , _stop = (start , stop ) if i == select_axis else (None , None )
2826
+ ax = self .read_index ('axis%d' % i , start = _start , stop = _stop )
2791
2827
axes .append (ax )
2792
2828
2793
2829
items = axes [0 ]
2794
2830
blocks = []
2795
2831
for i in range (self .nblocks ):
2832
+
2796
2833
blk_items = self .read_index ('block%d_items' % i )
2797
- values = self .read_array ('block%d_values' % i )
2834
+ values = self .read_array ('block%d_values' % i ,
2835
+ start = _start , stop = _stop )
2798
2836
blk = make_block (values ,
2799
2837
placement = items .get_indexer (blk_items ))
2800
2838
blocks .append (blk )
0 commit comments