Consider the following series:
`1, 2, 4, 8, 16, 22, 26, 38, 62, 74, 102, 104, 108, 116, 122`
It is generated as follows:
* For single digit integers, add the number to itself to get the next element.
* For other integers, multiply all the non-zero digits and add the result to the original number to get the next element.
For example: `16 + (6 * 1) = 22` and `104 + (4 * 1) = 108`. 
Let's begin the same series with a seed value of `3` instead of `1`:
`3, 6, 12, 14, 18, 26, 38, 62, 74, 102, 104, 108, 116, 122`
Notice that the two sequences converge at `26` and are identical therefter. We will call the series seeded by a value of `1` the "base series" and the other series the "test series". 
You will be given a seed value for the test series and your task will be to return the number of integers that have to be generated in the test series before it converges to the base series. In the case above:
```Python
convergence(3) = 5, the length of [3, 6, 12, 14, 18]. 
```  
Good luck!
If you like this Kata, please try:
[Simple Prime Streaming](https://www.codewars.com/kata/5a908da30025e995880000e3)
[Unique digit sequence](https://www.codewars.com/kata/599688d0e2800dda4e0001b0)
[Divisor harmony](https://www.codewars.com/kata/59bf97cd4f98a8b1cd00007e)
from functools import reduce

def calculate_next_el(prev_el):
    if prev_el < 10:
        return 2 * prev_el
    else:
        multiplication = reduce((lambda x, y: x * y), [x for x in map(int, str(prev_el)) if x > 0], 1)
        return prev_el + multiplication

def generate_series(start):
    last = start
    while True:
        last = calculate_next_el(last)
        yield last

def convergence(n):
    current_base = 1
    current_test = n
    base_series = generate_series(current_base)
    test_series = generate_series(current_test)
    result = 0
    while current_base != current_test:
        if current_base < current_test:
            current_base = base_series.__next__()
        else:
            current_test = test_series.__next__()
            result += 1
    return result

from functools import reduce

def calculate_next_el(prev_el):
    if prev_el < 10:
        return 2 * prev_el
    else:
        multiplication = reduce((lambda x, y: x * y), [x for x in map(int, str(prev_el)) if x > 0], 1)
        return prev_el + multiplication

def generate_series(start):
    last = start
    while True:
        last = calculate_next_el(last)
        yield last

def convergence(n):
    current_base = 1
    current_test = n
    base_series = generate_series(current_base)
    test_series = generate_series(current_test)
    result = 0
    while current_base != current_test:
        if current_base < current_test:
            current_base = base_series.__next__()
        else:
            current_test = test_series.__next__()
            result += 1
    return result
