# This file was automatically generated by SWIG (https://www.swig.org).
# Version 4.1.1
#
# Do not make changes to this file unless you know what you are doing - modify
# the SWIG interface file instead.

from sys import version_info as _swig_python_version_info
# Import the low-level C/C++ module
if __package__ or "." in __name__:
    from . import _osr
else:
    import _osr

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

def _swig_repr(self):
    try:
        strthis = "proxy of " + self.this.__repr__()
    except __builtin__.Exception:
        strthis = ""
    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)


def _swig_setattr_nondynamic_instance_variable(set):
    def set_instance_attr(self, name, value):
        if name == "this":
            set(self, name, value)
        elif name == "thisown":
            self.this.own(value)
        elif hasattr(self, name) and isinstance(getattr(type(self), name), property):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add instance attributes to %s" % self)
    return set_instance_attr


def _swig_setattr_nondynamic_class_variable(set):
    def set_class_attr(cls, name, value):
        if hasattr(cls, name) and not isinstance(getattr(cls, name), property):
            set(cls, name, value)
        else:
            raise AttributeError("You cannot add class attributes to %s" % cls)
    return set_class_attr


def _swig_add_metaclass(metaclass):
    """Class decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclass"""
    def wrapper(cls):
        return metaclass(cls.__name__, cls.__bases__, cls.__dict__.copy())
    return wrapper


class _SwigNonDynamicMeta(type):
    """Meta class to enforce nondynamic attributes (no new attributes) for a class"""
    __setattr__ = _swig_setattr_nondynamic_class_variable(type.__setattr__)


