What is dolang ?
It is the current codename for a complete rewrite of the dolo language. It aims at:
 being a first stone for the rewrite of dolo in julia
 improving model validity checks and providing not so cryptic error messages (for dolo 0.5)
 allow for easy language extensions
 being reusable in conjunction with other libraries (like pandas, or bttt)
What does it consist in ?
 a standardized way of describing equations with different types of variables as well as methods to operate on these equations
compilation
routines to turn these equations into vectorized/optimized functions rules to define arbitrary objects with a yaml file and a collection of useful objects (distributions, markov chains, approximation spaces, priors, ...)
Equation description (codename dolex)

unicode fomulas: use crazy hebrew letters !

latex output (and input ?)

time subscripts (default to be determined):
 implicit time:
a(1)
,a(1)
fora_{t}
anda_{t1}
 explicit time:
a(t+1)
,a(t1)
fora_{t}
anda_{t1}
 continuous time:
a(t)
,a(t+dt)
fora_{t}
anda_{t+dt}
 implicit time:

other subscripts:
 subscripted variables
a[i,j](t)
for `a_{i,j,t}``  superscripts
a[~i,j](t)
for `a^i_{j,t}``
 subscripted variables

expressions defined on an event tree (see bttt)
v[s1] + v[s] + E[ s[1]  s[1], S(s) ]

common constructs:
 expectations:
E[...]
orE_t[ ... ]
 differential operators: ??
 expectations:

basic symbolic operations on expressions:
 count/check incidence of symbols
 substitutions
 differentiation
How does it work (for now)?
 expressions are parsed by python/julia parser
 pattern matching is used to substitute symbols by a unique string identifier:
 a[x,y] > a__x__y
 a(t,t+dt,tdt) > a__t__tpdt__tmdt
 a(1, 1) > a____p1__m1
 symbolic operations can then be done by manipulating the expression trees directly or by using a symbolic engine
Objects in Yaml (codename dolaml)
For instance
FunctionalSpace:
domain:
SmolyakGrid:
a: [0,0]
b: [1,1]
m: 4
interp_type: polynomial
gets translated to Julia/Python object:
FunctionalSpace(
domain=SmolyakGrid(
a=[0,0],
b=[1,1],
l=4
),
interp_type='polynomial'
)
Compilation
Example:
eqs = [
'a*x + y(1)',
'x(1)  b*y',
]
from collections import OrderedDict
symbols = OrderedDict(
states=['x', 'y'],
parameters=['a', 'b']
)
api = [
('states',0,'s'), # represents all variables v(0) where v is a state
('states',1,'s'), # represents all variables v(1) where v is a state
('parameters',0,'p')
]
f = compile_function(eqs, symbols, api)
# returns a function f(s_0, s_1, p)