greenmining 1.1.5__tar.gz → 1.1.6__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.
Files changed (52) hide show
  1. {greenmining-1.1.5 → greenmining-1.1.6}/CHANGELOG.md +21 -0
  2. {greenmining-1.1.5/greenmining.egg-info → greenmining-1.1.6}/PKG-INFO +1 -1
  3. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/__init__.py +1 -1
  4. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/statistical_analyzer.py +2 -1
  5. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/base.py +8 -0
  6. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/local_repo_analyzer.py +12 -9
  7. {greenmining-1.1.5 → greenmining-1.1.6/greenmining.egg-info}/PKG-INFO +1 -1
  8. {greenmining-1.1.5 → greenmining-1.1.6}/pyproject.toml +1 -1
  9. {greenmining-1.1.5 → greenmining-1.1.6}/LICENSE +0 -0
  10. {greenmining-1.1.5 → greenmining-1.1.6}/MANIFEST.in +0 -0
  11. {greenmining-1.1.5 → greenmining-1.1.6}/README.md +0 -0
  12. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/__main__.py +0 -0
  13. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/__version__.py +0 -0
  14. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/__init__.py +0 -0
  15. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/code_diff_analyzer.py +0 -0
  16. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/metrics_power_correlator.py +0 -0
  17. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/power_regression.py +0 -0
  18. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/qualitative_analyzer.py +0 -0
  19. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/temporal_analyzer.py +0 -0
  20. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/version_power_analyzer.py +0 -0
  21. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/config.py +0 -0
  22. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/controllers/__init__.py +0 -0
  23. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/controllers/repository_controller.py +0 -0
  24. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/dashboard/__init__.py +0 -0
  25. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/dashboard/app.py +0 -0
  26. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/__init__.py +0 -0
  27. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/carbon_reporter.py +0 -0
  28. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/codecarbon_meter.py +0 -0
  29. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/cpu_meter.py +0 -0
  30. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/rapl.py +0 -0
  31. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/gsf_patterns.py +0 -0
  32. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/__init__.py +0 -0
  33. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/aggregated_stats.py +0 -0
  34. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/analysis_result.py +0 -0
  35. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/commit.py +0 -0
  36. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/repository.py +0 -0
  37. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/presenters/__init__.py +0 -0
  38. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/presenters/console_presenter.py +0 -0
  39. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/__init__.py +0 -0
  40. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/commit_extractor.py +0 -0
  41. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/data_aggregator.py +0 -0
  42. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/data_analyzer.py +0 -0
  43. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/github_fetcher.py +0 -0
  44. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/github_graphql_fetcher.py +0 -0
  45. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/reports.py +0 -0
  46. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/utils.py +0 -0
  47. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining.egg-info/SOURCES.txt +0 -0
  48. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining.egg-info/dependency_links.txt +0 -0
  49. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining.egg-info/requires.txt +0 -0
  50. {greenmining-1.1.5 → greenmining-1.1.6}/greenmining.egg-info/top_level.txt +0 -0
  51. {greenmining-1.1.5 → greenmining-1.1.6}/setup.cfg +0 -0
  52. {greenmining-1.1.5 → greenmining-1.1.6}/setup.py +0 -0
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.1.6] - 2026-01-31
4
+
5
+ ### Fixed
6
+ - EnergyMetrics property aliases (`energy_joules`, `average_power_watts`)
7
+ - Parallel energy measurement conflict with shared meter instance
8
+ - StatisticalAnalyzer timezone-aware date handling
9
+ - DataFrame column collision in pattern correlation analysis
10
+
11
+ ### Added
12
+ - `since_date` / `to_date` parameters for date-bounded commit analysis
13
+ - `created_before` / `pushed_after` search filters
14
+ - Dashboard, GraphQL API, and experiment documentation pages
15
+ - Full process metrics and method-level metrics documentation
16
+
17
+ ### Changed
18
+ - Energy measurement demonstrates all 4 backends: RAPL, CPU Meter, CodeCarbon, tracemalloc
19
+ - Removed all PyDriller references (replaced with gitpython + lizard)
20
+
21
+ ### Removed
22
+ - Qualitative Validation and Carbon Footprint Reporting steps from experiment
23
+
3
24
  ## [0.1.12] - 2025-12-03
