<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def overplot_boundaries_from_params(ax, params, parmodel, list_islitlet, list_csu_bar_slit_center, micolors=('m', 'c'), linetype='--', labels=True, alpha_fill=None, global_offset_x_pix=0, global_offset_y_pix=0):
 """Overplot boundaries computed from fitted parameters. Parameters ax : matplotlib axes Current plot axes. params : :class:`~lmfit.parameter.Parameters` Parameters to be employed in the prediction of the distorted boundaries. parmodel : str Model to be assumed. Allowed values are 'longslit' and 'multislit'. list_islitlet : list of integers Slitlet numbers to be considered. longslits. list_csu_bar_slit_center : list of floats CSU bar slit centers of the considered slitlets. micolors : Python list List with two characters corresponding to alternating colors for odd and even slitlets. linetype : str Line type. labels : bool If True, display slilet label alpha_fill : float or None Alpha factor to be employed to fill slitlet region. global_integer_offset_x_pix : int or float Global offset in the X direction to be applied after computing the expected location. global_offset_y_pix : int or float Global offset in the Y direction to be applied after computing the expected location. Returns ------- list_pol_lower_boundaries : python list List of numpy.polynomial.Polynomial instances with the lower polynomial boundaries computed for the requested slitlets. list_pol_upper_boundaries : python list List of numpy.polynomial.Polynomial instances with the upper polynomial boundaries computed for the requested slitlets. """


    # duplicate to shorten the variable names
    xoff = float(global_offset_x_pix)
    yoff = float(global_offset_y_pix)

    list_pol_lower_boundaries = []
    list_pol_upper_boundaries = []
    for islitlet, csu_bar_slit_center in \
            zip(list_islitlet, list_csu_bar_slit_center):
        tmpcolor = micolors[islitlet % 2]
        pol_lower_expected = expected_distorted_boundaries(
            islitlet, csu_bar_slit_center,
            [0], params, parmodel, numpts=101, deg=5, debugplot=0
        )[0].poly_funct
        list_pol_lower_boundaries.append(pol_lower_expected)
        pol_upper_expected = expected_distorted_boundaries(
            islitlet, csu_bar_slit_center,
            [1], params, parmodel, numpts=101, deg=5, debugplot=0
        )[0].poly_funct
        list_pol_upper_boundaries.append(pol_upper_expected)
        xdum = np.linspace(1, EMIR_NAXIS1, num=EMIR_NAXIS1)
        ydum1 = pol_lower_expected(xdum)
        ax.plot(xdum + xoff, ydum1 + yoff, tmpcolor + linetype)
        ydum2 = pol_upper_expected(xdum)
        ax.plot(xdum + xoff, ydum2 + yoff, tmpcolor + linetype)
        if alpha_fill is not None:
            ax.fill_between(xdum + xoff, ydum1 + yoff, ydum2 + yoff,
                            facecolor=tmpcolor, alpha=alpha_fill)
        if labels:
            # slitlet label
            yc_lower = pol_lower_expected(EMIR_NAXIS1 / 2 + 0.5)
            yc_upper = pol_upper_expected(EMIR_NAXIS1 / 2 + 0.5)
            xcsu = EMIR_NAXIS1 * csu_bar_slit_center / 341.5
            ax.text(xcsu + xoff, (yc_lower + yc_upper) / 2 + yoff,
                    str(islitlet),
                    fontsize=10, va='center', ha='center',
                    bbox=dict(boxstyle="round,pad=0.1", fc="white", ec="grey"),
                    color=tmpcolor, fontweight='bold',
                    backgroundcolor='white')

    # return lists with boundaries
    return list_pol_lower_boundaries, list_pol_upper_boundaries