@@ -62,96 +62,6 @@ def md5(doc):
6262 return md5sum
6363
6464
65- def get_functools_partial_spec (func ):
66- func_str = func .func .__name__
67- args = func .args
68- keywords = func .keywords
69- return '{}(args={}, keywords={})' .format (func_str , args , keywords )
70-
71-
72- def format_spec (spec ):
73- args = spec .args
74- varargs = spec .varargs
75- keywords = spec .keywords
76- defaults = spec .defaults
77- if defaults is not None :
78- defaults = list (defaults )
79- for idx , item in enumerate (defaults ):
80- if not isinstance (item , functools .partial ):
81- continue
82-
83- defaults [idx ] = get_functools_partial_spec (item )
84-
85- defaults = tuple (defaults )
86-
87- return 'ArgSpec(args={}, varargs={}, keywords={}, defaults={})' .format (
88- args , varargs , keywords , defaults )
89-
90-
91- def queue_dict (member , cur_name ):
92- if cur_name != 'paddle' :
93- try :
94- eval (cur_name )
95- except (AttributeError , NameError , SyntaxError ) as e :
96- print (
97- "Error({}) occurred when `eval({})`, discard it." .format (
98- str (e ), cur_name ),
99- file = sys .stderr )
100- return
101-
102- if (inspect .isclass (member ) or inspect .isfunction (member ) or
103- inspect .ismethod (member )) and hasattr (
104- member , '__module__' ) and hasattr (member , '__name__' ):
105- args = member .__module__ + "." + member .__name__
106- try :
107- eval (args )
108- except (AttributeError , NameError , SyntaxError ) as e :
109- print (
110- "Error({}) occurred when `eval({})`, discard it for {}." .format (
111- str (e ), args , cur_name ),
112- file = sys .stderr )
113- return
114- else :
115- try :
116- args = inspect .getargspec (member )
117- has_type_error = False
118- except TypeError : # special for PyBind method
119- args = " " .join ([
120- line .strip () for line in pydoc .render_doc (member ).split ('\n ' )
121- if "->" in line
122- ])
123- has_type_error = True
124-
125- if not has_type_error :
126- args = format_spec (args )
127-
128- doc_md5 = md5 (member .__doc__ )
129- member_dict [cur_name ] = "({}, ('document', '{}'))" .format (args , doc_md5 )
130-
131-
132- def visit_member (parent_name , member , member_name = None ):
133- if member_name :
134- cur_name = "." .join ([parent_name , member_name ])
135- else :
136- cur_name = "." .join ([parent_name , member .__name__ ])
137- if inspect .isclass (member ):
138- queue_dict (member , cur_name )
139- for name , value in inspect .getmembers (member ):
140- if hasattr (value , '__name__' ) and not name .startswith ("_" ):
141- visit_member (cur_name , value )
142- elif inspect .ismethoddescriptor (member ):
143- return
144- elif inspect .isbuiltin (member ):
145- return
146- elif callable (member ):
147- queue_dict (member , cur_name )
148- elif inspect .isgetsetdescriptor (member ):
149- return
150- else :
151- raise RuntimeError ("Unsupported generate signature of member, type {0}" .
152- format (str (type (member ))))
153-
154-
15565def is_primitive (instance ):
15666 int_types = (int , )
15767 pritimitive_types = int_types + (float , str )
@@ -167,6 +77,13 @@ def is_primitive(instance):
16777 return False
16878
16979
80+ ErrorSet = set ()
81+ IdSet = set ()
82+ skiplist = [
83+ 'paddle.vision.datasets.DatasetFolderImageFolder' , 'paddle.truncdigamma'
84+ ]
85+
86+
17087def visit_all_module (mod ):
17188 mod_name = mod .__name__
17289 if mod_name != 'paddle' and not mod_name .startswith ('paddle.' ):
@@ -177,37 +94,36 @@ def visit_all_module(mod):
17794
17895 if mod in visited_modules :
17996 return
180-
18197 visited_modules .add (mod )
98+
99+ member_names = dir (mod )
182100 if hasattr (mod , "__all__" ):
183- member_names = (name for name in mod .__all__
184- if not name .startswith ("_" ))
185- elif mod_name == 'paddle' :
186- member_names = dir (mod )
187- else :
188- return
101+ member_names += mod .__all__
189102 for member_name in member_names :
190- instance = getattr (mod , member_name , None )
191- if instance is None :
103+ if member_name .startswith ('__' ):
192104 continue
193-
194- if is_primitive (instance ):
195- continue
196-
197- if not hasattr (instance , "__name__" ):
198- continue
199-
200- if inspect .ismodule (instance ):
201- visit_all_module (instance )
202- else :
203- if member_name != instance .__name__ :
204- print (
205- "Found alias API, alias name is: {}, original name is: {}" .
206- format (member_name , instance .__name__ ),
207- file = sys .stderr )
208- visit_member (mod .__name__ , instance , member_name )
105+ cur_name = mod_name + '.' + member_name
106+ try :
107+ instance = getattr (mod , member_name )
108+ if inspect .ismodule (instance ):
109+ visit_all_module (instance )
209110 else :
210- visit_member (mod .__name__ , instance )
111+ doc_md5 = md5 (instance .__doc__ )
112+ instance_id = id (instance )
113+ if instance_id in IdSet :
114+ continue
115+ IdSet .add (instance_id )
116+ member_dict [cur_name ] = "({}, ('document', '{}'))" .format (
117+ cur_name , doc_md5 )
118+ if hasattr (instance ,
119+ '__name__' ) and member_name != instance .__name__ :
120+ print (
121+ "Found alias API, alias name is: {}, original name is: {}" .
122+ format (member_name , instance .__name__ ),
123+ file = sys .stderr )
124+ except :
125+ if not cur_name in ErrorSet and not cur_name in skiplist :
126+ ErrorSet .add (cur_name )
211127
212128
213129# all from gen_doc.py
@@ -306,28 +222,22 @@ def process_module(m, attr="__all__"):
306222
307223
308224def get_all_api_from_modulelist ():
309- modulelist = [
310- paddle , paddle .amp , paddle .nn , paddle .nn .functional ,
311- paddle .nn .initializer , paddle .nn .utils , paddle .static , paddle .static .nn ,
312- paddle .io , paddle .jit , paddle .metric , paddle .distribution ,
313- paddle .optimizer , paddle .optimizer .lr , paddle .regularizer , paddle .text ,
314- paddle .utils , paddle .utils .download , paddle .utils .profiler ,
315- paddle .utils .cpp_extension , paddle .sysconfig , paddle .vision ,
316- paddle .distributed , paddle .distributed .fleet ,
317- paddle .distributed .fleet .utils , paddle .distributed .parallel ,
318- paddle .distributed .utils , paddle .callbacks , paddle .hub , paddle .autograd
319- ]
225+ modulelist = [paddle ]
320226 for m in modulelist :
321227 visit_all_module (m )
322228
323229 return member_dict
324230
325231
326232if __name__ == '__main__' :
327- # modules = sys.argv[1].split(",")
328- # for m in modules:
329- # visit_all_module(importlib.import_module(m))
330233 get_all_api_from_modulelist ()
331234
332235 for name in member_dict :
333236 print (name , member_dict [name ])
237+ if len (ErrorSet ) == 0 :
238+ sys .exit (0 )
239+ for erroritem in ErrorSet :
240+ print (
241+ "Error, new function {} is unreachable" .format (erroritem ),
242+ file = sys .stderr )
243+ sys .exit (1 )
0 commit comments