| 3380 | |
| 3381 | |
| 3382 | class FFill(MapOverlap): |
| 3383 | _parameters = ["frame", "limit"] |
| 3384 | _defaults = {"limit": None} |
| 3385 | func = M.ffill |
| 3386 | enforce_metadata = True |
| 3387 | transform_divisions = False |
| 3388 | clear_divisions = False |
| 3389 | align_dataframes = True |
| 3390 | |
| 3391 | def _divisions(self): |
| 3392 | return self.frame.divisions |
| 3393 | |
| 3394 | @functools.cached_property |
| 3395 | def _meta(self): |
| 3396 | return self.frame._meta |
| 3397 | |
| 3398 | def _simplify_up(self, parent, dependents): |
| 3399 | if isinstance(parent, Projection): |
| 3400 | return plain_column_projection(self, parent, dependents) |
| 3401 | |
| 3402 | @functools.cached_property |
| 3403 | def kwargs(self): |
| 3404 | return dict(limit=self.limit) |
| 3405 | |
| 3406 | @property |
| 3407 | def before(self): |
| 3408 | return 1 if self.limit is None else self.limit |
| 3409 | |
| 3410 | @property |
| 3411 | def after(self): |
| 3412 | return 0 |
| 3413 | |
| 3414 | |
| 3415 | class BFill(FFill): |