This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sedona.git


The following commit(s) were added to refs/heads/master by this push:
     new 7d62d0860e [GH-2136] Add redirection and warnings for old Python 
public functions (#2146)
7d62d0860e is described below

commit 7d62d0860e174282b916a530e4d432f963585024
Author: Jia Yu <ji...@apache.org>
AuthorDate: Wed Jul 23 17:50:49 2025 -0700

    [GH-2136] Add redirection and warnings for old Python public functions 
(#2146)
    
    * Add redirection and warnings for old Python public functions
    
    * Add tests for `from sedona.spark import *`
    
    * Add back inspect
---
 python/sedona/__init__.py                          |   6 ++
 .../geoarrow => core/SpatialRDD}/__init__.py       |   7 +-
 python/sedona/{ => core}/__init__.py               |   4 -
 .../getis_ord => core/enums}/__init__.py           |   7 +-
 python/sedona/{ => core/formatMapper}/__init__.py  |   4 -
 .../formatMapper/geo_json_reader.py}               |   7 +-
 .../formatMapper/shapefileParser}/__init__.py      |   4 -
 .../shapefileParser/shape_file_reader.py}          |   9 +-
 python/sedona/{ => core/geom}/__init__.py          |   4 -
 .../weighting/__init__.py => core/geom/circle.py}  |   7 +-
 .../__init__.py => core/geom/envelope.py}          |   7 +-
 .../__init__.py => core/geom/geography.py}         |   7 +-
 python/sedona/{ => core/jvm}/__init__.py           |   4 -
 .../getis_ord/__init__.py => core/jvm/config.py}   |   7 +-
 .../geoarrow => core/spatialOperator}/__init__.py  |  12 ++-
 python/sedona/spark/__init__.py                    |  36 ++++---
 python/sedona/spark/geoarrow/__init__.py           |   4 +-
 python/sedona/spark/sql/__init__.py                |   8 +-
 python/sedona/{ => sql}/__init__.py                |   4 -
 .../getis_ord/__init__.py => sql/st_aggregates.py} |   8 +-
 .../__init__.py => sql/st_constructors.py}         |   8 +-
 .../getis_ord/__init__.py => sql/st_functions.py}  |   8 +-
 .../getis_ord/__init__.py => sql/st_predicates.py} |   8 +-
 .../{stats/weighting/__init__.py => sql/types.py}  |   7 +-
 .../weighting/__init__.py => stac/client.py}       |   7 +-
 .../__init__.py => stac/collection_client.py}      |   7 +-
 .../{getis_ord/__init__.py => getis_ord.py}        |   7 +-
 .../stats/hotspot_detection/getis_ord/__init__.py  |   2 +
 python/sedona/stats/weighting/__init__.py          |  10 +-
 .../weighting/__init__.py => utils/adapter.py}     |   7 +-
 .../utils/{geoarrow/__init__.py => geoarrow.py}    |   7 +-
 python/sedona/utils/geoarrow/__init__.py           |   6 +-
 .../__init__.py => utils/spatial_rdd_parser.py}    |   7 +-
 python/tests/test_path_compatibility.py            | 120 +++++++++++++++++++++
 python/tests/test_path_compatibility_all.py        |  88 +++++++++++++++
 35 files changed, 345 insertions(+), 110 deletions(-)

diff --git a/python/sedona/__init__.py b/python/sedona/__init__.py
index 5e359b3b9a..0daf946199 100644
--- a/python/sedona/__init__.py
+++ b/python/sedona/__init__.py
@@ -14,7 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+import warnings
 
+warnings.warn(
+    "The 'sedona' package structure has been reorganized. Please update your 
imports to use 'sedona.spark' prefix instead.",
+    DeprecationWarning,
+    stacklevel=2,
+)
 from .version import version
 
 __all__ = ["version"]
diff --git a/python/sedona/utils/geoarrow/__init__.py 
b/python/sedona/core/SpatialRDD/__init__.py
similarity index 76%
copy from python/sedona/utils/geoarrow/__init__.py
copy to python/sedona/core/SpatialRDD/__init__.py
index 11839f7271..f17d300156 100644
--- a/python/sedona/utils/geoarrow/__init__.py
+++ b/python/sedona/core/SpatialRDD/__init__.py
@@ -16,13 +16,12 @@
 # under the License.
 
 import warnings
