def __init__(self, *args, **kwargs):
<EOL>crs = kwargs.pop('<STR_LIT>', None)<EOL>x = kwargs.pop('<STR_LIT:x>', None)<EOL>y = kwargs.pop('<STR_LIT:y>', None)<EOL>z = kwargs.pop('<STR_LIT:z>', None)<EOL>longitude = kwargs.pop('<STR_LIT>', None)<EOL>latitude = kwargs.pop('<STR_LIT>', None)<EOL>height = kwargs.pop('<STR_LIT>', None)<EOL>_x, _y, _z = None, None, None<EOL>if crs is not None and crs not in ACCEPTABLE_CRS:<EOL><INDENT>raise ValueError('<STR_LIT>'.format(crs, '<STR_LIT:U+002C>'.join(ACCEPTABLE_CRS)))<EOL><DEDENT>self._crs = crs<EOL>if len(args):<EOL><INDENT>if isinstance(args[<NUM_LIT:0>],(tuple, list)):<EOL><INDENT>if len(args[<NUM_LIT:0>]) < <NUM_LIT:2> or len(args[<NUM_LIT:0>]) > <NUM_LIT:3>:<EOL><INDENT>raise ValueError('<STR_LIT>'.format(len(args[<NUM_LIT:0>])))<EOL><DEDENT>x = args[<NUM_LIT:0>][<NUM_LIT:0>]<EOL>y = args[<NUM_LIT:0>][<NUM_LIT:1>]<EOL>if len(args[<NUM_LIT:0>]) == <NUM_LIT:3>:<EOL><INDENT>z = args[<NUM_LIT:0>][<NUM_LIT:2>]<EOL><DEDENT><DEDENT>elif isinstance(args[<NUM_LIT:0>], ShapelyPoint):<EOL><INDENT>super(NeomodelPoint, self).__init__(args[<NUM_LIT:0>])<EOL>if isinstance(args[<NUM_LIT:0>], NeomodelPoint):<EOL><INDENT>self._crs = args[<NUM_LIT:0>]._crs<EOL><DEDENT>else:<EOL><INDENT>if len(args[<NUM_LIT:0>].coords[<NUM_LIT:0>]) == <NUM_LIT:2>:<EOL><INDENT>if crs is None:<EOL><INDENT>self._crs = '<STR_LIT>'<EOL><DEDENT><DEDENT>elif len(args[<NUM_LIT:0>].coords[<NUM_LIT:0>]) == <NUM_LIT:3>:<EOL><INDENT>if crs is None:<EOL><INDENT>self._crs = '<STR_LIT>'<EOL><DEDENT><DEDENT>else:<EOL><INDENT>raise ValueError('<STR_LIT>'<EOL>'<STR_LIT>'.format(len(args[<NUM_LIT:0>].coords[<NUM_LIT:0>])))<EOL><DEDENT><DEDENT>return<EOL><DEDENT>else:<EOL><INDENT>raise TypeError('<STR_LIT>'<EOL>'<STR_LIT>'.format(type(args[<NUM_LIT:0>])))<EOL><DEDENT><DEDENT>if (x is not None or y is not None or z is not None) and(latitude is not None or longitude is not None or height is not None):<EOL><INDENT>raise ValueError('<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>')<EOL><DEDENT>if x is None and y is None and z is None and longitude is None and latitude is None and height is None:<EOL><INDENT>raise ValueError('<STR_LIT>'<EOL>'<STR_LIT>')<EOL><DEDENT>if latitude is not None and longitude is not None:<EOL><INDENT>if height is not None:<EOL><INDENT>if self._crs is None:<EOL><INDENT>self._crs = '<STR_LIT>'<EOL><DEDENT>_z = height<EOL><DEDENT>else:<EOL><INDENT>if self._crs is None:<EOL><INDENT>self._crs = '<STR_LIT>'<EOL><DEDENT><DEDENT>_x = longitude<EOL>_y = latitude<EOL><DEDENT>if x is not None and y is not None:<EOL><INDENT>if z is not None:<EOL><INDENT>if self._crs is None:<EOL><INDENT>self._crs = '<STR_LIT>'<EOL><DEDENT>_z = z<EOL><DEDENT>else:<EOL><INDENT>if self._crs is None:<EOL><INDENT>self._crs = '<STR_LIT>'<EOL><DEDENT><DEDENT>_x = x<EOL>_y = y<EOL><DEDENT>if _z is None:<EOL><INDENT>if '<STR_LIT>' not in self._crs:<EOL><INDENT>super(NeomodelPoint, self).__init__((float(_x),float(_y)), **kwargs)<EOL><DEDENT>else:<EOL><INDENT>raise ValueError("<STR_LIT>".format(self._crs))<EOL><DEDENT><DEDENT>else:<EOL><INDENT>if '<STR_LIT>' in self._crs:<EOL><INDENT>super(NeomodelPoint, self).__init__((float(_x), float(_y), float(_z)), **kwargs)<EOL><DEDENT>else:<EOL><INDENT>raise ValueError("<STR_LIT>".format(self._crs))<EOL><DEDENT><DEDENT>
Creates a NeomodelPoint.

:param args: Positional arguments to emulate the behaviour of Shapely's Point (and specifically the copy
constructor)
:type args: list
:param crs: Coordinate Reference System, must be one of ['cartesian', 'cartesian-3d', 'wgs-84', 'wgs-84-3d']
:type crs: str
:param x: x coordinate of point
:type x: float
:param y: y coordinate of point
:type y: float
:param z: z coordinate of point if the crs is cartesian-3d
:type z: float
:param latitude: Latitude of point
:type latitude: float
:param longitude: Longitude of point
:type longitude: float
:param height: Height of point if the crs is wgs-84-3d
:type height: float
:param kwargs: Dictionary of keyword arguments
:type kwargs: dict