SRS_WKT_WGS84_LAT_LONG = _osr.SRS_WKT_WGS84_LAT_LONG
SRS_PT_ALBERS_CONIC_EQUAL_AREA = _osr.SRS_PT_ALBERS_CONIC_EQUAL_AREA
SRS_PT_AZIMUTHAL_EQUIDISTANT = _osr.SRS_PT_AZIMUTHAL_EQUIDISTANT
SRS_PT_CASSINI_SOLDNER = _osr.SRS_PT_CASSINI_SOLDNER
SRS_PT_CYLINDRICAL_EQUAL_AREA = _osr.SRS_PT_CYLINDRICAL_EQUAL_AREA
SRS_PT_BONNE = _osr.SRS_PT_BONNE
SRS_PT_ECKERT_I = _osr.SRS_PT_ECKERT_I
SRS_PT_ECKERT_II = _osr.SRS_PT_ECKERT_II
SRS_PT_ECKERT_III = _osr.SRS_PT_ECKERT_III
SRS_PT_ECKERT_IV = _osr.SRS_PT_ECKERT_IV
SRS_PT_ECKERT_V = _osr.SRS_PT_ECKERT_V
SRS_PT_ECKERT_VI = _osr.SRS_PT_ECKERT_VI
SRS_PT_EQUIDISTANT_CONIC = _osr.SRS_PT_EQUIDISTANT_CONIC
SRS_PT_EQUIRECTANGULAR = _osr.SRS_PT_EQUIRECTANGULAR
SRS_PT_GALL_STEREOGRAPHIC = _osr.SRS_PT_GALL_STEREOGRAPHIC
SRS_PT_GAUSSSCHREIBERTMERCATOR = _osr.SRS_PT_GAUSSSCHREIBERTMERCATOR
SRS_PT_GEOSTATIONARY_SATELLITE = _osr.SRS_PT_GEOSTATIONARY_SATELLITE
SRS_PT_GOODE_HOMOLOSINE = _osr.SRS_PT_GOODE_HOMOLOSINE
SRS_PT_IGH = _osr.SRS_PT_IGH
SRS_PT_GNOMONIC = _osr.SRS_PT_GNOMONIC
SRS_PT_HOTINE_OBLIQUE_MERCATOR_AZIMUTH_CENTER = _osr.SRS_PT_HOTINE_OBLIQUE_MERCATOR_AZIMUTH_CENTER
SRS_PT_HOTINE_OBLIQUE_MERCATOR = _osr.SRS_PT_HOTINE_OBLIQUE_MERCATOR
SRS_PT_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN = _osr.SRS_PT_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN
SRS_PT_LABORDE_OBLIQUE_MERCATOR = _osr.SRS_PT_LABORDE_OBLIQUE_MERCATOR
SRS_PT_LAMBERT_CONFORMAL_CONIC_1SP = _osr.SRS_PT_LAMBERT_CONFORMAL_CONIC_1SP
SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP = _osr.SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP
SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP_BELGIUM = _osr.SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP_BELGIUM
SRS_PT_LAMBERT_AZIMUTHAL_EQUAL_AREA = _osr.SRS_PT_LAMBERT_AZIMUTHAL_EQUAL_AREA
SRS_PT_MERCATOR_1SP = _osr.SRS_PT_MERCATOR_1SP
SRS_PT_MERCATOR_2SP = _osr.SRS_PT_MERCATOR_2SP
SRS_PT_MERCATOR_AUXILIARY_SPHERE = _osr.SRS_PT_MERCATOR_AUXILIARY_SPHERE
SRS_PT_MILLER_CYLINDRICAL = _osr.SRS_PT_MILLER_CYLINDRICAL
SRS_PT_MOLLWEIDE = _osr.SRS_PT_MOLLWEIDE
SRS_PT_NEW_ZEALAND_MAP_GRID = _osr.SRS_PT_NEW_ZEALAND_MAP_GRID
SRS_PT_OBLIQUE_STEREOGRAPHIC = _osr.SRS_PT_OBLIQUE_STEREOGRAPHIC
SRS_PT_ORTHOGRAPHIC = _osr.SRS_PT_ORTHOGRAPHIC
SRS_PT_POLAR_STEREOGRAPHIC = _osr.SRS_PT_POLAR_STEREOGRAPHIC
SRS_PT_POLYCONIC = _osr.SRS_PT_POLYCONIC
SRS_PT_ROBINSON = _osr.SRS_PT_ROBINSON
SRS_PT_SINUSOIDAL = _osr.SRS_PT_SINUSOIDAL
SRS_PT_STEREOGRAPHIC = _osr.SRS_PT_STEREOGRAPHIC
SRS_PT_SWISS_OBLIQUE_CYLINDRICAL = _osr.SRS_PT_SWISS_OBLIQUE_CYLINDRICAL
SRS_PT_TRANSVERSE_MERCATOR = _osr.SRS_PT_TRANSVERSE_MERCATOR
SRS_PT_TRANSVERSE_MERCATOR_SOUTH_ORIENTED = _osr.SRS_PT_TRANSVERSE_MERCATOR_SOUTH_ORIENTED
SRS_PT_TRANSVERSE_MERCATOR_MI_21 = _osr.SRS_PT_TRANSVERSE_MERCATOR_MI_21
SRS_PT_TRANSVERSE_MERCATOR_MI_22 = _osr.SRS_PT_TRANSVERSE_MERCATOR_MI_22
SRS_PT_TRANSVERSE_MERCATOR_MI_23 = _osr.SRS_PT_TRANSVERSE_MERCATOR_MI_23
SRS_PT_TRANSVERSE_MERCATOR_MI_24 = _osr.SRS_PT_TRANSVERSE_MERCATOR_MI_24
SRS_PT_TRANSVERSE_MERCATOR_MI_25 = _osr.SRS_PT_TRANSVERSE_MERCATOR_MI_25
SRS_PT_TUNISIA_MINING_GRID = _osr.SRS_PT_TUNISIA_MINING_GRID
SRS_PT_TWO_POINT_EQUIDISTANT = _osr.SRS_PT_TWO_POINT_EQUIDISTANT
SRS_PT_VANDERGRINTEN = _osr.SRS_PT_VANDERGRINTEN
SRS_PT_KROVAK = _osr.SRS_PT_KROVAK
SRS_PT_IMW_POLYCONIC = _osr.SRS_PT_IMW_POLYCONIC
SRS_PT_WAGNER_I = _osr.SRS_PT_WAGNER_I
SRS_PT_WAGNER_II = _osr.SRS_PT_WAGNER_II
SRS_PT_WAGNER_III = _osr.SRS_PT_WAGNER_III
SRS_PT_WAGNER_IV = _osr.SRS_PT_WAGNER_IV
SRS_PT_WAGNER_V = _osr.SRS_PT_WAGNER_V
SRS_PT_WAGNER_VI = _osr.SRS_PT_WAGNER_VI
SRS_PT_WAGNER_VII = _osr.SRS_PT_WAGNER_VII
SRS_PT_QSC = _osr.SRS_PT_QSC
SRS_PT_AITOFF = _osr.SRS_PT_AITOFF
SRS_PT_WINKEL_I = _osr.SRS_PT_WINKEL_I
SRS_PT_WINKEL_II = _osr.SRS_PT_WINKEL_II
SRS_PT_WINKEL_TRIPEL = _osr.SRS_PT_WINKEL_TRIPEL
SRS_PT_CRASTER_PARABOLIC = _osr.SRS_PT_CRASTER_PARABOLIC
SRS_PT_LOXIMUTHAL = _osr.SRS_PT_LOXIMUTHAL
SRS_PT_QUARTIC_AUTHALIC = _osr.SRS_PT_QUARTIC_AUTHALIC
SRS_PT_SCH = _osr.SRS_PT_SCH
SRS_PP_CENTRAL_MERIDIAN = _osr.SRS_PP_CENTRAL_MERIDIAN
SRS_PP_SCALE_FACTOR = _osr.SRS_PP_SCALE_FACTOR
SRS_PP_STANDARD_PARALLEL_1 = _osr.SRS_PP_STANDARD_PARALLEL_1
SRS_PP_STANDARD_PARALLEL_2 = _osr.SRS_PP_STANDARD_PARALLEL_2
SRS_PP_PSEUDO_STD_PARALLEL_1 = _osr.SRS_PP_PSEUDO_STD_PARALLEL_1
SRS_PP_LONGITUDE_OF_CENTER = _osr.SRS_PP_LONGITUDE_OF_CENTER
SRS_PP_LATITUDE_OF_CENTER = _osr.SRS_PP_LATITUDE_OF_CENTER
SRS_PP_LONGITUDE_OF_ORIGIN = _osr.SRS_PP_LONGITUDE_OF_ORIGIN
SRS_PP_LATITUDE_OF_ORIGIN = _osr.SRS_PP_LATITUDE_OF_ORIGIN
SRS_PP_FALSE_EASTING = _osr.SRS_PP_FALSE_EASTING
SRS_PP_FALSE_NORTHING = _osr.SRS_PP_FALSE_NORTHING
SRS_PP_AZIMUTH = _osr.SRS_PP_AZIMUTH
SRS_PP_LONGITUDE_OF_POINT_1 = _osr.SRS_PP_LONGITUDE_OF_POINT_1
SRS_PP_LATITUDE_OF_POINT_1 = _osr.SRS_PP_LATITUDE_OF_POINT_1
SRS_PP_LONGITUDE_OF_POINT_2 = _osr.SRS_PP_LONGITUDE_OF_POINT_2
SRS_PP_LATITUDE_OF_POINT_2 = _osr.SRS_PP_LATITUDE_OF_POINT_2
SRS_PP_LONGITUDE_OF_POINT_3 = _osr.SRS_PP_LONGITUDE_OF_POINT_3
SRS_PP_LATITUDE_OF_POINT_3 = _osr.SRS_PP_LATITUDE_OF_POINT_3
SRS_PP_RECTIFIED_GRID_ANGLE = _osr.SRS_PP_RECTIFIED_GRID_ANGLE
SRS_PP_LANDSAT_NUMBER = _osr.SRS_PP_LANDSAT_NUMBER
SRS_PP_PATH_NUMBER = _osr.SRS_PP_PATH_NUMBER
SRS_PP_PERSPECTIVE_POINT_HEIGHT = _osr.SRS_PP_PERSPECTIVE_POINT_HEIGHT
SRS_PP_SATELLITE_HEIGHT = _osr.SRS_PP_SATELLITE_HEIGHT
SRS_PP_FIPSZONE = _osr.SRS_PP_FIPSZONE
SRS_PP_ZONE = _osr.SRS_PP_ZONE
SRS_PP_LATITUDE_OF_1ST_POINT = _osr.SRS_PP_LATITUDE_OF_1ST_POINT
SRS_PP_LONGITUDE_OF_1ST_POINT = _osr.SRS_PP_LONGITUDE_OF_1ST_POINT
SRS_PP_LATITUDE_OF_2ND_POINT = _osr.SRS_PP_LATITUDE_OF_2ND_POINT
SRS_PP_LONGITUDE_OF_2ND_POINT = _osr.SRS_PP_LONGITUDE_OF_2ND_POINT
SRS_PP_PEG_POINT_LATITUDE = _osr.SRS_PP_PEG_POINT_LATITUDE
SRS_PP_PEG_POINT_LONGITUDE = _osr.SRS_PP_PEG_POINT_LONGITUDE
SRS_PP_PEG_POINT_HEADING = _osr.SRS_PP_PEG_POINT_HEADING
SRS_PP_PEG_POINT_HEIGHT = _osr.SRS_PP_PEG_POINT_HEIGHT
SRS_UL_METER = _osr.SRS_UL_METER
SRS_UL_FOOT = _osr.SRS_UL_FOOT
SRS_UL_FOOT_CONV = _osr.SRS_UL_FOOT_CONV
SRS_UL_US_FOOT = _osr.SRS_UL_US_FOOT
SRS_UL_US_FOOT_CONV = _osr.SRS_UL_US_FOOT_CONV
SRS_UL_NAUTICAL_MILE = _osr.SRS_UL_NAUTICAL_MILE
SRS_UL_NAUTICAL_MILE_CONV = _osr.SRS_UL_NAUTICAL_MILE_CONV
SRS_UL_LINK = _osr.SRS_UL_LINK
SRS_UL_LINK_CONV = _osr.SRS_UL_LINK_CONV
SRS_UL_CHAIN = _osr.SRS_UL_CHAIN
SRS_UL_CHAIN_CONV = _osr.SRS_UL_CHAIN_CONV
SRS_UL_ROD = _osr.SRS_UL_ROD
SRS_UL_ROD_CONV = _osr.SRS_UL_ROD_CONV
SRS_UL_LINK_Clarke = _osr.SRS_UL_LINK_Clarke
SRS_UL_LINK_Clarke_CONV = _osr.SRS_UL_LINK_Clarke_CONV
SRS_UL_KILOMETER = _osr.SRS_UL_KILOMETER
SRS_UL_KILOMETER_CONV = _osr.SRS_UL_KILOMETER_CONV
SRS_UL_DECIMETER = _osr.SRS_UL_DECIMETER
SRS_UL_DECIMETER_CONV = _osr.SRS_UL_DECIMETER_CONV
SRS_UL_CENTIMETER = _osr.SRS_UL_CENTIMETER
SRS_UL_CENTIMETER_CONV = _osr.SRS_UL_CENTIMETER_CONV
SRS_UL_MILLIMETER = _osr.SRS_UL_MILLIMETER
SRS_UL_MILLIMETER_CONV = _osr.SRS_UL_MILLIMETER_CONV
SRS_UL_INTL_NAUT_MILE = _osr.SRS_UL_INTL_NAUT_MILE
SRS_UL_INTL_NAUT_MILE_CONV = _osr.SRS_UL_INTL_NAUT_MILE_CONV
SRS_UL_INTL_INCH = _osr.SRS_UL_INTL_INCH
SRS_UL_INTL_INCH_CONV = _osr.SRS_UL_INTL_INCH_CONV
SRS_UL_INTL_FOOT = _osr.SRS_UL_INTL_FOOT
SRS_UL_INTL_FOOT_CONV = _osr.SRS_UL_INTL_FOOT_CONV
SRS_UL_INTL_YARD = _osr.SRS_UL_INTL_YARD
SRS_UL_INTL_YARD_CONV = _osr.SRS_UL_INTL_YARD_CONV
SRS_UL_INTL_STAT_MILE = _osr.SRS_UL_INTL_STAT_MILE
SRS_UL_INTL_STAT_MILE_CONV = _osr.SRS_UL_INTL_STAT_MILE_CONV
SRS_UL_INTL_FATHOM = _osr.SRS_UL_INTL_FATHOM
SRS_UL_INTL_FATHOM_CONV = _osr.SRS_UL_INTL_FATHOM_CONV
SRS_UL_INTL_CHAIN = _osr.SRS_UL_INTL_CHAIN
SRS_UL_INTL_CHAIN_CONV = _osr.SRS_UL_INTL_CHAIN_CONV
SRS_UL_INTL_LINK = _osr.SRS_UL_INTL_LINK
SRS_UL_INTL_LINK_CONV = _osr.SRS_UL_INTL_LINK_CONV
SRS_UL_US_INCH = _osr.SRS_UL_US_INCH
SRS_UL_US_INCH_CONV = _osr.SRS_UL_US_INCH_CONV
SRS_UL_US_YARD = _osr.SRS_UL_US_YARD
SRS_UL_US_YARD_CONV = _osr.SRS_UL_US_YARD_CONV
SRS_UL_US_CHAIN = _osr.SRS_UL_US_CHAIN
SRS_UL_US_CHAIN_CONV = _osr.SRS_UL_US_CHAIN_CONV
SRS_UL_US_STAT_MILE = _osr.SRS_UL_US_STAT_MILE
SRS_UL_US_STAT_MILE_CONV = _osr.SRS_UL_US_STAT_MILE_CONV
SRS_UL_INDIAN_YARD = _osr.SRS_UL_INDIAN_YARD
SRS_UL_INDIAN_YARD_CONV = _osr.SRS_UL_INDIAN_YARD_CONV
SRS_UL_INDIAN_FOOT = _osr.SRS_UL_INDIAN_FOOT
SRS_UL_INDIAN_FOOT_CONV = _osr.SRS_UL_INDIAN_FOOT_CONV
SRS_UL_INDIAN_CHAIN = _osr.SRS_UL_INDIAN_CHAIN
SRS_UL_INDIAN_CHAIN_CONV = _osr.SRS_UL_INDIAN_CHAIN_CONV
SRS_UA_DEGREE = _osr.SRS_UA_DEGREE
SRS_UA_DEGREE_CONV = _osr.SRS_UA_DEGREE_CONV
SRS_UA_RADIAN = _osr.SRS_UA_RADIAN
SRS_PM_GREENWICH = _osr.SRS_PM_GREENWICH
SRS_DN_NAD27 = _osr.SRS_DN_NAD27
SRS_DN_NAD83 = _osr.SRS_DN_NAD83
SRS_DN_WGS72 = _osr.SRS_DN_WGS72
SRS_DN_WGS84 = _osr.SRS_DN_WGS84
SRS_WGS84_SEMIMAJOR = _osr.SRS_WGS84_SEMIMAJOR
SRS_WGS84_INVFLATTENING = _osr.SRS_WGS84_INVFLATTENING
OAO_Other = _osr.OAO_Other
OAO_North = _osr.OAO_North
OAO_South = _osr.OAO_South
OAO_East = _osr.OAO_East
OAO_West = _osr.OAO_West
OAO_Up = _osr.OAO_Up
OAO_Down = _osr.OAO_Down
OAMS_TRADITIONAL_GIS_ORDER = _osr.OAMS_TRADITIONAL_GIS_ORDER
OAMS_AUTHORITY_COMPLIANT = _osr.OAMS_AUTHORITY_COMPLIANT
OAMS_CUSTOM = _osr.OAMS_CUSTOM
PROJ_ERR_INVALID_OP = _osr.PROJ_ERR_INVALID_OP
PROJ_ERR_INVALID_OP_WRONG_SYNTAX = _osr.PROJ_ERR_INVALID_OP_WRONG_SYNTAX
PROJ_ERR_INVALID_OP_MISSING_ARG = _osr.PROJ_ERR_INVALID_OP_MISSING_ARG
PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE = _osr.PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE
PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS = _osr.PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS
PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID = _osr.PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID
PROJ_ERR_COORD_TRANSFM = _osr.PROJ_ERR_COORD_TRANSFM
PROJ_ERR_COORD_TRANSFM_INVALID_COORD = _osr.PROJ_ERR_COORD_TRANSFM_INVALID_COORD
PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN = _osr.PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN
PROJ_ERR_COORD_TRANSFM_NO_OPERATION = _osr.PROJ_ERR_COORD_TRANSFM_NO_OPERATION
PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID = _osr.PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID
PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA = _osr.PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA
PROJ_ERR_OTHER = _osr.PROJ_ERR_OTHER
PROJ_ERR_OTHER_API_MISUSE = _osr.PROJ_ERR_OTHER_API_MISUSE
PROJ_ERR_OTHER_NO_INVERSE_OP = _osr.PROJ_ERR_OTHER_NO_INVERSE_OP
PROJ_ERR_OTHER_NETWORK_ERROR = _osr.PROJ_ERR_OTHER_NETWORK_ERROR