-
-from sedona.spark.geoarrow.geoarrow import create_spatial_dataframe
+from sedona.spark.core.SpatialRDD import CircleRDD, PolygonRDD, PointRDD, 
RectangleRDD
 
 warnings.warn(
-    "The 'sedona.utils.geoarrow' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.geoarrow' instead.",
+    "Importing from 'sedona.core.SpatialRDD' is deprecated. Please use 
'sedona.spark.core.SpatialRDD' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
 
-__all__ = ["create_spatial_dataframe"]
+__all__ = ["CircleRDD", "PolygonRDD", "PointRDD", "RectangleRDD"]
diff --git a/python/sedona/__init__.py b/python/sedona/core/__init__.py
similarity index 93%
copy from python/sedona/__init__.py
copy to python/sedona/core/__init__.py
index 5e359b3b9a..13a83393a9 100644
--- a/python/sedona/__init__.py
+++ b/python/sedona/core/__init__.py
@@ -14,7 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-from .version import version
-
-__all__ = ["version"]
diff --git a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py 
b/python/sedona/core/enums/__init__.py
similarity index 78%
copy from python/sedona/stats/hotspot_detection/getis_ord/__init__.py
copy to python/sedona/core/enums/__init__.py
index 537861064f..b6f0fe99b2 100644
--- a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
+++ b/python/sedona/core/enums/__init__.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.hotspot_detection.getis_ord import g_local
-
 import warnings
+from sedona.spark.core.enums import FileDataSplitter, GridType, IndexType
 
 warnings.warn(
-    "The 'sedona.stats.hotspot_detection.getis_ord' module is deprecated and 
will be removed in future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.core.enums' is deprecated. Please use 
'sedona.spark.core.enums' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["FileDataSplitter", "GridType", "IndexType"]
diff --git a/python/sedona/__init__.py 
b/python/sedona/core/formatMapper/__init__.py
similarity index 93%
copy from python/sedona/__init__.py
copy to python/sedona/core/formatMapper/__init__.py
index 5e359b3b9a..13a83393a9 100644
--- a/python/sedona/__init__.py
+++ b/python/sedona/core/formatMapper/__init__.py
@@ -14,7 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-from .version import version
-
-__all__ = ["version"]
diff --git a/python/sedona/utils/geoarrow/__init__.py 
b/python/sedona/core/formatMapper/geo_json_reader.py
similarity index 77%
copy from python/sedona/utils/geoarrow/__init__.py
copy to python/sedona/core/formatMapper/geo_json_reader.py
index 11839f7271..d8983b5ffc 100644
--- a/python/sedona/utils/geoarrow/__init__.py
+++ b/python/sedona/core/formatMapper/geo_json_reader.py
@@ -16,13 +16,12 @@
 # under the License.
 
 import warnings
-
-from sedona.spark.geoarrow.geoarrow import create_spatial_dataframe
+from sedona.spark.core.formatMapper.geo_json_reader import GeoJsonReader
 
 warnings.warn(
-    "The 'sedona.utils.geoarrow' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.geoarrow' instead.",
+    "Importing from 'sedona.core.formatMapper.geo_json_reader' is deprecated. 
Please use 'sedona.spark.core.formatMapper.geo_json_reader' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
 
-__all__ = ["create_spatial_dataframe"]
+__all__ = ["GeoJsonReader"]
diff --git a/python/sedona/__init__.py 
b/python/sedona/core/formatMapper/shapefileParser/__init__.py
similarity index 93%
copy from python/sedona/__init__.py
copy to python/sedona/core/formatMapper/shapefileParser/__init__.py
index 5e359b3b9a..13a83393a9 100644
--- a/python/sedona/__init__.py
+++ b/python/sedona/core/formatMapper/shapefileParser/__init__.py
@@ -14,7 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-from .version import version
-
-__all__ = ["version"]
diff --git a/python/sedona/utils/geoarrow/__init__.py 
b/python/sedona/core/formatMapper/shapefileParser/shape_file_reader.py
similarity index 73%
copy from python/sedona/utils/geoarrow/__init__.py
copy to python/sedona/core/formatMapper/shapefileParser/shape_file_reader.py
index 11839f7271..7c302cf3e8 100644
--- a/python/sedona/utils/geoarrow/__init__.py
+++ b/python/sedona/core/formatMapper/shapefileParser/shape_file_reader.py
@@ -16,13 +16,14 @@
 # under the License.
 
 import warnings
-
-from sedona.spark.geoarrow.geoarrow import create_spatial_dataframe
+from sedona.spark.core.formatMapper.shapefileParser.shape_file_reader import (
+    ShapefileReader,
+)
 
 warnings.warn(
-    "The 'sedona.utils.geoarrow' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.geoarrow' instead.",
+    "Importing from 
'sedona.core.formatMapper.shapefileParser.shape_file_reader' is deprecated. 
Please use 'sedona.spark.core.formatMapper.shapefileParser.shape_file_reader' 
instead.",
     DeprecationWarning,
     stacklevel=2,
 )
 
-__all__ = ["create_spatial_dataframe"]
+__all__ = ["ShapefileReader"]
diff --git a/python/sedona/__init__.py b/python/sedona/core/geom/__init__.py
similarity index 93%
copy from python/sedona/__init__.py
copy to python/sedona/core/geom/__init__.py
index 5e359b3b9a..13a83393a9 100644
--- a/python/sedona/__init__.py
+++ b/python/sedona/core/geom/__init__.py
@@ -14,7 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-from .version import version
-
-__all__ = ["version"]
diff --git a/python/sedona/stats/weighting/__init__.py 
b/python/sedona/core/geom/circle.py
similarity index 80%
copy from python/sedona/stats/weighting/__init__.py
copy to python/sedona/core/geom/circle.py
index abbb2b8db0..789da88a6f 100644
--- a/python/sedona/stats/weighting/__init__.py
+++ b/python/sedona/core/geom/circle.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.weighting import add_binary_distance_band_column
-
 import warnings
+from sedona.spark.core.geom.circle import Circle
 
 warnings.warn(
-    "The 'sedona.stats.weighting' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.core.geom.circle' is deprecated. Please use 
'sedona.spark.core.geom.circle' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["Circle"]
diff --git a/python/sedona/stats/weighting/__init__.py 
b/python/sedona/core/geom/envelope.py
similarity index 80%
copy from python/sedona/stats/weighting/__init__.py
copy to python/sedona/core/geom/envelope.py
index abbb2b8db0..1de52abe99 100644
--- a/python/sedona/stats/weighting/__init__.py
+++ b/python/sedona/core/geom/envelope.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.weighting import add_binary_distance_band_column
-
 import warnings
+from sedona.spark.core.geom.envelope import Envelope
 
 warnings.warn(
-    "The 'sedona.stats.weighting' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.core.geom.envelope' is deprecated. Please use 
'sedona.spark.core.geom.envelope' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["Envelope"]
diff --git a/python/sedona/stats/weighting/__init__.py 
b/python/sedona/core/geom/geography.py
similarity index 80%
copy from python/sedona/stats/weighting/__init__.py
copy to python/sedona/core/geom/geography.py
index abbb2b8db0..2e323cfd0d 100644
--- a/python/sedona/stats/weighting/__init__.py
+++ b/python/sedona/core/geom/geography.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.weighting import add_binary_distance_band_column
-
 import warnings
+from sedona.spark.core.geom.geography import Geography
 
 warnings.warn(
-    "The 'sedona.stats.weighting' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.core.geom.geography' is deprecated. Please use 
'sedona.spark.core.geom.geography' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["Geography"]
diff --git a/python/sedona/__init__.py b/python/sedona/core/jvm/__init__.py
similarity index 93%
copy from python/sedona/__init__.py
copy to python/sedona/core/jvm/__init__.py
index 5e359b3b9a..13a83393a9 100644
--- a/python/sedona/__init__.py
+++ b/python/sedona/core/jvm/__init__.py
@@ -14,7 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-from .version import version
-
-__all__ = ["version"]
diff --git a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py 
b/python/sedona/core/jvm/config.py
similarity index 79%
copy from python/sedona/stats/hotspot_detection/getis_ord/__init__.py
copy to python/sedona/core/jvm/config.py
index 537861064f..52260a8c76 100644
--- a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
+++ b/python/sedona/core/jvm/config.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.hotspot_detection.getis_ord import g_local
-
 import warnings
+from sedona.spark.core.jvm.config import is_greater_or_equal_version
 
 warnings.warn(
-    "The 'sedona.stats.hotspot_detection.getis_ord' module is deprecated and 
will be removed in future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.core.jvm.config' is deprecated. Please use 
'sedona.spark.core.jvm.config' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["is_greater_or_equal_version"]
diff --git a/python/sedona/utils/geoarrow/__init__.py 
b/python/sedona/core/spatialOperator/__init__.py
similarity index 74%
copy from python/sedona/utils/geoarrow/__init__.py
copy to python/sedona/core/spatialOperator/__init__.py
index 11839f7271..5b26056b71 100644
--- a/python/sedona/utils/geoarrow/__init__.py
+++ b/python/sedona/core/spatialOperator/__init__.py
@@ -16,13 +16,17 @@
 # under the License.
 
 import warnings
-
-from sedona.spark.geoarrow.geoarrow import create_spatial_dataframe
+from sedona.spark.core.spatialOperator import (
+    JoinQuery,
+    JoinQueryRaw,
+    KNNQuery,
+    RangeQuery,
+)
 
 warnings.warn(
-    "The 'sedona.utils.geoarrow' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.geoarrow' instead.",
+    "Importing from 'sedona.core.spatialOperator' is deprecated. Please use 
'sedona.spark.core.spatialOperator' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
 
-__all__ = ["create_spatial_dataframe"]
+__all__ = ["JoinQuery", "JoinQueryRaw", "KNNQuery", "RangeQuery"]
diff --git a/python/sedona/spark/__init__.py b/python/sedona/spark/__init__.py
index 51f01c5588..eeb7fadc50 100644
--- a/python/sedona/spark/__init__.py
+++ b/python/sedona/spark/__init__.py
@@ -14,8 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-from sedona.spark.core import Envelope
-from sedona.spark.sql.functions import sedona_vectorized_udf
 
 try:
     import pyspark
@@ -24,9 +22,21 @@ except ImportError:
         "Apache Sedona requires PySpark. Please install PySpark before using 
Sedona spark."
     )
 
+from sedona.spark.SedonaContext import SedonaContext
+from sedona.spark.core.SpatialRDD import (
+    CircleRDD,
+    LineStringRDD,
+    PointRDD,
+    PolygonRDD,
+    RectangleRDD,
+    SpatialRDD,
+)
 from sedona.spark.core.enums import FileDataSplitter, GridType, IndexType
 from sedona.spark.core.formatMapper import GeoJsonReader, WkbReader, WktReader
 from sedona.spark.core.formatMapper.shapefileParser import ShapefileReader
+from sedona.spark.core.geom.circle import Circle
+from sedona.spark.core.geom.envelope import Envelope
+from sedona.spark.core.geom.geography import Geography
 from sedona.spark.core.spatialOperator import (
     JoinQuery,
     JoinQueryRaw,
@@ -34,25 +44,27 @@ from sedona.spark.core.spatialOperator import (
     RangeQuery,
     RangeQueryRaw,
 )
-from sedona.spark.core.SpatialRDD import (
-    CircleRDD,
-    LineStringRDD,
-    PointRDD,
-    PolygonRDD,
-    RectangleRDD,
-    SpatialRDD,
-)
+from sedona.spark.geoarrow import create_spatial_dataframe, dataframe_to_arrow
+from sedona.spark.geoarrow.geoarrow import dataframe_to_arrow
 from sedona.spark.maps.SedonaKepler import SedonaKepler
 from sedona.spark.maps.SedonaPyDeck import SedonaPyDeck
 from sedona.spark.raster_utils.SedonaUtils import SedonaUtils
 from sedona.spark.register import SedonaRegistrator
-from sedona.spark.SedonaContext import SedonaContext
+from sedona.spark.sql.functions import sedona_vectorized_udf
 from sedona.spark.sql.st_aggregates import *
 from sedona.spark.sql.st_constructors import *
 from sedona.spark.sql.st_functions import *
 from sedona.spark.sql.st_predicates import *
 from sedona.spark.sql.types import GeometryType, GeographyType, RasterType
+from sedona.spark.stac import Client
+from sedona.spark.stac.collection_client import CollectionClient
+from sedona.spark.stats.clustering.dbscan import dbscan
+from sedona.spark.stats.hotspot_detection.getis_ord import g_local
+from sedona.spark.stats.weighting import (
+    add_distance_band_column,
+    add_binary_distance_band_column,
+)
 from sedona.spark.utils import KryoSerializer, SedonaKryoRegistrator
 from sedona.spark.utils.adapter import Adapter
+from sedona.spark.utils.spatial_rdd_parser import GeoData
 from sedona.spark.utils.structured_adapter import StructuredAdapter
-from sedona.spark.geoarrow.geoarrow import dataframe_to_arrow
diff --git a/python/sedona/spark/geoarrow/__init__.py 
b/python/sedona/spark/geoarrow/__init__.py
index b4c71c9886..890b6b4431 100644
--- a/python/sedona/spark/geoarrow/__init__.py
+++ b/python/sedona/spark/geoarrow/__init__.py
@@ -15,6 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.geoarrow.geoarrow import create_spatial_dataframe
+from sedona.spark.geoarrow.geoarrow import create_spatial_dataframe, 
dataframe_to_arrow
 
-__all__ = ["create_spatial_dataframe"]
+__all__ = ["create_spatial_dataframe", "dataframe_to_arrow"]
diff --git a/python/sedona/spark/sql/__init__.py 
b/python/sedona/spark/sql/__init__.py
index f60bf6993f..f193b1ce5e 100644
--- a/python/sedona/spark/sql/__init__.py
+++ b/python/sedona/spark/sql/__init__.py
@@ -15,20 +15,22 @@
 # specific language governing permissions and limitations
 # under the License.
 
+import inspect
+import sys
+
 # These allow use to access the __all__
 import sedona.spark.sql.st_aggregates as st_aggregates
 import sedona.spark.sql.st_constructors as st_constructors
 import sedona.spark.sql.st_functions as st_functions
 import sedona.spark.sql.st_predicates as st_predicates
+from sedona.spark.sql.functions import sedona_vectorized_udf
 
 # These bring the contents of the modules into this module
 from sedona.spark.sql.st_aggregates import *
 from sedona.spark.sql.st_constructors import *
 from sedona.spark.sql.st_functions import *
 from sedona.spark.sql.st_predicates import *
-import inspect
-import sys
-
+from sedona.spark.sql.types import GeometryType, GeographyType, RasterType
 
 __all__ = (
     [
diff --git a/python/sedona/__init__.py b/python/sedona/sql/__init__.py
similarity index 93%
copy from python/sedona/__init__.py
copy to python/sedona/sql/__init__.py
index 5e359b3b9a..13a83393a9 100644
--- a/python/sedona/__init__.py
+++ b/python/sedona/sql/__init__.py
@@ -14,7 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-from .version import version
-
-__all__ = ["version"]
diff --git a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py 
b/python/sedona/sql/st_aggregates.py
similarity index 78%
copy from python/sedona/stats/hotspot_detection/getis_ord/__init__.py
copy to python/sedona/sql/st_aggregates.py
index 537861064f..51b6ad1f12 100644
--- a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
+++ b/python/sedona/sql/st_aggregates.py
@@ -15,12 +15,14 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.hotspot_detection.getis_ord import g_local
-
 import warnings
+from sedona.spark.sql import st_aggregates as sta
+from sedona.spark.sql.st_aggregates import *
 
 warnings.warn(
-    "The 'sedona.stats.hotspot_detection.getis_ord' module is deprecated and 
will be removed in future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.sql.st_aggregates' is deprecated. Please use 
'sedona.spark.sql.st_aggregates' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = sta.__all__
diff --git a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py 
b/python/sedona/sql/st_constructors.py
similarity index 78%
copy from python/sedona/stats/hotspot_detection/getis_ord/__init__.py
copy to python/sedona/sql/st_constructors.py
index 537861064f..8e1e62e30a 100644
--- a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
+++ b/python/sedona/sql/st_constructors.py
@@ -15,12 +15,14 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.hotspot_detection.getis_ord import g_local
-
 import warnings
+from sedona.spark.sql import st_constructors as stc
+from sedona.spark.sql.st_constructors import *
 
 warnings.warn(
-    "The 'sedona.stats.hotspot_detection.getis_ord' module is deprecated and 
will be removed in future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.sql.st_constructors' is deprecated. Please use 
'sedona.spark.sql.st_constructors' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = stc.__all__
diff --git a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py 
b/python/sedona/sql/st_functions.py
similarity index 78%
copy from python/sedona/stats/hotspot_detection/getis_ord/__init__.py
copy to python/sedona/sql/st_functions.py
index 537861064f..b9b0a9f397 100644
--- a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
+++ b/python/sedona/sql/st_functions.py
@@ -15,12 +15,14 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.hotspot_detection.getis_ord import g_local
-
 import warnings
+from sedona.spark.sql import st_functions as stf
+from sedona.spark.sql.st_functions import *
 
 warnings.warn(
-    "The 'sedona.stats.hotspot_detection.getis_ord' module is deprecated and 
will be removed in future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.sql.st_functions' is deprecated. Please use 
'sedona.spark.sql.st_functions' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = stf.__all__
diff --git a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py 
b/python/sedona/sql/st_predicates.py
similarity index 78%
copy from python/sedona/stats/hotspot_detection/getis_ord/__init__.py
copy to python/sedona/sql/st_predicates.py
index 537861064f..f9d1e8e1fa 100644
--- a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
+++ b/python/sedona/sql/st_predicates.py
@@ -15,12 +15,14 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.hotspot_detection.getis_ord import g_local
-
 import warnings
+from sedona.spark.sql import st_predicates as stp
+from sedona.spark.sql.st_predicates import *
 
 warnings.warn(
-    "The 'sedona.stats.hotspot_detection.getis_ord' module is deprecated and 
will be removed in future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.sql.st_predicates' is deprecated. Please use 
'sedona.spark.sql.st_predicates' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = stp.__all__
diff --git a/python/sedona/stats/weighting/__init__.py 
b/python/sedona/sql/types.py
similarity index 80%
copy from python/sedona/stats/weighting/__init__.py
copy to python/sedona/sql/types.py
index abbb2b8db0..4f78d765c8 100644
--- a/python/sedona/stats/weighting/__init__.py
+++ b/python/sedona/sql/types.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.weighting import add_binary_distance_band_column
-
 import warnings
+from sedona.spark.sql.types import GeographyType, GeometryType
 
 warnings.warn(
-    "The 'sedona.stats.weighting' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.sql.types' is deprecated. Please use 
'sedona.spark.sql.types' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["GeographyType", "GeometryType"]
diff --git a/python/sedona/stats/weighting/__init__.py 
b/python/sedona/stac/client.py
similarity index 80%
copy from python/sedona/stats/weighting/__init__.py
copy to python/sedona/stac/client.py
index abbb2b8db0..9214ee2e7d 100644
--- a/python/sedona/stats/weighting/__init__.py
+++ b/python/sedona/stac/client.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.weighting import add_binary_distance_band_column
-
 import warnings
+from sedona.spark.stac.client import Client
 
 warnings.warn(
-    "The 'sedona.stats.weighting' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.stac.client' is deprecated. Please use 
'sedona.spark.stac.client' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["Client"]
diff --git a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py 
b/python/sedona/stac/collection_client.py
similarity index 79%
copy from python/sedona/stats/hotspot_detection/getis_ord/__init__.py
copy to python/sedona/stac/collection_client.py
index 537861064f..97ddade1d4 100644
--- a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
+++ b/python/sedona/stac/collection_client.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.hotspot_detection.getis_ord import g_local
-
 import warnings
+from sedona.spark.stac.collection_client import CollectionClient
 
 warnings.warn(
-    "The 'sedona.stats.hotspot_detection.getis_ord' module is deprecated and 
will be removed in future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.stac.collection_client' is deprecated. Please use 
'sedona.spark.stac.collection_client' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["CollectionClient"]
diff --git a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py 
b/python/sedona/stats/hotspot_detection/getis_ord.py
similarity index 84%
copy from python/sedona/stats/hotspot_detection/getis_ord/__init__.py
copy to python/sedona/stats/hotspot_detection/getis_ord.py
index 537861064f..f1559b1736 100644
--- a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
+++ b/python/sedona/stats/hotspot_detection/getis_ord.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.hotspot_detection.getis_ord import g_local
-
 import warnings
+from sedona.spark.stats.hotspot_detection.getis_ord import g_local
 
 warnings.warn(
-    "The 'sedona.stats.hotspot_detection.getis_ord' module is deprecated and 
will be removed in future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.stats.hotspot_detection.getis_ord' is deprecated. 
Please use 'sedona.spark.stats.hotspot_detection.getis_ord' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["g_local"]
diff --git a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py 
b/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
index 537861064f..a1b3c16a1a 100644
--- a/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
+++ b/python/sedona/stats/hotspot_detection/getis_ord/__init__.py
@@ -24,3 +24,5 @@ warnings.warn(
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["g_local"]
diff --git a/python/sedona/stats/weighting/__init__.py 
b/python/sedona/stats/weighting/__init__.py
index abbb2b8db0..6b43d6d6cc 100644
--- a/python/sedona/stats/weighting/__init__.py
+++ b/python/sedona/stats/weighting/__init__.py
@@ -15,7 +15,10 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.weighting import add_binary_distance_band_column
+from sedona.spark.stats.weighting import (
+    add_distance_band_column,
+    add_binary_distance_band_column,
+)
 
 import warnings
 
@@ -24,3 +27,8 @@ warnings.warn(
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = [
+    "add_distance_band_column",
+    "add_binary_distance_band_column",
+]
diff --git a/python/sedona/stats/weighting/__init__.py 
b/python/sedona/utils/adapter.py
similarity index 80%
copy from python/sedona/stats/weighting/__init__.py
copy to python/sedona/utils/adapter.py
index abbb2b8db0..5671a6b6d7 100644
--- a/python/sedona/stats/weighting/__init__.py
+++ b/python/sedona/utils/adapter.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.weighting import add_binary_distance_band_column
-
 import warnings
+from sedona.spark.utils.adapter import Adapter
 
 warnings.warn(
-    "The 'sedona.stats.weighting' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.utils.adapter' is deprecated. Please use 
'sedona.spark.utils.adapter' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["Adapter"]
diff --git a/python/sedona/utils/geoarrow/__init__.py 
b/python/sedona/utils/geoarrow.py
similarity index 75%
copy from python/sedona/utils/geoarrow/__init__.py
copy to python/sedona/utils/geoarrow.py
index 11839f7271..bbcb5aa608 100644
--- a/python/sedona/utils/geoarrow/__init__.py
+++ b/python/sedona/utils/geoarrow.py
@@ -16,13 +16,12 @@
 # under the License.
 
 import warnings
-
-from sedona.spark.geoarrow.geoarrow import create_spatial_dataframe
+from sedona.spark.geoarrow import create_spatial_dataframe, dataframe_to_arrow
 
 warnings.warn(
-    "The 'sedona.utils.geoarrow' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.geoarrow' instead.",
+    "The 'sedona.geoarrow' module is deprecated and will be removed in future 
versions. Please use 'sedona.spark.geoarrow' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
 
-__all__ = ["create_spatial_dataframe"]
+__all__ = ["create_spatial_dataframe", "dataframe_to_arrow"]
diff --git a/python/sedona/utils/geoarrow/__init__.py 
b/python/sedona/utils/geoarrow/__init__.py
index 11839f7271..07b2bb12f1 100644
--- a/python/sedona/utils/geoarrow/__init__.py
+++ b/python/sedona/utils/geoarrow/__init__.py
@@ -17,12 +17,12 @@
 
 import warnings
 
-from sedona.spark.geoarrow.geoarrow import create_spatial_dataframe
+from sedona.spark.geoarrow.geoarrow import create_spatial_dataframe, 
dataframe_to_arrow
 
 warnings.warn(
-    "The 'sedona.utils.geoarrow' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.geoarrow' instead.",
+    "The 'sedona.geoarrow' module is deprecated and will be removed in future 
versions. Please use 'sedona.spark.geoarrow' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
 
-__all__ = ["create_spatial_dataframe"]
+__all__ = ["create_spatial_dataframe", "dataframe_to_arrow"]
diff --git a/python/sedona/stats/weighting/__init__.py 
b/python/sedona/utils/spatial_rdd_parser.py
similarity index 80%
copy from python/sedona/stats/weighting/__init__.py
copy to python/sedona/utils/spatial_rdd_parser.py
index abbb2b8db0..9e3b75c85f 100644
--- a/python/sedona/stats/weighting/__init__.py
+++ b/python/sedona/utils/spatial_rdd_parser.py
@@ -15,12 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from sedona.spark.stats.weighting import add_binary_distance_band_column
-
 import warnings
+from sedona.spark.utils.spatial_rdd_parser import GeoData
 
 warnings.warn(
-    "The 'sedona.stats.weighting' module is deprecated and will be removed in 
future versions. Please use 'sedona.spark.stats' instead.",
+    "Importing from 'sedona.utils.spatial_rdd_parser' is deprecated. Please 
use 'sedona.spark.utils.spatial_rdd_parser' instead.",
     DeprecationWarning,
     stacklevel=2,
 )
+
+__all__ = ["GeoData"]
diff --git a/python/tests/test_path_compatibility.py 
b/python/tests/test_path_compatibility.py
new file mode 100644
index 0000000000..6f04b559b2
--- /dev/null
+++ b/python/tests/test_path_compatibility.py
@@ -0,0 +1,120 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# The test file is to ensure compatibility with the path structure and imports 
with Apache Sedona < 1.8.0
+# We will drop this test file in the future when we remove path compatibility 
for Apache Sedona < 1.8.0
+
+from sedona.core.SpatialRDD import CircleRDD, PolygonRDD, PointRDD
+from sedona.core.enums import FileDataSplitter, GridType, IndexType
+from sedona.core.formatMapper.geo_json_reader import GeoJsonReader
+from sedona.core.formatMapper.shapefileParser.shape_file_reader import 
ShapefileReader
+from sedona.core.geom.circle import Circle
+from sedona.core.geom.envelope import Envelope
+from sedona.core.geom.geography import Geography
+from sedona.core.spatialOperator import JoinQuery
+from sedona.core.spatialOperator import JoinQueryRaw, KNNQuery, RangeQuery
+from sedona.sql import st_aggregates as sta
+from sedona.sql import st_constructors as stc
+from sedona.sql import st_functions as stf
+from sedona.sql import st_predicates as stp
+from sedona.sql.st_aggregates import ST_Union_Aggr
+from sedona.sql.st_constructors import ST_MakePoint
+from sedona.sql.st_functions import ST_X
+from sedona.sql.st_predicates import ST_Intersects
+from sedona.sql.types import GeographyType, GeometryType
+from sedona.stac.client import Client
+from sedona.stac.collection_client import CollectionClient
+from sedona.stats.clustering import dbscan
+from sedona.stats.hotspot_detection.getis_ord import g_local
+from sedona.stats.weighting import (
+    add_distance_band_column,
+    add_binary_distance_band_column,
+)
+from sedona.utils.adapter import Adapter
+from sedona.utils.geoarrow import create_spatial_dataframe
+from sedona.utils.spatial_rdd_parser import GeoData
+from tests.test_base import TestBase
+
+
+class TestPathCompatibility(TestBase):
+
+    def test_spatial_rdd_imports(self):
+        # Test CircleRDD, PolygonRDD and PointRDD imports
+        assert PointRDD is not None
+        assert CircleRDD is not None
+        assert PolygonRDD is not None
+
+    def test_enums_imports(self):
+        # Test FileDataSplitter, GridType, IndexType imports
+        assert FileDataSplitter is not None
+        assert GridType is not None
+        assert IndexType is not None
+
+    def test_geometry_imports(self):
+        # Test Envelope, Geography, Circle imports
+        assert Envelope is not None
+        assert Geography is not None
+        assert Circle is not None
+
+    def test_sql_type_imports(self):
+        # Test GeographyType and GeometryType imports
+        assert GeographyType is not None
+        assert GeometryType is not None
+
+    def test_spatial_operators_imports(self):
+        # Test JoinQuery, KNNQuery, RangeQuery imports
+        assert JoinQuery is not None
+        assert JoinQueryRaw is not None
+        assert KNNQuery is not None
+        assert RangeQuery is not None
+
+    def test_stac_imports(self):
+        # Test STAC related imports
+        assert Client is not None
+        assert CollectionClient is not None
+
+    def test_stats_imports(self):
+        # Test statistics related imports
+        assert dbscan is not None
+        assert g_local is not None
+        assert add_distance_band_column is not None
+        assert add_binary_distance_band_column is not None
+
+    def test_util_imports(self):
+        # Test utility imports
+        assert Adapter is not None
+        assert GeoData is not None
+
+    def test_format_mapper_imports(self):
+        # Test GeoJsonReader and ShapefileReader imports
+        assert GeoJsonReader is not None
+        assert ShapefileReader is not None
+
+    def test_sql_module_imports(self):
+        # Test SQL module imports
+        assert sta is not None
+        assert stc is not None
+        assert stf is not None
+        assert stp is not None
+        assert ST_MakePoint is not None
+        assert ST_X is not None
+        assert ST_Union_Aggr is not None
+        assert ST_Intersects is not None
+
+    def test_geoarrow_import(self):
+        # Test create_spatial_dataframe import
+        assert create_spatial_dataframe is not None
diff --git a/python/tests/test_path_compatibility_all.py 
b/python/tests/test_path_compatibility_all.py
new file mode 100644
index 0000000000..e14d912db1
--- /dev/null
+++ b/python/tests/test_path_compatibility_all.py
@@ -0,0 +1,88 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# The test file is to ensure compatibility with the path structure and imports 
with Apache Sedona < 1.8.0
+# We will drop this test file in the future when we remove path compatibility 
for Apache Sedona < 1.8.0
+
+from sedona.spark import *
+from tests.test_base import TestBase
+
+
+class TestPathCompatibilityAll(TestBase):
+
+    def test_spatial_rdd_imports(self):
+        # Test CircleRDD, PolygonRDD and PointRDD imports
+        assert PointRDD is not None
+        assert CircleRDD is not None
+        assert PolygonRDD is not None
+
+    def test_enums_imports(self):
+        # Test FileDataSplitter, GridType, IndexType imports
+        assert FileDataSplitter is not None
+        assert GridType is not None
+        assert IndexType is not None
+
+    def test_geometry_imports(self):
+        # Test Envelope, Geography, Circle imports
+        assert Envelope is not None
+        assert Geography is not None
+        assert Circle is not None
+
+    def test_sql_type_imports(self):
+        # Test GeographyType and GeometryType imports
+        assert GeographyType is not None
+        assert GeometryType is not None
+
+    def test_spatial_operators_imports(self):
+        # Test JoinQuery, KNNQuery, RangeQuery imports
+        assert JoinQuery is not None
+        assert JoinQueryRaw is not None
+        assert KNNQuery is not None
+        assert RangeQuery is not None
+
+    def test_stac_imports(self):
+        # Test STAC related imports
+        assert Client is not None
+        assert CollectionClient is not None
+
+    def test_stats_imports(self):
+        # Test statistics related imports
+        assert dbscan is not None
+        assert g_local is not None
+        assert add_distance_band_column is not None
+        assert add_binary_distance_band_column is not None
+
+    def test_util_imports(self):
+        # Test utility imports
+        assert Adapter is not None
+        assert GeoData is not None
+
+    def test_format_mapper_imports(self):
+        # Test GeoJsonReader and ShapefileReader imports
+        assert GeoJsonReader is not None
+        assert ShapefileReader is not None
+
+    def test_sql_module_imports(self):
+        # Test SQL module imports
+        assert ST_MakePoint is not None
+        assert ST_X is not None
+        assert ST_Union_Aggr is not None
+        assert ST_Intersects is not None
+
+    def test_geoarrow_import(self):
+        # Test create_spatial_dataframe import
+        assert create_spatial_dataframe is not None


Reply via email to