|
52 | 52 | NAN_CUM_METHODS = ['cumsum', 'cumprod']
|
53 | 53 | BOTTLENECK_ROLLING_METHODS = {'move_sum': 'sum', 'move_mean': 'mean',
|
54 | 54 | 'move_std': 'std', 'move_min': 'min',
|
55 |
| - 'move_max': 'max'} |
| 55 | + 'move_max': 'max', 'move_var': 'var', |
| 56 | + 'move_argmin': 'argmin', 'move_argmax': 'argmax'} |
56 | 57 | # TODO: wrap take, dot, sort
|
57 | 58 |
|
58 | 59 |
|
@@ -520,24 +521,42 @@ def inject_bottleneck_rolling_methods(cls):
|
520 | 521 | for name, f in methods:
|
521 | 522 | func = cls._reduce_method(f)
|
522 | 523 | func.__name__ = name
|
523 |
| - func.__doc__ = _ROLLING_REDUCE_DOCSTRING_TEMPLATE.format(name=func.__name__) |
| 524 | + func.__doc__ = _ROLLING_REDUCE_DOCSTRING_TEMPLATE.format( |
| 525 | + name=func.__name__) |
524 | 526 | setattr(cls, name, func)
|
525 | 527 |
|
526 | 528 | # bottleneck rolling methods
|
527 | 529 | if has_bottleneck:
|
528 |
| - if LooseVersion(bn.__version__) < LooseVersion('1.0'): |
| 530 | + # TODO: Bump the required version of bottlneck to 1.1 and remove all |
| 531 | + # these version checks (see GH#1278) |
| 532 | + bn_version = LooseVersion(bn.__version__) |
| 533 | + bn_min_version = LooseVersion('1.0') |
| 534 | + bn_version_1_1 = LooseVersion('1.1') |
| 535 | + if bn_version < bn_min_version: |
529 | 536 | return
|
530 | 537 |
|
531 | 538 | for bn_name, method_name in BOTTLENECK_ROLLING_METHODS.items():
|
532 |
| - f = getattr(bn, bn_name) |
533 |
| - func = cls._bottleneck_reduce(f) |
534 |
| - func.__name__ = method_name |
535 |
| - func.__doc__ = _ROLLING_REDUCE_DOCSTRING_TEMPLATE.format(name=func.__name__) |
536 |
| - setattr(cls, method_name, func) |
537 |
| - |
538 |
| - # bottleneck rolling methods without min_count |
| 539 | + try: |
| 540 | + f = getattr(bn, bn_name) |
| 541 | + func = cls._bottleneck_reduce(f) |
| 542 | + func.__name__ = method_name |
| 543 | + func.__doc__ = _ROLLING_REDUCE_DOCSTRING_TEMPLATE.format( |
| 544 | + name=func.__name__) |
| 545 | + setattr(cls, method_name, func) |
| 546 | + except AttributeError as e: |
| 547 | + # skip functions not in Bottleneck 1.0 |
| 548 | + if ((bn_version < bn_version_1_1) and |
| 549 | + (bn_name not in ['move_var', 'move_argmin', |
| 550 | + 'move_argmax', 'move_rank'])): |
| 551 | + raise e |
| 552 | + |
| 553 | + # bottleneck rolling methods without min_count (bn.__version__ < 1.1) |
539 | 554 | f = getattr(bn, 'move_median')
|
540 |
| - func = cls._bottleneck_reduce_without_min_count(f) |
| 555 | + if bn_version >= bn_version_1_1: |
| 556 | + func = cls._bottleneck_reduce(f) |
| 557 | + else: |
| 558 | + func = cls._bottleneck_reduce_without_min_count(f) |
541 | 559 | func.__name__ = 'median'
|
542 |
| - func.__doc__ = _ROLLING_REDUCE_DOCSTRING_TEMPLATE.format(name=func.__name__) |
| 560 | + func.__doc__ = _ROLLING_REDUCE_DOCSTRING_TEMPLATE.format( |
| 561 | + name=func.__name__) |
543 | 562 | setattr(cls, 'median', func)
|
0 commit comments