2323import sys
2424from importlib .metadata import version
2525
26+
27+
2628try :
2729 from colored import fg , bg , attr
2830
5153puma = models .DH .Puma560 ()
5254panda = models .DH .Panda ()
5355
54-
55- def main ():
56- # setup defaults
57- np .set_printoptions (
58- linewidth = 120 ,
59- formatter = {"float" : lambda x : f"{ 0 :8.4g} " if abs (x ) < 1e-10 else f"{ x :8.4g} " },
60- )
61-
56+ def parse_arguments ():
6257 parser = argparse .ArgumentParser ("Robotics Toolbox shell" )
6358 parser .add_argument ("script" , default = None , nargs = "?" , help = "specify script to run" )
64- parser .add_argument ("--backend" , "-b" , default = None , help = "specify Matplotlib backend" )
59+ parser .add_argument (
60+ "--backend" , "-B" , default = None , help = "specify graphics backend"
61+ )
6562 parser .add_argument (
6663 "--color" ,
6764 "-c" ,
@@ -78,6 +75,14 @@ def main():
7875 default = None ,
7976 help = "execution result prefix, include {} for execution count number" ,
8077 )
78+ parser .add_argument (
79+ "-b" ,
80+ "--no-banner" ,
81+ dest = "banner" ,
82+ default = True ,
83+ action = "store_false" ,
84+ help = "suppress startup banner" ,
85+ )
8186 parser .add_argument (
8287 "--showassign" ,
8388 "-a" ,
@@ -89,10 +94,6 @@ def main():
8994 "--book" , default = False , action = "store_true" ,
9095 help = "use defaults as per RVC book"
9196 )
92- parser .add_argument (
93- "--vision" , default = False , action = "store_true" ,
94- help = "import vision toolbox (MVTB)"
95- )
9697 parser .add_argument (
9798 "--ansi" ,
9899 default = False ,
@@ -113,38 +114,25 @@ def main():
113114 action = "store_true" ,
114115 help = "use Swift as default backend" ,
115116 )
116- args = parser .parse_args ()
117+ args , rest = parser .parse_known_args ()
118+
119+ # remove the arguments we've just parsed from sys.argv so that IPython can have a
120+ # go at them later
121+ sys .argv = [sys .argv [0 ]] + rest
117122
118123 # TODO more options
119124 # color scheme, light/dark
120125 # silent startup
121126
122- sys .argv = [sys .argv [0 ]]
123-
124- if args .book :
125- # set book options
126- args .resultprefix = ""
127- args .prompt = ">>> "
128- args .showassign = True
129- args .ansi = False
130- args .examples = True
131-
132- # set default backend for Robot.plot
133- if args .swift :
134- Robot .default_backend = "swift"
135-
136- # set matrix printing mode for spatialmath
137- SE3 ._ansimatrix = args .ansi
138-
139- # set default matplotlib backend
140- if args .backend is not None :
141- print (f"Using matplotlb backend { args .backend } " )
142- mpl .use (args .backend )
127+ if args .script is not None :
128+ args .banner = False
143129
144- # build the banner, import * packages and their versions
130+ return args
145131
132+ def make_banner ():
146133 # banner template
147134 # https://patorjk.com/software/taag/#p=display&f=Cybermedium&t=Robotics%20Toolbox%0A
135+
148136 banner = f"""\
149137 ____ ____ ___ ____ ___ _ ____ ____ ___ ____ ____ _ ___ ____ _ _
150138 |__/ | | |__] | | | | | [__ | | | | | | |__] | | \/
@@ -186,13 +174,53 @@ def main():
186174
187175 print (fg ("yellow" ) + banner + attr (0 ))
188176
189- if args .showassign :
177+ def startup ():
178+ plt .ion ()
179+
180+ def main ():
181+
182+ args = parse_arguments ()
183+
184+
185+ # setup defaults
186+ np .set_printoptions (
187+ linewidth = 120 ,
188+ formatter = {"float" : lambda x : f"{ 0 :8.4g} " if abs (x ) < 1e-10 else f"{ x :8.4g} " },
189+ )
190+
191+ if args .book :
192+ # set book options
193+ args .resultprefix = ""
194+ args .prompt = ">>> "
195+ args .showassign = True
196+ args .ansi = False
197+ args .examples = True
198+
199+ # set default backend for Robot.plot
200+ if args .swift :
201+ Robot .default_backend = "swift"
202+
203+ # set matrix printing mode for spatialmath
204+ SE3 ._ansimatrix = args .ansi
205+
206+ # set default matplotlib backend
207+ if args .backend is not None :
208+ print (f"Using matplotlb backend { args .backend } " )
209+ mpl .use (args .backend )
210+
211+ # build the banner, import * packages and their versions
212+
213+
214+ if args .banner :
215+ banner = make_banner ()
216+ print (banner )
217+
218+ if args .showassign and args .banner :
190219 print (
191220 fg ("red" )
192- + """Results of assignments will be displayed, use trailing ; to suppress
193-
194- """ ,
195- attr (0 ),
221+ + "Results of assignments will be displayed, use trailing ; to suppress"
222+ + attr (0 )
223+ + "\n "
196224 )
197225
198226 # drop into IPython
@@ -222,7 +250,7 @@ def out_prompt_tokens(self, cli=None):
222250 c .InteractiveShell .prompts_class = MyPrompt
223251 if args .showassign :
224252 c .InteractiveShell .ast_node_interactivity = "last_expr_or_assign"
225-
253+ c . TerminalIPythonApp . force_interact = False
226254 # set precision, same as %precision
227255 c .PlainTextFormatter .float_precision = "%.3f"
228256
@@ -235,18 +263,16 @@ def out_prompt_tokens(self, cli=None):
235263 code = path .open ("r" ).readlines ()
236264 if code is None :
237265 code = [
266+ "startup()" ,
238267 "%precision %.3g" ,
239- "plt.ion()" ,
240268 ]
241-
242269 else :
243270 code .append ("plt.ion()" )
244- if args . vision :
245- code . append ( "from machinevisiontoolbox import *" )
271+
272+
246273 c .InteractiveShellApp .exec_lines = code
247274 IPython .start_ipython (config = c , user_ns = globals ())
248275
249276
250-
251277if __name__ == "__main__" :
252278 main ()
0 commit comments