55import numpy as np
66import numpy .typing as npt
77from typing_extensions import Self , Any
8- from geos .utils .Logger import ( Logger , getLogger )
98
109from vtkmodules .vtkCommonDataModel import vtkDataSet
1110import matplotlib .pyplot as plt
1211import matplotlib .gridspec as gridspec
1312from matplotlib .patches import Rectangle
1413
14+ from geos .utils .Logger import ( getLogger , Logger , CountVerbosityHandler , isHandlerInLogger , getLoggerHandlerType )
1515from geos .mesh .stats .tetrahedraAnalysisHelpers import ( getCoordinatesDoublePrecision , extractTetConnectivity ,
1616 analyzeAllTets , computeQualityScore )
1717
5050 tetQualityAnalysisFilter.logger.error( f"The filter { tetQualityAnalysisFilter.logger.name } failed due to: { e }" )
5151"""
5252
53- loggerName : str = "Tetrahedra Quality Analysis"
53+ loggerTitle : str = "Tetrahedra Quality Analysis"
5454
5555
5656class TetQualityAnalysis :
@@ -73,15 +73,27 @@ def __init__( self: Self, meshes: dict[ str, vtkDataSet ], speHandler: bool = Fa
7373 self .tets : dict [ int , int ] = {}
7474 self .filename = 'mesh_comparison.png'
7575
76- # Logger.
76+ # Logger
7777 self .logger : Logger
7878 if not speHandler :
79- self .logger = getLogger ( loggerName , True )
79+ self .logger = getLogger ( loggerTitle , True )
8080 else :
81- self .logger = logging .getLogger ( loggerName )
81+ self .logger = logging .getLogger ( loggerTitle )
8282 self .logger .setLevel ( logging .INFO )
8383 self .logger .propagate = False
8484
85+ counter : CountVerbosityHandler = CountVerbosityHandler ()
86+ self .counter : CountVerbosityHandler
87+ self .nbWarnings : int = 0
88+ try :
89+ self .counter = getLoggerHandlerType ( type ( counter ), self .logger )
90+ self .counter .resetWarningCount ()
91+ except ValueError :
92+ self .counter = counter
93+ self .counter .setLevel ( logging .INFO )
94+
95+ self .logger .addHandler ( self .counter )
96+
8597 def setLoggerHandler ( self : Self , handler : logging .Handler ) -> None :
8698 """Set a specific handler for the filter logger.
8799
@@ -91,12 +103,10 @@ def setLoggerHandler( self: Self, handler: logging.Handler ) -> None:
91103 Args:
92104 handler (logging.Handler): The handler to add.
93105 """
94- self .handler = handler
95- if len ( self .logger .handlers ) == 0 :
106+ if not isHandlerInLogger ( handler , self .logger ):
96107 self .logger .addHandler ( handler )
97108 else :
98- self .logger .warning ( "The logger already has an handler, to use yours set the argument 'speHandler'"
99- " to True during the filter initialization." )
109+ self .logger .warning ( "The logger already has this handler, it has not been added." )
100110
101111 def applyFilter ( self : Self ) -> None :
102112 """Apply Tetrahedra Analysis."""
@@ -228,7 +238,17 @@ def applyFilter( self: Self ) -> None:
228238 self .computeDeltasFromBest ()
229239 self .createComparisonDashboard ()
230240
231- self .logger .info ( f"The filter { self .logger .name } succeeded." )
241+ result : str = f"The filter { self .logger .name } succeeded"
242+ if self .counter .warningCount > 0 :
243+ self .logger .warning ( f"{ result } but { self .counter .warningCount } warnings have been logged." )
244+ else :
245+ self .logger .info ( f"{ result } ." )
246+
247+ # Keep number of warnings logged during the filter application and reset the warnings count in case the filter is applied again.
248+ self .nbWarnings = self .counter .warningCount
249+ self .counter .resetWarningCount ()
250+
251+ return
232252
233253 def printDistributionStatistics ( self : Self ) -> None :
234254 """Print the distribution statistics for various metrics."""
0 commit comments