# 🌱 EcoTrace

> **Kodunuzun karbon ayak izini ölçün. Daha temiz kod yazın. Dünyayı koruyun.**

EcoTrace, Python fonksiyonlarınızın CPU ve GPU üzerindeki yükünü analiz ederek ne kadar CO₂ salınımına neden olduğunu hesaplayan hafif ve güçlü bir kütüphanedir.

[![PyPI version](https://badge.fury.io/py/ecotrace.svg)](https://badge.fury.io/py/ecotrace)
[![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)

---

## 🚀 Kurulum

```bash
pip install ecotrace
```

---

## ⚡ Hızlı Başlangıç

```python
from ecotrace import EcoTrace

eco = EcoTrace(region_code="TR")

@eco.track
def veri_isle():
    return sum(i * i for i in range(10**6))

veri_isle()
# [EcoTrace] Fonksiyon : veri_isle
# [EcoTrace] Süre      : 0.0452 sn
# [EcoTrace] Ort. CPU  : %23.4
# [EcoTrace] Salınan CO2: 0.00001823 gCO2
```

---

## 🧩 Özellikler

### ✅ CPU Takibi — `@eco.track`

Herhangi bir fonksiyonu sadece bir decorator ile izleyin:

```python
@eco.track
def makine_ogrenmesi_egit():
    # model eğitimi...
    pass
```

### ✅ GPU Takibi — `@eco.track_gpu`

NVIDIA, AMD ve Intel GPU'ları destekler:

```python
@eco.track_gpu
def gpu_hesapla():
    # GPU yoğun işlem...
    pass
```

### ✅ Async Desteği

Async fonksiyonlar aynen çalışır:

```python
@eco.track
async def api_cagri():
    await asyncio.sleep(1)
    # API çağrısı...
```

### ✅ Karşılaştırma Analizi — `eco.compare()`

İki farklı implementasyonu karşılaştırın, hangisi daha az karbon salıyor?

```python
def versiyon_v1():
    return sorted(liste)

def versiyon_v2():
    liste.sort()

sonuc = eco.compare(versiyon_v1, versiyon_v2)
```

### ✅ PDF Raporu — `eco.generate_pdf_report()`

Tüm ölçümleri detaylı PDF olarak dışa aktarın:

```python
eco.generate_pdf_report("rapor.pdf", comparison=sonuc)
```

Rapor içeriği:
- Sistem bilgileri (işlemci, GPU, TDP, bölge)
- Tüm fonksiyon ölçüm geçmişi
- Karşılaştırma analizi tablosu
- Toplam kümülatif CO₂ salınımı

### ✅ Karbon Limiti Uyarısı

Belirli bir eşiği aştığınızda uyarı alın:

```python
eco = EcoTrace(region_code="TR", carbon_limit=0.001)
# ⚠️ UYARI: Karbon limiti aşıldı! (0.00124 > 0.001 gCO2)
```

---

## 🌍 Desteklenen Bölgeler

| Kod | Ülke       | Karbon Yoğunluğu |
|-----|------------|-----------------|
| TR  | Türkiye    | 475 gCO₂/kWh    |
| DE  | Almanya    | 385 gCO₂/kWh    |
| FR  | Fransa     | 55 gCO₂/kWh     |
| US  | ABD        | 367 gCO₂/kWh    |
| GB  | İngiltere  | 253 gCO₂/kWh    |

---

## 🖥️ Desteklenen İşlemciler

EcoTrace, 1800+ işlemciyi barındıran [Boavizta](https://github.com/Boavizta/cpu-spec) veritabanını kullanarak TDP değerlerini otomatik tespit eder:

- Intel Core i3 / i5 / i7 / i9 (tüm nesiller)
- AMD Ryzen 3 / 5 / 7 / 9
- Apple M1 / M2 / M3
- AMD Threadripper, EPYC
- Intel Xeon

---

## 📦 Bağımlılıklar

```
psutil
py-cpuinfo
fpdf2
GPUtil
pynvml (opsiyonel, NVIDIA için)
wmi (opsiyonel, Windows AMD/Intel GPU için)
```

---

## 📊 Örnek PDF Raporu

```
EcoTrace Analiz Raporu
─────────────────────────────────────
İşlemci  : Intel Core i7-13700H
TDP      : 45.0W
Bölge    : TR (475 gCO₂/kWh)
─────────────────────────────────────
Fonksiyon     Süre(sn)   CPU%   Karbon(gCO2)
veri_isle     0.0452     23.4   0.00001823
api_cagri     1.0021     2.1    0.00037486
─────────────────────────────────────
TOPLAM KÜMÜLATİF SALINIM: 0.00039309 gCO2
```

---

## 🤝 Katkıda Bulunma

Pull request'ler ve issue'lar memnuniyetle karşılanır!

---

## 👤 Geliştirici

**Emre Özkal** — [emreozkal03@gmail.com](mailto:emreozkal03@gmail.com)

---

## 📄 Lisans

MIT License — dilediğiniz gibi kullanın.