upper by defaultlocal x=a'i' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=false})
| ${ a} ^i$ GOOD |
time: 0.100000ms stack: size: 0 |
local x=a'^i' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=false})
| ${ a} ^i$ GOOD |
time: 0.048000ms stack: size: 0 |
local x=a'_i' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=true})
| ${ a} _i$ GOOD |
time: 0.138000ms stack: size: 0 |
local x=a'ij' print(x) assert(#x==3 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=false} and x[3]==Tensor.Index{symbol='j', lower=false})
| ${{ a} ^i} ^j$ GOOD |
time: 0.092000ms stack: size: 0 |
local x=a'i_j' print(x) assert(#x==3 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=false} and x[3]==Tensor.Index{symbol='j', lower=true})
| ${{ a} ^i} _j$ GOOD |
time: 0.049000ms stack: size: 0 |
local x=a'^ij' print(x) assert(#x==3 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=false} and x[3]==Tensor.Index{symbol='j', lower=false})
| ${{ a} ^i} ^j$ GOOD |
time: 0.072000ms stack: size: 0 |
local x=a'^i_j' print(x) assert(#x==3 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=false} and x[3]==Tensor.Index{symbol='j', lower=true})
| ${{ a} ^i} _j$ GOOD |
time: 0.226000ms stack: size: 0 |
local x=a'_i^j' print(x) assert(#x==3 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=true} and x[3]==Tensor.Index{symbol='j', lower=false})
| ${{ a} _i} ^j$ GOOD |
time: 0.076000ms stack: size: 0 |
local x=a'_ij' print(x) assert(#x==3 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=true} and x[3]==Tensor.Index{symbol='j', lower=true})
| ${{ a} _i} _j$ GOOD |
time: 0.230000ms stack: size: 0 |
|
| ||
|
multi-char | ||
upper by defaultlocal x=a' i' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=false})
| ${ a} ^i$ GOOD |
time: 0.162000ms stack: size: 0 |
upper by defaultlocal x=a' \\mu' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='\\mu', lower=false})
| ${ a} ^{\mu}$ GOOD |
time: 0.072000ms stack: size: 0 |
local x=a' ^\\mu' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='\\mu', lower=false})
| ${ a} ^{\mu}$ GOOD |
time: 0.318000ms stack: size: 0 |
local x=a' _\\mu' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='\\mu', lower=true})
| ${ a} _{\mu}$ GOOD |
time: 0.110000ms stack: size: 0 |
local x=a' \\mu \\nu' print(x) assert(#x==3 and x[1]==a and x[2]==Tensor.Index{symbol='\\mu', lower=false} and x[3]==Tensor.Index{symbol='\\nu', lower=false})
| ${{ a} ^{\mu}} ^{\nu}$ GOOD |
time: 0.109000ms stack: size: 0 |
|
| ||
commas are lower by defaultlocal x=a',i' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=true, derivative=','})
| ${ a} _{,i}$ GOOD |
time: 0.082000ms stack: size: 0 |
local x=a',^i' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=false, derivative=','})
| ${ a} ^{,i}$ GOOD |
time: 0.090000ms stack: size: 0 |
local x=a',_i' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=true, derivative=','})
| ${ a} _{,i}$ GOOD |
time: 0.064000ms stack: size: 0 |
local x=a'^,i' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=false, derivative=','})
| ${ a} ^{,i}$ GOOD |
time: 0.078000ms stack: size: 0 |
local x=a'_,i' print(x) assert(#x==2 and x[1]==a and x[2]==Tensor.Index{symbol='i', lower=true, derivative=','})
| ${ a} _{,i}$ GOOD |
time: 0.060000ms stack: size: 0 |
|
| ||
|
TODO multiple indexes with commas mixed | ||
|
TODO multiple indexes with commas mixed with multiple chars | ||
|
| ||
simplifyAssertNe(a'^,i', a'_,i') |
${{ a} ^{,i}} \ne {{ a} _{,i}}$
GOOD |
time: 3.426000ms stack: size: 7
|