@@ -117,6 +117,33 @@ def test_carbon_tracker_TWO_GPU_PRIVATE_INFRA_CANADA(
117117 self .assertIsInstance (emissions , float )
118118 self .assertAlmostEqual (emissions , 6.262572537957655e-05 , places = 2 )
119119
120+ def test_monitor_power_uses_gpu_detail_position_when_gpu_index_is_missing (
121+ self ,
122+ mock_cli_setup ,
123+ mock_log_values ,
124+ mocked_get_gpu_details ,
125+ mocked_env_cloud_details ,
126+ mocked_is_gpu_details_available ,
127+ mocked_is_nvidia_system ,
128+ ):
129+ tracker = EmissionsTracker (measure_power_secs = 1 , save_to_file = False )
130+
131+ mock_gpu = mock .MagicMock ()
132+ from codecarbon .external .hardware import GPU
133+
134+ mock_gpu .__class__ = GPU
135+ mock_gpu .gpu_ids = [0 , 1 ]
136+ mock_gpu .devices = mock .MagicMock ()
137+ mock_gpu .devices .get_gpu_details .return_value = [
138+ {"gpu_utilization" : 10 },
139+ {"gpu_index" : 1 , "gpu_utilization" : 25 },
140+ ]
141+ tracker ._hardware = [mock_gpu ]
142+
143+ tracker ._monitor_power ()
144+
145+ self .assertEqual ([10 , 25 ], tracker ._gpu_utilization_history )
146+
120147 @mock .patch ("codecarbon.external.geography.requests.get" )
121148 def test_carbon_tracker_timeout (
122149 self ,
0 commit comments