def GetUseExceptions(*args):
    r"""GetUseExceptions() -> int"""
    return _osr.GetUseExceptions(*args)

def _GetExceptionsLocal(*args):
    r"""_GetExceptionsLocal() -> int"""
    return _osr._GetExceptionsLocal(*args)

def _SetExceptionsLocal(*args):
    r"""_SetExceptionsLocal(int bVal)"""
    return _osr._SetExceptionsLocal(*args)

def _UseExceptions(*args):
    r"""_UseExceptions()"""
    return _osr._UseExceptions(*args)

def _DontUseExceptions(*args):
    r"""_DontUseExceptions()"""
    return _osr._DontUseExceptions(*args)

def _UserHasSpecifiedIfUsingExceptions(*args):
    r"""_UserHasSpecifiedIfUsingExceptions() -> int"""
    return _osr._UserHasSpecifiedIfUsingExceptions(*args)

class ExceptionMgr(object):
    """
    Context manager to manage Python Exception state
    for GDAL/OGR/OSR/GNM.

    Separate exception state is maintained for each
    module (gdal, ogr, etc), and this class appears independently
    in all of them. This is built in top of calls to the older
    UseExceptions()/DontUseExceptions() functions.

    Example::

        >>> print(gdal.GetUseExceptions())
        0
        >>> with gdal.ExceptionMgr():
        ...     # Exceptions are now in use
        ...     print(gdal.GetUseExceptions())
        1
        >>>
        >>> # Exception state has now been restored
        >>> print(gdal.GetUseExceptions())
        0

    """
    def __init__(self, useExceptions=True):
        """
        Save whether or not this context will be using exceptions
        """
        self.requestedUseExceptions = useExceptions

    def __enter__(self):
        """
        On context entry, save the current GDAL exception state, and
        set it to the state requested for the context

        """
        self.currentUseExceptions = _GetExceptionsLocal()
        _SetExceptionsLocal(self.requestedUseExceptions)
        if ExceptionMgr.__module__ == "osgeo.gdal":
            try:
                from . import gdal_array
            except ImportError:
                gdal_array = None
            if gdal_array:
                gdal_array._SetExceptionsLocal(self.requestedUseExceptions)

    def __exit__(self, exc_type, exc_val, exc_tb):
        """
        On exit, restore the GDAL/OGR/OSR/GNM exception state which was
        current on entry to the context
        """
        _SetExceptionsLocal(self.currentUseExceptions)
        if ExceptionMgr.__module__ == "osgeo.gdal":
            try:
                from . import gdal_array
            except ImportError:
                gdal_array = None
            if gdal_array:
                gdal_array._SetExceptionsLocal(self.currentUseExceptions)




def UseExceptions():
    """ Enable exceptions in all GDAL related modules (osgeo.gdal, osgeo.ogr, osgeo.osr, osgeo.gnm).
        Note: prior to GDAL 3.7, this only affected the calling module"""

    try:
        from . import gdal
        gdal._UseExceptions()
    except ImportError:
        pass
    try:
        from . import gdal_array
        gdal_array._UseExceptions()
    except ImportError:
        pass
    try:
        from . import ogr
        ogr._UseExceptions()
    except ImportError:
        pass
    try:
        from . import osr
        osr._UseExceptions()
    except ImportError:
        pass
    try:
        from . import gnm
        gnm._UseExceptions()
    except ImportError:
        pass

def DontUseExceptions():
    """ Disable exceptions in all GDAL related modules (osgeo.gdal, osgeo.ogr, osgeo.osr, osgeo.gnm).
        Note: prior to GDAL 3.7, this only affected the calling module"""

    try:
        from . import gdal
        gdal._DontUseExceptions()
    except ImportError:
        pass
    try:
        from . import gdal_array
        gdal_array._DontUseExceptions()
    except ImportError:
        pass
    try:
        from . import ogr
        ogr._DontUseExceptions()
    except ImportError:
        pass
    try:
        from . import osr
        osr._DontUseExceptions()
    except ImportError:
        pass
    try:
        from . import gnm
        gnm._DontUseExceptions()
    except ImportError:
        pass



hasWarnedAboutUserHasNotSpecifiedIfUsingExceptions = False

