planx-sdk 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yusuf Eminoğlu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,131 @@
1
+ Metadata-Version: 2.4
2
+ Name: planx-sdk
3
+ Version: 0.1.0
4
+ Summary: Core spatial analytics, spatial statistics, and urban resilience engines for the PlanX ecosystem.
5
+ Author-email: Yusuf Eminoğlu <yusufeminoglu@gmail.com>
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: License :: OSI Approved :: MIT License
8
+ Classifier: Operating System :: OS Independent
9
+ Classifier: Topic :: Scientific/Engineering :: GIS
10
+ Requires-Python: >=3.9
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: numpy>=1.20.0
14
+ Requires-Dist: scipy>=1.7.0
15
+ Provides-Extra: dev
16
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
17
+ Requires-Dist: black>=22.0.0; extra == "dev"
18
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
19
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
20
+ Dynamic: license-file
21
+
22
+ # PlanX SDK (Software Development Kit)
23
+
24
+ PlanX QGIS eklenti ekosisteminin çekirdek mekansal analiz, istatistik ve yerleşilebilirlik (MCDA) hesaplama motorlarını barındıran, QGIS arayüzünden bağımsız, saf Python ve NumPy tabanlı resmi kütüphanesidir.
25
+
26
+ Bu kütüphane sayesinde, QGIS eklentilerinizdeki karmaşık algoritmaları:
27
+ 1. QGIS'i başlatmadan (örneğin Jupyter Notebooks, bağımsız komut dosyaları veya sunucularda) çalıştırabilir,
28
+ 2. `pytest` ile hızlı ve headless bir şekilde test edebilir,
29
+ 3. Tek bir merkezden güncelleyerek tüm eklentilerinizde tutarlı bir şekilde kullanabilirsiniz.
30
+
31
+ ---
32
+
33
+ ## 📂 Proje Yapısı (Directory Structure)
34
+
35
+ ```text
36
+ planx_sdk/
37
+ ├── pyproject.toml # Modern paket tanımı, bağımlılıklar ve metadata (PEP 517/621)
38
+ ├── README.md # Bu dökümantasyon dosyası
39
+ ├── LICENSE # Lisans dosyası
40
+ ├── .gitignore # Python önbellek ve build klasörlerini yoksayan git kuralları
41
+ ├── src/ # Kaynak kodlar (Standard src-layout)
42
+ │ └── planx/ # Ana paket dizini
43
+ │ ├── __init__.py # Versiyon ve paket tanımı
44
+ │ ├── spatial/ # Çekirdek mekansal ağ analizi ve space syntax motoru
45
+ │ │ ├── __init__.py
46
+ │ │ ├── paths.py # En kısa yol algoritmaları (Dijkstra, SciPy entegrasyonu)
47
+ │ │ └── centrality.py # Yakınlık, Brandes Arasılık (Betweenness) ve Özdeğer (Eigenvector)
48
+ │ ├── geostats/ # Mekansal istatistik ve otokorelasyon motorları
49
+ │ │ ├── __init__.py
50
+ │ │ └── stats_engines.py# Getis-Ord Gi*, Local/Global Moran's I, OLS, GWR, SDE, k-means
51
+ │ └── suitability/ # Raster tabanlı MCDA (Multi-Criteria Decision Analysis) motoru
52
+ │ ├── __init__.py
53
+ │ └── mcda.py # Normalizasyon metotları (Sigmoid, Gaussian, Min-Max) ve WLC
54
+ └── tests/ # Birim testler (Unit Tests)
55
+ ├── __init__.py
56
+ ├── test_spatial.py # Network algoritmaları testleri
57
+ ├── test_geostats.py # İstatistik testleri
58
+ └── test_suitability.py # MCDA testleri
59
+ ```
60
+
61
+ ---
62
+
63
+ ## 🛠️ Kurulum (Installation)
64
+
65
+ ### 1. Geliştirici Modunda Kurulum (Editable Install - Geliştirme İçin)
66
+ SDK kodlarında yaptığınız değişikliklerin anında QGIS veya test ortamınızda yansıması için kütüphaneyi **geliştirici (editable) modda** kurmalısınız.
67
+
68
+ QGIS'in veya geliştirme yaptığınız IDE'nin (PyCharm/VS Code) aktif Python ortamında terminali açarak şu komutu çalıştırın:
69
+ ```bash
70
+ pip install -e C:\Users\YE\PyCharmMiscProject\planx_sdk
71
+ ```
72
+ *(Ya da `planx_sdk` klasörünün içindeyken: `pip install -e .`)*
73
+
74
+ ### 2. Geliştirici Bağımlılıklarının Kurulumu
75
+ Birim testlerini koşmak, kod formatlamak veya lint araçlarını kullanmak için geliştirici paketlerini kurabilirsiniz:
76
+ ```bash
77
+ pip install -e .[dev]
78
+ ```
79
+
80
+ ---
81
+
82
+ ## 💡 QGIS Eklentilerinde Kullanım Stratejileri
83
+
84
+ QGIS eklentilerinizin bu paket ile haberleşmesi için iki temel yöntem mevcuttur:
85
+
86
+ ### Yöntem A: Yerel Geliştirici Ortamı (Development)
87
+ Geliştirme makinenizde, QGIS'in kullandığı Python interpreter'ına (`OSGeo4W` veya `conda` ortamı) SDK'yı yukarıdaki gibi `pip install -e` ile kurun.
88
+ Eklenti kodunuzda doğrudan standart importları yapabilirsiniz:
89
+ ```python
90
+ from planx.spatial import brandes_betweenness
91
+ from planx.geostats import calculate_getis_ord
92
+ ```
93
+
94
+ ### Yöntem B: Dağıtım / Yayınlama Süreci (Vendoring / Bundling)
95
+ QGIS Hub'da yayınlarken, eklenti zip paketinin kendi kendine yetmesi gerekir (kullanıcıdan harici `pip install` yapması beklenemez).
96
+ Bu sorunu çözmek için, `Build-PluginZip.ps1` veya release betiğinizin içine SDK'yı eklentinin kendi `libs` klasörüne yükleyen bir adım ekleyebilirsiniz:
97
+
98
+ ```powershell
99
+ # Eklentinin zip paketleme aşamasında target klasör olarak eklenti altındaki 'libs' belirlenir:
100
+ pip install C:\Users\YE\PyCharmMiscProject\planx_sdk -t C:\Users\YE\PyCharmMiscProject\qgis_plugins\<eklenti_klasoru>\libs --upgrade
101
+ ```
102
+
103
+ Eklentinizin giriş noktasında (`__init__.py` veya ana modülün en üstünde) bu `libs` klasörünü Python arama yoluna (`sys.path`) eklemeniz yeterlidir:
104
+ ```python
105
+ import os
106
+ import sys
107
+
108
+ # Eklenti altındaki 'libs' klasörünü sys.path'e en yüksek öncelikle ekle
109
+ libs_path = os.path.join(os.path.dirname(__file__), 'libs')
110
+ if libs_path not in sys.path:
111
+ sys.path.insert(0, libs_path)
112
+
113
+ # Artık SDK sorunsuzca import edilebilir
114
+ from planx.spatial import many_to_many
115
+ ```
116
+
117
+ ---
118
+
119
+ ## 🧪 Testleri Koşturma (Running Tests)
120
+
121
+ SDK'nın doğruluğunu test etmek için `pytest` kullanabilirsiniz. Proje kök dizininde (`C:\Users\YE\PyCharmMiscProject\planx_sdk`) şu komutu çalıştırmanız yeterlidir:
122
+
123
+ ```bash
124
+ pytest
125
+ ```
126
+
127
+ ---
128
+
129
+ ## 📝 Lisans (License)
130
+
131
+ Bu proje **MIT Lisansı** ile lisanslanmıştır. Detaylar için [LICENSE](LICENSE) dosyasına göz atabilirsiniz.
@@ -0,0 +1,110 @@
1
+ # PlanX SDK (Software Development Kit)
2
+
3
+ PlanX QGIS eklenti ekosisteminin çekirdek mekansal analiz, istatistik ve yerleşilebilirlik (MCDA) hesaplama motorlarını barındıran, QGIS arayüzünden bağımsız, saf Python ve NumPy tabanlı resmi kütüphanesidir.
4
+
5
+ Bu kütüphane sayesinde, QGIS eklentilerinizdeki karmaşık algoritmaları:
6
+ 1. QGIS'i başlatmadan (örneğin Jupyter Notebooks, bağımsız komut dosyaları veya sunucularda) çalıştırabilir,
7
+ 2. `pytest` ile hızlı ve headless bir şekilde test edebilir,
8
+ 3. Tek bir merkezden güncelleyerek tüm eklentilerinizde tutarlı bir şekilde kullanabilirsiniz.
9
+
10
+ ---
11
+
12
+ ## 📂 Proje Yapısı (Directory Structure)
13
+
14
+ ```text
15
+ planx_sdk/
16
+ ├── pyproject.toml # Modern paket tanımı, bağımlılıklar ve metadata (PEP 517/621)
17
+ ├── README.md # Bu dökümantasyon dosyası
18
+ ├── LICENSE # Lisans dosyası
19
+ ├── .gitignore # Python önbellek ve build klasörlerini yoksayan git kuralları
20
+ ├── src/ # Kaynak kodlar (Standard src-layout)
21
+ │ └── planx/ # Ana paket dizini
22
+ │ ├── __init__.py # Versiyon ve paket tanımı
23
+ │ ├── spatial/ # Çekirdek mekansal ağ analizi ve space syntax motoru
24
+ │ │ ├── __init__.py
25
+ │ │ ├── paths.py # En kısa yol algoritmaları (Dijkstra, SciPy entegrasyonu)
26
+ │ │ └── centrality.py # Yakınlık, Brandes Arasılık (Betweenness) ve Özdeğer (Eigenvector)
27
+ │ ├── geostats/ # Mekansal istatistik ve otokorelasyon motorları
28
+ │ │ ├── __init__.py
29
+ │ │ └── stats_engines.py# Getis-Ord Gi*, Local/Global Moran's I, OLS, GWR, SDE, k-means
30
+ │ └── suitability/ # Raster tabanlı MCDA (Multi-Criteria Decision Analysis) motoru
31
+ │ ├── __init__.py
32
+ │ └── mcda.py # Normalizasyon metotları (Sigmoid, Gaussian, Min-Max) ve WLC
33
+ └── tests/ # Birim testler (Unit Tests)
34
+ ├── __init__.py
35
+ ├── test_spatial.py # Network algoritmaları testleri
36
+ ├── test_geostats.py # İstatistik testleri
37
+ └── test_suitability.py # MCDA testleri
38
+ ```
39
+
40
+ ---
41
+
42
+ ## 🛠️ Kurulum (Installation)
43
+
44
+ ### 1. Geliştirici Modunda Kurulum (Editable Install - Geliştirme İçin)
45
+ SDK kodlarında yaptığınız değişikliklerin anında QGIS veya test ortamınızda yansıması için kütüphaneyi **geliştirici (editable) modda** kurmalısınız.
46
+
47
+ QGIS'in veya geliştirme yaptığınız IDE'nin (PyCharm/VS Code) aktif Python ortamında terminali açarak şu komutu çalıştırın:
48
+ ```bash
49
+ pip install -e C:\Users\YE\PyCharmMiscProject\planx_sdk
50
+ ```
51
+ *(Ya da `planx_sdk` klasörünün içindeyken: `pip install -e .`)*
52
+
53
+ ### 2. Geliştirici Bağımlılıklarının Kurulumu
54
+ Birim testlerini koşmak, kod formatlamak veya lint araçlarını kullanmak için geliştirici paketlerini kurabilirsiniz:
55
+ ```bash
56
+ pip install -e .[dev]
57
+ ```
58
+
59
+ ---
60
+
61
+ ## 💡 QGIS Eklentilerinde Kullanım Stratejileri
62
+
63
+ QGIS eklentilerinizin bu paket ile haberleşmesi için iki temel yöntem mevcuttur:
64
+
65
+ ### Yöntem A: Yerel Geliştirici Ortamı (Development)
66
+ Geliştirme makinenizde, QGIS'in kullandığı Python interpreter'ına (`OSGeo4W` veya `conda` ortamı) SDK'yı yukarıdaki gibi `pip install -e` ile kurun.
67
+ Eklenti kodunuzda doğrudan standart importları yapabilirsiniz:
68
+ ```python
69
+ from planx.spatial import brandes_betweenness
70
+ from planx.geostats import calculate_getis_ord
71
+ ```
72
+
73
+ ### Yöntem B: Dağıtım / Yayınlama Süreci (Vendoring / Bundling)
74
+ QGIS Hub'da yayınlarken, eklenti zip paketinin kendi kendine yetmesi gerekir (kullanıcıdan harici `pip install` yapması beklenemez).
75
+ Bu sorunu çözmek için, `Build-PluginZip.ps1` veya release betiğinizin içine SDK'yı eklentinin kendi `libs` klasörüne yükleyen bir adım ekleyebilirsiniz:
76
+
77
+ ```powershell
78
+ # Eklentinin zip paketleme aşamasında target klasör olarak eklenti altındaki 'libs' belirlenir:
79
+ pip install C:\Users\YE\PyCharmMiscProject\planx_sdk -t C:\Users\YE\PyCharmMiscProject\qgis_plugins\<eklenti_klasoru>\libs --upgrade
80
+ ```
81
+
82
+ Eklentinizin giriş noktasında (`__init__.py` veya ana modülün en üstünde) bu `libs` klasörünü Python arama yoluna (`sys.path`) eklemeniz yeterlidir:
83
+ ```python
84
+ import os
85
+ import sys
86
+
87
+ # Eklenti altındaki 'libs' klasörünü sys.path'e en yüksek öncelikle ekle
88
+ libs_path = os.path.join(os.path.dirname(__file__), 'libs')
89
+ if libs_path not in sys.path:
90
+ sys.path.insert(0, libs_path)
91
+
92
+ # Artık SDK sorunsuzca import edilebilir
93
+ from planx.spatial import many_to_many
94
+ ```
95
+
96
+ ---
97
+
98
+ ## 🧪 Testleri Koşturma (Running Tests)
99
+
100
+ SDK'nın doğruluğunu test etmek için `pytest` kullanabilirsiniz. Proje kök dizininde (`C:\Users\YE\PyCharmMiscProject\planx_sdk`) şu komutu çalıştırmanız yeterlidir:
101
+
102
+ ```bash
103
+ pytest
104
+ ```
105
+
106
+ ---
107
+
108
+ ## 📝 Lisans (License)
109
+
110
+ Bu proje **MIT Lisansı** ile lisanslanmıştır. Detaylar için [LICENSE](LICENSE) dosyasına göz atabilirsiniz.
@@ -0,0 +1,47 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "planx-sdk"
7
+ version = "0.1.0"
8
+ authors = [
9
+ { name = "Yusuf Eminoğlu", email = "yusufeminoglu@gmail.com" }
10
+ ]
11
+ description = "Core spatial analytics, spatial statistics, and urban resilience engines for the PlanX ecosystem."
12
+ readme = "README.md"
13
+ requires-python = ">=3.9"
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "License :: OSI Approved :: MIT License",
17
+ "Operating System :: OS Independent",
18
+ "Topic :: Scientific/Engineering :: GIS",
19
+ ]
20
+ dependencies = [
21
+ "numpy>=1.20.0",
22
+ "scipy>=1.7.0",
23
+ ]
24
+
25
+ [project.optional-dependencies]
26
+ dev = [
27
+ "pytest>=7.0.0",
28
+ "black>=22.0.0",
29
+ "ruff>=0.1.0",
30
+ "mypy>=1.0.0",
31
+ ]
32
+
33
+ [tool.setuptools]
34
+ package-dir = {"" = "src"}
35
+
36
+ [tool.setuptools.packages.find]
37
+ where = ["src"]
38
+
39
+ [tool.black]
40
+ line-length = 100
41
+ target-version = ['py39']
42
+
43
+ [tool.ruff]
44
+ line-length = 100
45
+ target-version = "py39"
46
+ select = ["E", "F", "W", "I"]
47
+ ignore = []
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,9 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ PlanX SDK
4
+ ~~~~~~~~~
5
+ Core spatial analytics, statistics, and urban resilience engines.
6
+ """
7
+
8
+ __version__ = "0.1.0"
9
+ __author__ = "Yusuf Eminoğlu"
@@ -0,0 +1,59 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ PlanX Spatial Statistics Submodule
4
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
+ Core spatial statistical engines including local/global spatial autocorrelation,
6
+ regression modeling, point pattern analysis, and clustering.
7
+ """
8
+
9
+ from .stats_engines import (
10
+ calculate_average_nearest_neighbor,
11
+ calculate_bivariate_lee_l,
12
+ calculate_central_feature,
13
+ calculate_distance_band_stats,
14
+ calculate_exploratory_regression,
15
+ calculate_general_g,
16
+ calculate_getis_ord,
17
+ calculate_global_moran,
18
+ calculate_glr,
19
+ calculate_gwr,
20
+ calculate_incremental_autocorrelation,
21
+ calculate_kmeans,
22
+ calculate_linear_directional_mean,
23
+ calculate_local_moran,
24
+ calculate_mean_center,
25
+ calculate_median_center,
26
+ calculate_ols,
27
+ calculate_ripleys_k,
28
+ calculate_sde,
29
+ calculate_similarity_search,
30
+ calculate_spatial_gini,
31
+ calculate_standard_distance,
32
+ run_sensitivity_simulation,
33
+ )
34
+
35
+ __all__ = [
36
+ "calculate_getis_ord",
37
+ "calculate_bivariate_lee_l",
38
+ "calculate_mean_center",
39
+ "calculate_central_feature",
40
+ "calculate_sde",
41
+ "calculate_local_moran",
42
+ "calculate_ols",
43
+ "calculate_global_moran",
44
+ "calculate_spatial_gini",
45
+ "calculate_average_nearest_neighbor",
46
+ "calculate_standard_distance",
47
+ "calculate_gwr",
48
+ "calculate_median_center",
49
+ "calculate_general_g",
50
+ "calculate_similarity_search",
51
+ "calculate_distance_band_stats",
52
+ "calculate_kmeans",
53
+ "calculate_linear_directional_mean",
54
+ "run_sensitivity_simulation",
55
+ "calculate_incremental_autocorrelation",
56
+ "calculate_ripleys_k",
57
+ "calculate_exploratory_regression",
58
+ "calculate_glr",
59
+ ]