@@ -827,100 +827,6 @@ def validate(self, fgraph):
827827 raise InconsistencyError ("Trying to reintroduce a removed node" )
828828
829829
830- class NodeFinder (Bookkeeper ):
831- def __init__ (self ):
832- self .fgraph = None
833- self .d = {}
834-
835- def on_attach (self , fgraph ):
836- if hasattr (fgraph , "get_nodes" ):
837- raise AlreadyThere ("NodeFinder is already present" )
838-
839- if self .fgraph is not None and self .fgraph != fgraph :
840- raise Exception ("A NodeFinder instance can only serve one FunctionGraph." )
841-
842- self .fgraph = fgraph
843- fgraph .get_nodes = partial (self .query , fgraph )
844- Bookkeeper .on_attach (self , fgraph )
845-
846- def clone (self ):
847- return type (self )()
848-
849- def on_detach (self , fgraph ):
850- """
851- Should remove any dynamically added functionality
852- that it installed into the function_graph
853- """
854- if self .fgraph is not fgraph :
855- raise Exception (
856- "This NodeFinder instance was not attached to the provided fgraph."
857- )
858- self .fgraph = None
859- del fgraph .get_nodes
860- Bookkeeper .on_detach (self , fgraph )
861-
862- def on_import (self , fgraph , node , reason ):
863- try :
864- self .d .setdefault (node .op , []).append (node )
865- except TypeError : # node.op is unhashable
866- return
867- except Exception as e :
868- print ("OFFENDING node" , type (node ), type (node .op ), file = sys .stderr ) # noqa: T201
869- try :
870- print ("OFFENDING node hash" , hash (node .op ), file = sys .stderr ) # noqa: T201
871- except Exception :
872- print ("OFFENDING node not hashable" , file = sys .stderr ) # noqa: T201
873- raise e
874-
875- def on_prune (self , fgraph , node , reason ):
876- try :
877- nodes = self .d [node .op ]
878- except TypeError : # node.op is unhashable
879- return
880- nodes .remove (node )
881- if not nodes :
882- del self .d [node .op ]
883-
884- def query (self , fgraph , op ):
885- try :
886- all = self .d .get (op , [])
887- except TypeError :
888- raise TypeError (
889- f"{ op } in unhashable and cannot be queried by the optimizer"
890- )
891- all = list (all )
892- return all
893-
894-
895- class PrintListener (Feature ):
896- def __init__ (self , active = True ):
897- self .active = active
898-
899- def on_attach (self , fgraph ):
900- if self .active :
901- print ("-- attaching to: " , fgraph ) # noqa: T201
902-
903- def on_detach (self , fgraph ):
904- """
905- Should remove any dynamically added functionality
906- that it installed into the function_graph
907- """
908- if self .active :
909- print ("-- detaching from: " , fgraph ) # noqa: T201
910-
911- def on_import (self , fgraph , node , reason ):
912- if self .active :
913- print (f"-- importing: { node } , reason: { reason } " ) # noqa: T201
914-
915- def on_prune (self , fgraph , node , reason ):
916- if self .active :
917- print (f"-- pruning: { node } , reason: { reason } " ) # noqa: T201
918-
919- def on_change_input (self , fgraph , node , i , r , new_r , reason = None ):
920- if self .active :
921- print (f"-- changing ({ node } .inputs[{ i } ]) from { r } to { new_r } " ) # noqa: T201
922-
923-
924830class PreserveVariableAttributes (Feature ):
925831 """
926832 This preserve some variables attributes and tag during optimization.
0 commit comments