import pandas as pd

def poly(x, *a):
    """
    Returns the result of a polynomial sum of x**i * a[i]. The order of the polynomial is determined by the
    length of a. This also works for fitting function like scipy curve_fit py providing a list of starting
    parameters. The length of the list determines the polynomial order.

    :param x: x value of polynomial function.
    :param a: List of polynomial parameters.
    :return: Result of polynomial function.
    """

    if type(x) == pd.Series:
        x = x.values * 1.0  # Seriously, in the Series, the numbers were integers, causing some issues here...

    order = len(a) - 1
    out = 0.0
    for i in range(0, order + 1):
        out += x ** i * a[i]
    return out