rgwfuncs 0.0.85__py3-none-any.whl → 0.0.87__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
rgwfuncs/docs_lib.py CHANGED
@@ -49,3 +49,4 @@ def docs(method_type_filter: Optional[str] = None) -> None:
49
49
  docstring: Optional[str] = functions[name].__doc__
50
50
  if docstring:
51
51
  print(f"\n{name}:\n{docstring}")
52
+ print()
@@ -14,9 +14,10 @@ from .docs_lib import * # noqa: F401, F403, E402
14
14
  def interactive_shell(local_vars: Dict[str, Any]) -> None:
15
15
  """
16
16
  Launch an interactive prompt for inspecting and modifying local variables,
17
- with a custom blue output and white prompt. All helper definitions are nested within.
17
+ with blue-colored output and a white prompt. An extra blank line appears before each new prompt,
18
+ and the welcome banner is in blue.
18
19
 
19
- local_vars: dictionary with local variables to be available in the interactive shell.
20
+ local_vars: dictionary of local variables available to the interactive shell.
20
21
  """
21
22
 
22
23
  # ANSI color escape codes.
@@ -24,7 +25,7 @@ def interactive_shell(local_vars: Dict[str, Any]) -> None:
24
25
  WHITE = "\033[37m"
25
26
  RESET = "\033[0m"
26
27
 
27
- # Helper: setup readline for history persistence.
28
+ # Function to set up readline history.
28
29
  def setup_readline() -> None:
29
30
  HISTORY_FILE = os.path.expanduser("~/.rgwfuncs_shell_history")
30
31
  readline.set_history_length(1000)
@@ -36,18 +37,18 @@ def interactive_shell(local_vars: Dict[str, Any]) -> None:
36
37
  print(f"Warning: Could not load history file: {e}")
37
38
  atexit.register(readline.write_history_file, HISTORY_FILE)
38
39
 
39
- # Nested BlueStdout: a wrapper for sys.stdout that prepends blue color on output.
40
+ # BlueStdout: wrapper for stdout to output text in blue.
40
41
  class BlueStdout:
41
42
  def __init__(self, wrapped):
42
43
  self.wrapped = wrapped
43
44
  self.at_line_start = True
44
45
 
45
46
  def write(self, s):
46
- # Do not interfere with the prompt strings.
47
+ # If s matches our prompt strings, write it as-is.
47
48
  if s == sys.ps1 or s == sys.ps2:
48
49
  self.wrapped.write(s)
49
50
  return
50
- # Process output line by line.
51
+ # Process output line by line so each new line is colored.
51
52
  lines = s.split('\n')
52
53
  for i, line in enumerate(lines):
53
54
  if self.at_line_start and line:
@@ -72,8 +73,8 @@ def interactive_shell(local_vars: Dict[str, Any]) -> None:
72
73
  def __getattr__(self, attr):
73
74
  return getattr(self.wrapped, attr)
74
75
 
75
- # Nested ColorInteractiveConsole: a subclass of InteractiveConsole that temporarily
76
- # restores the original stdout when reading input so that readline functions properly.
76
+ # ColorInteractiveConsole: subclass InteractiveConsole to temporarily restore the original
77
+ # stdout during input, and print a blank line before each prompt.
77
78
  class ColorInteractiveConsole(code.InteractiveConsole):
78
79
  def raw_input(self, prompt=""):
79
80
  saved_stdout = sys.stdout
@@ -86,30 +87,32 @@ def interactive_shell(local_vars: Dict[str, Any]) -> None:
86
87
  sys.stdout = saved_stdout
87
88
  return line
88
89
 
89
- # Ensure that the passed local_vars is a dictionary.
90
+ # Ensure local_vars is a dictionary.
90
91
  if not isinstance(local_vars, dict):
91
92
  raise TypeError("local_vars must be a dictionary")
92
93
 
93
- # Setup readline.
94
+ # Setup readline for history and completion.
94
95
  setup_readline()
95
96
 
96
- # Make imported functions available in the REPL by merging globals.
97
+ # Merge globals into local_vars.
97
98
  local_vars.update(globals())
98
99
 
99
- # Wrap ANSI escape sequences in markers recognized by readline so that they do not count
100
- # toward the visible prompt length.
100
+ # Wrap ANSI escape codes with markers so that readline ignores them in prompt length.
101
101
  sys.ps1 = "\001" + WHITE + "\002" + ">>> " + "\001" + RESET + "\002"
102
102
  sys.ps2 = "\001" + WHITE + "\002" + "... " + "\001" + RESET + "\002"
103
103
 
104
- # Replace sys.stdout with our blue-printing wrapper.
104
+ # Replace sys.stdout with our BlueStdout to globally paint output.
105
105
  sys.stdout = BlueStdout(sys.__stdout__)
106
106
 
107
- # Instantiate our custom interactive console.
107
+ # Create our custom interactive console using the modified locals.
108
108
  console = ColorInteractiveConsole(locals=local_vars)
