def test_latex(): from dolang.latex import expr2tex, eq2tex s = "(a + w_1__y)/2 + 1" s = "-(1+2)" s = "a*x(2) + b*y(-1)" assert expr2tex(["x", "y"], s) == "a \\; x_{t+2} + b \\; y_{t-1}" eq = "l = a*x(2) + b*y(-1)" assert eq2tex(["x", "y"], eq) == "l = a \\; x_{t+2} + b \\; y_{t-1}"
def _repr_html_(self): from dolang.latex import eq2tex # general informations infos = self.infos table_infos = """ <table> <td><b>Model</b></td> <tr> <td>name</td> <td>{name}</td> </tr> <tr> <td>type</td> <td>{type}</td> </tr> <tr> <td>filename</td> <td>{filename}</td> </tr> </table>""".format(name=infos['name'], type=infos['type'], filename=infos['filename'].replace("<", "<").replace( ">", ">")) # Equations and residuals resids = self.residuals() if self.model_type == 'dynare': equations = {"dynare": self.symbolic.equations.copy()} else: equations = self.symbolic.equations.copy() # Create definitions equations and append to equations dictionary definitions = self.symbolic.definitions tmp = [] for deftype in definitions: tmp.append(deftype + ' = ' + definitions[deftype]) definitions = {'definitions': tmp} equations.update(definitions) variables = sum( [e for k, e in self.symbols.items() if k != 'parameters'], []) table = "<tr><td><b>Type</b></td><td><b>Equation</b></td><td><b>Residual</b></td></tr>\n" for eq_type in equations: eq_lines = [] for i in range(len(equations[eq_type])): eq = equations[eq_type][i] # if eq_type in ('expectation','direct_response'): # vals = '' if eq_type not in ('arbitrage', 'transition', 'arbitrage_exp'): vals = '' else: val = resids[eq_type][i] if abs(val) > 1e-8: vals = '<span style="color: red;">{:.4f}</span>'.format( val) else: vals = '{:.3f}'.format(val) if '|' in eq: # keep only lhs for now eq, comp = str.split(eq, '|') lat = eq2tex(variables, eq) lat = '${}$'.format(lat) line = [lat, vals] h = eq_type if i == 0 else '' fmt_line = '<tr><td>{}</td><td>{}</td><td>{}</td></tr>'.format( h, *line) # print(fmt_line) eq_lines.append(fmt_line) table += str.join("\n", eq_lines) table = "<table>{}</table>".format(table) return table_infos + table
def _repr_html_(self): from dolang.latex import eq2tex # general informations infos = self.infos table_infos = """ <table> <td><b>Model</b></td> <tr> <td>name</td> <td>{name}</td> </tr> <tr> <td>type</td> <td>{type}</td> </tr> <tr> <td>filename</td> <td>{filename}</td> </tr> </table>""".format( name=infos["name"], type=infos["type"], filename=infos["filename"].replace("<", "<").replace(">", ">"), ) # Equations and residuals resids = self.residuals() equations = self.equations.copy() # Create definitions equations and append to equations dictionary definitions = self.definitions tmp = [] for deftype in definitions: tmp.append(deftype + " = " + definitions[deftype]) definitions = {"definitions": tmp} equations.update(definitions) variables = sum( [e for k, e in self.symbols.items() if k != "parameters"], []) table = '<tr><td><b>Type</b></td><td style="width:80%"><b>Equation</b></td><td><b>Residual</b></td></tr>\n' for eq_type in equations: eq_lines = [] for i in range(len(equations[eq_type])): eq = equations[eq_type][i] # if eq_type in ('expectation','direct_response'): # vals = '' if eq_type not in ("arbitrage", "transition", "arbitrage_exp"): vals = "" else: val = resids[eq_type][i] if abs(val) > 1e-8: vals = '<span style="color: red;">{:.4f}</span>'.format( val) else: vals = "{:.3f}".format(val) if "⟂" in eq: # keep only lhs for now eq, comp = str.split(eq, "⟂") if "|" in eq: # keep only lhs for now eq, comp = str.split(eq, "|") lat = eq2tex(variables, eq) lat = "${}$".format(lat) line = [lat, vals] h = eq_type if i == 0 else "" fmt_line = "<tr><td>{}</td><td>{}</td><td>{}</td></tr>".format( h, *line) # print(fmt_line) eq_lines.append(fmt_line) table += str.join("\n", eq_lines) table = "<table>{}</table>".format(table) return table_infos + table
def _repr_html_(self): from dolang.latex import eq2tex # general informations infos = self.infos table_infos = """ <table> <td><b>Model</b></td> <tr> <td>name</td> <td>{name}</td> </tr> <tr> <td>type</td> <td>{type}</td> </tr> <tr> <td>filename</td> <td>{filename}</td> </tr> </table>""".format( name=infos['name'], type=infos['type'], filename=infos['filename'].replace("<", "<").replace(">", ">")) # Equations and residuals resids = self.residuals() equations = self.equations.copy() # Create definitions equations and append to equations dictionary definitions = self.definitions tmp = [] for deftype in definitions: tmp.append(deftype + ' = ' + definitions[deftype]) definitions = {'definitions': tmp} equations.update(definitions) variables = sum( [e for k, e in self.symbols.items() if k != 'parameters'], []) table = "<tr><td><b>Type</b></td><td><b>Equation</b></td><td><b>Residual</b></td></tr>\n" for eq_type in equations: eq_lines = [] for i in range(len(equations[eq_type])): eq = equations[eq_type][i] # if eq_type in ('expectation','direct_response'): # vals = '' if eq_type not in ('arbitrage', 'transition', 'arbitrage_exp'): vals = '' else: val = resids[eq_type][i] if abs(val) > 1e-8: vals = '<span style="color: red;">{:.4f}</span>'.format( val) else: vals = '{:.3f}'.format(val) if '|' in eq: # keep only lhs for now eq, comp = str.split(eq, '|') lat = eq2tex(variables, eq) lat = '${}$'.format(lat) line = [lat, vals] h = eq_type if i == 0 else '' fmt_line = '<tr><td>{}</td><td>{}</td><td>{}</td></tr>'.format( h, *line) # print(fmt_line) eq_lines.append(fmt_line) table += str.join("\n", eq_lines) table = "<table>{}</table>".format(table) return table_infos + table