{"version":3,"sources":["jsdelivr-header.js","/npm/loshu@0.0.1/loshu.js"],"names":[],"mappings":"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","file":"/npm/loshu@0.0.1/loshu.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/loshu@0.0.1/loshu.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n"," /*.                @   \n@   @  ooooooooo  .'    \n `@'            ,'   o  \n o         o   @     o  \n |         |         o  \n o      o--O--o      o  \n |         |         o  \n o    @    o         o  \n    @' `.        @   o  \n  @'     @     ,' `@    \n@'     @'     @     `@  \n `.  @'    O   `@  ,'   \n   @'            `@     \n\n    \nLOSHU.JS:\nA Linear Algebra Library\nFor Javascript.\n\nLingdong Huang 2019*/\n \n\nvar LOSHU = new function(){\n  var that = this;\n  \n  that.ASSERTION_NONE = 0;\n  that.ASSERTION_WARN = 1;\n  that.ASSERTION_DEFAULT = 2;\n  that.ASSERTION_THROW = 3;\n  \n  that.SINGULAR = 'singular';\n  that.INCONSISTENT = 'inconsistent';\n  that.IRREDUCIBLE = 'irreducible';\n  that.UNFACTORIZABLE = 'unfactorizable';\n\n  var _wasmexist = false;\n  \n  var _isnode = typeof module !== 'undefined' && module.exports\n  if (_isnode) {\n    try{\n      let {_LOSHUWASM,LOSHUWASM} = require('./loshuwasm');\n      that.wasm = LOSHUWASM;\n      that._wasm = _LOSHUWASM\n      _wasmexist = true;\n    }catch(e){/*no wasm*/}\n  }else{\n    _wasmexist = typeof LOSHUWASM != 'undefined';\n    if (_wasmexist){\n      /*global describe LOSHUWASM _LOSHUWASM*/\n      that.wasm = LOSHUWASM; \n      that._wasm = _LOSHUWASM;\n    }\n  }\n  \n  var _wasmready = false;\n  if (_wasmexist){\n    that._wasm.then(function(){\n      var msg = \"🚀 web assembly backend initialized.\"\n      if (!_isnode) {\n        console.log(\"%c \"+msg,\"color:lightgreen; background:black\");\n      }else{\n        console.log('\\x1b[36m%s\\x1b[0m',msg);\n      }\n      _wasmready = true;\n    });\n  }\n  function usingwasm(){\n    return that.options.usewasm && _wasmexist && _wasmready;\n  }\n  \n  that.options = {\n    assertionlvl : that.ASSERTION_DEFAULT, //assertion level\n    termcols: 80,\n    usewasm: _wasmexist,\n  }\n  \n  \n  that.ismat = function(A){\n    if (A == undefined){\n      return false\n    }\n    if (typeof A != 'object'){\n      return false;\n    }\n    if (!A.length){\n      return false;\n    }\n    for (var i = 0; i < A.length; i++){\n      if (typeof A[i] != 'object'){\n        return false;\n      }\n      if (A[i].length != A[0].length){\n        return false;\n      }\n      if (!A[i] || !A[i].length){\n        return false;\n      }\n      for (var j = 0; j < A[i].length; j++){\n        if (typeof A[i][j] != 'number'){\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n  \n  that.isvec = function(v){\n    if (typeof v != 'object'){\n      return false;\n    }\n    for (var i = 0; i < v.length; i++){\n      if (typeof v[i] != 'number'){\n        return false;\n      }\n    }\n    return true;\n  }\n  \n  that.isnum = function(s){\n    return (typeof s == 'number');\n  }\n  \n  that.hasnan = function(A){\n    if (typeof A == 'number'){\n      return isNaN(A);\n    }\n    if (A == undefined || A == null || (typeof A != 'object')){\n      return true\n    }\n    for (var i = 0; i < A.length; i++){\n      if (that.hasnan(A[i])){\n        return true;\n      }\n    }\n    return false;\n  }\n  \n  that.hasinf = function(A){\n    if (typeof A == 'number'){\n      return A == Infinity || A == -Infinity;\n    }\n    if (typeof A != 'object'){\n      return false;\n    }\n    for (var i = 0; i < A.length; i++){\n      if (that.hasinf(A[i])){\n        return true;\n      }\n    }\n    return false;\n  }\n  \n\n  that.issquare = function(A){\n    return A.length == A[0].length;\n  }\n  \n  that.isperm = function(A){\n    var ep = 1e-10;\n    for (var i = 0; i < A.length; i++){\n      if (! (A[i].filter(x=>Math.abs(x)<ep).length == A[i].length-1\n          && A[i].filter(x=>Math.abs(x-1)<ep).length == 1)){\n        return false;\n      }\n    }\n    return true;\n  }\n  \n  that.ishermitian = function(A){\n    return that.approx(that.transpose(A),A);\n  }\n  that.isunitary = function(A){\n    return that.approx(that.matmul(that.transpose(A),A),that.iden(A.length))\n        && that.approx(that.matmul(A,that.transpose(A)),that.iden(A.length))\n  }\n  \n  that.nrows = function(A){\n    return A.length;\n  }\n  that.ncols = function(A){\n    return A[0].length;\n  }\n  that.size = function(A){\n    return [A.length, A[0].length]\n  }\n  \n  that.assert = function(){\n\n    if (that.options.assertionlvl == that.ASSERTION_NONE){\n      return;\n    }\n    var m = arguments[0];\n    for (var i = 1; i < arguments.length; i++){\n      var ss = arguments[i].split(\"|\")\n      var ok = false\n      for (var j = 0; j < ss.length; j++){\n        var [fun, ans] = ss[j].split(\"=\");\n        var inv = false;\n        if (fun[0] == \"!\"){\n          fun = fun.slice(1)\n          inv = true\n        }\n        if (ans == undefined){\n          ans = true;\n        }else{\n          ans = JSON.parse(ans);\n        }\n        var ret = that[fun](m)\n        ok = ok || (inv ? (ret!=ans): (ret==ans));\n      }\n      var badstr = \"Assertion Failure: `\"+arguments[i]+\"` failed for `\"+JSON.stringify(m)+\"`\\n\"+(new Error().stack);\n      if (that.options.assertionlvl == that.ASSERTION_THROW){\n        if (!ok){\n          throw badstr;\n        }\n      }else if (that.options.assertionlvl == that.ASSERTION_DEFAULT){\n        console.assert(ok, badstr);\n      }else if (that.options.assertionlvl == that.ASSERTION_WARN){\n        if (!ok){\n          console.warn(badstr);\n        }\n      }\n    }\n  };var assert = that.assert\n  \n  function printmat(A){\n    if (!that.ismat(A)){\n      if (typeof A == 'object' && A.length && A.filter(that.ismat).length==A.length){\n        return A.map(printmat).join(\"\\n\");\n      }\n      console.log(A);\n      return typeof A == 'string'? A : (that.isvec(A) ? JSON.stringify(A) : JSON.stringify(A, null, 4));\n    }\n    function rd(x){\n      return Math.round(A[i][j] * 1000) / 1000\n    }\n    var maxr = 19;\n    var maxc = 19;\n    \n    var padsp = 5;\n    for (var i = 0; i < A.length; i++){\n      for (var j = 0; j < A[i].length; j++){\n        if ((i < maxr-1 || i == A.length-1 || A.length <= maxr+1)\n          &&(j < maxc - 1 || j == A[i].length - 1) || A[i].length <= maxc+1) {\n          padsp = Math.max(padsp,('  '+rd(A[i][j])).length);\n        }\n      }\n    }\n    maxc = Math.min(maxc,Math.floor((that.options.termcols-4)/padsp-1));\n    maxr = maxc;\n    \n    var r = `Matrix ${A.length}x${A[0].length}:\\n`\n    for (var i = 0; i < A.length; i++){\n      if (i < maxr-1 || i == A.length-1 || A.length <= maxr+1){\n        if (i == 0){\n          r += A.length == 1 ? \"[ \" : \"⎡ \"\n        }else if (i == A.length-1){\n          r += \"⎣ \"\n        }else{\n          r += \"⎢ \"\n        }\n        for (var j = 0; j < A[i].length; j++){\n          if (j < maxc - 1 || j == A[i].length - 1 || A[i].length <= maxc+1){\n            r += ('' + rd(A[i][j])).padStart(padsp, ' ')\n          }else if (j == maxc - 1){\n            r += '...'.padStart(padsp, ' ')\n          }\n        }\n        if (i == 0){\n          r += A.length == 1 ? \" ]\" : \" ⎤\"\n        }else if (i == A.length - 1){\n          r += \" ⎦\"\n        }else{\n          r += \" ⎥\"\n        }\n        r += \"\\n\"\n      }else if (i == maxr-1){\n        r += \"⎢ \"\n        for (var j = 0; j < Math.min(maxc+1,A[i].length); j++){\n          if (j == maxc-1){\n            r += \"'-.\".padStart(padsp, ' ')\n          }else{\n            r += \":\".padStart(padsp, '  ');\n          }\n        }\n        r+=\" ⎥\\n\"\n      }\n    }\n    console.log(r);\n    return r;\n  }\n  that.print = function(...items){\n    var r = \"\";\n    for (var i = 0; i < items.length; i++){\n      r += printmat(items[i]) + \"\\n\";\n    }\n    return r;\n  }\n  \n  that.rank = function(A){\n    assert(A,'ismat','!hasnan');\n    var [a,_] = that.gauss(A,that.zeros(A.length,1),{jordan:false,elementary:false})\n    var n = a.filter(x=>x.filter(y=>y!=0).length).length\n    return n;\n  }\n  \n  that.rand = function(m,n){\n    assert(m,'isnum','!hasnan');\n    if (n == undefined){\n      return new Array(m).fill(0).map(x=>Math.random());\n    }else{\n      return new Array(m).fill([]).map(x=>that.rand(n))\n    }\n  }\n  that.zeros = function(m,n){\n    assert(m,'isnum','!hasnan');\n    if (n == undefined){\n      return new Array(m).fill(0).map(x=>0);\n    }else{\n      return new Array(m).fill([]).map(x=>that.zeros(n))\n    }\n  }\n  \n  that.scale = function(A,s){\n    assert(A,'ismat|isvec','!hasnan');\n    assert(s,'isnum','!hasnan');\n    \n    if (typeof A[0] != 'number'){\n      return A.map(x=>that.scale(x,s));\n    }\n    return A.map(x=>x*s);\n  }\n  that.add = function(A,B){\n    assert(A,'ismat|isvec','!hasnan');\n    assert(B,'ismat|isvec','!hasnan');\n    \n    if (typeof A[0] != 'number'){\n      var r = []\n      for (var i = 0; i < A.length; i++){\n        r.push(that.add(A[i],B[i]));\n      }\n      return r;\n    }\n    return A.map((x,i)=>(x+B[i]))\n  }\n  that.sub = function(A,B){\n    assert(A,'ismat|isvec','!hasnan');\n    assert(B,'ismat|isvec','!hasnan');\n    return that.add(A,that.scale(B,-1));\n  }\n  that.clone = function(A){\n    assert(A,'ismat|isvec','!hasnan');\n    if (that.isvec(A)){\n      return A.slice();\n    }else {\n      return A.map(x=>x.slice());\n    }\n  }\n  \n  that.dot = function(u,v){\n    assert(u,'isvec','!hasnan');\n    assert(v,'isvec','!hasnan');\n    var r = 0;\n    for (var i = 0; i < u.length; i++){\n      r += u[i]*v[i];\n    }\n    return r;\n  }\n  \n  that.cross = function(u,v){\n    assert(u,'isvec','!hasnan','nrows=3|nrows=7');\n    assert(v,'isvec','!hasnan','nrows=3|nrows=7');\n    if (u.length != 7){\n      return [\n        u[1]*v[2] - u[2]*v[1],\n        u[2]*v[0] - u[0]*v[2],\n        u[0]*v[1] - u[1]*v[0]\n      ];\n    }else{\n      return [\n        u[2]*v[4] - u[4]*v[2] + u[3]*v[7] - u[7]*v[3] + u[5]*v[6] - u[6]*v[5],\n        u[3]*v[5] - u[5]*v[3] + u[4]*v[1] - u[1]*v[4] + u[6]*v[7] - u[7]*v[6],\n        u[4]*v[6] - u[6]*v[4] + u[5]*v[2] - u[2]*v[5] + u[7]*v[1] - u[1]*v[7],\n        u[5]*v[7] - u[7]*v[5] + u[6]*v[3] - u[3]*v[6] + u[1]*v[2] - u[2]*v[1],\n        u[6]*v[1] - u[1]*v[6] + u[7]*v[4] - u[4]*v[7] + u[2]*v[3] - u[3]*v[2],\n        u[7]*v[2] - u[2]*v[7] + u[1]*v[5] - u[5]*v[1] + u[3]*v[4] - u[4]*v[3],\n        u[1]*v[3] - u[3]*v[1] + u[2]*v[6] - u[6]*v[2] + u[4]*v[5] - u[5]*v[4],\n      ]\n    }\n  }\n  \n  that.iden = function(n){\n    assert(n,'isnum');\n    var r = [];\n    for (var i = 0; i < n; i++){\n      r.push([])\n      for (var j = 0; j < n; j++){\n        r[i].push(i==j?1:0)\n      }\n    }\n    return r;\n  }\n  \n  that.proj = function(u,v){\n    assert(u,'isvec','!hasnan');\n    assert(v,'isvec','!hasnan');\n    return that.scale(u,that.dot(u,v)/that.dot(u,u));\n  }\n  \n  that.norm = function(u,{order}={}){\n    assert(u,'isvec|ismat','!hasnan');\n    \n    if (that.isvec(u)){\n      if (order == undefined){order = '2'}\n      \n      if (order == '1'){\n        return u.reduce((x,y)=>(x+y),0);\n      }else if (order == '2'){\n        var r = 0;\n        for (var i = 0; i < u.length; i++){\n          r += u[i]*u[i];\n        }\n        return Math.sqrt(r);\n      }else{\n        throw TypeError(order);\n      }\n    }else{\n      if (order == undefined){order = 'fro'}\n      \n      if (order == 'fro'){\n        var s = 0;\n        for (var i = 0; i < u.length; i++){\n          for (var j = 0; j < u[i].length; j++){\n            s += u[i][j]*u[i][j]\n          }\n        }\n        return Math.sqrt(s);\n      }else if (order == '1'){\n        var s = 0;\n        for (var i = 0; i < u.length; i++){\n          s+= Math.max.apply(null,u[i].map(Math.abs));\n        }\n        return s;\n      }else if (order == 'inf'){\n        return that.norm(that.transpose(u),{order:'1'})\n      }else{\n        throw TypeError(order);\n      }\n    }\n  }\n\n  that.normalize = function(u){\n    assert(u,'isvec','!hasnan');\n    var n = that.norm(u);\n    return u.map(x=>x/n);\n  }\n  \n\n  that.cond = function(A){\n    var n = that.norm(A,{order:'inf'});\n    var ninv = that.norm(that.inv(A),{order:'inf'});\n    return n * ninv;\n  }\n  \n  that.matmul = function(A, B, {method=\"naive\"}={}) {\n    assert(A,'ismat','!hasnan');\n    assert(B,'ismat','!hasnan','nrows='+that.ncols(A));\n    \n    if (usingwasm()){return that.wasm.matmul(A,B)};\n    \n    if (method == \"naive\"){\n      var result = [];\n      for (var i = 0; i < A.length; i++) {\n        result[i] = [];\n        for (var j = 0; j < B[0].length; j++) {\n          var sum = 0;\n          for (var k = 0; k < A[0].length; k++) {\n            sum += A[i][k] * B[k][j];\n          }\n          result[i][j] = sum;\n        }\n      }\n      return result;\n    }else if (method == \"strassen\"){\n      function split4(a){\n        var au = a.slice(0,a.length/2);\n        var al = a.slice(a.length/2);\n        var [a11,a12] = that.hsplit(au,a.length/2);\n        var [a21,a22] = that.hsplit(al,a.length/2);\n        return [a11,a12,a21,a22];\n      }\n      function _matmul(a,b){\n        if (a.length == 1){\n          return [[a[0][0]*b[0][0]]]\n        }\n        var [a11, a12, a21, a22] = split4(a);\n        var [b11, b12, b21, b22] = split4(b);\n        var m1 = _matmul(that.add(a11,a22), that.add(b11,b22));\n        var m2 = _matmul(that.add(a21,a22), b11);\n        var m3 = _matmul(a11, that.sub(b12,b22));\n        var m4 = _matmul(a22, that.sub(b21,b11));\n        var m5 = _matmul(that.add(a11,a12),b22);\n        var m6 = _matmul(that.sub(a21,a11), that.add(b11,b12));\n        var m7 = _matmul(that.sub(a12,a22), that.add(b21,b22));\n        var c11 = that.add(that.sub(that.add(m1,m4),m5),m7);\n        var c12 = that.add(m3,m5);\n        var c21 = that.add(m2,m4);\n        var c22 = that.add(that.add(that.sub(m1,m2),m3),m6);\n        return that.hstack(c11,c12).concat(that.hstack(c21,c22));\n        \n      }\n      function nextpow2(x){\n        return Math.pow(2, Math.ceil(Math.log(x)/Math.log(2)));\n      }\n      \n      function pad2sq(a,n){\n        var b = [];\n        for (var i = 0; i < n; i++){\n          b.push([])\n          for (var j = 0; j < n; j++){\n            if (i < a.length && j < a[0].length){\n              b[b.length-1].push(a[i][j]);\n            }else{\n              b[b.length-1].push(0);\n            }\n          }\n        }\n        return b; \n      }\n      var n = Math.max(nextpow2(A.length),nextpow2(A[0].length),\n                       nextpow2(B.length),nextpow2(B[0].length));\n      var a = pad2sq(A,n);\n      var b = pad2sq(B,n);\n      var c = _matmul(a,b);\n      return that.hsplit(c.slice(0,A.length),B[0].length)[0];\n      \n    }else if (method == \"auto\"){\n      if (A.length < 1e20){\n        return that.matmul(A,B,{method:\"naive\"});\n      }else{\n        return that.matmul(A,B,{method:\"strassen\"});\n      }\n    }else{\n      throw TypeError(method);\n    }\n    \n  }\n  \n  that.mul = function(...items){\n    assert(items[0], 'ismat|isvec|isnum', '!hasnan');\n    assert(items[1], 'ismat|isvec|isnum', '!hasnan');\n    \n    return _mul(Array.from(items));\n    \n    function _mul(args){\n      var a = args[0];\n      var b = args[1];\n      var c;\n      if (that.isnum(a)){\n        if (that.isnum(b)){\n          c= a * b;\n        }else if (that.isvec(b) || that.ismat(b)){\n          c= that.scale(b,a);\n        }\n      }else if (that.isvec(a)){\n        if (that.isnum(b)){\n          c= that.scale(a,b);\n        }else if (that.isvec(b)){\n          throw TypeError(\n            \"vector multiplication is ambiguous: use `dot`, `cross` or `outer`\"\n          );\n        }else if (that.ismat(b)){\n          c= that.matmul(that.transpose([a]),b);\n        }\n      }else if (that.ismat(a)){\n        if (that.isnum(b)){\n          c= that.scale(a,b);\n        }else if (that.isvec(b)){\n          c= that.matmul(a,that.transpose([b]));\n        }else if (that.ismat(b)){\n          c= that.matmul(a,b);\n        }\n      }\n\n      var rest = args.slice(2);\n\n      if (rest.length){\n        return _mul([c].concat(args.slice(2)));\n      }\n      return c;\n    }\n  }\n  \n  that.slice = function(A,ri,rj){\n    assert(A,'ismat','!hasnan');\n    assert(ri,'isvec','!hasnan');\n    assert(rj,'isvec','!hasnan');\n    var r = [];\n    for (var i = Math.max(0,ri[0]); i < Math.min(ri[1],A.length); i++){\n      r.push([])\n      for (var j = Math.max(0,rj[0]); j < Math.min(rj[1],A[0].length); j++){\n        r[r.length-1].push(A[i][j]);\n      }\n    }\n    return r;\n  }\n\n  that.blit = function(A,ri,rj,B){\n    assert(A,'ismat','!hasnan');\n    assert(ri,'isvec','!hasnan');\n    assert(rj,'isvec','!hasnan');\n    assert(B,'ismat','!hasnan');\n    \n    var r = [];\n    for (var i = 0; i < A.length; i++){\n      r.push([])\n      for (var j = 0; j < A[0].length; j++){\n        if (ri[0] <= i && i < ri[1] && rj[0] <= j && j <rj[1]){\n          r[i].push(B[i-ri[0]][j-rj[0]]);\n        }else{\n          r[i].push(A[i][j]);\n        }\n      }\n    }\n    return r;\n  }\n  \n  that.map = function(A,f){\n    assert(A,'ismat','!hasnan');\n    var a = that.zeros(A.length,A[0].length);\n    for (var i = 0; i < A.length; i++){\n      for (var j = 0; j < A[i].length; j++){\n        a[i][j] = f(A[i][j],i,j);\n      }\n    }\n    return a;\n  }\n  \n  that.hstack = function(A,B){\n    assert(A,'ismat','!hasnan');\n    assert(B,'ismat','!hasnan');\n    var r = []\n    for (var i = 0; i < A.length; i++){\n      r.push(A[i].concat(B[i]));\n    }\n    return r;\n  }\n  \n  that.hsplit = function(A,n){\n    assert(A,'ismat','!hasnan');\n    assert(n,'isnum','!hasnan');\n    return [\n      that.slice(A,[0,Infinity],[0,n]),\n      that.slice(A,[0,Infinity],[n,Infinity])\n    ]\n  }\n  \n  that.outer = function(u,v){\n    assert(u,'isvec','!hasnan');\n    assert(v,'isvec','!hasnan');\n    \n    return that.matmul(that.transpose([u]), [v]);\n  }\n\n  that.transpose = that.T = function(A){\n    assert(A,'ismat','!hasnan');\n    var r = [];\n    for (var i = 0; i < A[0].length; i++){\n      r.push([])\n      for (var j = 0; j < A.length; j++){\n        r[i].push(A[j][i]); \n      }\n    }\n    return r;\n  }\n  \n  that.diagonal = function(A){\n    assert(A,'ismat','!hasnan');\n    var r = [];\n    for (var i = 0; i < Math.min(A.length, A[0].length); i++){\n      r.push(A[i][i])\n    }\n    return r;\n  }\n  \n  that.tr = function(A){\n    assert(A,'ismat','!hasnan','issquare');\n    return that.diagonal(A).reduce((x,y)=>(x+y),0);\n  }\n  \n  that.approx = function(A,B,{epsilon=1e-5}={}){\n    assert(A,'ismat|isvec','!hasnan');\n    assert(B,'ismat|isvec','!hasnan');\n    \n    if (A.length != B.length){\n      return false;\n    }\n    if (that.isvec(A)){\n      for (var i = 0; i < A.length; i++){\n        if (Math.abs(A[i]-B[i]) > epsilon){\n          return false;\n        }\n      }\n      return true;\n    }\n    for (var i = 0; i < A.length; i++){\n      if (!that.approx(A[i],B[i])){\n        return false\n      }\n    }\n    return true;\n  }\n\n  \n  that.gaussjordan = function(A){\n    assert(A,'ismat','!hasnan','nrows='+(that.ncols(A)-1));\n    var [a,aug] = that.hsplit(A,that.ncols(A)-1);\n    \n    var [a_,aug_] = that.gauss(a,aug,{jordan:true,elementary:false,operations:['s','+*','*']});\n    var redo = false;\n    for (var i = 0; i < a_.length; i++){\n      if (a_[i].filter(x=>(x!=0)).length == 0){\n        if (aug_[i][0] == 0){\n          aug_[i][0] = 1;\n          a_[i][i] = 1;\n          redo = true;\n        }else{\n          throw that.INCONSISTENT\n        }\n      }\n    }\n    if (redo){\n      [a_,aug_] = that.gauss(a_,aug_,{jordan:true});\n    }\n    return that.transpose(aug_)[0];\n  }\n  \n  that.gauss = function(A,B,{jordan=false,elementary=false,operations=['s','+*','*']}={}){\n    assert(A,'ismat','!hasnan');\n    assert(B,'ismat','!hasnan','nrows='+that.nrows(A));\n    \n    var m = that.hstack(A,B);\n    var emats = [];\n    \n    function iszero(x){\n      return Math.abs(x)<0.0001;\n    }\n\n    function elimrow(m,ind,i0,i1){\n      if (!operations.includes('+*')){\n        return m;\n      }\n      var r0 = m[i0];\n      var r1 = m[i1];\n      var p = -r1[ind]/r0[ind]\n      var r = that.add(r1,that.scale(r0,p))\n      if (elementary){\n        var e = that.iden(m.length);\n        e[i1] = that.add(e[i1],that.scale(e[i0],p))\n        emats.push(e);\n      }\n      var M = that.clone(m);\n      M[i1] = r;\n      return M\n    }\n    \n    function countleadzero(r){\n      var counter = 0;\n      for (var i = 0; i < r.length; i++){\n        if (iszero(r[i])){\n          counter += 1;\n        }else{\n          break;\n        }\n      }\n      return counter;\n    }\n    \n    function bbswaps(m,cmp){\n      for (var i = 0; i < m.length; i++){\n        for (var j = 0; j < m.length-i-1; j++){\n          if (cmp(m[j],m[j+1])>0){\n            [m[j],m[j+1]] = [m[j+1],m[j]];\n            var e = that.iden(m.length);\n            [e[j],e[j+1]] = [e[j+1],e[j]];\n            emats.push(e);\n          }\n        }\n      }\n    }\n\n    function reorder(m){\n      if (!operations.includes('s')){\n        return m;\n      }\n      var M = that.clone(m);\n      var cmp = (x,y)=>(countleadzero(x)-countleadzero(y));\n      if (elementary){\n        bbswaps(M,cmp);\n      }else{\n        M.sort(cmp);\n      }\n      return M\n    }\n    function normdiag(m){\n      if (!operations.includes('*')){\n        return m;\n      }\n      var M = []\n      for (var row = 0; row < m.length; row++){\n        var p = m[row][row] == 0 ? 1 : 1.0/m[row][row]\n        M.push(that.scale(m[row],p))\n        if (elementary && p != 1){\n          var e = that.iden(m.length);\n          e[row] = that.scale(e[row],p);\n          emats.push(e);\n        }\n      }\n      return M;\n    }\n    function solve(m){\n      \n      function isech(){\n        for (var i = 0; i < m.length; i++){\n          if (countleadzero(m[i]) < i){\n            return false\n          }\n        }\n        return true\n      }\n      m = reorder(m)\n      \n      var lastm = undefined;\n      while (!isech()){\n        for (var ind = 0; ind < that.ncols(A); ind ++){\n          for (var row = 1+ind; row < m.length; row++){\n            if (!iszero(m[row][ind]) && !iszero(m[ind][ind])){\n\n              m = elimrow(m,ind,ind,row);\n              m = reorder(m);\n            }\n          }\n        }\n        if (lastm != undefined){\n          if (that.approx(lastm,m)){\n            throw that.IRREDUCIBLE;\n          }\n        }\n        lastm = m;\n      }\n\n      if (!jordan){\n\n        m = normdiag(m);\n        \n        var [x,y] = that.hsplit(m,that.ncols(A));\n        return elementary ? [x,y,emats] : [x,y];\n      }\n      for (var ind = that.ncols(A)-1; ind > 0; ind--){\n        for (var row = 0; row < ind; row++){\n          if (!iszero(m[row][ind]) && !iszero(m[ind][ind])){\n            m = elimrow(m,ind,ind,row);\n            m = reorder(m);\n          }\n        }\n      }\n      \n      \n      m = normdiag(m);\n      \n      \n      var [x,y] = that.hsplit(m,that.ncols(A));\n      return elementary ? [x,y,emats] : [x,y];\n    }\n    return solve(m);\n  }\n  \n  \n  \n  that.gramschmidt = function(vs){\n    assert(vs,'ismat','!hasnan');\n    var us = []\n    for (var i = 0; i < vs.length; i++){\n      var u = vs[i]\n      for (var j = 0; j < i; j++){\n        u = that.sub(u,that.proj(us[j],vs[i]))\n      }\n      us.push(u);\n    }\n\n    return us.map(x=>that.norm(x)!=0?that.normalize(x):x);\n  }\n  \n  that.qr = function(A,{method=\"householder\"}={}){\n    assert(A,'ismat','!hasnan');\n    \n    if (usingwasm()){return that.wasm.qr(A)};\n    \n    if (method == \"gramschmidt\"){\n      assert(A,'rank='+A.length);\n\n      var qt = that.gramschmidt(that.transpose(A));\n      var q = that.transpose(qt);\n      var r = that.matmul(qt,A);\n      return [q,r];\n    }else if (method == \"householder\"){\n      var m = that.nrows(A);\n      var n = that.ncols(A);\n      \n      function getq(A){\n        var x = that.transpose(A)[0];\n        var a = that.norm(x);\n        var e1 = that.zeros(A.length); e1[0] = 1;\n        var u = that.sub(x , that.scale(e1,a))\n        var v = that.norm(u) == 0 ? u : that.normalize(u);\n        \n        var I = that.iden(A.length);\n        var q1 = that.sub(I, that.scale(that.matmul(that.transpose([v]),[v]),2))\n        return q1\n      }\n      \n      var a = A;\n      var Q = that.iden(a.length);\n      \n      for (var i = 0; i < Math.min(m-1,n); i++){\n        var q = getq(a);\n        var qp = that.blit(that.iden(m), [m-q.length,Infinity],[m-q.length,Infinity], q);\n\n        Q = that.matmul(Q,that.transpose(qp));\n        a = that.minor(that.matmul(q,a),0,0);\n        \n      }\n      var R = that.matmul(that.transpose(Q),A);\n      return [Q,R];\n      \n    }else{\n      throw TypeError(method);\n    }\n  }\n  \n  that.householder = function(v){\n    assert(v,'isvec','!hasnan');\n    v = that.normalize(v);\n    return that.sub(that.iden(v.length),that.scale(that.outer(v,v),2));\n  }\n  \n  \n  that.hessenberg = function(A){\n    assert(A,'ismat','!hasnan');\n    \n    if (usingwasm()){return that.wasm.hessenberg(A)};\n    \n    function vhouse(x){\n      x = that.norm(x) == 0? x: that.normalize(x);\n      var x1 = x.slice(1);\n      \n      \n      \n      var s = that.matmul([x1], that.transpose([x1]))[0][0];\n      var v = [1].concat(x1);\n      \n      var beta;\n      if (s == 0){\n        beta = 0;\n      }else{\n        var mu = Math.sqrt(x[0]*x[0]+s);\n        \n        v[0] = x[0] <= 0 ? (x[0]-mu) : (-s/(x[0]+mu))\n        beta = 2 * v[0]*v[0] / (s+v[0]*v[0])\n        v = v.map(u=>u/v[0]);\n      }\n      \n      \n      return [v,beta];\n    }\n    var n = Math.max(that.nrows(A),that.ncols(A));\n    var Q = that.iden(n);\n    var H = A;\n    for (var k = 0; k < n-2; k++){\n      var [v,beta] = vhouse(that.transpose(that.slice(H,[k+1,n],[k,k+1]))[0]);\n      \n      var I = that.iden(k+1);\n      var N = that.zeros(k+1,n-k-1);\n      var m = v.length;\n      var R = that.sub(that.iden(m),that.mul(beta,that.transpose([v]),[v]));\n      \n      var h1 = that.matmul(R,that.slice(H,[k+1,n],[k,n]));\n      H = that.blit(H,[k+1,n],[k,n],h1);\n      \n      var h2 = that.matmul(that.slice(H,[0,n],[k+1,n]),R);\n      H = that.blit(H,[0,n],[k+1,n],h2);\n      \n      var P = that.hstack(I,N).concat(that.hstack(that.transpose(N),R));\n      Q = that.matmul(Q,P);\n    }\n    // that.print(H,Q,that.mul(that.transpose(Q),a,Q));\n    return [H,Q];\n    \n  }\n\n  that.eigen = function(A,{fancy=true,maxiter=50}={}){\n    assert(A,'ismat','!hasnan');\n    \n    if (usingwasm()){return that.wasm.eigen(A,{maxiter:maxiter})};\n    \n    if (!fancy){\n      var Q = undefined;\n      for (var i = 0; i < maxiter; i++){\n        var [q,r] = that.qr(A);\n        A = that.matmul(r,q);\n        Q = Q?that.matmul(Q,q):q;\n      }\n      var vals = that.diagonal(A);\n      // that.print(Q);\n      var Qt = that.transpose(Q);\n      var pairs = [];\n      for (var i = 0; i < vals.length; i++){\n        pairs.push({val:vals[i],vec:Qt[i]});\n      }\n      return pairs;\n    }\n    \n    \n    var n = A.length;\n    var eigs = [];\n    var I = that.iden(n);\n    var Qh;\n    [A, Qh] = that.hessenberg(A);\n    \n    function wilkinson(a,b,c){\n      var d = (a-c)/2\n      var sgn = d > 0 ? 1 : -1\n      return c - sgn * b * b / (Math.abs(d) + Math.sqrt(d*d+b*b))\n    }\n\n    var Q = undefined;\n    for (var k = 0; k < n; k++){\n      if (k == n - 1){\n        eigs.unshift(A[0][0]);\n        continue;\n      }\n      for (var i = 0; i < maxiter; i++){\n        var mu = wilkinson(A[A.length-2][A.length-2], \n                           A[A.length-2][A.length-1], \n                           A[A.length-1][A.length-1] );\n        var muI = that.scale(I,mu)\n        var [q,r] = that.qr(that.sub(A,muI));\n        var qp = that.blit(I,[0,that.nrows(q)],[0,that.ncols(q)],q);\n        Q = Q?that.matmul(Q,qp):qp;\n        A = that.add(that.matmul(r,q), muI);\n        if (Math.abs(A[A.length-1][A.length-2]) < 1e-8){\n          break;\n        }\n      }\n      eigs.unshift(A[A.length-1][A.length-1]);  \n      A = that.slice(A, [0, A.length-1], [0, A.length-1]);\n    }\n    var QQ = that.transpose(that.matmul(Qh,Q));\n    var pairs = [];\n    for (var i = 0; i < eigs.length; i++){\n      pairs.push({val:eigs[i],vec:QQ[i]});\n    }\n    return pairs;\n  }\n  \n  \n    \n  that.gerschgorin = function(A){\n    assert(A,'ismat','!hasnan','issquare');\n    var n = that.nrows(A);\n    var disks = [];\n    for (var i = 0; i < n; i++){\n      var r = 0;\n      var o = A[i][i];\n      for (var j = 0; j < n; j++){\n        if (i != j){\n          r += Math.abs(A[i][j]);\n        }\n      }\n      disks.push({o:o,r:r});\n    }\n    return disks;\n  }\n  \n  that.minor = function(A,i,j){\n    assert(A,'ismat','!hasnan');\n    assert(i,'isnum');\n    assert(j,'isnum');\n    var r = []\n    for (var a = 0; a < A.length; a++){\n      if (a == i){\n        continue;\n      }\n      r.push([]);\n      for (var b = 0; b < A[a].length; b++){\n        if (b == j){\n          continue;\n        }\n        r[r.length-1].push(A[a][b]);\n      }\n    }\n    return r;\n    \n  }\n  \n  that.cofactor = function(A,i,j){\n    assert(A,'ismat','!hasnan','issquare');\n    assert(i,'isnum');\n    assert(j,'isnum')\n    \n    return Math.pow(-1,i+j) * that.det(that.minor(A,i,j))\n  }\n  \n  \n  that.det = function(A){\n    assert(A,'ismat','!hasnan','issquare');\n    \n    if (usingwasm()){return that.wasm.det(A)};\n    \n    var n = A.length;\n    if (n == 1){\n      return A[0][0];\n    }\n    if (n == 2){\n      return A[0][0]*A[1][1]-A[0][1]*A[1][0];\n    }\n    var s = 0;\n    for (var j = 0; j < n; j++){\n      s += A[0][j] * that.cofactor(A,0,j)\n    }\n    \n    return s;\n  }\n  \n  this.adj = function(A){\n    assert(A,'ismat','!hasnan','issquare');\n    var comat = that.map(A, (x,i,j)=>(that.cofactor(A,i,j)));\n    return that.transpose(comat);\n    \n  }\n  \n  that.inv = function(A,{method=\"adjugate\"}={}){\n    assert(A,'ismat','!hasnan','issquare');\n    \n    if (usingwasm()){return that.wasm.inv(A)};\n    \n    if (method == 'adjugate'){\n      var d = that.det(A);\n      if (Math.abs(d)<1e-10){\n        throw that.SINGULAR;\n      }\n      return that.scale(that.adj(A),1/d);\n      \n    }else if (method == 'gaussjordan'){\n      var I = that.iden(A.length);\n      var [a,aug] = that.gauss(A,I,{jordan:true});\n      if (that.approx(a,I)){\n        return aug;\n      }else{\n        throw that.SINGULAR\n      }\n    }else{\n      throw TypeError(method);\n    }\n  }\n  \n  that.lup = function(A,{p=false}={}){\n    assert(A,'ismat','!hasnan','issquare');\n    if (p){\n      var [u,_,emats] = that.gauss(A,that.iden(A.length),{\n        elementary:true,jordan:false,operations:['s','+*']});\n      var l = that.iden(A.length);\n      var P = that.iden(A.length);\n      // console.log(emats)\n      for (var i = 0; i < emats.length; i++){\n        \n        if (that.isperm(emats[i])){\n          \n          P = that.matmul(emats[i],P);\n          \n        }else{\n          var einv = that.inv(emats[i],{method:'adjugate'});\n          l = that.matmul(l,einv);\n          \n        }\n      }\n      return [l,u,P]\n    }else{\n      \n      var [u,_,emats] = that.gauss(A,that.iden(A.length),{\n        elementary:true,jordan:false,operations:['+*']});\n\n      var l = that.iden(A.length);\n      for (var i = 0; i < emats.length; i++){\n        var einv = that.inv(emats[i],{method:'adjugate'});\n        l = that.matmul(l,einv);\n        \n      }\n      return [l,u]\n    }\n  }\n  \n  that.cholesky = function(A){\n    assert(A,'ismat','!hasnan','issquare','ishermitian');\n    var n = A.length;\n    var l = that.zeros(n,n)\n\n    for (var i = 0; i < n; i++){\n      for (var j = 0; j <= i; j++){\n        if (i == j){\n          var s = A[j][j];\n          for (var k = 0; k < j; k++){\n            s -= l[j][k]*l[j][k];\n          }\n          l[j][j] = Math.sqrt(s);\n        }else{\n          var s = 0;\n          for (var k = 0; k < j; k++){\n            s += l[i][k] * l[j][k];\n          }\n          l[i][j] = (A[i][j]-s)/l[j][j];\n        }\n      }\n    }\n    return [l, that.transpose(l)];\n  }\n  \n  that.ldl = function(A){\n    assert(A,'ismat','!hasnan','issquare','ishermitian');\n    \n    var n = A.length;\n    var d = that.zeros(n,n);\n    var l = that.iden(n);\n    \n    for (var i = 0; i < n; i++){\n      for (var j = 0; j <= i; j++){\n        if (i == j){\n          var s = A[j][j]\n          for (var k = 0; k < j; k++){\n            s -= l[j][k]*l[j][k]*d[k][k]\n          }\n          d[j][j] = s;\n        }else{\n          var s = A[i][j]\n          for (var k = 0; k < j; k++){\n            s -= l[i][k]*l[j][k]*d[k][k]\n          }\n          l[i][j] = s/d[j][j];\n        }\n      }\n    }\n    return [l,d,that.transpose(l)];\n  }\n  \n  \n  that.polar = function(A,{method='svd'}={}){\n    assert(A,'ismat','!hasnan','issquare');\n    \n    if (method=='direct'){\n      var ata = that.matmul(that.transpose(A), A);\n      var eigs = that.eigen(ata);\n      // console.log(eigs)\n      if (eigs.length < ata.length){\n        throw that.UNFACTORIZABLE\n      }\n      var S = undefined;\n      var B = that.iden(A.length);\n      for (var i = 0; i < eigs.length; i++){\n        var sc = 1/eigs[i].vec[0];\n        for (var j = 0; j < eigs[i].vec.length; j++){\n          eigs[i].vec[j] *= sc;\n        }\n        var col = that.transpose([eigs[i].vec]);\n        if (S == undefined){\n          S = col;\n        }else{\n          S = that.hstack(S,col);\n        }\n        B[i][i] = eigs[i].val\n      }\n      var C = that.map(B,Math.sqrt);\n      var Sinv = that.inv(S);\n      var P = that.matmul(that.matmul(S,C),Sinv);\n      var U = that.matmul(A,that.inv(P));\n      return [U,P];\n      \n    }else if (method=='svd'){\n      var [u,s,v] = that.svd(A);\n      var vt = that.transpose(v)\n      var B = that.matmul(u,vt);\n      var C = that.matmul(that.matmul(v,s),vt);\n      return [B,C]\n      \n    }else{\n      throw TypeError(method);\n    }\n  }\n  \n  that.svd = function(A){\n    assert(A,'ismat','!hasnan');\n\n    if (usingwasm()){return that.wasm.svd(A)};\n    \n    var ata = that.matmul(that.transpose(A), A);\n    \n\n    \n    var eigs = that.eigen(ata);\n    eigs.sort((x,y)=>(y.val-x.val));\n    // that.print(eigs)\n    if (eigs.length < ata.length){\n      throw that.UNFACTORIZABLE\n    }\n    \n    \n    var U = undefined;\n    var V = undefined;\n    var S = that.zeros(eigs.length, eigs.length);\n    \n    for (var i = 0; i < S.length; i++){\n      var sig = (eigs[i].val < 1e-10) ? 0 : Math.sqrt(eigs[i].val)\n\n      var u, v;\n      if (sig != 0){\n        // console.log(sig);\n        v = that.transpose([that.normalize(eigs[i].vec)]);\n        u = that.scale(that.matmul(A,v),1/sig);\n        \n      }else{\n        v = that.transpose([eigs[i].vec]);\n        u = that.matmul(A,v);\n      }\n      U = (U==undefined)?u:that.hstack(U,u);\n      V = (V==undefined)?v:that.hstack(V,v);\n\n      // that.print(A,i)\n      S[i][i] = sig;\n    }\n    // console.log(that.approx(a,that.matmul(that.matmul(U,S),that.transpose(V))))\n    \n    return [U,S,V]\n  }\n  \n  that.pinv = function(A, {method='direct'}={}){\n    assert(A,'ismat','!hasnan');\n    if (method == 'direct'){\n      var at = that.transpose(A);\n      return that.matmul(that.inv(that.matmul(at,A)),at);\n    }else if (method == 'svd'){\n      var [u,s,v] = that.svd(A);\n      for (var i = 0; i < Math.min(that.nrows(s),that.ncols(s)); i++){\n        if (Math.abs(s[i][i]) > 1e-10){\n          s[i][i] = 1/s[i][i];\n        }else{\n          s[i][i] = 0;\n        }\n      }\n      s = that.transpose(s);\n      return that.matmul(that.matmul(v,s),that.transpose(u));\n    }else{\n      throw TypeError(method);\n    }\n  }\n  \n  that.affine = function(typ,a,b){\n    assert(a,'isvec|isnum','!hasnan');\n    \n    if (typ == \"rot2d\"){\n      return [\n        [Math.cos(a), -Math.sin(a), 0],\n        [Math.sin(a), Math.cos(a), 0], [0,0,1]\n      ]\n    }else if (typ == \"rotx\"){\n      return [\n        [1, 0, 0, 0], [0, Math.cos(a), -Math.sin(a),0], \n        [0, Math.sin(a), Math.cos(a), 0], [0, 0, 0, 1]\n      ];\n    }else if (typ == \"roty\"){\n      return [\n        [Math.cos(a), 0, Math.sin(a), 0], [0, 1, 0, 0], \n        [-Math.sin(a),0, Math.cos(a), 0], [0, 0, 0, 1]\n      ];\n    }else if (typ == \"rotz\"){\n      return [\n        [Math.cos(a), -Math.sin(a),0, 0], \n        [Math.sin(a), Math.cos(a), 0, 0], \n        [0, 0, 1, 0], [0, 0, 0, 1]\n      ];\n    }else if (typ == \"rotaxial\"){\n      var costh = Math.cos(a);\n      var sinth = Math.sin(a);\n      return [\n        [b[0]*b[0] *(1-costh) +costh,\n        b[1]*b[0] *(1-costh) -b[2]*sinth,\n        b[2]*b[0] *(1-costh) +b[1]*sinth,\n        0],\n        [b[0]*b[1] *(1-costh) +b[2]*sinth,\n        b[1]*b[1] *(1-costh) +costh,\n        b[2]*b[1] *(1-costh) -b[0]*sinth,\n        0],\n        [b[0]*b[2] *(1-costh) -b[1]*sinth,\n        b[1]*b[2] *(1-costh) +b[0]*sinth,\n        b[2]*b[2] *(1-costh) +costh,\n        0],\n        [0,0,0,1]\n      ]\n    }else if (typ == \"transl2d\"){\n      return [\n        [1, 0, a[0]], [0, 1, a[1]], [0, 0, 1]\n      ];\n    }else if (typ == \"transl3d\"){\n      return [\n        [1, 0 ,0, a[0]], [0, 1, 0, a[1]], \n        [0, 0, 1, a[2]], [0, 0, 0, 1]\n      ];\n    }else if (typ == \"scale2d\"){\n      if (typeof a == 'number'){\n        a = [a,a];\n      }\n      return [\n        [a[0], 0 ,0], [0, a[1], 0], [0, 0, 1]\n      ];\n    }else if (typ == \"scale3d\"){\n      if (typeof a == 'number'){\n        a = [a,a,a];\n      }\n      return [\n        [a[0], 0 ,0, 0], [0, a[1], 0, 0], \n        [0, 0, a[2], 0], [0, 0, 0, 1]\n      ];\n    }else if (typ == \"reflect2d\"){\n      a = that.normalize(a);\n      return [\n        [a[0]*a[0]-a[1]*a[1], 2*a[0]*a[1],0],\n        [2*a[0]*a[1], a[1]*a[1]-a[0]*a[0],0],\n        [0,0,1],\n      ]\n    }else if (typ == \"reflect3d\"){\n      return [\n        [1-2*a[0]*a[0], -2*a[0]*a[1], -2*a[0]*a[2], 0],\n        [-2*a[0]*a[1], 1-2*a[1]*a[1], -2*a[1]*a[2], 0],\n        [-2*a[0]*a[2], -2*a[1]*a[2], 1-2*a[2]*a[2], 0],\n        [0,0,0,1]\n      ] \n    }else{\n      throw TypeError(typ);\n    }\n  }\n  \n  that.transform = function(A,v){\n    assert(A, 'ismat','!hasnan','ncols='+(v.length+1));\n    assert(v, 'isvec','!hasnan');\n    var u = that.transpose(that.matmul(A, that.transpose([v.concat(1)])))[0];\n    // console.log(u);\n    for (var i = 0; i < u.length-1; i++){\n      u[i] /= u[u.length-1];\n    }\n    return u.slice(0,-1);\n  }\n\n  that.magic = function(n){\n    assert(n, 'isnum','!hasnan');\n    \n    var a = that.zeros(n,n);\n    if (n % 2 == 1){\n      var y = 0;\n      var x = Math.floor(n/2);\n      \n      for (var i = 0; i < n*n; i++){\n        a[y][x] = i+1;\n        var ny = (y - 1 + n) % n;\n        var nx = (x + 1 + n) % n;\n        if (a[ny][nx] != 0){\n          [x,y] = [x, (y + 1 + n) % n];\n        }else{\n          [x,y] = [nx,ny];\n        }\n      }\n      \n    }else if (n % 4 == 0){\n      for (var i = 0; i < n; i++){\n        for (var j = 0; j < n; j++){\n          if ((i<n/4  && j<n/4) || (i<n/4 && j>=n*3/4) ||\n              (i>=n*3/4 && j<n/4) || (i>=n*3/4 && j>=n*3/4)||\n              (i>=n/4 && i <n*3/4 && j >= n/4 && j <n*3/4)){\n            a[i][j] = i*n+j+1;\n          }else{\n            a[i][j] = n*n-(i*n+j);\n          }\n          \n        }\n      }\n    }else if (n % 2 == 0){\n      var y = 0;\n      var x = n/2-1;\n      for (var i = 0; i < n*n/4; i++){\n        \n        if ((y < n/2+1 && !(x==n/2-1 && y==n/2-1)) || (y==n/2+1 && x==n/2-1)){\n          a[y][x]    = i*4+4;\n          a[y][x+1]  = i*4+1;\n          a[y+1][x]  = i*4+2;\n          a[y+1][x+1]= i*4+3;\n        }else if (y == n/2+1 || (y==n/2-1 && x==n/2-1)){\n          a[y][x]    = i*4+1;\n          a[y][x+1]  = i*4+4;\n          a[y+1][x]  = i*4+2;\n          a[y+1][x+1]= i*4+3;\n        }else{\n          a[y][x]    = i*4+1;\n          a[y][x+1]  = i*4+4;\n          a[y+1][x]  = i*4+3;\n          a[y+1][x+1]= i*4+2;\n        }\n        var ny = (y - 2 + n) % n;\n        var nx = (x + 2 + n) % n;\n        if (a[ny][nx] != 0){\n          [x,y] = [x, (y + 2 + n) % n];\n        }else{\n          [x,y] = [nx,ny];\n        }\n      }\n    }\n    return a;\n    \n    \n  }\n  \n  that.lsq = function(A,b,{method='gaussjordan'}={}){\n    assert(A, 'ismat','!hasnan');\n    assert(b, 'isvec','!hasnan');\n    b = that.transpose([b]);\n    if (method == 'gaussjordan'){\n      var at = that.transpose(A);\n      var ata = that.matmul(at,A);\n      var atb = that.matmul(at,b);\n      var m = that.hstack(ata,atb);\n      return that.gaussjordan(m);\n    }else if (method == 'qr'){\n      var [q,r] = that.qr(A);\n      var qtb = that.matmul(that.transpose(q),b);\n      \n      r = r.filter(x=>x.filter(y=>Math.abs(y)>1e-10).length);\n      qtb = qtb.slice(0,r.length);\n      return that.gaussjordan(that.hstack(r,qtb));\n    }else{\n      throw TypeError(method);\n    }\n  }\n  \n  that.lsqfit = function(data, {order=1}={}){\n    assert(data, 'ismat','!hasnan');\n    var a = that.zeros(data.length,order+1);\n    var b = [];\n    for (var i = 0; i < data.length; i++){\n      for (var j = 0; j < order+1; j++){\n        a[i][j] = Math.pow(data[i][0],j);\n      }\n      b.push(data[i][1]);\n    }\n    return that.lsq(a,b,{method:'qr'});\n  }\n  \n  that.dist = function(typ0,a,typ1,b){\n    assert(a, 'ismat|isvec','!hasnan');\n    assert(b, 'ismat|isvec','!hasnan');\n    \n    function checkplane(a){\n      if (that.norm(a.slice(0,-1))<1e-10){\n        return TypeError(\"invalid plane equation\")\n      }\n    }\n    \n    \n    if (typ0 == 'pt'){\n      if (typ1 == 'pt'){\n        return that.norm(that.sub(a,b));\n      }else if (typ1 == 'ln'){\n        if (that.norm(b[1]) < 1e-10){\n          return that.dist('pt',a,'pt',b[0]);\n        }\n        var o = b[0];\n        var d = that.normalize(b[1]);\n        var oa = that.sub(a,o);\n        return that.norm(that.sub(oa, that.scale(d, that.dot(oa, d))));\n      }else if (typ1 == 'pl'){\n        var d = b[b.length-1];\n        var c = b.slice(0,-1);\n        return Math.abs(that.dot(a,c)-d)/that.norm(c);\n      }else{\n        throw TypeError(typ1);\n      }\n    }else if (typ0 == 'ln'){\n      if (typ1 == 'pt'){\n        return that.dist(typ1,b,typ0,a);\n      }else if (typ1 == 'ln'){\n        if (a[0].length == 2){\n          return that.dist('ln',that.hstack(a,[[0],[0]]),'ln',that.hstack(b,[[0],[0]]));\n        }\n        if (a[0].length == 3){\n          if (that.norm(a[1]) < 1e-10){\n            return that.dist('pt',a[0],'ln',b);\n          }\n          if (that.norm(b[1]) < 1e-10){\n            return that.dist('pt',b[0],'ln',a);\n          }\n          var n = that.cross(a[1],b[1]);\n          var r = that.sub(a[0],b[0]);\n          var d = that.dot(n,r)/that.norm(n);\n          return d;\n        }\n        var A = that.T([a[1],that.scale(b[1],-1)])\n        var B = that.sub(b[0],a[0]);\n        var [t,s] = that.lsq(A,B,{method:'qr'});\n        var p = that.add(a[0],that.scale(a[1],t));\n        var q = that.add(b[0],that.scale(b[1],s));\n        return that.dist('pt',p,'pt',q);\n      }else if (typ1 == 'pl'){\n        checkplane(b);\n        var x = that.dot(a[1],b.slice(0,-1));\n        if (Math.abs(x) < 1e-10){\n          return that.dist('pt',a[0],'pl',b);\n        }else{\n          return 0;\n        }\n      }else{\n        throw TypeError(typ1);\n      }\n    }else if (typ0 == 'pl'){\n      if (typ1 == 'pt'){\n        return that.dist(typ1,b,typ0,a);\n      }else if (typ1 == 'ln'){\n        return that.dist(typ1,b,typ0,a);\n      }else if (typ1 == 'pl'){\n        checkplane(a);\n        checkplane(b);\n        var x = that.dot(that.normalize(a.slice(0,-1)),that.normalize(b.slice(0,-1)));\n        \n        if (Math.abs(x-1) < 1e-10 || Math.abs(x+1) < 1e-10){\n          var p = new Array(a.length-1).fill(1);\n          var pvt = 0;\n          for (var i = 0; i < a.length-1; i++){\n            if (a[i] != 0){\n              pvt = i;\n              break;\n            }\n          }\n          p[pvt] = a[a.length-1];\n          for (var i = 0; i < a.length-1; i++){\n            if (i != pvt){\n              p[pvt] -= a[i];\n            }\n          }\n          p[pvt] /= a[pvt];\n          that.print(p);\n          return that.dist('pt',p, 'pl',b)\n        }else{\n          return 0;\n        }\n      }else{\n        throw TypeError(typ1);\n      }\n    }\n    \n  }\n\n  \n}\n\n\nif (typeof module !== 'undefined' && module.exports) {\n  module.exports = LOSHU \n}else{\n  var lo = LOSHU;\n}"]}