4
25
 
5
26
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: greenmining
3
- Version: 1.1.5
3
+ Version: 1.1.6
4
4
  Summary: An empirical Python library for Mining Software Repositories (MSR) in Green IT research
5
5
  Author-email: Adam Bouafia <a.bouafia@student.vu.nl>
6
6
  License: MIT
@@ -9,7 +9,7 @@ from greenmining.gsf_patterns import (
9
9
  is_green_aware,
10
10
  )
11
11
 
12
- __version__ = "1.1.5"
12
+ __version__ = "1.1.6"
13
13
 
14
14
 
15
15
  def fetch_repositories(
@@ -50,7 +50,8 @@ class StatisticalAnalyzer:
50
50
  def temporal_trend_analysis(self, commits_df: pd.DataFrame) -> Dict[str, Any]:
51
51
  # Analyze temporal trends in green awareness.
52
52
  # Prepare time series data
53
- commits_df["date"] = pd.to_datetime(commits_df["date"])
53
+ commits_df["date"] = pd.to_datetime(commits_df["date"], utc=True, errors="coerce")
54
+ commits_df["date"] = commits_df["date"].dt.tz_localize(None)
54
55
  commits_df = commits_df.sort_values("date")
55
56
 
56
57
  # Monthly aggregation
@@ -42,6 +42,14 @@ class EnergyMetrics:
42
42
  start_time: Optional[datetime] = None
43
43
  end_time: Optional[datetime] = None
44
44
 
45
+ @property
46
+ def energy_joules(self) -> float:
47
+ return self.joules
48
+
49
+ @property
50
+ def average_power_watts(self) -> float:
51
+ return self.watts_avg
52
+
45
53
  def to_dict(self) -> Dict[str, Any]:
46
54
  # Convert to dictionary.
47
55
  return {
@@ -470,13 +470,16 @@ class LocalRepoAnalyzer:
470
470
 
471
471
  colored_print(f" Cloning to: {local_path}", "cyan")
472
472
 
473
- # Phase 2.2: Start energy measurement if enabled
473
+ # Phase 2.2: Start energy measurement if enabled (fresh meter per repo)
474
474
  energy_result = None
475
- if self.energy_tracking and self._energy_meter:
475
+ energy_meter = None
476
+ if self.energy_tracking:
476
477
  try:
477
- self._energy_meter.start()
478
- except Exception as e:
479
- colored_print(f" Warning: Energy measurement start failed: {e}", "yellow")
478
+ from greenmining.energy.base import get_energy_meter
479
+ energy_meter = get_energy_meter(self.energy_backend)
480
+ energy_meter.start()
481
+ except Exception:
482
+ energy_meter = None
480
483
 
481
484
  commits_analyzed = []
482
485
  commit_count = 0
@@ -503,11 +506,11 @@ class LocalRepoAnalyzer:
503
506
  colored_print(f" Analyzed {len(commits_analyzed)} commits", "green")
504
507
 
505
508
  # Phase 2.2: Stop energy measurement
506
- if self.energy_tracking and self._energy_meter:
509
+ if energy_meter:
507
510
  try:
508
- energy_result = self._energy_meter.stop()
509
- except Exception as e:
510
- colored_print(f" Warning: Energy measurement stop failed: {e}", "yellow")
511
+ energy_result = energy_meter.stop()
512
+ except Exception:
513
+ pass
511
514
 
512
515
  # Compute process metrics if enabled
513
516
  process_metrics = {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: greenmining
3
- Version: 1.1.5
3
+ Version: 1.1.6
4
4
  Summary: An empirical Python library for Mining Software Repositories (MSR) in Green IT research
5
5
  Author-email: Adam Bouafia <a.bouafia@student.vu.nl>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "greenmining"
7
- version = "1.1.5"
7
+ version = "1.1.6"
8
8
  description = "An empirical Python library for Mining Software Repositories (MSR) in Green IT research"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
File without changes
File without changes
File without changes
File without changes
File without changes