## $\LaTeX$ can be used in JupyterLab notebooks

https://en.wikibooks.org/wiki/LaTeX/Basics

### Mathematical Symbols

* https://www.math.ubc.ca/~pwalls/math-python/jupyter/latex/
* https://en.wikibooks.org/wiki/LaTeX
* http://detexify.kirelabs.org/classify.html
* https://ctan.math.illinois.edu/info/symbols/comprehensive/symbols-letter.pdf

### Examples

$f'(a) = \lim_{x \to a} \frac{f(x) - f(a)}{x-a}$

$$f'(a) = \lim_{x \to a} \frac{f(x) - f(a)}{x-a}$$

$$\begin{matrix} a & b \\ c & d \end{matrix}$$

$$\begin{pmatrix} a & b \\ c & d \end{pmatrix}$$

$$\begin{bmatrix} 1 & 2 & 1 \\ 3 & 0 & 1 \\ 0 & 2 & 4 \end{bmatrix} \tag{5.23} \label{eq:special} $$ A cross-reference to equation $\eqref{eq:special}$ in the same markdown cell.

A cross-reference to equation $\eqref{eq:special}$ in another markdown cell.

A manually-constructed crossref to ([5.23](#mjx-eqn-eq%3Aspecial)) in another markdown cell

$$\left( \frac{p}{q} \right)$$

$$f'(a) = \lim_{x \to a} \frac{f(x) - f(a)}{x - a}$$

$$\lim_{x \to a^-} f(x) = f(a) = \lim_{x \to a^+} f(x)$$

$$e^x = \sum_{k=0}^{\infty} \frac{x^k}{k!}$$

In inline form this is $e^x = \sum_{k=0}^{\infty} \frac{x^k}{k!}$

It can be displayed inline in "[display style](https://www.overleaf.com/learn/latex/display_style_in_math_mode"): $\displaystyle e^x = \sum_{k=0}^{\infty} \frac{x^k}{k!}$

The Jacobian matrix of the function $\mathbf{f}(x_1, x_2, \dots x_n)$ is
 $$
\mathbf{J}
=
\frac{d \mathbf{f}}{d \mathbf{x}}
=
\left[ \frac{\partial \mathbf{f}}{\partial x_1}
\cdots \frac{\partial \mathbf{f}}{\partial x_n} \right]
=
\begin{bmatrix}
\frac{\partial f_1}{\partial x_1} & \cdots &
\frac{\partial f_1}{\partial x_n} \\
\vdots & \ddots & \vdots \\
\frac{\partial f_m}{\partial x_1} & \cdots &
\frac{\partial f_m}{\partial x_n}
\end{bmatrix}
$$

$\delta_{ij}$ is the [Kronecker delta function](https://mathworld.wolfram.com/KroneckerDelta.html):
$$ \delta_{ij} =
    \begin{cases}
            1 &         \text{for } i=j,\\
            0 &         \text{for } i\neq j.
    \end{cases}
$$

The gradient of a scalar function of two independent variables, $ f(x_1, x_2)$, is:

$$ \nabla f = \frac{\partial f}{\partial x_1}\hat{x}_1
+ \frac{\partial f}{\partial x_2}\hat{x}_2 $$

$$ \nabla f(a) = \left(\frac{\partial f}{\partial x_1}(a), \ldots, \frac{\partial f}{\partial x_n}(a)\right) $$

In general, the partial derivative of an [n-ary](http://en.wikipedia.org/wiki/Arity) function $f(x_1, \dots, x_n)$ in the direction $x_i$ at the point $(a_1, \dots, a_n)$ [is defined](https://en.wikipedia.org/w/index.php?title=Partial_derivative) to be:

$$\frac{\partial f}{\partial x_i}(a_1, \ldots, a_n) = \lim_{h \to 0}\frac{f(a_1, \ldots, a_i+h,\ldots,a_n) - f(a_1,\ldots, a_i, \dots,a_n)}{h}.$$

$$\frac{\partial\mathbf{y}}{\partial\mathbf{x}}$$

Various symbols:

$$ \circ \otimes \odot  \mathbf{J}^\mathsf{T} \mathbf{A}^\intercal \sqcap \sqcup \times \nabla $$

Nonsense?:

$$ \frac{\delta(m_{ij}x_j)}{\delta x_j} = m_{ij}\frac{\delta x_j}{\delta x_j} $$

$$ m_{ij}x_j\delta_{ij} = y_i $$

Where $\delta_{ij}$ is the [Kronecker delta function](https://mathworld.wolfram.com/KroneckerDelta.html):

$$ \delta_{ij} =
    \begin{cases}
            1 &         \text{for } i=j,\\
            0 &         \text{for } i\neq j.
    \end{cases}
$$

$$\begin{align}
  &\mathbf{A} \circ \mathbf{B} = \mathbf{B} \circ \mathbf{A}, \\
  &\mathbf{A} \circ (\mathbf{B} \circ \mathbf{C}) = (\mathbf{A} \circ \mathbf{B}) \circ \mathbf{C}, \\
  &\mathbf{A} \circ (\mathbf{B} + \mathbf{C}) = \mathbf{A} \circ \mathbf{B} + \mathbf{A} \circ \mathbf{C}, \\
  &\left(k\mathbf{A}\right) \circ \mathbf{B} = \mathbf{A} \circ \left(k\mathbf{B}\right) = k\left(\mathbf{A} \circ \mathbf{B}\right), \\
  &\mathbf{A} \circ \mathbf{0} = \mathbf{0} \circ \mathbf{A} = \mathbf{0}.
\end{align}$$

The [Hadamard product](https://en.wikipedia.org/wiki/Hadamard_product_(matrices)) is element-wise multiplication of equal-dimensioned matricies:

$${\displaystyle (A\circ B)_{ij}=(A\odot B)_{ij}=(A)_{ij}(B)_{ij}.}$$

$$\begin{align}
&foo, \\
& bar \\
\end{align}
$$

$$a,\\
b$$

$$\mathbf {a} \cdot \mathbf {b} =\left\|\mathbf {a} \right\|\left\|\mathbf {b} \right\|\cos \theta =\left\|\mathbf {b} \right\|\left\|\mathbf {a} \right\|\cos \theta =\mathbf {b} \cdot \mathbf {a}
$$

[Type sizes](https://www.stat.berkeley.edu/~paciorek/computingTips/Type_sizes_changing_type_si.html)
tiny, scriptsize, footnotesize, small, normalsize, large, Large, LARGE, huge, Huge

$$ \Huge 3x+3=\mu $$

`
\; - a thick space
\: - a medium space
\, - a thin space
\! - a negative thin space
`

$$\circ \; \circ \: \circ \, \circ $$


```python
from itertools import chain, combinations

def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
```


```python
list(powerset('abc'))
```

___
# Plotting


```python
#%matplotlib widget
%matplotlib inline
%load_ext autoreload
%autoreload 2
```


```python
import numpy as np
import matplotlib.pyplot as plt
```


```python
plt.plot(range(10), range(30,20,-1))
```


```python
import numpy as np
np.sign(3)
```


```python
ls
```


```python
pwd
```


```python
#!jupyter nbconvert --to script nnt1.ipynb
```

$ \eta $

* [Working efficiently with jupyter lab](https://florianwilhelm.info/2018/11/working_efficiently_with_jupyter_lab/)
* [nbcelltests](https://github.com/jpmorganchase/nbcelltests)


```python
import dis
```


```python
?dis.dis
```


```python
dis.dis(lambda x,y:x**2+y**2)
```

---

https://github.com/google/jax

https://ipywidgets.readthedocs.io/en/latest/index.html


```python
import ipywidgets as widgets
```


```python
widgets.IntSlider()
```


```python
from IPython.display import display
w = widgets.IntSlider()
display(w)
```


```python
display(w)
```


```python
a = widgets.FloatText()
b = widgets.FloatSlider()
display(a,b)

mylink = widgets.jslink((a, 'value'), (b, 'value'))
```


```python
widgets.HBox([widgets.Label(value="The $m$ in $E=mc^2$:"), widgets.FloatSlider()])
```


```python
widgets.HTML(
    value="Hello <b>World</b>",
    placeholder='Some HTML',
    description='Some HTML',
)

```


```python
out = widgets.Output(layout={'border': '1px solid black'})
out
```


```python
with out:
    for i in range(10):
        print(i, 'Hello world!')
```


```python
from IPython.display import YouTubeVideo
with out:
    display(YouTubeVideo('eWzY2nGfkXk'))
```


```python
debug_view = widgets.Output(layout={'border': '1px solid black'})

@debug_view.capture(clear_output=True)
def bad_callback(event):
    print('This is about to explode')
    return 1.0 / 0.0

button = widgets.Button(
    description='click me to raise an exception',
    layout={'width': '300px'}
)
button.on_click(bad_callback)
button
```


```python
debug_view
```


```python
int_range = widgets.IntSlider()
output2 = widgets.Output()

display(int_range, output2)

def on_value_change(change):
    with output2:
        print(change['new'])

int_range.observe(on_value_change, names='value')
```


```python
widgets.HTMLMath(
    value=r"Some math and <i>HTML</i>: \(x^2\) and $$\frac{x+1}{x-1}$$",
    placeholder='Some HTML',
    description='Some HTML',
)
```


```python
debug_view = widgets.Output(layout={'border': '1px solid black'})

@debug_view.capture(clear_output=True)
def bad_callback(event):
    print('This is about to explode')
    return 1.0 / 0.0

button = widgets.Button(
    description='click me to raise an exception',
    layout={'width': '300px'}
)
button.on_click(bad_callback)
button
```


```python
debug_view
```


```python
import ipywidgets as widgets
import logging

class OutputWidgetHandler(logging.Handler):
    """ Custom logging handler sending logs to an output widget """

    def __init__(self, *args, **kwargs):
        super(OutputWidgetHandler, self).__init__(*args, **kwargs)
        layout = {
            'width': '100%',
            'height': '160px',
            'border': '1px solid black'
        }
        self.out = widgets.Output(layout=layout)

    def emit(self, record):
        """ Overload of logging.Handler method """
        formatted_record = self.format(record)
        new_output = {
            'name': 'stdout',
            'output_type': 'stream',
            'text': formatted_record+'\n'
        }
        self.out.outputs = (new_output, ) + self.out.outputs

    def show_logs(self):
        """ Show the logs """
        display(self.out)

    def clear_logs(self):
        """ Clear the current logs """
        self.out.clear_output()


logger = logging.getLogger(__name__)
handler = OutputWidgetHandler()
handler.setFormatter(logging.Formatter('%(asctime)s  - [%(levelname)s] %(message)s'))
logger.addHandler(handler)
logger.setLevel(logging.INFO)
```


```python
handler.show_logs()
```


```python
handler.clear_logs()
logger.info('Starting program')

try:
    logger.info('About to try something dangerous...')
    1.0/0.0
except Exception as e:
    logger.exception('An error occurred!')

```

---


```python
from IPython.display import display
button = widgets.Button(description="Click Me!")
output = widgets.Output()

display(button, output)

def on_button_clicked(b):
    with output:
        print("Button clicked.")

button.on_click(on_button_clicked)
```


```python
int_range = widgets.IntSlider()
output2 = widgets.Output()

display(int_range, output2)

def on_value_change(change):
    with output2:
        print(change['new'])

int_range.observe(on_value_change, names='value')
```

* https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Asynchronous.html


```python
import ipywidgets as widgets
```


```python
%gui
```


```python
%gui?
```


```python
%gui asyncio
```


```python
import asyncio
def wait_for_change(widget, value):
    future = asyncio.Future()
    def getvalue(change):
        # make the new value available
        future.set_result(change.new)
        widget.unobserve(getvalue, value)
    widget.observe(getvalue, value)
    return future
```


```python
from ipywidgets import IntSlider, Output
slider = IntSlider()
out = Output()

async def f():
    for i in range(10):
        out.append_stdout('did work ' + str(i) + '\n')
        x = await wait_for_change(slider, 'value')
        out.append_stdout('async function continued with value ' + str(x) + '\n')
asyncio.ensure_future(f())

slider
```


```python
out
```

Or without `async`, using generators:


```python
from functools import wraps
def yield_for_change(widget, attribute):
    """Pause a generator to wait for a widget change event.

    This is a decorator for a generator function which pauses the generator on yield
    until the given widget attribute changes. The new value of the attribute is
    sent to the generator and is the value of the yield.
    """
    def f(iterator):
        print("<f>")
        @wraps(iterator)
        def inner():
            print("<i>")
            i = iterator()
            print("<i=i>")
            def next_i(change):
                print("<n>")
                try:
                    i.send(change.new)
                except StopIteration as e:
                    widget.unobserve(next_i, attribute)
            print("<o>")
            widget.observe(next_i, attribute)
            # start the generator
            next(i)
            print("<x>")
        print("<ri>")
        return inner
    print("<rf>")
    return f
```


```python
from ipywidgets import IntSlider
slider2=IntSlider()

@yield_for_change(slider2, 'value')
def gf():
    for i in range(10):
        print('did work %s'%i)
        x = yield
        print('generator function continued with value %s'%x)

print("running gf")
gf()

slider2
```


```python
𨭎𨭎𨭎𨭎𨭎 = 10
```


```python
inter
```


```python
from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets
```


```python
@interact(x=True, y=1.0)
def g(x, y):
    return (x, y)
```


```python
%load_ext blackcellmagic
```


```python
from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np


def f(m, b):
    plt.figure(2)
    x = np.linspace(-10, 10, num=1000)
    plt.plot(x, m * x + b)
    plt.ylim(-5, 5)
    plt.show()


interactive_plot = interactive(f, m=(-2.0, 2.0), b=(-3, 3, 0.5))
output = interactive_plot.children[-1]
output.layout.height = "350px"
interactive_plot
```

---


```python
from __future__ import braces
```


```python
import this
```


```python
dir(this)
```


```python
print(''.join(this.d.get(v) or v for v in this.s))
#print(this.s)
```

---

* https://ipython.readthedocs.io/en/stable/interactive/magics.html
* https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Styling.html
* https://colab.research.google.com/notebooks/intro.ipynb
* https://colab.research.google.com/notebooks/io.ipynb
* https://cloud.google.com/ai-platform
* https://cloud.google.com/blog/products/ai-machine-learning/best-practices-that-can-improve-the-life-of-any-developer-using-jupyter-notebooks
* https://github.com/tensorflow/playground/blob/master/index.html


## Siren
* https://github.com/vsitzmann/siren
* https://colab.research.google.com/github/vsitzmann/siren/blob/master/explore_siren.ipynb#scrollTo=NJlfI3ZEnZ6Y
* https://dcato98.github.io/playground/

* https://en.wikipedia.org/wiki/Musical_isomorphism


```python
%config
```


```python
%edit
```


```python
%env
```


```python
%history
```


```python
%lsmagic
```


```python
#%magic -latex
```


```python
%matplotlib
```


```python
%matplotlib --list
```


```python
%psearch a*
```


```python
%quickref
```


```python
%run test-nnbench
```


```python
%%html
<h1>foo</h1>
<blink>wow</blink>
```


```python
a = widgets.IntSlider(description="a")
b = widgets.IntSlider(description="b")
c = widgets.IntSlider(description="c")


def f(a, b, c):
    print("{}*{}*{}={}".format(a, b, c, a * b * c))


out = widgets.interactive_output(f, {"a": a, "b": b, "c": c})

widgets.HBox([widgets.VBox([a, b, c]), out])
```

* https://github.com/ethereum/snake-charmers-tactical-manual


```python
%%script echo skipping
print("The whole cell gets skipped")
```

Can link to other notebooks, e.g. [Trio notebook](./Trio.ipynb)


```python
from bar.baz import Foo


def foo_html(obj):
    return "<marquee>Foo object %s</marquee>" % obj.name


html_formatter = get_ipython().display_formatter.formatters["text/html"]
html_formatter.for_type(Foo, foo_html)

# Or register a type without importing it - this does the same as above:
html_formatter.for_type_by_name("bar.baz", "Foo", foo_html)
```


```python
from collections import deque
d = deque([], 3)
len(d)
```


```python
d.append('a')
d
```


```python
d.append('b')
d
```


```python
d.append('c')
d
```


```python
d.append('d')
d
```


```python
import numpy as np
np.array(d)
```


```python
list(d)[-10:]
```


```python
from display import Image
```


```python
import antigravity
```


```python

```


```python
from IPython.display import Image
```


```python
import IPython.display
```


```python
dir(IPython.display)
```


```python
?IPython.display.Image
```


```python
import numpy as np
Image(np.arange(16*16))
```


```python
import PIL
```


```python
PIL.__version__
```


```python
from PIL import Image as PILImage
```


```python
PIL.Image.fromarray
```


```python
np.arange(16, dtype='uint8')
```


```python
img_1 = PIL.Image.fromarray(np.arange(16*16, dtype='uint8').reshape(16,16))
```


```python
from io import BytesIO
t_png = BytesIO()
img_1.save(t_png, format="png")
```


```python
t_png.getbuffer()
```


```python
IPython.display.Image(t_png.getbuffer())
```


```python
%pip install sidecar
```


```python
from sidecar import Sidecar
from ipywidgets import IntSlider

sc = Sidecar(title='Sidecar Output')
sl = IntSlider(description='Some slider')
with sc:
    display(sl)

```


```python
import numpy as np
```


```python
np.arctanh(-0.99999999)
```




    -9.556913957243776



# Redis
* https://oss.redislabs.com/redisai/
* https://github.com/RedisAI/RedisAI
* https://github.com/RedisAI/redisai-py
* https://github.com/RedisGraph/RedisGraph

# Poetry
* https://python-poetry.org/docs/


```python
t = np.array([1, 2, np.array([3, 4, np.array([5, 6]), 7]), 8])
```


```python
t
```




    array([1, 2, array([3, 4, array([5, 6]), 7], dtype=object), 8],
          dtype=object)




```python
t.shape
```




    (4,)




```python
t.flatten()
```




    array([1, 2, array([3, 4, array([5, 6]), 7], dtype=object), 8],
          dtype=object)




```python
t.ravel()
```




    array([1, 2, array([3, 4, array([5, 6]), 7], dtype=object), 8],
          dtype=object)



<svg>
<ellipse style="fill:#00ff00;stroke:#000000;" cx="50" cy="50" rx="48" ry="48">
</ellipse>
</svg>

<svg>
<ellipse style="fill:#00ff00;stroke:#000000;" cx="50" cy="50" rx="48" ry="48">
</ellipse>
</svg>


```python
class A:
    def __init__(self):
        print("init A")

    def _repr_svg_(self):
        return """
<svg xmlns="http://www.w3.org/2000/svg" height="44pt" viewBox="0.00 0.00 62.00 44.00" width="62pt">
<g class="graph" id="graph0" transform="scale(1 1) rotate(0) translate(4 40)">
<g class="node" id="node1">
<g id="a_node1"><title>A circle</title>
<ellipse cx="27" cy="-18" fill="#444444" rx="27" ry="18" stroke="#000000"/>
<text fill="#ffffff" font-family="Times,serif" font-size="14.00" text-anchor="middle" x="27" y="-14.3">Abc</text>

</g>
</g>
</g>
</svg>
"""


a = A()
a
```

* https://app.diagrams.net/


```python
class A:
    def __init__(self):
        print("init A")
        
    def _repr_svg_(self):
        return """
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="221px" height="181px" viewBox="-0.5 -0.5 221 181" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2021-03-10T01:23:08.606Z&quot; agent=&quot;5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36&quot; etag=&quot;ZZJzNCXEh2RdeHb9SAKH&quot; version=&quot;14.4.6&quot;&gt;&lt;diagram id=&quot;3l-dQbXBslvPWgFDMlL6&quot; name=&quot;Page-1&quot;&gt;tZXJTsMwEIafJkekLE0LR0hZLghQDyw3K54mlpw6clyS8PRM8WRxUsQiuFT+f9vjmW/s1IuSornWrMxvFQfphT5vvGjtheHpWYy/B6O1RhyvrJFpwa0VDMZGvAGZPrl7waFyFhqlpBGla6Zqt4PUOB7TWtXusq2S7qkly2BmbFIm5+6j4CansmJ/8G9AZHl3cuDTTMG6xWRUOeOqHlnRpRclWiljR0WTgDyw67jYfVefzPaJadiZ72xY3t0kd1XyUpytNlnzEMswyE8oyiuTeyo4xRxtvqbtIGAg5I3ios6FgU3J0sNMjR1HLzeFRBXgkKKBNtB8mmbQF4+XBlQBRre4hDaEHVq6MMGCdD3gDzqm+Qj9KXmMOp71oQcoOCAuP2AUzhhttcp+D4lVpb2pW9EA/xtqC9+l1lMcUVsdgbb6L2jRDNoc2I6fH14oqlSyqhKpywlL1+0TCr8Tz2OxbhzVkrLHAJ896wlK/I4wnYH5qvFz5COk8RGknadBMiNe3TSOcaYT7pXABPuORvHS7ag/aVWl9joF2jV+95NAi8mDCpeTQJbDLNBH2/uyj90ElMPnyy4f/gOiy3c=&lt;/diagram&gt;&lt;/mxfile&gt;" style="background-color: rgb(255, 255, 255);"><defs/><g><ellipse cx="60" cy="40" rx="60" ry="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 40px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">cow</div></div></div></foreignObject><text x="60" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">cow</text></switch></g><ellipse cx="185" cy="145" rx="35" ry="35" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 145px; margin-left: 151px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">frog</div></div></div></foreignObject><text x="185" y="149" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">frog</text></switch></g><path d="M 106 60 L 155.99 115.52" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 159.5 119.42 L 152.22 116.56 L 155.99 115.52 L 157.42 111.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>"""
    
a=A()
a
```

    init A





    

    




```python
class SVGLiteral:
    def __init__(self, s):
        self.s = s
        
    def _repr_svg_(self):
        return self.s
```


```python
svg_str = """<svg>
<ellipse style="fill:#00ff00;stroke:#000000;" cx="50" cy="50" rx="48" ry="48">
</ellipse>
</svg>"""
a = SVGLiteral(svg_str)
a
```




    

    




```python
from IPython.display import SVG, display
display(SVG(svg_str))
```


    

    



```python
from IPython.display import SVG, display
display(SVG('ml graphdb structure r1.svg'))
```


    

    



```python
from IPython.display import SVG, display
display('ml graphdb structure r1.svg')
```


    'ml graphdb structure r1.svg'


* https://github.com/encode/httpx


```python

```

4cdb85ef4b2dbcc619be8ee8a71f6bbf0dd32ea0
ipynb
Jupyter Notebook
nbs/Hints.ipynb
pramasoul/aix
98333b875f6c6cda6dee86e6eab02c5ddc622543
MIT
nbs/Hints.ipynb
pramasoul/aix
98333b875f6c6cda6dee86e6eab02c5ddc622543
MIT
2021-11-29T03:44:00.000Z
2021-12-19T05:34:04.000Z
nbs/Hints.ipynb
pramasoul/aix
98333b875f6c6cda6dee86e6eab02c5ddc622543
MIT
Qwen/Qwen-72B
1. YES
2. YES