Metadata-Version: 2.4
Name: notlang
Version: 0.1.0
Summary: GIS uchun soddalashtirilgan buyruqlar tili (Python ustida ishlaydi) — Uzbek-friendly domain-specific language for GIS/RS
Author: notGIS
License: MIT
Project-URL: Homepage, https://github.com/notgis/notlang
Project-URL: Repository, https://github.com/notgis/notlang
Keywords: gis,remote-sensing,geospatial,dsl,uzbekistan,earth-engine,copernicus
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering :: GIS
Classifier: Intended Audience :: Science/Research
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: geopandas>=0.14
Requires-Dist: rasterio>=1.3
Requires-Dist: matplotlib>=3.7
Requires-Dist: numpy>=1.24
Requires-Dist: shapely>=2.0
Requires-Dist: lark>=1.1
Requires-Dist: requests>=2.28
Provides-Extra: jupyter
Requires-Dist: ipython>=8.0; extra == "jupyter"
Provides-Extra: gee
Requires-Dist: earthengine-api>=0.1; extra == "gee"
Provides-Extra: full
Requires-Dist: ipython>=8.0; extra == "full"
Requires-Dist: earthengine-api>=0.1; extra == "full"

# notLang

GIS uchun soddalashtirilgan buyruqlar tili. Python ustida ishlaydi, natijada
uzun GDAL/rasterio/geopandas kodi o'rniga 2-3 qatorlik notLang skripti yeziladi.

## O'rnatish

**Eng qulay usul — GitHub'dan to'g'ridan-to'g'ri (zip yuklash shart emas):**
```bash
pip install git+https://github.com/<GITHUB_USER>/notlang.git
```
Colab/Jupyter'da (GEE va Jupyter qo'llab-quvvatlashi bilan):
```python
!pip install "notlang[gee,jupyter] @ git+https://github.com/<GITHUB_USER>/notlang.git"
```

**Mahalliy (development) rejimida:**
```bash
pip install -e .
```

O'rnatgandan so'ng `notlang` komandasi terminalda, PowerShell'da va CMD'da
ishlaydi:

```bash
notlang                # interaktiv rejim (REPL)
notlang skript.nl       # skript faylini ishga tushirish
notlang --version       # versiyani ko'rsatish
```

## Holat: Faza 2 (interpretator ulandi — notLang endi ishlaydi!)

Endi `notlang` haqiqiy buyruqlarni bajaradi. Misol skript:

```
load "hudud.geojson" as a
info a
stats a
show a to "hudud.png"

load "mask.geojson" as m
clip a with m -> a_clip
save a_clip to "natija.geojson"

buffer a 500 -> a_buf
reproject a to 3857 -> a_3857
```

Ishga tushirish:
```bash
notlang skript.nl        # faylni ishga tushirish
notlang                  # interaktiv rejim (REPL), qator-qator yozish
```

REPL'da `help` yozsangiz barcha buyruqlar ro'yxati chiqadi.

### Qo'llab-quvvatlanadigan buyruqlar (Faza 2)

| Buyruq | Misol |
|---|---|
| `load` | `load "a.shp" as x` |
| `show` | `show x title "Sarlavha" color "red" to "chiqish.png"` |
| `info` | `info x` |
| `stats` | `stats x` |
| `list` | `list x shapeName` |
| `save` | `save x to "chiqish.geojson"` |
| `filter` | `filter x where "shapeName == 'Xorazm'" -> y` |
| `clip` | `clip x with mask -> y` |
| `merge` | `merge x y -> z` (ikkita vektor) |
| `mosaic` | `mosaic x y -> z` (ikkita rastr) |
| `ndvi` | `ndvi x 3 4 -> z` (red-band nir-band) |
| `zonal_stats` | `zonal_stats raster with zonalar -> t` (min/max/mean/std) |
| `chart` | `chart x ustun bar to "grafik.png"` (bar/hist/line) |
| `install` | `install "paket-nomi"` (kerakli kutubxonani o'rnatadi) |
| `buffer` | `buffer x 500 -> y` |
| `reproject` | `reproject x to 4326 -> y` |

Sinash uchun:
```bash
python make_test_data.py        # sinov fayllarini yaratadi
python test_core.py             # runtime funksiyalarini sinaydi
notlang examples/skript.nl      # to'liq notLang skriptini ishga tushiradi
```

Keyingi bosqichlar rejasi uchun loyihaning to'liq hujjatiga qarang
(Faza 5: GEE/Copernicus ulanish).

## Jupyter / Google Colab'da ishlatish (Faza 4)

Avval o'rnating (Jupyter/Colab qo'llab-quvvatlashi bilan):
```bash
pip install -e ".[jupyter]"
```

