greenmining 1.1.5__py3-none-any.whl → 1.1.6__py3-none-any.whl

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.
greenmining/__init__.py CHANGED
@@ -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
@@ -1,4 +1,4 @@
1
- greenmining/__init__.py,sha256=1TrBIx5HvQhay8_08G-PggpKeGe3zM061Y27Jy_fEcI,3390
1
+ greenmining/__init__.py,sha256=jkQOxpAJmEyUIt6LgwuGESxdSsDWGd0qv1Vrsa26YzM,3390
2
2
  greenmining/__main__.py,sha256=NYOVS7D4w2XDLn6SyXHXPKE5GrNGOeoWSTb_KazgK5c,590
3
3
  greenmining/__version__.py,sha256=xZc02a8bS3vUJlzh8k9RoxemB1irQmq_SpVVj6Cg5M0,62
4
4
  greenmining/config.py,sha256=M4a7AwM1ErCmOY0n5Vmyoo9HPblSkTZ-HD3k2YHzs4A,8340
@@ -9,7 +9,7 @@ greenmining/analyzers/code_diff_analyzer.py,sha256=1dk68R3O0RZG8gx1cm9B_UlZ1Uwyb
9
9
  greenmining/analyzers/metrics_power_correlator.py,sha256=qMKr4hSTzT0Un3vsGZNkPCp9TxyzdFwrhjw5M1IKOgk,5964
10
10
  greenmining/analyzers/power_regression.py,sha256=5pxs7IoTtGcwwX5KzGeM5hOm2I9Axr-0X4N_4007iMw,7387
11
11
  greenmining/analyzers/qualitative_analyzer.py,sha256=RcjOMLj_DPH869ey9J0uI7JK_krCefMhNkPLOJUDFF8,15391
12
- greenmining/analyzers/statistical_analyzer.py,sha256=DzWAcCyw42Ig3FIxTwPPBikgt2uzMdktxklonOYfnOk,7166
12
+ greenmining/analyzers/statistical_analyzer.py,sha256=rqLsRGuOHhxEMQAFx5dmWMHDgdb6ktL7CY3dAebQvpA,7262
13
13
  greenmining/analyzers/temporal_analyzer.py,sha256=JfTcAoI20oCFMehGrSRnDqhJTXI-RUbdCTMwDOTW9-g,14259
14
14
  greenmining/analyzers/version_power_analyzer.py,sha256=2P6zOqBg-ButtIhF-4cutiwD2Q1geMY49VFUghHXXoI,8119
15
15
  greenmining/controllers/__init__.py,sha256=UiAT6zBvC1z_9cJWfzq1cLA0I4r9b2vURHipj8oDczI,180
@@ -17,7 +17,7 @@ greenmining/controllers/repository_controller.py,sha256=DM9BabUAwZJARGngCk_4wEYP
17
17
  greenmining/dashboard/__init__.py,sha256=Ig_291-hLrH9k3rV0whhQ1EkhiaRR8ciHiJ5s5OCBf4,141
18
18
  greenmining/dashboard/app.py,sha256=Hk6_i2qmcg6SGW7UzxglEIvUBJiloRA-hMYI-YSORcA,8604
19
19
  greenmining/energy/__init__.py,sha256=GoCYh7hitWBoPMtan1HF1yezCHi7o4sa_YUJgGkeJc8,558
20
- greenmining/energy/base.py,sha256=mVdp-E04KWu3UnHFL61pzrI-OP-KsUshAmXHwgsJkRU,5749
20
+ greenmining/energy/base.py,sha256=3hIPgc4B0Nz9V7DTh2Xd6trDRtmozUBBpa5UWRuWzcw,5918
21
21
  greenmining/energy/carbon_reporter.py,sha256=bKIFlLhHfYzI4DBu_ff4GW1Psz4oSCAF4NmzQb-EShA,8298
22
22
  greenmining/energy/codecarbon_meter.py,sha256=HyQptyEaS1ZMu_qdxg0Tyuly1PCmmbbNwwYX8qYsTs4,4927
23
23
  greenmining/energy/cpu_meter.py,sha256=mhEG3Y7fjz3wV5lojcYeFXvCXXgmelGQaBfN2q7yTNc,5007
@@ -35,10 +35,10 @@ greenmining/services/data_aggregator.py,sha256=TsFT0oGOnnHk0QGZ1tT6ZhKGc5X1H1D1u
35
35
  greenmining/services/data_analyzer.py,sha256=f0nlJkPAclHHCzzTyQW5bjhYrgE0XXiR1x7_o3fJaDs,9732
36
36
  greenmining/services/github_fetcher.py,sha256=sdkS-LhHmX7mgMdlClCwEUVnZrItc0Pt6FVtlWk5iLU,106
37
37
  greenmining/services/github_graphql_fetcher.py,sha256=ZklXdEAc60KeFL83zRYMwW_-2OwMKpfPY7Wrifl0D50,11539
38
- greenmining/services/local_repo_analyzer.py,sha256=N3QT7qLKT7ddvOhygJfUG5eMGcHIGeVevuleHB0oCN8,24918
38
+ greenmining/services/local_repo_analyzer.py,sha256=pnH_Hf3GjCFovurEl2uZgOgD3qjqcsP2K1QnKHddkSY,24903
39
39
  greenmining/services/reports.py,sha256=Vrw_pBNmVw2mTAf1dpcAqjBe6gXv-O4w_XweoVTt7L8,23392
40
- greenmining-1.1.5.dist-info/licenses/LICENSE,sha256=M7ma3JHGeiIZIs3ea0HTcFl_wLFPX2NZElUliYs4bCA,1083
41
- greenmining-1.1.5.dist-info/METADATA,sha256=MMoin-BR4dQGdzPploVH2GIpCQY9NGnDT-I6X_C1mfw,30811
42
- greenmining-1.1.5.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
43
- greenmining-1.1.5.dist-info/top_level.txt,sha256=nreXgXxZIWI-42yQknQ0HXtUrFnzZ8N1ra4Mdy2KcsI,12
44
- greenmining-1.1.5.dist-info/RECORD,,
40
+ greenmining-1.1.6.dist-info/licenses/LICENSE,sha256=M7ma3JHGeiIZIs3ea0HTcFl_wLFPX2NZElUliYs4bCA,1083
41
+ greenmining-1.1.6.dist-info/METADATA,sha256=ADh-CwQLjdVv3P3BdMI8Ao50u1dPngilhoCTcX-Hr7M,30811
42
+ greenmining-1.1.6.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
43
+ greenmining-1.1.6.dist-info/top_level.txt,sha256=nreXgXxZIWI-42yQknQ0HXtUrFnzZ8N1ra4Mdy2KcsI,12
44
+ greenmining-1.1.6.dist-info/RECORD,,