@@ -50,155 +50,97 @@ def left_formatter(value):
50
50
return f'{ value :<} '
51
51
elif value [0 :maxwidth ] == '-' * maxwidth :
52
52
return f'{ value :<{w }.{w }s} '
53
- #elif len(value) > maxwidth and value[0:maxwidth] != '-'*maxwidth:
54
53
elif len (value ) > maxwidth :
55
54
return f'{ value :<{wm3 }.{wm3 }s} ...'
56
55
else :
57
56
return f'{ value :<{w }.{w }s} '
58
57
return left_formatter
59
58
60
59
61
- def kwarg_help ( func_name , kwarg_names = None ):
60
+ def kwarg_help ( func_name = None , kwarg_names = None ):
62
61
63
62
func_kwarg_map = {
64
63
'plot' : mpf .plotting ._valid_plot_kwargs ,
65
64
'make_addplot' : mpf .plotting ._valid_addplot_kwargs ,
66
- 'addplot' : mpf .plotting ._valid_addplot_kwargs ,
67
65
'make_marketcolors' : mpf ._styles ._valid_make_marketcolors_kwargs ,
68
- 'marketcolors' : mpf ._styles ._valid_make_marketcolors_kwargs ,
69
66
'make_mpf_style' : mpf ._styles ._valid_make_mpf_style_kwargs ,
67
+ 'renko_params' : mpf ._utils ._valid_renko_kwargs ,
68
+ 'pnf_params' : mpf ._utils ._valid_pnf_kwargs ,
69
+ 'lines' : mpf ._utils ._valid_lines_kwargs ,
70
+ }
71
+
72
+ func_kwarg_aliases = {
73
+ 'addplot' : mpf .plotting ._valid_addplot_kwargs ,
74
+ 'marketcolors' : mpf ._styles ._valid_make_marketcolors_kwargs ,
70
75
'mpf_style' : mpf ._styles ._valid_make_mpf_style_kwargs ,
71
76
'style' : mpf ._styles ._valid_make_mpf_style_kwargs ,
72
- 'renko_params' : mpf ._utils ._valid_renko_kwargs ,
73
77
'renko' : mpf ._utils ._valid_renko_kwargs ,
74
- 'pnf_params' : mpf ._utils ._valid_pnf_kwargs ,
75
78
'pnf' : mpf ._utils ._valid_pnf_kwargs ,
76
79
'hlines' : mpf ._utils ._valid_lines_kwargs ,
77
80
'alines' : mpf ._utils ._valid_lines_kwargs ,
78
81
'tlines' : mpf ._utils ._valid_lines_kwargs ,
79
82
'vlines' : mpf ._utils ._valid_lines_kwargs ,
80
- 'lines' : mpf ._utils ._valid_lines_kwargs ,
81
83
}
82
84
83
- if func_name not in func_kwarg_map :
85
+ if func_name is None :
86
+ print ('\n Usage: `kwarg_help(func_name)` or `kwarg_help(func_name,kwarg_names)`' )
87
+ print (' kwarg_help is available for the following func_names:' )
88
+ s = str (list (func_kwarg_map .keys ()))
89
+ text = textwrap .wrap (s ,68 )
90
+ for t in text :
91
+ print (' ' ,t )
92
+ print ()
93
+ return
94
+
95
+ fkmap = {** func_kwarg_map , ** func_kwarg_aliases }
96
+
97
+ if func_name not in fkmap :
84
98
raise ValueError ('Function name "' + func_name + '" NOT a valid function name' )
85
99
86
- print ('func_name=' ,func_name )
87
-
88
- vks = func_kwarg_map [func_name ]()
89
-
90
- df = (pd .DataFrame (vks ).T .head (18 )).drop ('Validator' ,axis = 1 )
91
- print ('valid kwargs=\n ' ,df )
92
-
93
-
94
- kwarg_help ('plot' )
95
- kwarg_help ('xyz' )
96
-
97
-
98
-
99
- # vk = mpf.plotting._valid_plot_kwargs()
100
- #
101
- # df = (pd.DataFrame(vk).T.head(18)).drop('Validator',axis=1)
102
- #
103
- # df['Kwarg'] = df.index.values
104
- # df['Default'] = ["'"+d+"'" if isinstance(d,str) else str(d) for d in df['Default']]
105
- #
106
- # df = df[['Kwarg','Default','Description']]
107
- # df = df.head(5).append(df.tail(7))
108
- #
109
- # # df.sort_index(inplace=True)
110
- #
111
- # df
112
- #
113
- # print('===========================')
114
- #
115
- # print(df)
116
- #
117
- # print('===========================')
118
- #
119
- # def make_left_formatter(maxwidth):
120
- # wm3 = maxwidth-3
121
- # w = maxwidth
122
- # def left_formatter(value):
123
- # if not isinstance(value,str):
124
- # return f'{value:<}'
125
- # elif value[0:maxwidth] == '-'*maxwidth:
126
- # return f'{value:<{w}.{w}s}'
127
- # #elif len(value) > maxwidth and value[0:maxwidth] != '-'*maxwidth:
128
- # elif len(value) > maxwidth:
129
- # return f'{value:<{wm3}.{wm3}s}...'
130
- # else:
131
- # return f'{value:<{w}.{w}s}'
132
- # return left_formatter
133
- #
134
- # def df_wrapcols(df,wrap_columns=None):
135
- #
136
- # if wrap_columns is None: return df
137
- # if not isinstance(wrap_columns,dict):
138
- # raise TypeError('wrap_columns must be a dict of column_names and wrap_lengths')
139
- #
140
- # for col in wrap_columns:
141
- # if col not in df.columns:
142
- # raise ValueError('column "'+str(col)+'" not found in df.columns')
143
- #
144
- # index = []
145
- # column_data = {}
146
- # for col in df.columns:
147
- # column_data[col] = []
148
- #
149
- # for ix in df.index:
150
- # row = df.loc[ix,]
151
- #
152
- # row_data = {}
153
- # for col in row.index:
154
- # cstr = str(row[col])
155
- # if col in wrap_columns:
156
- # wlen = wrap_columns[col]
157
- # tw = textwrap.wrap(cstr,wlen) if not cstr.isspace() else [' ']
158
- # else:
159
- # tw = [cstr]
160
- # row_data[col] = tw
161
- #
162
- # cmax = max(row_data,key=lambda k: len(row_data[k]))
163
- # rlen = len(row_data[cmax])
164
- # for r in range(rlen):
165
- # for col in row.index:
166
- # extension = [' ']*(rlen - len(row_data[col]))
167
- # row_data[col].extend(extension)
168
- # column_data[col].append(row_data[col][r])
169
- # ixstr = str(ix)+'.'+str(r) if r > 0 else str(ix)
170
- # index.append(ixstr)
171
- #
172
- # return pd.DataFrame(column_data,index=index)
173
- #
174
- # WRAPLEN = 55
175
- #
176
- # df = df_wrapcols(df,wrap_columns={'Description':WRAPLEN})
177
- # print('===========================')
178
- # print('dfnew1=',df)
179
- #
180
- #
181
- # # print('===========================')
182
- # # df.columns = [ ' '+col for col in df.columns ]
183
- #
184
- # dividers = []
185
- # for col in df.columns:
186
- # dividers.append('-'*int(df[col].str.len().max()))
187
- # dfd = pd.DataFrame(dividers).T
188
- # dfd.columns = df.columns
189
- # dfd.index = pd.Index(['---'])
190
- #
191
- # print('===========================')
192
- #
193
- # df = dfd.append(df)
194
- #
195
- # fmts = {'Kwarg': make_left_formatter(df['Kwarg'].str.len().max()+1),
196
- # 'Description': make_left_formatter(WRAPLEN),
197
- # 'Default': make_left_formatter(8),
198
- # }
199
- # s = df.to_string(formatters=fmts,index=False,justify='left')
200
- #
201
- # print('\n ',s.replace('\n','\n '))
202
- #
203
- # print('===========================')
204
- #
100
+ if kwarg_names is not None and isinstance (kwarg_names ,str ):
101
+ kwarg_names = [ kwarg_names , ]
102
+
103
+ if ( kwarg_names is not None
104
+ and (not isinstance (kwarg_names ,(list ,tuple ))
105
+ or not all ([isinstance (k ,str ) for k in kwarg_names ])
106
+ )
107
+ ):
108
+ raise ValueError ('kwarg_names must be a sequence (list,tuple) of strings' )
109
+
110
+ vks = fkmap [func_name ]()
111
+
112
+ df = (pd .DataFrame (vks ).T ).drop ('Validator' ,axis = 1 )
113
+ df .index .name = 'Kwarg'
114
+ df .reset_index (inplace = True )
115
+
116
+ if kwarg_names is not None :
117
+ for k in kwarg_names :
118
+ if k not in df ['Kwarg' ].values :
119
+ print (' Warning: "' + k + '" is not a valid `kwarg_name` for `func_name` "' + func_name ,'"' )
120
+ df = df [ df ['Kwarg' ].isin (kwarg_names ) ]
121
+ if len (df ) < 1 :
122
+ raise ValueError (' None of specified `kwarg_names` are valid for `func_name` "' + func_name ,'"' )
123
+
124
+ wraplen = 80 - (df ['Kwarg' ].str .len ().max ()+ 1 + 8 )
125
+ df = df_wrapcols (df ,wrap_columns = {'Description' :wraplen })
126
+
127
+ dividers = []
128
+ for col in df .columns :
129
+ dividers .append ('-' * int (df [col ].str .len ().max ()))
130
+ dfd = pd .DataFrame (dividers ).T
131
+ dfd .columns = df .columns
132
+ dfd .index = pd .Index (['---' ])
133
+
134
+ df = dfd .append (df )
135
+
136
+ formatters = { 'Kwarg' : make_left_formatter (df ['Kwarg' ].str .len ().max ()+ 1 ),
137
+ 'Default' : make_left_formatter ( 8 ),
138
+ 'Description' : make_left_formatter ( wraplen ),
139
+ }
140
+
141
+ print ('\n ' ,'-' * 78 )
142
+ print (' Kwargs for func_name "' + func_name + '":' )
143
+
144
+ s = df .to_string (formatters = formatters ,index = False ,justify = 'left' )
145
+
146
+ print ('\n ' ,s .replace ('\n ' ,'\n ' ))
0 commit comments