Notebook katagida:
```python
%load_ext notlang
```

Keyin har qanday katakda:
```python
%%notlang
load "hudud.geojson" as a
info a
show a
```

O'zgaruvchilar (`a` kabi) keyingi kataklarda ham ishlatilaveradi —
xuddi REPL'dagidek, bitta sessiya davomida saqlanib qoladi.

Bitta qatorlik buyruq uchun (katak emas, bitta qator):
```python
%notlang_line show a
```

Google Colab'da ham xuddi shunday ishlaydi — avval
`!pip install notlang[jupyter]` (yoki paketni yuklab, `!pip install -e .`),
so'ng `%load_ext notlang` deb yozish kifoya.

## Google Earth Engine'ga ulanish (Faza 5)

Avval o'rnating:
```bash
pip install -e ".[gee]"
```

Ishlatish (REPL, skript yoki `%%notlang` — barchasida bir xil):
```
connect gee
```

Birinchi marta ishlatganda brauzerda Google login oynasi ochiladi
(Colab'da bu link ko'rinishida chiqadi — uni bosib, Google hisobingiz
bilan ruxsat berasiz). Sizda Earth Engine yoqilgan Google Cloud loyihasi
(project) bo'lishi kerak — https://code.earthengine.google.com/ orqali
ro'yxatdan o'ting.

Tasvir olish:
```
load "hudud.geojson" as region
connect gee
get "COPERNICUS/S2_SR_HARMONIC" date "2024-01-01" "2024-02-01" bbox region -> img
info img
show img
```

`get` buyrug'i berilgan kolleksiyadan (`dataset`), sana oralig'ida,
`region` qatlamining chegara qutisi (bounding box) ichidagi barcha
tasvirlarning **median kompozitini** yuklab, mahalliy rastr sifatida
qaytaradi. Katta hududlar yoki uzoq sana oralig'i GEE eksport
chegarasiga (odatda ~10-50 MB) tegishi mumkin — shunday xato chiqsa,
hududni yoki sana oralig'ini kichraytiring.

**Diqqat:** bu qismni men (Claude) o'z muhitimda haqiqiy Google hisobi
bilan sinab ko'ra olmadim — internetga chiqish cheklangan. Kod
sintaksis va mantiq jihatidan tekshirilgan (xato holatlari to'g'ri
ushlanadi), lekin haqiqiy autentifikatsiya va tasvir yuklashni
o'zingizning muhitingizda (Colab tavsiya etiladi) sinab ko'rishingiz
kerak.

## Copernicus Data Space'ga ulanish (Faza 5b)

[Dataspace.copernicus.eu](https://dataspace.copernicus.eu/) da ro'yxatdan
o'ting, so'ng **User Settings -> OAuth clients** bo'limidan `client_id`
va `client_secret` oling.

```
connect copernicus "client_id" "client_secret"
```

Tasvir olish (Sentinel-2 L2A, ko'k/yashil/qizil/NIR bandlari — B02, B03,
B04, B08):
```
load "hudud.geojson" as region
connect copernicus "client_id" "client_secret"
get_sentinel date "2024-01-01" "2024-02-01" bbox region scale 100 -> img
info img
show img
```

Bu autentifikatsiya OAuth `client_credentials` oqimi orqali ishlaydi
(brauzer kerak emas, GEE'dan farqli). Sinovda ulanish kodi haqiqiy
Copernicus serveriga yetib bordi va noto'g'ri kredensial uchun to'g'ri
403 xatosi qaytardi — demak so'rov formati to'g'ri; siz faqat haqiqiy
`client_id`/`client_secret` bilan sinashingiz kerak.