def _WarnIfUserHasNotSpecifiedIfUsingExceptions():
    from . import gdal
    if not hasattr(gdal, "hasWarnedAboutUserHasNotSpecifiedIfUsingExceptions") and not _UserHasSpecifiedIfUsingExceptions():
        gdal.hasWarnedAboutUserHasNotSpecifiedIfUsingExceptions = True
        import warnings
        warnings.warn(
            "Neither osr.UseExceptions() nor osr.DontUseExceptions() has been explicitly called. " +
            "In GDAL 4.0, exceptions will be enabled by default.", FutureWarning)


def GetWellKnownGeogCSAsWKT(*args):
    r"""GetWellKnownGeogCSAsWKT(char const * name) -> OGRErr"""
    return _osr.GetWellKnownGeogCSAsWKT(*args)

def GetUserInputAsWKT(*args):
    r"""GetUserInputAsWKT(char const * name) -> OGRErr"""
    return _osr.GetUserInputAsWKT(*args)
class AreaOfUse(object):
    r"""Proxy of C++ OSRAreaOfUse class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    west_lon_degree = property(_osr.AreaOfUse_west_lon_degree_get, doc=r"""west_lon_degree : double""")
    south_lat_degree = property(_osr.AreaOfUse_south_lat_degree_get, doc=r"""south_lat_degree : double""")
    east_lon_degree = property(_osr.AreaOfUse_east_lon_degree_get, doc=r"""east_lon_degree : double""")
    north_lat_degree = property(_osr.AreaOfUse_north_lat_degree_get, doc=r"""north_lat_degree : double""")
    name = property(_osr.AreaOfUse_name_get, doc=r"""name : p.char""")

    def __init__(self, *args):
        r"""__init__(AreaOfUse self, double west_lon_degree, double south_lat_degree, double east_lon_degree, double north_lat_degree, char * name) -> AreaOfUse"""
        _osr.AreaOfUse_swiginit(self, _osr.new_AreaOfUse(*args))
    __swig_destroy__ = _osr.delete_AreaOfUse

# Register AreaOfUse in _osr:
_osr.AreaOfUse_swigregister(AreaOfUse)

def OSRAreaOfUse_west_lon_degree_get(*args):
    r"""OSRAreaOfUse_west_lon_degree_get(AreaOfUse area) -> double"""
    return _osr.OSRAreaOfUse_west_lon_degree_get(*args)

def OSRAreaOfUse_south_lat_degree_get(*args):
    r"""OSRAreaOfUse_south_lat_degree_get(AreaOfUse area) -> double"""
    return _osr.OSRAreaOfUse_south_lat_degree_get(*args)

def OSRAreaOfUse_east_lon_degree_get(*args):
    r"""OSRAreaOfUse_east_lon_degree_get(AreaOfUse area) -> double"""
    return _osr.OSRAreaOfUse_east_lon_degree_get(*args)

def OSRAreaOfUse_north_lat_degree_get(*args):
    r"""OSRAreaOfUse_north_lat_degree_get(AreaOfUse area) -> double"""
    return _osr.OSRAreaOfUse_north_lat_degree_get(*args)

def OSRAreaOfUse_name_get(*args):
    r"""OSRAreaOfUse_name_get(AreaOfUse area) -> char const *"""
    return _osr.OSRAreaOfUse_name_get(*args)
class SpatialReference(object):
    r"""Proxy of C++ OSRSpatialReferenceShadow class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args, **kwargs):
        r"""__init__(SpatialReference self, char const * wkt="") -> SpatialReference"""
        _osr.SpatialReference_swiginit(self, _osr.new_SpatialReference(*args, **kwargs))
    __swig_destroy__ = _osr.delete_SpatialReference

    def __str__(self, *args):
        r"""__str__(SpatialReference self) -> retStringAndCPLFree *"""
        return _osr.SpatialReference___str__(self, *args)

    def GetName(self, *args):
        r"""GetName(SpatialReference self) -> char const *"""
        return _osr.SpatialReference_GetName(self, *args)

    def IsSame(self, *args, **kwargs):
        r"""IsSame(SpatialReference self, SpatialReference rhs, char ** options=None) -> int"""
        return _osr.SpatialReference_IsSame(self, *args, **kwargs)

    def IsSameGeogCS(self, *args):
        r"""IsSameGeogCS(SpatialReference self, SpatialReference rhs) -> int"""
        return _osr.SpatialReference_IsSameGeogCS(self, *args)

    def IsSameVertCS(self, *args):
        r"""IsSameVertCS(SpatialReference self, SpatialReference rhs) -> int"""
        return _osr.SpatialReference_IsSameVertCS(self, *args)

    def IsGeographic(self, *args):
        r"""IsGeographic(SpatialReference self) -> int"""
        return _osr.SpatialReference_IsGeographic(self, *args)

    def IsDerivedGeographic(self, *args):
        r"""IsDerivedGeographic(SpatialReference self) -> int"""
        return _osr.SpatialReference_IsDerivedGeographic(self, *args)

    def IsProjected(self, *args):
        r"""IsProjected(SpatialReference self) -> int"""
        return _osr.SpatialReference_IsProjected(self, *args)

    def IsCompound(self, *args):
        r"""IsCompound(SpatialReference self) -> int"""
        return _osr.SpatialReference_IsCompound(self, *args)

    def IsGeocentric(self, *args):
        r"""IsGeocentric(SpatialReference self) -> int"""
        return _osr.SpatialReference_IsGeocentric(self, *args)

    def IsLocal(self, *args):
        r"""IsLocal(SpatialReference self) -> int"""
        return _osr.SpatialReference_IsLocal(self, *args)

    def IsVertical(self, *args):
        r"""IsVertical(SpatialReference self) -> int"""
        return _osr.SpatialReference_IsVertical(self, *args)

    def IsDynamic(self, *args):
        r"""IsDynamic(SpatialReference self) -> bool"""
        return _osr.SpatialReference_IsDynamic(self, *args)

    def HasPointMotionOperation(self, *args):
        r"""HasPointMotionOperation(SpatialReference self) -> bool"""
        return _osr.SpatialReference_HasPointMotionOperation(self, *args)

    def GetCoordinateEpoch(self, *args):
        r"""GetCoordinateEpoch(SpatialReference self) -> double"""
        return _osr.SpatialReference_GetCoordinateEpoch(self, *args)

    def SetCoordinateEpoch(self, *args):
        r"""SetCoordinateEpoch(SpatialReference self, double coordinateEpoch)"""
        return _osr.SpatialReference_SetCoordinateEpoch(self, *args)

    def EPSGTreatsAsLatLong(self, *args):
        r"""EPSGTreatsAsLatLong(SpatialReference self) -> int"""
        return _osr.SpatialReference_EPSGTreatsAsLatLong(self, *args)

    def EPSGTreatsAsNorthingEasting(self, *args):
        r"""EPSGTreatsAsNorthingEasting(SpatialReference self) -> int"""
        return _osr.SpatialReference_EPSGTreatsAsNorthingEasting(self, *args)

    def SetAuthority(self, *args):
        r"""SetAuthority(SpatialReference self, char const * pszTargetKey, char const * pszAuthority, int nCode) -> OGRErr"""
        return _osr.SpatialReference_SetAuthority(self, *args)

    def GetAttrValue(self, *args):
        r"""GetAttrValue(SpatialReference self, char const * name, int child=0) -> char const *"""
        return _osr.SpatialReference_GetAttrValue(self, *args)

    def SetAttrValue(self, *args):
        r"""SetAttrValue(SpatialReference self, char const * name, char const * value) -> OGRErr"""
        return _osr.SpatialReference_SetAttrValue(self, *args)

    def SetAngularUnits(self, *args):
        r"""SetAngularUnits(SpatialReference self, char const * name, double to_radians) -> OGRErr"""
        return _osr.SpatialReference_SetAngularUnits(self, *args)

    def GetAngularUnits(self, *args):
        r"""GetAngularUnits(SpatialReference self) -> double"""
        return _osr.SpatialReference_GetAngularUnits(self, *args)

    def GetAngularUnitsName(self, *args):
        r"""GetAngularUnitsName(SpatialReference self) -> char const *"""
        return _osr.SpatialReference_GetAngularUnitsName(self, *args)

    def SetTargetLinearUnits(self, *args):
        r"""SetTargetLinearUnits(SpatialReference self, char const * target, char const * name, double to_meters) -> OGRErr"""
        return _osr.SpatialReference_SetTargetLinearUnits(self, *args)

    def SetLinearUnits(self, *args):
        r"""SetLinearUnits(SpatialReference self, char const * name, double to_meters) -> OGRErr"""
        return _osr.SpatialReference_SetLinearUnits(self, *args)

    def SetLinearUnitsAndUpdateParameters(self, *args):
        r"""SetLinearUnitsAndUpdateParameters(SpatialReference self, char const * name, double to_meters) -> OGRErr"""
        return _osr.SpatialReference_SetLinearUnitsAndUpdateParameters(self, *args)

    def GetTargetLinearUnits(self, *args):
        r"""GetTargetLinearUnits(SpatialReference self, char const * target_key) -> double"""
        return _osr.SpatialReference_GetTargetLinearUnits(self, *args)

    def GetLinearUnits(self, *args):
        r"""GetLinearUnits(SpatialReference self) -> double"""
        return _osr.SpatialReference_GetLinearUnits(self, *args)

    def GetLinearUnitsName(self, *args):
        r"""GetLinearUnitsName(SpatialReference self) -> char const *"""
        return _osr.SpatialReference_GetLinearUnitsName(self, *args)

    def GetAuthorityCode(self, *args):
        r"""GetAuthorityCode(SpatialReference self, char const * target_key) -> char const *"""
        return _osr.SpatialReference_GetAuthorityCode(self, *args)

    def GetAuthorityName(self, *args):
        r"""GetAuthorityName(SpatialReference self, char const * target_key) -> char const *"""
        return _osr.SpatialReference_GetAuthorityName(self, *args)

    def GetAreaOfUse(self, *args):
        r"""GetAreaOfUse(SpatialReference self) -> AreaOfUse"""
        return _osr.SpatialReference_GetAreaOfUse(self, *args)

    def GetAxisName(self, *args):
        r"""GetAxisName(SpatialReference self, char const * target_key, int iAxis) -> char const *"""
        return _osr.SpatialReference_GetAxisName(self, *args)

    def GetAxesCount(self, *args):
        r"""GetAxesCount(SpatialReference self) -> int"""
        return _osr.SpatialReference_GetAxesCount(self, *args)

    def GetAxisOrientation(self, *args):
        r"""GetAxisOrientation(SpatialReference self, char const * target_key, int iAxis) -> OGRAxisOrientation"""
        return _osr.SpatialReference_GetAxisOrientation(self, *args)

    def GetAxisMappingStrategy(self, *args):
        r"""GetAxisMappingStrategy(SpatialReference self) -> OSRAxisMappingStrategy"""
        return _osr.SpatialReference_GetAxisMappingStrategy(self, *args)

    def SetAxisMappingStrategy(self, *args):
        r"""SetAxisMappingStrategy(SpatialReference self, OSRAxisMappingStrategy strategy)"""
        return _osr.SpatialReference_SetAxisMappingStrategy(self, *args)

    def GetDataAxisToSRSAxisMapping(self, *args):
        r"""GetDataAxisToSRSAxisMapping(SpatialReference self)"""
        return _osr.SpatialReference_GetDataAxisToSRSAxisMapping(self, *args)

    def SetDataAxisToSRSAxisMapping(self, *args):
        r"""SetDataAxisToSRSAxisMapping(SpatialReference self, int nList) -> OGRErr"""
        return _osr.SpatialReference_SetDataAxisToSRSAxisMapping(self, *args)

    def SetUTM(self, *args):
        r"""SetUTM(SpatialReference self, int zone, int north=1) -> OGRErr"""
        return _osr.SpatialReference_SetUTM(self, *args)

    def GetUTMZone(self, *args):
        r"""GetUTMZone(SpatialReference self) -> int"""
        return _osr.SpatialReference_GetUTMZone(self, *args)

    def SetStatePlane(self, *args):
        r"""SetStatePlane(SpatialReference self, int zone, int is_nad83=1, char const * unitsname="", double units=0.0) -> OGRErr"""
        return _osr.SpatialReference_SetStatePlane(self, *args)

    def AutoIdentifyEPSG(self, *args):
        r"""AutoIdentifyEPSG(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_AutoIdentifyEPSG(self, *args)

    def FindMatches(self, *args):
        r"""FindMatches(SpatialReference self, char ** options=None)"""
        return _osr.SpatialReference_FindMatches(self, *args)

    def SetProjection(self, *args):
        r"""SetProjection(SpatialReference self, char const * arg) -> OGRErr"""
        return _osr.SpatialReference_SetProjection(self, *args)

    def SetProjParm(self, *args):
        r"""SetProjParm(SpatialReference self, char const * name, double val) -> OGRErr"""
        return _osr.SpatialReference_SetProjParm(self, *args)

    def GetProjParm(self, *args):
        r"""GetProjParm(SpatialReference self, char const * name, double default_val=0.0) -> double"""
        return _osr.SpatialReference_GetProjParm(self, *args)

    def SetNormProjParm(self, *args):
        r"""SetNormProjParm(SpatialReference self, char const * name, double val) -> OGRErr"""
        return _osr.SpatialReference_SetNormProjParm(self, *args)

    def GetNormProjParm(self, *args):
        r"""GetNormProjParm(SpatialReference self, char const * name, double default_val=0.0) -> double"""
        return _osr.SpatialReference_GetNormProjParm(self, *args)

    def GetSemiMajor(self, *args):
        r"""GetSemiMajor(SpatialReference self) -> double"""
        return _osr.SpatialReference_GetSemiMajor(self, *args)

    def GetSemiMinor(self, *args):
        r"""GetSemiMinor(SpatialReference self) -> double"""
        return _osr.SpatialReference_GetSemiMinor(self, *args)

    def GetInvFlattening(self, *args):
        r"""GetInvFlattening(SpatialReference self) -> double"""
        return _osr.SpatialReference_GetInvFlattening(self, *args)

    def SetACEA(self, *args, **kwargs):
        r"""SetACEA(SpatialReference self, double stdp1, double stdp2, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetACEA(self, *args, **kwargs)

    def SetAE(self, *args, **kwargs):
        r"""SetAE(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetAE(self, *args, **kwargs)

    def SetBonne(self, *args, **kwargs):
        r"""SetBonne(SpatialReference self, double stdp, double cm, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetBonne(self, *args, **kwargs)

    def SetCEA(self, *args, **kwargs):
        r"""SetCEA(SpatialReference self, double stdp1, double cm, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetCEA(self, *args, **kwargs)

    def SetCS(self, *args, **kwargs):
        r"""SetCS(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetCS(self, *args, **kwargs)

    def SetEC(self, *args, **kwargs):
        r"""SetEC(SpatialReference self, double stdp1, double stdp2, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetEC(self, *args, **kwargs)

    def SetEckertIV(self, *args, **kwargs):
        r"""SetEckertIV(SpatialReference self, double cm, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetEckertIV(self, *args, **kwargs)

    def SetEckertVI(self, *args, **kwargs):
        r"""SetEckertVI(SpatialReference self, double cm, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetEckertVI(self, *args, **kwargs)

    def SetEquirectangular(self, *args, **kwargs):
        r"""SetEquirectangular(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetEquirectangular(self, *args, **kwargs)

    def SetEquirectangular2(self, *args, **kwargs):
        r"""SetEquirectangular2(SpatialReference self, double clat, double clong, double pseudostdparallellat, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetEquirectangular2(self, *args, **kwargs)

    def SetGaussSchreiberTMercator(self, *args, **kwargs):
        r"""SetGaussSchreiberTMercator(SpatialReference self, double clat, double clong, double sc, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetGaussSchreiberTMercator(self, *args, **kwargs)

    def SetGS(self, *args, **kwargs):
        r"""SetGS(SpatialReference self, double cm, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetGS(self, *args, **kwargs)

    def SetGH(self, *args, **kwargs):
        r"""SetGH(SpatialReference self, double cm, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetGH(self, *args, **kwargs)

    def SetIGH(self, *args):
        r"""SetIGH(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_SetIGH(self, *args)

    def SetGEOS(self, *args, **kwargs):
        r"""SetGEOS(SpatialReference self, double cm, double satelliteheight, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetGEOS(self, *args, **kwargs)

    def SetGnomonic(self, *args, **kwargs):
        r"""SetGnomonic(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetGnomonic(self, *args, **kwargs)

    def SetHOM(self, *args, **kwargs):
        r"""SetHOM(SpatialReference self, double clat, double clong, double azimuth, double recttoskew, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetHOM(self, *args, **kwargs)

    def SetHOM2PNO(self, *args, **kwargs):
        r"""SetHOM2PNO(SpatialReference self, double clat, double dfLat1, double dfLong1, double dfLat2, double dfLong2, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetHOM2PNO(self, *args, **kwargs)

    def SetKrovak(self, *args, **kwargs):
        r"""SetKrovak(SpatialReference self, double clat, double clong, double azimuth, double pseudostdparallellat, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetKrovak(self, *args, **kwargs)

    def SetLAEA(self, *args, **kwargs):
        r"""SetLAEA(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetLAEA(self, *args, **kwargs)

    def SetLCC(self, *args, **kwargs):
        r"""SetLCC(SpatialReference self, double stdp1, double stdp2, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetLCC(self, *args, **kwargs)

    def SetLCC1SP(self, *args, **kwargs):
        r"""SetLCC1SP(SpatialReference self, double clat, double clong, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetLCC1SP(self, *args, **kwargs)

    def SetLCCB(self, *args, **kwargs):
        r"""SetLCCB(SpatialReference self, double stdp1, double stdp2, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetLCCB(self, *args, **kwargs)

    def SetMC(self, *args, **kwargs):
        r"""SetMC(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetMC(self, *args, **kwargs)

    def SetMercator(self, *args, **kwargs):
        r"""SetMercator(SpatialReference self, double clat, double clong, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetMercator(self, *args, **kwargs)

    def SetMercator2SP(self, *args, **kwargs):
        r"""SetMercator2SP(SpatialReference self, double stdp1, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetMercator2SP(self, *args, **kwargs)

    def SetMollweide(self, *args, **kwargs):
        r"""SetMollweide(SpatialReference self, double cm, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetMollweide(self, *args, **kwargs)

    def SetNZMG(self, *args, **kwargs):
        r"""SetNZMG(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetNZMG(self, *args, **kwargs)

    def SetOS(self, *args, **kwargs):
        r"""SetOS(SpatialReference self, double dfOriginLat, double dfCMeridian, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetOS(self, *args, **kwargs)

    def SetOrthographic(self, *args, **kwargs):
        r"""SetOrthographic(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetOrthographic(self, *args, **kwargs)

    def SetPolyconic(self, *args, **kwargs):
        r"""SetPolyconic(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetPolyconic(self, *args, **kwargs)

    def SetPS(self, *args, **kwargs):
        r"""SetPS(SpatialReference self, double clat, double clong, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetPS(self, *args, **kwargs)

    def SetRobinson(self, *args, **kwargs):
        r"""SetRobinson(SpatialReference self, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetRobinson(self, *args, **kwargs)

    def SetSinusoidal(self, *args, **kwargs):
        r"""SetSinusoidal(SpatialReference self, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetSinusoidal(self, *args, **kwargs)

    def SetStereographic(self, *args, **kwargs):
        r"""SetStereographic(SpatialReference self, double clat, double clong, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetStereographic(self, *args, **kwargs)

    def SetSOC(self, *args, **kwargs):
        r"""SetSOC(SpatialReference self, double latitudeoforigin, double cm, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetSOC(self, *args, **kwargs)

    def SetTM(self, *args, **kwargs):
        r"""SetTM(SpatialReference self, double clat, double clong, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetTM(self, *args, **kwargs)

    def SetTMVariant(self, *args, **kwargs):
        r"""SetTMVariant(SpatialReference self, char const * pszVariantName, double clat, double clong, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetTMVariant(self, *args, **kwargs)

    def SetTMG(self, *args, **kwargs):
        r"""SetTMG(SpatialReference self, double clat, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetTMG(self, *args, **kwargs)

    def SetTMSO(self, *args, **kwargs):
        r"""SetTMSO(SpatialReference self, double clat, double clong, double scale, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetTMSO(self, *args, **kwargs)

    def SetVDG(self, *args, **kwargs):
        r"""SetVDG(SpatialReference self, double clong, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetVDG(self, *args, **kwargs)

    def SetVerticalPerspective(self, *args, **kwargs):
        r"""SetVerticalPerspective(SpatialReference self, double topoOriginLat, double topoOriginLon, double topoOriginHeight, double viewPointHeight, double fe, double fn) -> OGRErr"""
        return _osr.SpatialReference_SetVerticalPerspective(self, *args, **kwargs)

    def SetWellKnownGeogCS(self, *args):
        r"""SetWellKnownGeogCS(SpatialReference self, char const * name) -> OGRErr"""
        return _osr.SpatialReference_SetWellKnownGeogCS(self, *args)

    def SetFromUserInput(self, *args):
        r"""SetFromUserInput(SpatialReference self, char const * name) -> OGRErr"""
        return _osr.SpatialReference_SetFromUserInput(self, *args)

    def CopyGeogCSFrom(self, *args):
        r"""CopyGeogCSFrom(SpatialReference self, SpatialReference rhs) -> OGRErr"""
        return _osr.SpatialReference_CopyGeogCSFrom(self, *args)

    def SetTOWGS84(self, *args):
        r"""SetTOWGS84(SpatialReference self, double p1, double p2, double p3, double p4=0.0, double p5=0.0, double p6=0.0, double p7=0.0) -> OGRErr"""
        return _osr.SpatialReference_SetTOWGS84(self, *args)

    def HasTOWGS84(self, *args):
        r"""HasTOWGS84(SpatialReference self) -> bool"""
        return _osr.SpatialReference_HasTOWGS84(self, *args)

    def GetTOWGS84(self, *args):
        r"""GetTOWGS84(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_GetTOWGS84(self, *args)

    def AddGuessedTOWGS84(self, *args):
        r"""AddGuessedTOWGS84(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_AddGuessedTOWGS84(self, *args)

    def SetLocalCS(self, *args):
        r"""SetLocalCS(SpatialReference self, char const * pszName) -> OGRErr"""
        return _osr.SpatialReference_SetLocalCS(self, *args)

    def SetGeogCS(self, *args):
        r"""SetGeogCS(SpatialReference self, char const * pszGeogName, char const * pszDatumName, char const * pszEllipsoidName, double dfSemiMajor, double dfInvFlattening, char const * pszPMName="Greenwich", double dfPMOffset=0.0, char const * pszUnits="degree", double dfConvertToRadians=0.0174532925199433) -> OGRErr"""
        return _osr.SpatialReference_SetGeogCS(self, *args)

    def SetProjCS(self, *args):
        r"""SetProjCS(SpatialReference self, char const * name="unnamed") -> OGRErr"""
        return _osr.SpatialReference_SetProjCS(self, *args)

    def SetGeocCS(self, *args):
        r"""SetGeocCS(SpatialReference self, char const * name="unnamed") -> OGRErr"""
        return _osr.SpatialReference_SetGeocCS(self, *args)

    def SetVertCS(self, *args):
        r"""SetVertCS(SpatialReference self, char const * VertCSName="unnamed", char const * VertDatumName="unnamed", int VertDatumType=0) -> OGRErr"""
        return _osr.SpatialReference_SetVertCS(self, *args)

    def SetCompoundCS(self, *args):
        r"""SetCompoundCS(SpatialReference self, char const * name, SpatialReference horizcs, SpatialReference vertcs) -> OGRErr"""
        return _osr.SpatialReference_SetCompoundCS(self, *args)

    def ImportFromWkt(self, *args):
        r"""ImportFromWkt(SpatialReference self, char ** ppszInput) -> OGRErr"""
        return _osr.SpatialReference_ImportFromWkt(self, *args)

    def ImportFromProj4(self, *args):
        r"""ImportFromProj4(SpatialReference self, char * ppszInput) -> OGRErr"""
        return _osr.SpatialReference_ImportFromProj4(self, *args)

    def ImportFromUrl(self, *args):
        r"""ImportFromUrl(SpatialReference self, char * url) -> OGRErr"""
        return _osr.SpatialReference_ImportFromUrl(self, *args)

    def ImportFromESRI(self, *args):
        r"""ImportFromESRI(SpatialReference self, char ** ppszInput) -> OGRErr"""
        return _osr.SpatialReference_ImportFromESRI(self, *args)

    def ImportFromEPSG(self, *args):
        r"""ImportFromEPSG(SpatialReference self, int arg) -> OGRErr"""
        return _osr.SpatialReference_ImportFromEPSG(self, *args)

    def ImportFromEPSGA(self, *args):
        r"""ImportFromEPSGA(SpatialReference self, int arg) -> OGRErr"""
        return _osr.SpatialReference_ImportFromEPSGA(self, *args)

    def ImportFromPCI(self, *args):
        r"""ImportFromPCI(SpatialReference self, char const * proj, char const * units="METRE", double [17] argin=0) -> OGRErr"""
        return _osr.SpatialReference_ImportFromPCI(self, *args)

    def ImportFromUSGS(self, *args):
        r"""ImportFromUSGS(SpatialReference self, long proj_code, long zone=0, double [15] argin=0, long datum_code=0) -> OGRErr"""
        return _osr.SpatialReference_ImportFromUSGS(self, *args)

    def ImportFromXML(self, *args):
        r"""ImportFromXML(SpatialReference self, char const * xmlString) -> OGRErr"""
        return _osr.SpatialReference_ImportFromXML(self, *args)

    def ImportFromERM(self, *args):
        r"""ImportFromERM(SpatialReference self, char const * proj, char const * datum, char const * units) -> OGRErr"""
        return _osr.SpatialReference_ImportFromERM(self, *args)

    def ImportFromMICoordSys(self, *args):
        r"""ImportFromMICoordSys(SpatialReference self, char const * pszCoordSys) -> OGRErr"""
        return _osr.SpatialReference_ImportFromMICoordSys(self, *args)

    def ImportFromOzi(self, *args):
        r"""ImportFromOzi(SpatialReference self, char const *const * papszLines) -> OGRErr"""
        return _osr.SpatialReference_ImportFromOzi(self, *args)

    def ExportToWkt(self, *args):
        r"""ExportToWkt(SpatialReference self, char ** options=None) -> OGRErr"""
        return _osr.SpatialReference_ExportToWkt(self, *args)

    def ExportToPrettyWkt(self, *args):
        r"""ExportToPrettyWkt(SpatialReference self, int simplify=0) -> OGRErr"""
        return _osr.SpatialReference_ExportToPrettyWkt(self, *args)

    def ExportToPROJJSON(self, *args):
        r"""ExportToPROJJSON(SpatialReference self, char ** options=None) -> OGRErr"""
        return _osr.SpatialReference_ExportToPROJJSON(self, *args)

    def ExportToProj4(self, *args):
        r"""ExportToProj4(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_ExportToProj4(self, *args)

    def ExportToPCI(self, *args):
        r"""ExportToPCI(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_ExportToPCI(self, *args)

    def ExportToUSGS(self, *args):
        r"""ExportToUSGS(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_ExportToUSGS(self, *args)

    def ExportToERM(self, *args):
        r"""ExportToERM(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_ExportToERM(self, *args)

    def ExportToXML(self, *args):
        r"""ExportToXML(SpatialReference self, char const * dialect="") -> OGRErr"""
        return _osr.SpatialReference_ExportToXML(self, *args)

    def ExportToMICoordSys(self, *args):
        r"""ExportToMICoordSys(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_ExportToMICoordSys(self, *args)

    def CloneGeogCS(self, *args):
        r"""CloneGeogCS(SpatialReference self) -> SpatialReference"""
        return _osr.SpatialReference_CloneGeogCS(self, *args)

    def Clone(self, *args):
        r"""Clone(SpatialReference self) -> SpatialReference"""
        return _osr.SpatialReference_Clone(self, *args)

    def StripVertical(self, *args):
        r"""StripVertical(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_StripVertical(self, *args)

    def Validate(self, *args):
        r"""Validate(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_Validate(self, *args)

    def MorphToESRI(self, *args):
        r"""MorphToESRI(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_MorphToESRI(self, *args)

    def MorphFromESRI(self, *args):
        r"""MorphFromESRI(SpatialReference self) -> OGRErr"""
        return _osr.SpatialReference_MorphFromESRI(self, *args)

    def ConvertToOtherProjection(self, *args):
        r"""ConvertToOtherProjection(SpatialReference self, char const * other_projection, char ** options=None) -> SpatialReference"""
        return _osr.SpatialReference_ConvertToOtherProjection(self, *args)

    def PromoteTo3D(self, *args):
        r"""PromoteTo3D(SpatialReference self, char const * name=None) -> OGRErr"""
        return _osr.SpatialReference_PromoteTo3D(self, *args)

    def DemoteTo2D(self, *args):
        r"""DemoteTo2D(SpatialReference self, char const * name=None) -> OGRErr"""
        return _osr.SpatialReference_DemoteTo2D(self, *args)


    def __init__(self, *args, **kwargs):
        """__init__(OSRSpatialReferenceShadow self, char const * wkt) -> SpatialReference"""

        _WarnIfUserHasNotSpecifiedIfUsingExceptions()

        try:
            with ExceptionMgr(useExceptions=True):
                this = _osr.new_SpatialReference(*args, **kwargs)
        finally:
            pass
        if hasattr(_osr, "SpatialReference_swiginit"):
    # SWIG 4 way
            _osr.SpatialReference_swiginit(self, this)
        else:
    # SWIG < 4 way
            try:
                self.this.append(this)
            except __builtin__.Exception:
                self.this = this



# Register SpatialReference in _osr:
_osr.SpatialReference_swigregister(SpatialReference)
class CoordinateTransformationOptions(object):
    r"""Proxy of C++ OGRCoordinateTransformationOptions class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""__init__(CoordinateTransformationOptions self) -> CoordinateTransformationOptions"""
        _osr.CoordinateTransformationOptions_swiginit(self, _osr.new_CoordinateTransformationOptions(*args))
    __swig_destroy__ = _osr.delete_CoordinateTransformationOptions

    def SetAreaOfInterest(self, *args):
        r"""SetAreaOfInterest(CoordinateTransformationOptions self, double westLongitudeDeg, double southLatitudeDeg, double eastLongitudeDeg, double northLatitudeDeg) -> bool"""
        return _osr.CoordinateTransformationOptions_SetAreaOfInterest(self, *args)

    def SetOperation(self, *args):
        r"""SetOperation(CoordinateTransformationOptions self, char const * operation, bool inverseCT=False) -> bool"""
        return _osr.CoordinateTransformationOptions_SetOperation(self, *args)

    def SetDesiredAccuracy(self, *args):
        r"""SetDesiredAccuracy(CoordinateTransformationOptions self, double accuracy) -> bool"""
        return _osr.CoordinateTransformationOptions_SetDesiredAccuracy(self, *args)

    def SetBallparkAllowed(self, *args):
        r"""SetBallparkAllowed(CoordinateTransformationOptions self, bool allowBallpark) -> bool"""
        return _osr.CoordinateTransformationOptions_SetBallparkAllowed(self, *args)

    def SetOnlyBest(self, *args):
        r"""SetOnlyBest(CoordinateTransformationOptions self, bool onlyBest) -> bool"""
        return _osr.CoordinateTransformationOptions_SetOnlyBest(self, *args)

# Register CoordinateTransformationOptions in _osr:
_osr.CoordinateTransformationOptions_swigregister(CoordinateTransformationOptions)
class CoordinateTransformation(object):
    r"""Proxy of C++ OSRCoordinateTransformationShadow class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(CoordinateTransformation self, SpatialReference src, SpatialReference dst) -> CoordinateTransformation
        __init__(CoordinateTransformation self, SpatialReference src, SpatialReference dst, CoordinateTransformationOptions options) -> CoordinateTransformation
        """
        _osr.CoordinateTransformation_swiginit(self, _osr.new_CoordinateTransformation(*args))
    __swig_destroy__ = _osr.delete_CoordinateTransformation

    def GetInverse(self, *args):
        r"""GetInverse(CoordinateTransformation self) -> CoordinateTransformation"""
        return _osr.CoordinateTransformation_GetInverse(self, *args)

    def _TransformPoint3Double(self, *args):
        r"""_TransformPoint3Double(CoordinateTransformation self, double [3] inout)"""
        return _osr.CoordinateTransformation__TransformPoint3Double(self, *args)

    def _TransformPoint4Double(self, *args):
        r"""_TransformPoint4Double(CoordinateTransformation self, double [4] inout)"""
        return _osr.CoordinateTransformation__TransformPoint4Double(self, *args)


    def TransformPoint(self, *args):
        """
        TransformPoint(CoordinateTransformation self, double [3] inout)
        TransformPoint(CoordinateTransformation self, double [4] inout)
        TransformPoint(CoordinateTransformation self, double x, double y, double z=0.0)
        TransformPoint(CoordinateTransformation self, double x, double y, double z, double t)
        """

        import collections.abc
        if len(args) == 1 and isinstance(args[0], collections.abc.Sequence):
            len_args = len(args[0])
            if len_args == 3:
                return self._TransformPoint3Double(args[0])
            elif len_args == 4:
                return self._TransformPoint4Double(args[0])

        return _osr.CoordinateTransformation_TransformPoint(self, *args)



    def TransformPointWithErrorCode(self, *args):
        r"""TransformPointWithErrorCode(CoordinateTransformation self, double x, double y, double z, double t)"""
        return _osr.CoordinateTransformation_TransformPointWithErrorCode(self, *args)

    def TransformPoints(self, *args):
        r"""TransformPoints(CoordinateTransformation self, int nCount)"""
        return _osr.CoordinateTransformation_TransformPoints(self, *args)

    def TransformBounds(self, *args):
        r"""TransformBounds(CoordinateTransformation self, double minx, double miny, double maxx, double maxy, int densify_pts)"""
        return _osr.CoordinateTransformation_TransformBounds(self, *args)

# Register CoordinateTransformation in _osr:
_osr.CoordinateTransformation_swigregister(CoordinateTransformation)

def CreateCoordinateTransformation(*args):
    r"""CreateCoordinateTransformation(SpatialReference src, SpatialReference dst, CoordinateTransformationOptions options=None) -> CoordinateTransformation"""
    return _osr.CreateCoordinateTransformation(*args)
OSR_CRS_TYPE_GEOGRAPHIC_2D = _osr.OSR_CRS_TYPE_GEOGRAPHIC_2D

OSR_CRS_TYPE_GEOGRAPHIC_3D = _osr.OSR_CRS_TYPE_GEOGRAPHIC_3D

OSR_CRS_TYPE_GEOCENTRIC = _osr.OSR_CRS_TYPE_GEOCENTRIC

OSR_CRS_TYPE_PROJECTED = _osr.OSR_CRS_TYPE_PROJECTED

OSR_CRS_TYPE_VERTICAL = _osr.OSR_CRS_TYPE_VERTICAL

OSR_CRS_TYPE_COMPOUND = _osr.OSR_CRS_TYPE_COMPOUND

OSR_CRS_TYPE_OTHER = _osr.OSR_CRS_TYPE_OTHER

class CRSInfo(object):
    r"""Proxy of C++ OSRCRSInfo class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    auth_name = property(_osr.CRSInfo_auth_name_get, doc=r"""auth_name : p.char""")
    code = property(_osr.CRSInfo_code_get, doc=r"""code : p.char""")
    name = property(_osr.CRSInfo_name_get, doc=r"""name : p.char""")
    type = property(_osr.CRSInfo_type_get, doc=r"""type : OSRCRSType""")
    deprecated = property(_osr.CRSInfo_deprecated_get, doc=r"""deprecated : bool""")
    bbox_valid = property(_osr.CRSInfo_bbox_valid_get, doc=r"""bbox_valid : bool""")
    west_lon_degree = property(_osr.CRSInfo_west_lon_degree_get, doc=r"""west_lon_degree : double""")
    south_lat_degree = property(_osr.CRSInfo_south_lat_degree_get, doc=r"""south_lat_degree : double""")
    east_lon_degree = property(_osr.CRSInfo_east_lon_degree_get, doc=r"""east_lon_degree : double""")
    north_lat_degree = property(_osr.CRSInfo_north_lat_degree_get, doc=r"""north_lat_degree : double""")
    area_name = property(_osr.CRSInfo_area_name_get, doc=r"""area_name : p.char""")
    projection_method = property(_osr.CRSInfo_projection_method_get, doc=r"""projection_method : p.char""")

    def __init__(self, *args):
        r"""__init__(CRSInfo self, char const * auth_name, char const * code, char const * name, OSRCRSType type, bool deprecated, bool bbox_valid, double west_lon_degree, double south_lat_degree, double east_lon_degree, double north_lat_degree, char const * area_name, char const * projection_method) -> CRSInfo"""
        _osr.CRSInfo_swiginit(self, _osr.new_CRSInfo(*args))
    __swig_destroy__ = _osr.delete_CRSInfo

# Register CRSInfo in _osr:
_osr.CRSInfo_swigregister(CRSInfo)

def OSRCRSInfo_auth_name_get(*args):
    r"""OSRCRSInfo_auth_name_get(CRSInfo crsInfo) -> char const *"""
    return _osr.OSRCRSInfo_auth_name_get(*args)

def OSRCRSInfo_code_get(*args):
    r"""OSRCRSInfo_code_get(CRSInfo crsInfo) -> char const *"""
    return _osr.OSRCRSInfo_code_get(*args)

def OSRCRSInfo_name_get(*args):
    r"""OSRCRSInfo_name_get(CRSInfo crsInfo) -> char const *"""
    return _osr.OSRCRSInfo_name_get(*args)

def OSRCRSInfo_type_get(*args):
    r"""OSRCRSInfo_type_get(CRSInfo crsInfo) -> OSRCRSType"""
    return _osr.OSRCRSInfo_type_get(*args)

def OSRCRSInfo_deprecated_get(*args):
    r"""OSRCRSInfo_deprecated_get(CRSInfo crsInfo) -> bool"""
    return _osr.OSRCRSInfo_deprecated_get(*args)

def OSRCRSInfo_bbox_valid_get(*args):
    r"""OSRCRSInfo_bbox_valid_get(CRSInfo crsInfo) -> bool"""
    return _osr.OSRCRSInfo_bbox_valid_get(*args)

def OSRCRSInfo_west_lon_degree_get(*args):
    r"""OSRCRSInfo_west_lon_degree_get(CRSInfo crsInfo) -> double"""
    return _osr.OSRCRSInfo_west_lon_degree_get(*args)

def OSRCRSInfo_south_lat_degree_get(*args):
    r"""OSRCRSInfo_south_lat_degree_get(CRSInfo crsInfo) -> double"""
    return _osr.OSRCRSInfo_south_lat_degree_get(*args)

def OSRCRSInfo_east_lon_degree_get(*args):
    r"""OSRCRSInfo_east_lon_degree_get(CRSInfo crsInfo) -> double"""
    return _osr.OSRCRSInfo_east_lon_degree_get(*args)

def OSRCRSInfo_north_lat_degree_get(*args):
    r"""OSRCRSInfo_north_lat_degree_get(CRSInfo crsInfo) -> double"""
    return _osr.OSRCRSInfo_north_lat_degree_get(*args)

def OSRCRSInfo_area_name_get(*args):
    r"""OSRCRSInfo_area_name_get(CRSInfo crsInfo) -> char const *"""
    return _osr.OSRCRSInfo_area_name_get(*args)

def OSRCRSInfo_projection_method_get(*args):
    r"""OSRCRSInfo_projection_method_get(CRSInfo crsInfo) -> char const *"""
    return _osr.OSRCRSInfo_projection_method_get(*args)

def GetCRSInfoListFromDatabase(*args):
    r"""GetCRSInfoListFromDatabase(char const * authName)"""
    return _osr.GetCRSInfoListFromDatabase(*args)

def SetPROJSearchPath(*args):
    r"""SetPROJSearchPath(char const * utf8_path)"""
    return _osr.SetPROJSearchPath(*args)

def SetPROJSearchPaths(*args):
    r"""SetPROJSearchPaths(char ** paths)"""
    return _osr.SetPROJSearchPaths(*args)

def GetPROJSearchPaths(*args):
    r"""GetPROJSearchPaths() -> char **"""
    return _osr.GetPROJSearchPaths(*args)

def GetPROJVersionMajor(*args):
    r"""GetPROJVersionMajor() -> int"""
    return _osr.GetPROJVersionMajor(*args)

def GetPROJVersionMinor(*args):
    r"""GetPROJVersionMinor() -> int"""
    return _osr.GetPROJVersionMinor(*args)

def GetPROJVersionMicro(*args):
    r"""GetPROJVersionMicro() -> int"""
    return _osr.GetPROJVersionMicro(*args)

def GetPROJEnableNetwork(*args):
    r"""GetPROJEnableNetwork() -> bool"""
    return _osr.GetPROJEnableNetwork(*args)

def SetPROJEnableNetwork(*args):
    r"""SetPROJEnableNetwork(bool enabled)"""
    return _osr.SetPROJEnableNetwork(*args)

def SetPROJAuxDbPath(*args):
    r"""SetPROJAuxDbPath(char const * utf8_path)"""
    return _osr.SetPROJAuxDbPath(*args)

def SetPROJAuxDbPaths(*args):
    r"""SetPROJAuxDbPaths(char ** paths)"""
    return _osr.SetPROJAuxDbPaths(*args)

def GetPROJAuxDbPaths(*args):
    r"""GetPROJAuxDbPaths() -> char **"""
    return _osr.GetPROJAuxDbPaths(*args)

