|
testing dependency | ||
|
| ||
y = symmath.var'y' | GOOD |
time: 0.031000ms stack: size: 0 |
assertEq(#y:getDependentVars(), 0) |
${0} = {0}$
GOOD |
time: 0.085000ms stack: size: 0 |
assertEq(#y'^p':getDependentVars(), 0) |
${0} = {0}$
GOOD |
time: 0.063000ms stack: size: 0 |
depends regardless of specificationassertEq(true, y:dependsOn(y)) |
${true} = {true}$
GOOD |
time: 0.173000ms stack: size: 0 |
was not specifiedassertEq(false, y:dependsOn(y'^p')) |
${false} = {false}$
GOOD |
time: 0.058000ms stack: size: 0 |
was not specifiedassertEq(false, y'^p':dependsOn(y)) |
${false} = {false}$
GOOD |
time: 0.170000ms stack: size: 0 |
depends regardless of specificationassertEq(true, y'^p':dependsOn(y'^q')) |
${true} = {true}$
GOOD |
time: 0.107000ms stack: size: 0 |
|
| ||
y = symmath.var'y' | GOOD |
time: 0.016000ms stack: size: 0 |
y:setDependentVars(x'^a') | GOOD |
time: 0.034000ms stack: size: 0 |
assertEq(#y:getDependentVars() == 1 and y:getDependentVars()[1], x'^a') |
${{ x} ^a} = {{ x} ^a}$
GOOD |
time: 0.231000ms stack: size: 0 |
assertEq(#y'^p':getDependentVars(), 0) |
${0} = {0}$
GOOD |
time: 0.152000ms stack: size: 0 |
assertEq(#y'^pq':getDependentVars(), 0) |
${0} = {0}$
GOOD |
time: 0.241000ms stack: size: 0 |
was not specifiedassertEq(false, y'^p':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.205000ms stack: size: 0 |
was not specifiedassertEq(false, y'^p':dependsOn(x'^q')) |
${false} = {false}$
GOOD |
time: 0.222000ms stack: size: 0 |
was specifiedassertEq(true, y:dependsOn(x'^q')) |
${true} = {true}$
GOOD |
time: 0.234000ms stack: size: 0 |
was not specifiedassertEq(false, y:dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.199000ms stack: size: 0 |
|
| ||
y = symmath.var'y' | GOOD |
time: 0.023000ms stack: size: 0 |
not by defaultassertEq(false, y:dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.140000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.198000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.187000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.166000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.157000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.239000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.318000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.219000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.322000ms stack: size: 0 |
y:setDependentVars(x) | GOOD |
time: 0.068000ms stack: size: 0 |
assertEq(#y:getDependentVars() == 1 and y:getDependentVars()[1], x) |
${x} = {x}$
GOOD |
time: 0.180000ms stack: size: 0 |
assertEq(#y'^p':getDependentVars(), 0) |
${0} = {0}$
GOOD |
time: 0.152000ms stack: size: 0 |
assertEq(#y'^pq':getDependentVars(), 0) |
${0} = {0}$
GOOD |
time: 0.373000ms stack: size: 0 |
assertEq(true, y:dependsOn(x)) |
${true} = {true}$
GOOD |
time: 0.154000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.378000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.157000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.207000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.212000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.399000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.074000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.198000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.149000ms stack: size: 0 |
|
| ||
|
TODO this should be in tests/unit/diff.lua | ||
simplifyAssertEq(y:diff(y), 1) |
${\frac{\partial y}{\partial y}} = {1}$
GOOD |
time: 0.860000ms stack: size: 7
|
assert and not simplifyAssertEq so the rhs doesn't simplifyassertEq(y:diff(x)(), y:diff(x)) |
${\frac{\partial y}{\partial x}} = {\frac{\partial y}{\partial x}}$
GOOD |
time: 0.575000ms stack: size: 7
|
simplifyAssertEq(y:diff(x'^p'), zero) |
${\frac{\partial y}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.554000ms stack: size: 9
|
simplifyAssertEq(y:diff(x'^pq'), zero) |
${\frac{\partial y}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.569000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x), zero) |
${\frac{\partial { y} ^i}{\partial x}} = {0}$
GOOD |
time: 0.314000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x'^p'), zero) |
${\frac{\partial { y} ^i}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.556000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x'^pq'), zero) |
${\frac{\partial { y} ^i}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.720000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial x}} = {0}$
GOOD |
time: 0.678000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x'^p'), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.642000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x'^pq'), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.658000ms stack: size: 8
|
simplifyAssertEq(y:diff(x,z), zero) |
${\frac{\partial^ 2 y}{\partial z\partial x}} = {0}$
GOOD |
time: 0.328000ms stack: size: 8
|
|
| ||
simplifyAssertEq(y'^p':diff(y'^q'), delta'^p_q') |
${\frac{\partial { y} ^p}{\partial { y} ^q}} = {{{ δ} ^p} _q}$
GOOD |
time: 0.930000ms stack: size: 7
|
simplifyAssertEq(y'_p':diff(y'_q'), delta'_p^q') |
${\frac{\partial { y} _p}{\partial { y} _q}} = {{{ δ} _p} ^q}$
GOOD |
time: 1.293000ms stack: size: 7
|
simplifyAssertEq(y'_p':diff(y'^q'), g'_pq') |
${\frac{\partial { y} _p}{\partial { y} ^q}} = {{{ g} _p} _q}$
GOOD |
time: 1.852000ms stack: size: 7
|
simplifyAssertEq(y'^p':diff(y'_q'), g'^pq') |
${\frac{\partial { y} ^p}{\partial { y} _q}} = {{{ g} ^p} ^q}$
GOOD |
time: 1.985000ms stack: size: 7
|
|
| ||
simplifyAssertEq(y'^pq':diff(y'^rs'), delta'^p_r' * delta'^q_s') |
${\frac{\partial {{ y} ^p} ^q}{\partial {{ y} ^r} ^s}} = {{{{{ δ} ^p} _r}} {{{{ δ} ^q} _s}}}$
GOOD |
time: 3.405000ms stack: size: 7
|
|
| ||
|
| ||
y = symmath.var'y' | GOOD |
time: 0.036000ms stack: size: 0 |
y:setDependentVars(x'^a') | GOOD |
time: 0.036000ms stack: size: 0 |
assertEq(#y:getDependentVars(), 1) |
${1} = {1}$
GOOD |
time: 0.081000ms stack: size: 0 |
assertEq(#y'^a':getDependentVars(), 0) |
${0} = {0}$
GOOD |
time: 0.063000ms stack: size: 0 |
assertEq(false, y:dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.054000ms stack: size: 0 |
assertEq(true, y:dependsOn(x'^p')) |
${true} = {true}$
GOOD |
time: 0.099000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.138000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.122000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.082000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.083000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.074000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.082000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.084000ms stack: size: 0 |
simplifyAssertEq(y:diff(x), zero) |
${\frac{\partial y}{\partial x}} = {0}$
GOOD |
time: 0.299000ms stack: size: 8
|
simplifyAssertEq(y:diff(x'^p'), y:diff(x'^p')) |
${\frac{\partial y}{\partial { x} ^p}} = {\frac{\partial y}{\partial { x} ^p}}$
GOOD |
time: 1.240000ms stack: size: 7
|
simplifyAssertEq(y:diff(x'^pq'), zero) |
${\frac{\partial y}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.398000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x), zero) |
${\frac{\partial { y} ^i}{\partial x}} = {0}$
GOOD |
time: 0.323000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x'^p'), zero) |
${\frac{\partial { y} ^i}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.310000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x'^pq'), zero) |
${\frac{\partial { y} ^i}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.438000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial x}} = {0}$
GOOD |
time: 0.259000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x'^p'), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.362000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x'^pq'), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.397000ms stack: size: 8
|
|
| ||
y = symmath.var'y' | GOOD |
time: 0.026000ms stack: size: 0 |
y'^a':setDependentVars(x) | GOOD |
time: 0.040000ms stack: size: 0 |
assertEq(#y:getDependentVars(), 0) |
${0} = {0}$
GOOD |
time: 0.066000ms stack: size: 0 |
assertEq(#y'^a':getDependentVars(), 1) |
${1} = {1}$
GOOD |
time: 0.069000ms stack: size: 0 |
assertEq(false, y:dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.072000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.075000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.076000ms stack: size: 0 |
assertEq(true, y'^i':dependsOn(x)) |
${true} = {true}$
GOOD |
time: 0.071000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.090000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.087000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.086000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.083000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.118000ms stack: size: 0 |
simplifyAssertEq(y:diff(x), zero) |
${\frac{\partial y}{\partial x}} = {0}$
GOOD |
time: 0.263000ms stack: size: 8
|
simplifyAssertEq(y:diff(x'^p'), zero) |
${\frac{\partial y}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.288000ms stack: size: 8
|
simplifyAssertEq(y:diff(x'^pq'), zero) |
${\frac{\partial y}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.261000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x), y'^i':diff(x)) |
${\frac{\partial { y} ^i}{\partial x}} = {\frac{\partial { y} ^i}{\partial x}}$
GOOD |
time: 1.017000ms stack: size: 7
|
simplifyAssertEq(y'^i':diff(x'^p'), zero) |
${\frac{\partial { y} ^i}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.309000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x'^pq'), zero) |
${\frac{\partial { y} ^i}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.384000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial x}} = {0}$
GOOD |
time: 0.306000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x'^p'), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.377000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x'^pq'), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.295000ms stack: size: 8
|
|
| ||
y = symmath.var'y' | GOOD |
time: 0.020000ms stack: size: 0 |
y'^a':setDependentVars(x'^b') | GOOD |
time: 0.159000ms stack: size: 0 |
assertEq(false, y:dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.100000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.098000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.100000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.096000ms stack: size: 0 |
assertEq(true, y'^i':dependsOn(x'^p')) |
${true} = {true}$
GOOD |
time: 0.099000ms stack: size: 0 |
assertEq(false, y'^i':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.185000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.156000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^p')) |
${false} = {false}$
GOOD |
time: 0.297000ms stack: size: 0 |
assertEq(false, y'^ij':dependsOn(x'^pq')) |
${false} = {false}$
GOOD |
time: 0.133000ms stack: size: 0 |
simplifyAssertEq(y:diff(x), zero) |
${\frac{\partial y}{\partial x}} = {0}$
GOOD |
time: 0.275000ms stack: size: 8
|
simplifyAssertEq(y:diff(x'^p'), zero) |
${\frac{\partial y}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.528000ms stack: size: 8
|
simplifyAssertEq(y:diff(x'^pq'), zero) |
${\frac{\partial y}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.737000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x), zero) |
${\frac{\partial { y} ^i}{\partial x}} = {0}$
GOOD |
time: 0.416000ms stack: size: 8
|
simplifyAssertEq(y'^i':diff(x'^p'), y'^i':diff(x'^p')) |
${\frac{\partial { y} ^i}{\partial { x} ^p}} = {\frac{\partial { y} ^i}{\partial { x} ^p}}$
GOOD |
time: 1.195000ms stack: size: 7
|
simplifyAssertEq(y'^i':diff(x'^pq'), zero) |
${\frac{\partial { y} ^i}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.316000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial x}} = {0}$
GOOD |
time: 0.300000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x'^p'), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial { x} ^p}} = {0}$
GOOD |
time: 0.453000ms stack: size: 8
|
simplifyAssertEq(y'^ij':diff(x'^pq'), zero) |
${\frac{\partial {{ y} ^i} ^j}{\partial {{ x} ^p} ^q}} = {0}$
GOOD |
time: 0.420000ms stack: size: 8
|
|
| ||
|
testing graph dependency z(y(x)), z depends on x | ||
x = symmath.var'x' | GOOD |
time: 0.040000ms stack: size: 0 |
y = symmath.var('y', {x})
| GOOD |
time: 0.050000ms stack: size: 0 |
z = symmath.var('z', {y})
| GOOD |
time: 0.050000ms stack: size: 0 |
|
| ||
assertEq(true, z:dependsOn(z)) |
${true} = {true}$
GOOD |
time: 0.113000ms stack: size: 0 |
assertEq(true, z:dependsOn(y)) |
${true} = {true}$
GOOD |
time: 0.092000ms stack: size: 0 |
|
hmm, how to handle graph dependencies ... | ||
|
I'm not going to evaluate them for now, because they cause | ||
|
(1) infinite loops (unless I track search state) and | ||
|
(2) {u,v} depends on {t,x} makes a graph search produce u depends on v ... | ||
|
assertEq(true, z:dependsOn(x)) | ||
assertEq(false, y:dependsOn(z)) |
${false} = {false}$
GOOD |
time: 0.109000ms stack: size: 0 |
assertEq(true, y:dependsOn(y)) |
${true} = {true}$
GOOD |
time: 0.088000ms stack: size: 0 |
assertEq(true, y:dependsOn(x)) |
${true} = {true}$
GOOD |
time: 0.090000ms stack: size: 0 |
assertEq(false, x:dependsOn(z)) |
${false} = {false}$
GOOD |
time: 0.094000ms stack: size: 0 |
assertEq(false, x:dependsOn(y)) |
${false} = {false}$
GOOD |
time: 0.088000ms stack: size: 0 |
assertEq(true, x:dependsOn(x)) |
${true} = {true}$
GOOD |
time: 0.086000ms stack: size: 0 |
|
| ||
assertEq(false, z:dependsOn(z'^I')) |
${false} = {false}$
GOOD |
time: 0.096000ms stack: size: 0 |
assertEq(false, z:dependsOn(y'^I')) |
${false} = {false}$
GOOD |
time: 0.092000ms stack: size: 0 |
assertEq(false, z:dependsOn(x'^I')) |
${false} = {false}$
GOOD |
time: 0.125000ms stack: size: 0 |
assertEq(false, y:dependsOn(z'^I')) |
${false} = {false}$
GOOD |
time: 0.126000ms stack: size: 0 |
assertEq(false, y:dependsOn(y'^I')) |
${false} = {false}$
GOOD |
time: 0.123000ms stack: size: 0 |
assertEq(false, y:dependsOn(x'^I')) |
${false} = {false}$
GOOD |
time: 0.165000ms stack: size: 0 |
assertEq(false, x:dependsOn(z'^I')) |
${false} = {false}$
GOOD |
time: 0.120000ms stack: size: 0 |
assertEq(false, x:dependsOn(y'^I')) |
${false} = {false}$
GOOD |
time: 0.135000ms stack: size: 0 |
assertEq(false, x:dependsOn(x'^I')) |
${false} = {false}$
GOOD |
time: 0.128000ms stack: size: 0 |
|
| ||
assertEq(false, z'^I':dependsOn(z)) |
${false} = {false}$
GOOD |
time: 0.127000ms stack: size: 0 |
assertEq(false, z'^I':dependsOn(y)) |
${false} = {false}$
GOOD |
time: 0.146000ms stack: size: 0 |
assertEq(false, z'^I':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.228000ms stack: size: 0 |
assertEq(false, y'^I':dependsOn(z)) |
${false} = {false}$
GOOD |
time: 0.172000ms stack: size: 0 |
assertEq(false, y'^I':dependsOn(y)) |
${false} = {false}$
GOOD |
time: 0.171000ms stack: size: 0 |
assertEq(false, y'^I':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.186000ms stack: size: 0 |
assertEq(false, x'^I':dependsOn(z)) |
${false} = {false}$
GOOD |
time: 0.166000ms stack: size: 0 |
assertEq(false, x'^I':dependsOn(y)) |
${false} = {false}$
GOOD |
time: 0.142000ms stack: size: 0 |
assertEq(false, x'^I':dependsOn(x)) |
${false} = {false}$
GOOD |
time: 0.159000ms stack: size: 0 |
|
| ||
by defaultassertEq(true, z'^I':dependsOn(z'^I')) |
${true} = {true}$
GOOD |
time: 0.170000ms stack: size: 0 |
assertEq(false, z'^I':dependsOn(y'^I')) |
${false} = {false}$
GOOD |
time: 0.177000ms stack: size: 0 |
assertEq(false, z'^I':dependsOn(x'^I')) |
${false} = {false}$
GOOD |
time: 0.106000ms stack: size: 0 |
assertEq(false, y'^I':dependsOn(z'^I')) |
${false} = {false}$
GOOD |
time: 0.196000ms stack: size: 0 |
by defaultassertEq(true, y'^I':dependsOn(y'^I')) |
${true} = {true}$
GOOD |
time: 0.111000ms stack: size: 0 |
assertEq(false, y'^I':dependsOn(x'^I')) |
${false} = {false}$
GOOD |
time: 0.091000ms stack: size: 0 |
assertEq(false, x'^I':dependsOn(z'^I')) |
${false} = {false}$
GOOD |
time: 0.086000ms stack: size: 0 |
assertEq(false, x'^I':dependsOn(y'^I')) |
${false} = {false}$
GOOD |
time: 0.079000ms stack: size: 0 |
by defaultassertEq(true, x'^I':dependsOn(x'^I')) |
${true} = {true}$
GOOD |
time: 0.100000ms stack: size: 0 |
|
| ||
|
| ||
|
testing graph dependency z(y(x'^I')), z depends on x | ||
x = symmath.var'x' | GOOD |
time: 0.023000ms stack: size: 0 |
y = symmath.var'y' | GOOD |
time: 0.015000ms stack: size: 0 |
y:setDependentVars(x'^I') | GOOD |
time: 0.159000ms stack: size: 0 |
z = symmath.var'z' | GOOD |
time: 0.015000ms stack: size: 0 |
z:setDependentVars(y) | GOOD |
time: 0.033000ms stack: size: 0 |
|
| ||
assertEq(true, z:dependsOn(z)) |
${true} = {true}$
GOOD |
time: 0.063000ms stack: size: 0 |
assertEq(true, z:dependsOn(y)) |
${true} = {true}$
GOOD |
time: 0.055000ms stack: size: 0 |
|
same as above, not doing a graph search. should I? | ||
|
assertEq(true, z:dependsOn(x'^I')) | ||
assertEq(false, y:dependsOn(z)) |
${false} = {false}$
GOOD |
time: 0.056000ms stack: size: 0 |
assertEq(true, y:dependsOn(y)) |
${true} = {true}$
GOOD |
time: 0.042000ms stack: size: 0 |
assertEq(true, y:dependsOn(x'^I')) |
${true} = {true}$
GOOD |
time: 0.060000ms stack: size: 0 |
assertEq(false, x'^I':dependsOn(z)) |
${false} = {false}$
GOOD |
time: 0.059000ms stack: size: 0 |
assertEq(false, x'^I':dependsOn(y)) |
${false} = {false}$
GOOD |
time: 0.073000ms stack: size: 0 |
assertEq(true, x'^I':dependsOn(x'^I')) |
${true} = {true}$
GOOD |
time: 0.087000ms stack: size: 0 |
|
| ||
|
| ||
|
make definite variable objects in our scope so implicit variable creation doesn't replace them and reset their state | ||
|
alright, I'm at an impass here ... | ||
|
before I fixed chain dependencies, I had a good system where {u,v}:depends{t,x} would only produce du/dt du/dx dv/dt dv/dx | ||
|
but now, with chain dependencies, I'm also getting dv/du, du/dv, dt/dx, dx/dt ... and this is incorrect | ||
u,v,t,x,y,z = vars('u','v','t','x','y','z')
| GOOD |
time: 0.049000ms stack: size: 0 |
u:setDependentVars(t,x) | GOOD |
time: 0.024000ms stack: size: 0 |
v:setDependentVars(t,x) | GOOD |
time: 0.023000ms stack: size: 0 |
t:setDependentVars(u,v) | GOOD |
time: 0.024000ms stack: size: 0 |
x:setDependentVars(u,v) | GOOD |
time: 0.020000ms stack: size: 0 |
allvars = table{u,v,t,x,y,z}
| GOOD |
time: 0.022000ms stack: size: 0 |
all = Matrix(allvars):T() | GOOD |
time: 0.080000ms stack: size: 0 |
varofall = var('\\{'..allvars:mapi(function(v) return v.name end):concat','..'\\}')
| GOOD |
time: 0.124000ms stack: size: 0 |
print(varofall:diff(varofall):eq(Matrix:lambda({#all,#all}, function(i,j) return allvars[i]:diff(allvars[j])() end)))
| ${\frac{\partial \{u,v,t,x,y,z\}}{\partial \{u,v,t,x,y,z\}}} = {\left[\begin{array}{cccccc} 1& 0& \frac{\partial u}{\partial t}& \frac{\partial u}{\partial x}& 0& 0\\ 0& 1& \frac{\partial v}{\partial t}& \frac{\partial v}{\partial x}& 0& 0\\ \frac{\partial t}{\partial u}& \frac{\partial t}{\partial v}& 1& 0& 0& 0\\ \frac{\partial x}{\partial u}& \frac{\partial x}{\partial v}& 0& 1& 0& 0\\ 0& 0& 0& 0& 1& 0\\ 0& 0& 0& 0& 0& 1\end{array}\right]}$ GOOD |
time: 8.273000ms stack: size: 8
|