'Set 3D y limits.
See :meth:`matplotlib.axes.Axes.set_ylim` for full documentation.'

def set_ylim3d(self, bottom=None, top=None, emit=True, auto=False, **kw):

    if (u'ymin' in kw):
        bottom = kw.pop(u'ymin')
    if (u'ymax' in kw):
        top = kw.pop(u'ymax')
    if kw:
        raise ValueError((u'unrecognized    kwargs:    %s' % list(kw)))
    if ((top is None) and cbook.iterable(bottom)):
        (bottom, top) = bottom
    self._process_unit_info(ydata=(bottom, top))
    bottom = self._validate_converted_limits(bottom, self.convert_yunits)
    top = self._validate_converted_limits(top, self.convert_yunits)
    (old_bottom, old_top) = self.get_ylim()
    if (bottom is None):
        bottom = old_bottom
    if (top is None):
        top = old_top
    if (top == bottom):
        warnings.warn((u'Attempting    to    set    identical    bottom==top    results\nin    singular    transformations;    automatically    expanding.\nbottom=%s,    top=%s' % (bottom, top)))
    (bottom, top) = mtransforms.nonsingular(bottom, top, increasing=False)
    (bottom, top) = self.yaxis.limit_range_for_scale(bottom, top)
    self.xy_viewLim.intervaly = (bottom, top)
    if (auto is not None):
        self._autoscaleYon = bool(auto)
    if emit:
        self.callbacks.process(u'ylim_changed', self)
        for other in self._shared_y_axes.get_siblings(self):
            if (other is not self):
                other.set_ylim(self.xy_viewLim.intervaly, emit=False, auto=auto)
                if ((other.figure != self.figure) and (other.figure.canvas is not None)):
                    other.figure.canvas.draw_idle()
    self.stale = True
    return (bottom, top)
