<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def upload_segmentation_image(self, mapobject_type_name,
            plate_name, well_name, well_pos_y, well_pos_x, tpoint, zplane,
            image):
        '''Uploads a segmentation image.

        Parameters
        ----------
        mapobject_type_name: str
            name of the segmented objects
        plate_name: str
            name of the plate
        well_name: str
            name of the well in which the image is located
        well_pos_y: int
            y-position of the site relative to the well grid
        well_pos_x: int
            x-position of the site relative to the well grid
        tpoint: int, optional
            zero-based time point index (default: ``0``)
        zplane: int, optional
            zero-based z-plane index (default: ``0``)
        image: numpy.ndarray[numpy.int32]
            labeled array

        Raises
        ------
        TypeError
            when `image` is not provided in form of a `numpy` array
        ValueError
            when `image` doesn't have 32-bit unsigned integer data type

        See also
        --------
        :func:`tmserver.api.mapobject.add_segmentations`
        :class:`tmlib.models.mapobject.MapobjectSegmentation`
        '''
        if not isinstance(image, np.ndarray):
            raise TypeError('Image must be provided in form of a numpy array.')
        if image.dtype != np.int32:
            raise ValueError('Image must have 32-bit integer data type.')
        self._upload_segmentation_image(mapobject_type_name,
            plate_name, well_name, well_pos_y, well_pos_x, tpoint, zplane,
            image
        )