Source code for herbie.misc

## Brian Blaylock
## May 6, 2022

"""
██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██
  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██
██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██
  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██

                █ ██
                █ ██ ┏━┓ ┏━┓            ┏━┓   ┏━┓
                █ ██ ┃ ┃ ┃ ┃┏━━━━┓┏━┓┏━┓┃ ┃   ┏━┓┏━━━━┓
                █ ██ ┃ ┗━┛ ┃┃ ━━ ┃┃ ┏━━┛┃ ┗━━┓┃ ┃┃ ━━ ┃
                █ ██ ┃ ┏━┓ ┃┃ ━━━┓┃ ┃   ┃ ━━ ┃┃ ┃┃ ━━━┓
                █ ██ ┗━┛ ┗━┛┗━━━━┛┗━┛   ┗━━━━┛┗━┛┗━━━━┛
                █ ██
                       🏁 Retrieve NWP Model Data 🏁

██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██
  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██
██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██
  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██  ██
"""


[docs]class hc: """Herbie Color Pallette""" tan = "#f0ead2" red = "#88211b" blue = "#0c3576" white = "#ffffff" black = "#000000"
[docs]class ANSI: """ Herbie colors as ansi codes Reference --------- https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797 """ # Octal: \033 # Unicode: \u001b # Hexadecimal: \x1B ESC = "\x1B" # Style bold = f"{ESC}[1m" italic = f"{ESC}[3m" underline = f"{ESC}[4m" strikethrough = f"{ESC}[9m" reset = f"{ESC}[0m" # Text Colors red = f"{ESC}[38;2;136;33;27m" blue = f"{ESC}[38;2;12;53;118m" black = f"{ESC}[38;2;0;0;0m" white = f"{ESC}[37m" orange = f"{ESC}[38;2;255;153;0m" green = f"{ESC}[38;2;41;130;13m" bright_green = f"{ESC}[92m" # Background color _tan = f"{ESC}[48;2;240;234;210m" _white = f"{ESC}[48;2;255;255;255m" herbie = f"{_white}{red}{reset}{blue}{_tan}{black}{bold}Herbie{reset}" ascii = f""" {_tan}{' ':44}{reset} {_tan} {red}{blue}██ {black} {reset} {_tan} {red}{blue}██ {black}┏━┓ ┏━┓ ┏━┓ ┏━┓ {reset} {_tan} {red}{blue}██ {black}┃ ┃ ┃ ┃┏━━━━┓┏━┓┏━┓┃ ┃ ┏━┓┏━━━━┓ {reset} {_tan} {red}{blue}██ {black}┃ ┗━┛ ┃┃ ━━ ┃┃ ┏━━┛┃ ┗━━┓┃ ┃┃ ━━ ┃ {reset} {_tan} {red}{blue}██ {black}┃ ┏━┓ ┃┃ ━━━┓┃ ┃ ┃ ━━ ┃┃ ┃┃ ━━━┓ {reset} {_tan} {red}{blue}██ {black}┗━┛ ┗━┛┗━━━━┛┗━┛ ┗━━━━┛┗━┛┗━━━━┛ {reset} {_tan} {red}{blue}██ {black} {reset} {_tan}{' ':3}{black} 🏁 Retrieve NWP Model Data 🏁 {reset} {_tan}{' ':44}{reset} """
def rich_herbie(): """ Returns "▌▌Herbie" with rich colors (if rich is installed). """ return f"[on {hc.tan}][{hc.red} on {hc.white}]▌[/][{hc.blue}]▌[/][bold {hc.black}]Herbie[/][/]" def print_rich(H): """ Print "rich" display console TODO: How do I get the __repr__ to do this? eh, just use my own ANSI class for text coloring. """ try: from rich.console import Console from herbie.misc import rich_herbie console = Console() console.print( f"{rich_herbie()} " f"{H.model.upper()} model " f"[italic]{H.product}[/] product " f"initialized [green bold]{H.date:%Y-%b-%d %H:%M} UTC[/] " f"[rgb(41, 130, 13)]F{H.fxx:02d}[/] " f"┊ [#ff9900 italic]source={H.grib_source}[/]" ) except: print("rich is not working/installed") ########################################################################
[docs]def HerbieLogo2(white_line=False, text_color="tan", text_stroke="black"): """ Herbie logo (main) >>> ax = HerbieLogo2() >>> plt.savefig('Herbie.svg', bbox_inches="tight") >>> ax = HerbieLogo2() >>> plt.savefig('Herbie_transparent.svg', bbox_inches="tight", transparent=True) >>> ax = HerbieLogo2(text_color='tan') >>> plt.savefig('Herbie_transparent_tan.svg', bbox_inches="tight", transparent=True) """ import matplotlib.patheffects as path_effects import matplotlib.pyplot as plt plt.figure(figsize=[5, 3], facecolor=hc.tan) plt.axis([1.5, 20, -10, 10]) if white_line: plt.axvline(4, lw=40, color=hc.white) plt.axvline(2.5, lw=20, color=hc.red) plt.axvline(5.5, lw=40, color=hc.blue) if hasattr(hc, text_color): text_color = getattr(hc, text_color) if hasattr(hc, text_stroke): text_stroke = getattr(hc, text_stroke) text = plt.text( 8, 0, "Herbie", fontsize=110, fontweight="bold", color=text_color, va="center_baseline", ha="left", zorder=11, ) if text_stroke is not None: text.set_path_effects( [ path_effects.Stroke(linewidth=3, foreground=text_stroke), path_effects.Normal(), ] ) plt.gca().set_facecolor(hc.tan) plt.gca().margins(0) plt.gca().get_xaxis().set_visible(False) plt.gca().get_yaxis().set_visible(False) plt.gca().spines["bottom"].set_visible(False) plt.gca().spines["top"].set_visible(False) plt.gca().spines["left"].set_visible(False) plt.gca().spines["right"].set_visible(False) return plt.gca()