@@ -441,14 +441,17 @@ def run(self, scenario: "Scenario") -> None:
441441 if key not in pattern_map :
442442 # Get capacity matrix for this pattern
443443 capacity_matrix = {}
444- for flow_key , envelope_data in envelopes .items ():
444+ for flow_key , _envelope_data in envelopes .items ():
445445 # Find capacity value for this pattern's iteration
446446 pattern_iter = pattern ["iteration_index" ]
447- if pattern_iter < len (envelope_data ["frequencies" ]):
447+ flow_tuple = self ._parse_flow_key (flow_key )
448+ if flow_tuple in samples and pattern_iter < len (
449+ samples [flow_tuple ]
450+ ):
448451 # Get capacity value from original samples
449- capacity_matrix [flow_key ] = samples [
450- self . _parse_flow_key ( flow_key )
451- ][ pattern_iter ]
452+ capacity_matrix [flow_key ] = samples [flow_tuple ][
453+ pattern_iter
454+ ]
452455
453456 pattern_map [key ] = FailurePatternResult (
454457 excluded_nodes = pattern ["excluded_nodes" ],
@@ -841,8 +844,14 @@ def _build_capacity_envelopes(
841844 Returns:
842845 Dictionary mapping flow keys to serialized CapacityEnvelope data.
843846 """
844- logger .debug (f"Building capacity envelopes from { len (samples )} flow pairs" )
847+ start_time = time .time ()
848+ total_samples = sum (len (values ) for values in samples .values ())
849+ logger .info (
850+ f"Building capacity envelopes from { len (samples )} flow pairs with { total_samples :,} total samples"
851+ )
852+
845853 envelopes = {}
854+ processed_flows = 0
846855
847856 for (src_label , dst_label ), capacity_values in samples .items ():
848857 if not capacity_values :
@@ -863,14 +872,26 @@ def _build_capacity_envelopes(
863872 )
864873 envelopes [flow_key ] = envelope .to_dict ()
865874
875+ processed_flows += 1
876+
866877 # Detailed logging with statistics
867878 logger .debug (
868879 f"Created frequency-based envelope for { flow_key } : { envelope .total_samples } samples, "
869880 f"min={ envelope .min_capacity :.2f} , max={ envelope .max_capacity :.2f} , "
870881 f"mean={ envelope .mean_capacity :.2f} , unique_values={ len (envelope .frequencies )} "
871882 )
872883
873- logger .debug (f"Successfully created { len (envelopes )} capacity envelopes" )
884+ # Progress logging for large numbers of flows
885+ if len (samples ) > 100 and processed_flows % max (1 , len (samples ) // 10 ) == 0 :
886+ elapsed = time .time () - start_time
887+ logger .info (
888+ f"Envelope building progress: { processed_flows } /{ len (samples )} flows processed in { elapsed :.1f} s"
889+ )
890+
891+ elapsed_time = time .time () - start_time
892+ logger .info (
893+ f"Generated { len (envelopes )} capacity envelopes in { elapsed_time :.2f} seconds"
894+ )
874895 return envelopes
875896
876897
0 commit comments