<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_sampleS(self, res, DS=None, resMode='abs', ind=None, offsetIn=0., Out='(X,Y,Z)', Ind=None):
 """ Sample, with resolution res, the surface defined by DS or ind An optionnal offset perpendicular to the surface can be used (offsetIn>0 => inwards) Parameters res : float / list of 2 floats Desired resolution of the surfacic sample float : same resolution for all directions of the sample list : [dl,dXPhi] where: dl : res. along polygon contours (cross-section) dXPhi : res. along axis (toroidal/linear direction) DS : None / list of 3 lists of 2 floats Limits of the domain in which the sample should be computed None : whole surface of the object list : [D1,D2,D3], where Di is a len()=2 list (increasing floats, setting limits along coordinate i) [DR,DZ,DPhi]: in toroidal geometry (self.Id.Type=='Tor') [DX,DY,DZ] : in linear geometry (self.Id.Type=='Lin') resMode : str Flag, specifies if res is absolute or relative to element sizes 'abs' : res is an absolute distance 'rel' : if res=0.1, each polygon segment is divided in 10, as is the toroidal/linear length ind : None / np.ndarray of int If provided, DS is ignored and the sample points corresponding to the provided indices are returned Example (assuming obj is a Ves object) > # We create a 5x5 cm2 sample of the whole surface > pts, dS, ind, reseff = obj.get_sample(0.05) > # Perform operations, save only the points indices (save space) > # Retrieve the points from their indices (requires same res) > pts2, dS2, ind2, reseff2 = obj.get_sample(0.05, ind=ind) > np.allclose(pts,pts2) True offsetIn: float Offset distance from the actual surface of the object Inwards if positive Useful to avoid numerical errors Out : str Flag indicating the coordinate system of returned points e.g. : '(X,Y,Z)' or '(R,Z,Phi)' Ind : None / iterable of ints Array of indices of the entities to be considered (only when multiple entities, i.e.: self.nLim>1) Returns ------- pts : np.ndarray / list of np.ndarrays Sample points coordinates, as a (3,N) array. A list is returned if the object has multiple entities dS : np.ndarray / list of np.ndarrays The surface (in m^2) associated to each point ind : np.ndarray / list of np.ndarrays The index of each point reseff : np.ndarray / list of np.ndarrays Effective resolution in both directions after sample computation """

        if Ind is not None:
            assert self.dgeom['Multi']
        kwdargs = dict(DS=DS, dSMode=resMode, ind=ind, DIn=offsetIn,
                       VIn=self.dgeom['VIn'], VType=self.Id.Type,
                       VLim=np.ascontiguousarray(self.Lim), nVLim=self.noccur,
                       Out=Out, margin=1.e-9,
                       Multi=self.dgeom['Multi'], Ind=Ind)
        args = [self.Poly, self.dgeom['P1Min'][0], self.dgeom['P1Max'][0],
                self.dgeom['P2Min'][1], self.dgeom['P2Max'][1], res]
        pts, dS, ind, reseff = _comp._Ves_get_sampleS(*args, **kwdargs)
        return pts, dS, ind, reseff