In [1]:
# an engine to convert latex via some online pain in the butt lib into svg output

In [2]:
import urllib
from IPython.display import Javascript 
import json
import time

In [3]:
%%javascript
require.config({
    paths: {
        d3: '//d3js.org/d3.v3.min',
        FileSaver: '//s3-us-west-2.amazonaws.com/s.cdpn.io/14082/FileSaver'
    }
});

require(['d3'], function(d3)
{
    element.append("<div id='version'>VERSION: " + d3.version + "</div>");
});



In [4]:
def svgLatex(latex):
    #encoded = urllib.quote_plus(latex)
    #encoded = latex
    encoded = urllib.quote(latex)
    f = urllib.urlopen("http://latex.codecogs.com/svg.latex?%s" % encoded)
    #time.sleep(10)
    return f.read()

In [6]:
test_sample = svgLatex("Q_{update} \\approx Q_{current} \\approx Q_{new}")

In [7]:
# export data to javascript
Javascript("window.test_sample={};".format(json.dumps(test_sample)))


Out[7]:

In [8]:
%%javascript
element.append(window.test_sample);



In [8]:
# the real data

In [97]:
formulas = [
    "r_t+\\gamma\\max_{a}Q(s_{t+1},a) \\approx Q(s_t,a_t)",
    "Q_{update}=r_t",
    "+\\gamma_1\\max_{a}Q(s_{t+1},a)",
    "+\\gamma_2\\max_{a_1,a_2} \\big( r'_{t+1}(a_1)+Q''(s_{t+2},a_2) \\big)",
    "Q",
    "Q'",
    "Q'(s_t, a_t)=(1-\\alpha)Q(s_t, a_t)+\\alpha\\Big(r_t+\\gamma\\max_{a}Q(s_{t+1}, a)\\Big)",
    "Q'(s_t, a_t)=Q(s_t,a_t)+\\alpha\\Big(r_t+\\gamma\\max_{a}Q(s_{t+1},a)-Q(s_t,a_t)\\Big)",
    "Q_{final} \\approx Q_{update}=r_t+\\gamma\\max_{a} Q(s_{t+1},a)",
    "Q_{new}=(1-\\alpha)Q_{current}+\\alpha Q_{update}",
    "Q_{update} \\approx Q_{current} \\approx Q_{new}",
    "Q_{update}=r_t+\\gamma\\max_{a}Q(s_{t+1}, a)",
    "Q_{update} \\approx Q_{current} \\approx Q_{new}",
    "\\alpha",
    "\\gamma",
    "a",
    "a_t",
    "r_t",
    "s_t",
    "s_{t+1}"
]

In [98]:
formula_rendered = {}
for f in formulas:
    print f
    formula_rendered[f] = svgLatex(f)


r_t+\gamma\max_{a}Q(s_{t+1},a) \approx Q(s_t,a_t)
Q_{update}=r_t
+\gamma_1\max_{a}Q(s_{t+1},a)
+\gamma_2\max_{a_1,a_2} \big( r'_{t+1}(a_1)+Q''(s_{t+2},a_2) \big)
Q
Q'
Q'(s_t, a_t)=(1-\alpha)Q(s_t, a_t)+\alpha\Big(r_t+\gamma\max_{a}Q(s_{t+1}, a)\Big)
Q'(s_t, a_t)=Q(s_t,a_t)+\alpha\Big(r_t+\gamma\max_{a}Q(s_{t+1},a)-Q(s_t,a_t)\Big)
Q_{final} \approx Q_{update}=r_t+\gamma\max_{a} Q(s_{t+1},a)
Q_{new}=(1-\alpha)Q_{current}+\alpha Q_{update}
Q_{update} \approx Q_{current} \approx Q_{new}
Q_{update}=r_t+\gamma\max_{a}Q(s_{t+1}, a)
Q_{update} \approx Q_{current} \approx Q_{new}
\alpha
\gamma
a
a_t
r_t
s_t
s_{t+1}

In [99]:
# export data to javascript
Javascript("window.rendered={};".format(json.dumps(formula_rendered)))


Out[99]:

In [100]:
Javascript("window.formulas={};".format(json.dumps(formulas)))


Out[100]:

In [101]:
%%javascript
window.formulas.forEach( function (k) {
    element.append("<div>" + k + "</div>"); 
    element.append(window.rendered[k]); 
    element.append("<br/>");
});



In [102]:
with open('data/prerender_latex.json', 'w') as outfile:
    json.dump(formula_rendered, outfile)

In [103]:
# unfornatually due to cross site protection overkill true json cant be loaded
# do a evil hack to convert the json into javascript and load that instead!
json_dump = json.dumps(formula_rendered)
js_load = "window.latex_prerender = " + json_dump

In [104]:
with open('data/prerender_latex.js', 'w') as outfile:
    outfile.write(js_load)

In [ ]: