classwithout_rdkit_log:"""Context manager to disable RDKit logs. By default all logs are disabled. Example: ```python import datamol as dm with dm.without_rdkit_log(): mol = dm.to_mol("CCCCO") # potential RDKit logs won't show ``` """def__init__(self,mute_errors:bool=True,mute_warning:bool=True,mute_info:bool=True,mute_debug:bool=True,enable:bool=True,):ifenableisFalse:mute_errors=Falsemute_warning=Falsemute_info=Falsemute_debug=False# Get current log stateself.previous_status=self._get_log_status()# Init the desired log state to apply during in the contextself.desired_status={}self.desired_status["rdApp.error"]=notmute_errorsself.desired_status["rdApp.warning"]=notmute_warningself.desired_status["rdApp.debug"]=notmute_debugself.desired_status["rdApp.info"]=notmute_infodef_get_log_status(self):"""Get the current log status of RDKit logs."""log_status=rdBase.LogStatus()log_status={st.split(":")[0]:st.split(":")[1]forstinlog_status.split("\n")}log_status={k:Trueifv=="enabled"elseFalsefork,vinlog_status.items()}returnlog_statusdef_apply_log_status(self,log_status):"""Apply an RDKit log status."""fork,vinlog_status.items():ifvisTrue:rdBase.EnableLog(k)else:rdBase.DisableLog(k)def__enter__(self):self._apply_log_status(self.desired_status)def__exit__(self,*args,**kwargs):self._apply_log_status(self.previous_status)