109
109
 
110
- banner = ("Welcome to the rgwfuncs interactive shell.\n"
110
+ # The banner is now explicitly wrapped in BLUE and RESET so it prints in blue.
111
+ banner = (BLUE +
112
+ "Welcome to the rgwfuncs interactive shell.\n"
111
113
  "Use up/down arrows for command history.\n"
112
- "Type 'exit()' or Ctrl+D to quit.")
114
+ "Type 'exit()' or Ctrl+D to quit." +
115
+ RESET)
113
116
  exitmsg = "Goodbye."
114
117
 
115
118
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rgwfuncs
3
- Version: 0.0.85
3
+ Version: 0.0.87
4
4
  Summary: A functional programming paradigm for mathematical modelling and data science
5
5
  Home-page: https://github.com/ryangerardwilson/rgwfunc
6
6
  Author: Ryan Gerard Wilson
@@ -0,0 +1,12 @@
1
+ rgwfuncs/__init__.py,sha256=LSn54Tlyskcb6Wab_wUpPLB6UGMe5LdrB3GU88mDEbU,1712
2
+ rgwfuncs/algebra_lib.py,sha256=rKFITfpWfgdBswnbMUuS41XgndEt-jUVz2ObO_ik7eM,42234
3
+ rgwfuncs/df_lib.py,sha256=r6T-MwyDq9NAPW1Xf6NzSy7ZFicIKdemR-UKu6TZt5g,71111
4
+ rgwfuncs/docs_lib.py,sha256=i63NzX-V8cGhikYdtkRGAEe2VcuwpXxDUyTRa9xI7l8,1972
5
+ rgwfuncs/interactive_shell_lib.py,sha256=KnGb3JgMH1B3JFfxWAzcTZUveQO63l_Gd1lHulEHm0g,4375
6
+ rgwfuncs/str_lib.py,sha256=rtAdRlnSJIu3JhI-tA_A0wCiPK2m-zn5RoGpBxv_g-4,2228
7
+ rgwfuncs-0.0.87.dist-info/LICENSE,sha256=jLvt20gcUZYB8UOvyBvyKQ1qhYYhD__qP7ZDx2lPFkU,1062
8
+ rgwfuncs-0.0.87.dist-info/METADATA,sha256=OIhgNbvYN8PewH9ESzS_A8n-L7HsCh13f_zoQdPntEM,60288
9
+ rgwfuncs-0.0.87.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
10
+ rgwfuncs-0.0.87.dist-info/entry_points.txt,sha256=j-c5IOPIQ0252EaOV6j6STio56sbXl2C4ym_fQ0lXx0,43
11
+ rgwfuncs-0.0.87.dist-info/top_level.txt,sha256=aGuVIzWsKiV1f2gCb6mynx0zx5ma0B1EwPGFKVEMTi4,9
12
+ rgwfuncs-0.0.87.dist-info/RECORD,,
@@ -1,12 +0,0 @@
1
- rgwfuncs/__init__.py,sha256=LSn54Tlyskcb6Wab_wUpPLB6UGMe5LdrB3GU88mDEbU,1712
2
- rgwfuncs/algebra_lib.py,sha256=rKFITfpWfgdBswnbMUuS41XgndEt-jUVz2ObO_ik7eM,42234
3
- rgwfuncs/df_lib.py,sha256=r6T-MwyDq9NAPW1Xf6NzSy7ZFicIKdemR-UKu6TZt5g,71111
4
- rgwfuncs/docs_lib.py,sha256=y3wSAOPO3qsA4HZ7xAtW8HimM8w-c8hjcEzMRLJ96ao,1960
5
- rgwfuncs/interactive_shell_lib.py,sha256=zM4WrG425WK3MsPOfSgxvJxRJsUV177IYrSGvE-uAQE,4254
6
- rgwfuncs/str_lib.py,sha256=rtAdRlnSJIu3JhI-tA_A0wCiPK2m-zn5RoGpBxv_g-4,2228
7
- rgwfuncs-0.0.85.dist-info/LICENSE,sha256=jLvt20gcUZYB8UOvyBvyKQ1qhYYhD__qP7ZDx2lPFkU,1062
8
- rgwfuncs-0.0.85.dist-info/METADATA,sha256=28YYKElMTP4Fm5TnxB8iU2F088nrhzQEg8YhM1XaoI4,60288
9
- rgwfuncs-0.0.85.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
10
- rgwfuncs-0.0.85.dist-info/entry_points.txt,sha256=j-c5IOPIQ0252EaOV6j6STio56sbXl2C4ym_fQ0lXx0,43
11
- rgwfuncs-0.0.85.dist-info/top_level.txt,sha256=aGuVIzWsKiV1f2gCb6mynx0zx5ma0B1EwPGFKVEMTi4,9
12
- rgwfuncs-0.0.85.dist-info/RECORD,,