use fused types for parts of algos_common_helper
State: closed

Broken off of #22432, which was a proof of concept.

Labels:
name: Refactor
description: Internal refactoring of code
name: Internals
description: Related to non-user accessible pandas implementation

Comments:
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/22452?src=pr&el=h1) Report
> Merging [#22452](https://codecov.io/gh/pandas-dev/pandas/pull/22452?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/68273a7a8b05049b311ea207f78e6d6f30c6eaf5?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/22452/graphs/tree.svg?width=650&height=150&src=pr&token=eZ4WkYLtcO)](https://codecov.io/gh/pandas-dev/pandas/pull/22452?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master   #22452   +/-   ##
=======================================
  Coverage   92.05%   92.05%           
=======================================
  Files         169      169           
  Lines       50733    50733           
=======================================
  Hits        46702    46702           
  Misses       4031     4031
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.46% <ø> (ø)` | :arrow_up: |
| #single | `42.24% <ø> (ø)` | :arrow_up: |


------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/22452?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/22452?src=pr&el=footer). Last update [68273a7...749989f](https://codecov.io/gh/pandas-dev/pandas/pull/22452?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

perf check?
> perf check?

Still need to run, will update later in the day.
> I agree, making this simpler would motivate this PR

With this option it would be a slam dunk.  Without it I still think this is preferable, but it's a closer call.
asvs look on the good size of noise:

```
taskset 6 python2 -m asv continuous -f 1.1 -E virtualenv master HEAD -b monotonic -b pad -b fill

    before     after       ratio
  [25e6a21a] [749989fa]
+   41.98ms    71.36ms      1.70  strings.Methods.time_pad
+  421.04ns   495.46ns      1.18  categoricals.IsMonotonic.time_categorical_index_is_monotonic_increasing
+   36.21μs    42.47μs      1.17  categoricals.IsMonotonic.time_categorical_series_is_monotonic_increasing
-   55.63μs    50.47μs      0.91  categoricals.IsMonotonic.time_categorical_series_is_monotonic_decreasing
-  454.94ns   342.00ns      0.75  categoricals.IsMonotonic.time_categorical_index_is_monotonic_decreasing

    before     after       ratio
  [25e6a21a] [749989fa]
+   39.64μs    48.52μs      1.22  categoricals.IsMonotonic.time_categorical_series_is_monotonic_increasing
+  307.82ns   369.50ns      1.20  categoricals.IsMonotonic.time_categorical_index_is_monotonic_decreasing
-    3.54ms     3.10ms      0.88  replace.FillNa.time_fillna(False)
-   53.65μs    44.85μs      0.84  categoricals.IsMonotonic.time_categorical_series_is_monotonic_decreasing
-   95.93ms    79.04ms      0.82  join_merge.Align.time_series_align_left_monotonic
-    1.96ms     1.49ms      0.76  replace.FillNa.time_fillna(True)
-  455.37ns   309.91ns      0.68  categoricals.IsMonotonic.time_categorical_index_is_monotonic_increasing
-   72.43ms    41.78ms      0.58  strings.Methods.time_pad

before     after       ratio
  [25e6a21a] [749989fa]
+    1.50ms     1.87ms      1.24  replace.FillNa.time_fillna(True)
-  520.84ns   463.43ns      0.89  categoricals.IsMonotonic.time_categorical_index_is_monotonic_decreasing
-    7.20ms     6.15ms      0.86  frame_methods.Fillna.time_frame_fillna(False, 'pad')
-   61.60μs    43.60μs      0.71  categoricals.IsMonotonic.time_categorical_series_is_monotonic_decreasing
-  474.23ns   323.60ns      0.68  categoricals.IsMonotonic.time_categorical_index_is_monotonic_increasing
-   65.39ms    39.47ms      0.60  strings.Methods.time_pad
```
Looks like rebasing is gonna be a hassle.  Before I jump into it, is the not-yet-implemented cython feature a deal-breaker?  I prefer the implementation in this PR, but I'm not clear on what the consensus is.
I don’t consider it a deal breaker because I’d seen that same copy / paste in the templates before and may still be there in a few instances. Just my $.02
thanks!