@@ -1211,12 +1211,8 @@ def value_getitem(placement):
12111211 return value [placement .indexer ]
12121212
12131213 # Accessing public blknos ensures the public versions are initialized
1214- # print(f"Loc is {loc}")
12151214 blknos = self .blknos [loc ]
1216- # print(f"Blknos is {blknos}")
12171215 blklocs = self .blklocs [loc ].copy ()
1218- # print(f"Blklocs is {blklocs}")
1219- # print(f"Blocks is {self.blocks}")
12201216
12211217 unfit_mgr_locs = []
12221218 unfit_val_locs = []
@@ -1227,30 +1223,38 @@ def value_getitem(placement):
12271223 if inplace and blk .should_store (value ):
12281224 # Updating inplace -> check if we need to do Copy-on-Write
12291225 if using_copy_on_write () and not self ._has_no_reference_block (blkno_l ):
1230-
1231- # print("Hit here")
1232- # print(f"Blk locs is {blk_locs}")
1233- # print(f"Blkno_l is {blkno_l}")
12341226 prev_refs = self .refs [blkno_l ]
1235- leftover_blocks = blk .delete (blk_locs )
1236- num_extra_blocks = len (leftover_blocks )
1227+ leftover_blocks = tuple (blk .delete (blk_locs ))
12371228 # Preserve refs for unchanged blocks
1238- extra_refs = [prev_refs ] * num_extra_blocks
1239- self .refs = self .refs [:blkno_l ] + extra_refs + self .refs [blkno_l :]
1229+ # Add new block where old block was and remaining blocks at
1230+ # the end to avoid updating all block numbers
1231+ extra_refs = [prev_refs ] * len (leftover_blocks )
1232+ self .refs = (
1233+ self .refs [:blkno_l ]
1234+ + [None ]
1235+ + self .refs [blkno_l + 1 :]
1236+ + extra_refs
1237+ )
12401238
12411239 # TODO: Are we sure we want 2D?
1242- nb = new_block_2d (value , placement = blk ._mgr_locs )
1240+ # Also generalize this to bigger than 1-D locs
1241+ nb = new_block_2d (
1242+ value ,
1243+ placement = BlockPlacement (slice (blk_locs [0 ], blk_locs [0 ] + 1 )),
1244+ )
12431245 old_blocks = self .blocks
12441246 new_blocks = (
12451247 old_blocks [:blkno_l ]
1246- + tuple (leftover_blocks [:blkno_l ])
12471248 + (nb ,)
1248- + tuple ( leftover_blocks [blkno_l :])
1249- + old_blocks [ blkno_l + num_extra_blocks :]
1249+ + old_blocks [blkno_l + 1 :]
1250+ + leftover_blocks
12501251 )
1252+ self ._blklocs [nb .mgr_locs .indexer ] = np .arange (len (nb ))
1253+ for i , nb in enumerate (leftover_blocks ):
1254+ self ._blklocs [nb .mgr_locs .indexer ] = np .arange (len (nb ))
1255+ self ._blknos [nb .mgr_locs .indexer ] = i + len (old_blocks )
12511256 self .blocks = new_blocks
12521257
1253- self ._rebuild_blknos_and_blklocs ()
12541258 # blk.set_inplace(blk_locs, value_getitem(val_locs), copy=True)
12551259 # self._clear_reference_block(blkno_l)
12561260 else :
0 commit comments