Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
import numpy as np
import numpy.typing as npt
from typing_extensions import Self, Any
from geos.utils.Logger import ( Logger, getLogger )

from vtkmodules.vtkCommonDataModel import vtkDataSet
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from matplotlib.patches import Rectangle

from geos.utils.Logger import ( getLogger, Logger, CountVerbosityHandler, isHandlerInLogger, getLoggerHandlerType )
from geos.mesh.stats.tetrahedraAnalysisHelpers import ( getCoordinatesDoublePrecision, extractTetConnectivity,
analyzeAllTets, computeQualityScore )

Expand Down Expand Up @@ -50,7 +50,7 @@
tetQualityAnalysisFilter.logger.error( f"The filter { tetQualityAnalysisFilter.logger.name } failed due to: { e }" )
"""

loggerName: str = "Tetrahedra Quality Analysis"
loggerTitle: str = "Tetrahedra Quality Analysis"


class TetQualityAnalysis:
Expand All @@ -73,15 +73,27 @@ def __init__( self: Self, meshes: dict[ str, vtkDataSet ], speHandler: bool = Fa
self.tets: dict[ int, int ] = {}
self.filename = 'mesh_comparison.png'

# Logger.
# Logger
self.logger: Logger
if not speHandler:
self.logger = getLogger( loggerName, True )
self.logger = getLogger( loggerTitle, True )
else:
self.logger = logging.getLogger( loggerName )
self.logger = logging.getLogger( loggerTitle )
self.logger.setLevel( logging.INFO )
self.logger.propagate = False

counter: CountVerbosityHandler = CountVerbosityHandler()
self.counter: CountVerbosityHandler
self.nbWarnings: int = 0
try:
self.counter = getLoggerHandlerType( type( counter ), self.logger )
self.counter.resetWarningCount()
except ValueError:
self.counter = counter
self.counter.setLevel( logging.INFO )

self.logger.addHandler( self.counter )

def setLoggerHandler( self: Self, handler: logging.Handler ) -> None:
"""Set a specific handler for the filter logger.

Expand All @@ -91,12 +103,10 @@ def setLoggerHandler( self: Self, handler: logging.Handler ) -> None:
Args:
handler (logging.Handler): The handler to add.
"""
self.handler = handler
if len( self.logger.handlers ) == 0:
if not isHandlerInLogger( handler, self.logger ):
self.logger.addHandler( handler )
else:
self.logger.warning( "The logger already has an handler, to use yours set the argument 'speHandler'"
" to True during the filter initialization." )
self.logger.warning( "The logger already has this handler, it has not been added." )

def applyFilter( self: Self ) -> None:
"""Apply Tetrahedra Analysis."""
Expand Down Expand Up @@ -228,7 +238,17 @@ def applyFilter( self: Self ) -> None:
self.computeDeltasFromBest()
self.createComparisonDashboard()

self.logger.info( f"The filter { self.logger.name } succeeded." )
result: str = f"The filter { self.logger.name } succeeded"
if self.counter.warningCount > 0:
self.logger.warning( f"{ result } but { self.counter.warningCount } warnings have been logged." )
else:
self.logger.info( f"{ result }." )

# Keep number of warnings logged during the filter application and reset the warnings count in case the filter is applied again.
self.nbWarnings = self.counter.warningCount
self.counter.resetWarningCount()

return

def printDistributionStatistics( self: Self ) -> None:
"""Print the distribution statistics for various metrics."""
Expand Down
8 changes: 6 additions & 2 deletions geos-pv/src/geos/pv/plugins/qc/PVTetQualityAnalysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# SPDX-FileContributor: Paloma Martinez
# ruff: noqa: E402 # disable Module level import not at top of file
import sys
import logging
from pathlib import Path
from typing_extensions import Self, Optional

Expand All @@ -24,6 +25,7 @@

from geos.processing.pre_processing.TetQualityAnalysis import TetQualityAnalysis
from geos.pv.utils.details import FilterCategory
from geos.utils.Logger import isHandlerInLogger

__doc__ = f"""
Tetrahedra QC is a ParaView plugin filter that analyze and compare the tetrahedras of two given vtkUnstructured grid datasets.
Expand All @@ -40,6 +42,8 @@
* Apply
"""

HANDLER: logging.Handler = VTKHandler()


@smproxy.filter( name="PVTetQualityAnalysis", label="Tetrahedra QC" )
@smhint.xml( f'<ShowInMenu category="{ FilterCategory.QC.value }"/>' )
Expand Down Expand Up @@ -103,8 +107,8 @@ def RequestData(

tetQualityAnalysisFilter: TetQualityAnalysis = TetQualityAnalysis( self._meshes, True )

if len( tetQualityAnalysisFilter.logger.handlers ) == 0:
tetQualityAnalysisFilter.setLoggerHandler( VTKHandler() )
if not isHandlerInLogger( HANDLER, tetQualityAnalysisFilter.logger ):
tetQualityAnalysisFilter.setLoggerHandler( HANDLER )

try:
tetQualityAnalysisFilter.setFilename( self._filename )
Expand Down