UNPKG

mathjslab

Version:

MathJSLab - An interpreter with language syntax like MATLAB®/Octave, ISBN 978-65-00-82338-7.

2 lines 594 kB
/*! For license information please see mathjslab.node.cjs2015.js.LICENSE.txt */ (()=>{var __webpack_modules__={5(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LAPACKunused=t.LAPACKConfigKeyTable=void 0;const n=r(845),o=r(679),i=r(115),s=r(554),a=r(610),l=r(152),c=r(227);t.LAPACKConfigKeyTable=["maxIterationFactor"];class u{}t.LAPACKunused=u,u.defaultSettings=Object.assign({},{maxIterationFactor:1e3}),u.settings=u.defaultSettings,u.set=e=>{Object.entries(e).forEach(e=>{if(!t.LAPACKConfigKeyTable.includes(e[0]))throw new Error(`LAPACK.set: invalid configuration parameter: ${e[0]}`);c.LAPACK.settings[e[0]]=e[1]})},u.laswp=(e,t,r,n,o,i,s)=>{const a=e.dimension[0],l=e.dimension[1],c=2===e.dimension.length?1:e.dimension.slice(2).reduce((e,t)=>e*t,1),u=void 0===i?0:i,m=void 0===s?l-1:s;if(!n||0===n.length)return;const h=0===Math.min(...n);if(o>0)for(let i=t;i<=r;i+=o){const t=i-1,r=n[i-1],o=h?r:r-1;if(o!==t)for(let r=0;r<c;r++){const n=r*a+t,i=r*a+o;for(let t=u;t<=m;t++){const r=e.array[n][t];e.array[n][t]=e.array[i][t],e.array[i][t]=r}}}else for(let i=t;i>=r;i+=o){const t=i-1,r=n[i-1],o=h?r:r-1;if(o!==t)for(let r=0;r<c;r++){const n=r*a+t,i=r*a+o;for(let t=u;t<=m;t++){const r=e.array[n][t];e.array[n][t]=e.array[i][t],e.array[i][t]=r}}}},u.laswp_rows=(e,t,r)=>{const n=t+1,o=n,i=[];i[n-1]=r+1,u.laswp(e,n,o,i,1)},u.laswp_cols=(e,t,r)=>{const n=e.dimension,o=n[0]*(2===n.length?1:n.slice(2).reduce((e,t)=>e*t,1));for(let n=0;n<o;n++){const o=e.array[n][t];e.array[n][t]=e.array[n][r],e.array[n][r]=o}},u.eye=(...e)=>{const t=e.flat(),r=t[0],o=t[1];if(2===t.length)return Array.from({length:r},(e,t)=>Array.from({length:o},(e,r)=>t===r?n.Complex.one():n.Complex.zero()));{const e=t.slice(2).reduce((e,t)=>e*t,1);return Array.from({length:r*e},(e,t)=>{const i=t%r;return Array.from({length:o},(e,t)=>i===t?n.Complex.one():n.Complex.zero())})}},u.zeros=(...e)=>{const t=e.flat();return Array.from({length:t[0]*t.slice(2).reduce((e,t)=>e*t,1)},e=>Array.from({length:t[1]},e=>n.Complex.zero()))},u.lassq=e=>{const t=e.dimension[0],r=e.dimension[1];let o=n.Complex.zero(),i=n.Complex.one();for(let s=0;s<t;s++)for(let t=0;t<r;t++){const r=e.array[s][t];if(!n.Complex.realIsZero(r)){const e=n.Complex.abs(r);if(n.Complex.lt(o,e)){if(!n.Complex.realIsZero(o)){const t=n.Complex.rdiv(o,e);n.Complex.mulAndSumTo(i,i,n.Complex.mul(t,t))}o=e}else{const t=n.Complex.rdiv(e,o);n.Complex.mulAndSumTo(i,t,t)}}}return{scale:o,sumsq:i}},u.lange=(e,t)=>{const r=t.dimension[0],o=t.dimension[1];switch(e){case"F":{const{scale:e,sumsq:r}=c.LAPACK.lassq(t);return n.Complex.realIsZero(e)?n.Complex.zero():n.Complex.mul(e,n.Complex.sqrt(r))}case"M":{let e=n.Complex.zero();for(let i=0;i<r;i++)for(let r=0;r<o;r++){const o=n.Complex.abs(t.array[i][r]);n.Complex.lt(e,o)&&(e=o)}return e}default:throw new Error(`lange: norm '${e}' not implemented`)}},u.triu_inplace=e=>{const t=e.dimension.length>2?e.dimension.slice(2).reduce((e,t)=>e*t,1):1,r=e.dimension[0];for(let o=0;o<t;o++){const t=o*r;for(let r=0;r<e.dimension[0];r++){const o=e.array[t+r];for(let t=0;t<Math.min(r,e.dimension[1]);t++)o[t]=n.Complex.zero()}}o.MultiArray.setType(e)},u.tril_inplace=e=>{const t=e.dimension.length>2?e.dimension.slice(2).reduce((e,t)=>e*t,1):1,r=e.dimension[0];for(let o=0;o<t;o++){const t=o*r;for(let r=0;r<e.dimension[0];r++){const o=e.array[t+r];for(let t=r+1;t<e.dimension[1];t++)o[t]=n.Complex.zero()}}o.MultiArray.setType(e)},u.trsm_left_upper_block=(e,t,r)=>{const o=e.dimension[1];for(let i=t+r;i<o;i++)for(let o=r-1;o>=0;o--){const s=t+o;let a=e.array[s][i];for(let l=o+1;l<r;l++){const r=e.array[s][t+l],o=e.array[t+l][i];a=n.Complex.sub(a,n.Complex.mul(r,o))}const l=e.array[s][t+o];e.array[s][i]=n.Complex.rdiv(a,l)}},u.lapmt_matrix=e=>{const t=e.length,r=new o.MultiArray([t,t]);for(let o=0;o<t;o++){const t=e[o];r.array[t][o]=n.Complex.one()}return o.MultiArray.setType(r),r},u.larfg_vector=e=>{const t=e.length;if(0===t)return{tau:n.Complex.zero(),v:[],phi:n.Complex.one(),alpha:n.Complex.zero()};const r=e[0];let o=n.Complex.zero();for(let r=1;r<t;r++){const t=n.Complex.abs(e[r]);n.Complex.mulAndSumTo(o,t,t)}const i=n.Complex.abs(r),s=n.Complex.realIsZero(i)?n.Complex.one():n.Complex.rdiv(r,i);if(1===t||n.Complex.realIsZero(n.Complex.abs(o))){const e=n.Complex.zero(),o=new Array(t);o[0]=n.Complex.one();for(let e=1;e<t;e++)o[e]=n.Complex.zero();return{tau:e,v:o,phi:s,alpha:r}}{const i=n.Complex.sqrt(n.Complex.add(n.Complex.mul(r,n.Complex.conj(r)),o)),a=n.Complex.mul(n.Complex.neg(s),i),l=n.Complex.rdiv(n.Complex.sub(a,r),a),c=n.Complex.sub(r,a),u=new Array(t);u[0]=n.Complex.one();for(let r=1;r<t;r++)u[r]=n.Complex.rdiv(e[r],c);return{tau:l,v:u,phi:s,alpha:a}}},u.larfg_apply=(e,t,r)=>{let o;o="L"===e?t.dimension[0]:t.dimension[1];const{tau:i,v:s,alpha:a}=c.LAPACK.larfg(e,t,o,r);return n.Complex.realIsZero(n.Complex.abs(i))||c.LAPACK.larf(e,t,s,i,r,r),{tau:i,v:s,alpha:a}},u.larfg_left_nd=(e,t)=>{const r=e.dimension,i=r.length>2?r.slice(2).reduce((e,t)=>e*t,1):1,s=r[0],a=r[0],{tau:l,v:u,alpha:m}=c.LAPACK.larfg("L",e,s,t);if(n.Complex.realIsZero(n.Complex.abs(l)))return{tau:l,v:u,alpha:m};for(let o=0;o<i;o++){const i=o*a;for(let o=0;o<r[1];o++){let r=n.Complex.zero();for(let a=t;a<s;a++){const s=i+a;r=n.Complex.add(r,n.Complex.mul(n.Complex.conj(u[a-t]),e.array[s][o]))}r=n.Complex.mul(l,r);for(let a=t;a<s;a++){const s=i+a;e.array[s][o]=n.Complex.sub(e.array[s][o],n.Complex.mul(u[a-t],r))}}}return o.MultiArray.setType(e),{tau:l,v:u,alpha:m}},u.larfg_right_nd=(e,t)=>{const r=e.dimension,i=r.length>2?r.slice(2).reduce((e,t)=>e*t,1):1,s=r[1],a=r[0],{tau:l,v:u,alpha:m}=c.LAPACK.larfg("R",e,s,t);if(n.Complex.realIsZero(n.Complex.abs(l)))return{tau:l,v:u,alpha:m};for(let o=0;o<i;o++){const i=o*a;for(let o=0;o<r[0];o++){const r=e.array[i+o];let a=n.Complex.zero();for(let e=t;e<s;e++)a=n.Complex.add(a,n.Complex.mul(r[e],u[e-t]));a=n.Complex.mul(l,a);for(let e=t;e<s;e++)r[e]=n.Complex.sub(r[e],n.Complex.mul(a,n.Complex.conj(u[e-t])))}}return o.MultiArray.setType(e),{tau:l,v:u,alpha:m}},u.larfg_nd=(e,t,r)=>"L"===e?u.larfg_left_nd(t,r):u.larfg_right_nd(t,r),u.larf_left_block_anterior=(e,t,r,o,i,s)=>{if(n.Complex.realIsZero(n.Complex.abs(r)))return;const a=e.dimension[0],l=e.dimension[1],c="number"==typeof s?Math.min(s,l):l,u=t.length,m=Math.max(0,Math.min(u,a-o));for(let s=i;s<c;s++){let i=n.Complex.zero();for(let r=0;r<m;r++)n.Complex.mulAndSumTo(i,n.Complex.conj(t[r]),e.array[o+r][s]);if(i=n.Complex.mul(r,i),!n.Complex.realIsZero(n.Complex.abs(i)))for(let r=0;r<m;r++){const a=n.Complex.mul(t[r],i);e.array[o+r][s]=n.Complex.sub(e.array[o+r][s],a)}}},u.larf_left_block=(e,t,r,s,a,l)=>{if(n.Complex.realIsZero(n.Complex.abs(r)))return;const c=e.dimension[0],u=e.dimension[1],m=t.length;if(s<0||s>=c)throw new Error("larf_left_block: invalid rowStart");if(a<0||a>=u)throw new Error("larf_left_block: invalid colStart");if(m!==c-s)throw new Error("larf_left_block: v length must equal m - rowStart");const h=Math.max(1,Math.floor(null!=l?l:i.BLAS.settings.blockSize)),p=new o.MultiArray([m,1]);for(let e=0;e<m;e++)p.array[e][0]=t[e];const d=new o.MultiArray([1,m]);for(let e=0;e<m;e++)d.array[0][e]=n.Complex.conj(t[e]);for(let t=a;t<u;t+=h){const a=Math.min(t+h,u)-t,l=new o.MultiArray([m,a]);for(let r=0;r<m;r++)for(let n=0;n<a;n++)l.array[r][n]=e.array[s+r][t+n];const c=new o.MultiArray([1,a]);i.BLAS.gemm_block(d.array,l.array,c.array,n.Complex.one(),n.Complex.zero(),h);for(let e=0;e<a;e++)c.array[0][e]=n.Complex.mul(r,c.array[0][e]);for(let e=0;e<m;e++){const t=p.array[e][0];if(!n.Complex.realIsZero(n.Complex.abs(t)))for(let r=0;r<a;r++){const o=n.Complex.mul(t,c.array[0][r]);l.array[e][r]=n.Complex.sub(l.array[e][r],o)}}for(let r=0;r<m;r++)for(let n=0;n<a;n++)e.array[s+r][t+n]=l.array[r][n]}},u.larf_right_conj_block=(e,t,r,s,a,l)=>{if(n.Complex.realIsZero(n.Complex.abs(r)))return;const c=e.dimension[0],u=e.dimension[1],m=t.length;if(s<0||s>=c)throw new Error("larf_right_conj_block: invalid rowStart");if(a<0||a>=u)throw new Error("larf_right_conj_block: invalid colStart");if(a+m>u)throw new Error("larf_right_conj_block: block exceeds matrix columns");const h=Math.max(1,Math.floor(null!=l?l:i.BLAS.settings.blockSize)),p=new o.MultiArray([m,1]);for(let e=0;e<m;e++)p.array[e][0]=n.Complex.conj(t[e]);for(let l=s;l<c;l+=h){const s=Math.min(l+h,c)-l,u=new o.MultiArray([s,m]);for(let t=0;t<s;t++)for(let r=0;r<m;r++)u.array[t][r]=e.array[l+t][a+r];const d=new o.MultiArray([s,1]);i.BLAS.gemm_block(u.array,p.array,d.array,n.Complex.one(),n.Complex.zero(),h);const x=n.Complex.conj(r);for(let e=0;e<s;e++)d.array[e][0]=n.Complex.mul(x,d.array[e][0]);for(let e=0;e<s;e++){const r=d.array[e][0];if(!n.Complex.realIsZero(n.Complex.abs(r)))for(let o=0;o<m;o++){const i=n.Complex.mul(r,t[o]);u.array[e][o]=n.Complex.sub(u.array[e][o],i)}}for(let t=0;t<s;t++)for(let r=0;r<m;r++)e.array[l+t][a+r]=u.array[t][r]}},u.larf_right_conj=(e,t,r,o,i)=>{if(n.Complex.realIsZero(n.Complex.abs(r)))return;const s=e.dimension[0],a=(e.dimension[1],t.length);for(let l=o;l<s;l++){let o=n.Complex.zero();for(let r=0;r<a;r++)n.Complex.mulAndSumTo(o,e.array[l][i+r],n.Complex.conj(t[r]));const s=n.Complex.mul(o,n.Complex.conj(r));if(!n.Complex.realIsZero(n.Complex.abs(s)))for(let r=0;r<a;r++)e.array[l][i+r]=n.Complex.sub(e.array[l][i+r],n.Complex.mul(s,t[r]))}},u.larf_right_conj_return=(e,t,r,i,s)=>{if(n.Complex.realIsZero(n.Complex.abs(r)))return o.MultiArray.copy(e);const a=e.dimension[0],l=(e.dimension[1],t.length),c=o.MultiArray.copy(e);for(let o=i;o<a;o++){let i=n.Complex.zero();for(let r=0;r<l;r++)n.Complex.mulAndSumTo(i,e.array[o][s+r],n.Complex.conj(t[r]));const a=n.Complex.mul(i,n.Complex.conj(r));if(!n.Complex.realIsZero(n.Complex.abs(a)))for(let r=0;r<l;r++)c.array[o][s+r]=n.Complex.sub(e.array[o][s+r],n.Complex.mul(a,t[r]))}return o.MultiArray.setType(c),c},u.larf_left_nd=(e,t,r,i,s)=>{if(n.Complex.realIsZero(n.Complex.abs(r)))return;const a=e.dimension,l=a.length>2?a.slice(2).reduce((e,t)=>e*t,1):1,c=a[0];for(let o=0;o<l;o++){const l=o*c;for(let o=s;o<a[1];o++){let s=n.Complex.zero();for(let r=0;r<t.length;r++){const a=l+i+r;s=n.Complex.add(s,n.Complex.mul(n.Complex.conj(t[r]),e.array[a][o]))}s=n.Complex.mul(r,s);for(let r=0;r<t.length;r++){const a=l+i+r;e.array[a][o]=n.Complex.sub(e.array[a][o],n.Complex.mul(t[r],s))}}}o.MultiArray.setType(e)},u.larf_right_nd=(e,t,r,i,s)=>{if(n.Complex.realIsZero(n.Complex.abs(r)))return;const a=e.dimension,l=a.length>2?a.slice(2).reduce((e,t)=>e*t,1):1,c=a[0];for(let o=0;o<l;o++){const l=o*c;for(let o=i;o<a[0];o++){const i=l+o,a=e.array[i];let c=n.Complex.zero();for(let e=0;e<t.length;e++)c=n.Complex.add(c,n.Complex.mul(a[s+e],t[e]));c=n.Complex.mul(r,c);for(let e=0;e<t.length;e++)a[s+e]=n.Complex.sub(a[s+e],n.Complex.mul(c,n.Complex.conj(t[e])))}}o.MultiArray.setType(e)},u.larf_nd=(e,t,r,n,o,i)=>"L"===e?u.larf_left_nd(t,r,n,o,i):u.larf_right_nd(t,r,n,o,i),u.getf2=(e,t,r,o)=>{const i=e.dimension[0],s=e.dimension[1],a=Math.min(t+r,Math.min(i,s));for(let r=t;r<a;r++){let t=r,a=n.Complex.abs(e.array[r][r]);for(let o=r+1;o<i;o++){const i=n.Complex.abs(e.array[o][r]);n.Complex.toBoolean(n.Complex.gt(i,a))&&(a=i,t=o)}o[r]=t,t!==r&&u.laswp_rows(e,r,t);const l=e.array[r][r];if(!n.Complex.toBoolean(n.Complex.eq(n.Complex.abs(l),n.Complex.zero()))){for(let t=r+1;t<i;t++)e.array[t][r]=n.Complex.rdiv(e.array[t][r],l);for(let t=r+1;t<i;t++){const o=e.array[t][r],i=e.array[t],a=e.array[r];for(let e=r+1;e<s;e++)i[e]=n.Complex.sub(i[e],n.Complex.mul(o,a[e]))}}}},u.getrf=(e,t)=>{const r=e.dimension[0],s=e.dimension[1],a=Math.min(r,s),l=new Array(a);for(let e=0;e<a;e++)l[e]=e;let u=0;for(let o=0;o<a;o+=null!=t?t:i.BLAS.settings.blockSize){const m=Math.min(null!=t?t:i.BLAS.settings.blockSize,a-o);c.LAPACK.getf2(e.array,o,m,l);for(let t=o;t<o+m&&t<a;t++){const r=l[t];if(r!==t&&u++,r!==t&&o>0)for(let n=0;n<o;n++){const o=e.array[t][n];e.array[t][n]=e.array[r][n],e.array[r][n]=o}}const h=m,p=r-(o+h),d=s-(o+h);if(o+h<s){const t=e.array,r=[];for(let e=0;e<p;e++){const n=o+h+e,i=new Array(h);for(let e=0;e<h;e++)i[e]=t[n][o+e];r.push(i)}const s=[];for(let e=0;e<h;e++){const r=o+e,n=new Array(d);for(let e=0;e<d;e++)n[e]=t[r][o+h+e];s.push(n)}const a=[];for(let e=0;e<p;e++){const r=o+h+e,n=new Array(d);for(let e=0;e<d;e++)n[e]=t[r][o+h+e];a.push(n)}i.BLAS.gemm(n.Complex.neg(n.Complex.one()),r,p,h,s,d,n.Complex.one(),a);for(let e=0;e<p;e++){const r=o+h+e;for(let n=0;n<d;n++)t[r][o+h+n]=a[e][n]}for(let e=0;e<h;e++){const r=o+e;for(let n=0;n<d;n++)t[r][o+h+n]=s[e][n]}for(let e=0;e<p;e++){const n=o+h+e;for(let i=0;i<h;i++)t[n][o+i]=r[e][i]}}}return o.MultiArray.setType(e),{LU:e,piv:l,swaps:u}},u.gemm_blocked=(e,t,r,o=64)=>{const i=t+r,s=t+r,a=e.dimension[0]-(t+r),l=e.dimension[1]-(t+r);if(a<=0||l<=0)return;const c=r,u=o;for(let r=0;r<a;r+=u){const o=Math.min(r+u,a);for(let a=0;a<l;a+=u){const m=Math.min(a+u,l);for(let l=r;l<o;l++){const r=i+l,o=e.array[r];for(let r=a;r<m;r++){let a=n.Complex.zero();for(let o=0;o<c;o++){const c=e.array[i+l][t+o],u=e.array[t+o][s+r];a=n.Complex.add(a,n.Complex.mul(c,u))}o[s+r]=n.Complex.sub(o[s+r],a)}}}}},u.getrf_blocked=(e,t)=>{const r=e.dimension[0],n=e.dimension[1],o=Math.min(r,n),s=new Array(o);for(let e=0;e<o;e++)s[e]=e;const a={swaps:0},l={info:0};for(let u=0;u<o;u+=null!=t?t:i.BLAS.settings.blockSize){const m=Math.min(null!=t?t:i.BLAS.settings.blockSize,o-u);c.LAPACK.getf2(e.array,u,m,s,a,l),u+m<n&&c.LAPACK.trsm_left_upper_block(e.array,u,m),u+m<r&&u+m<n&&c.LAPACK.gemm_blocked(e.array,u,m)}return{LU:e,piv:s,info:l.info,swaps:a.swaps}},u.getrs=(e,t,r)=>{var i;const s=e.dimension[0],a=e.dimension[1],l=null!==(i=r.dimension[1])&&void 0!==i?i:1,c=o.MultiArray.copy(r);for(let e=0;e<t.length;e++){const r=t[e];if(r!==e)if("function"==typeof o.MultiArray.swapRows)o.MultiArray.swapRows(c,e,r);else{const t=c.array[e];c.array[e]=c.array[r],c.array[r]=t}}for(let t=0;t<l;t++)for(let r=0;r<s;r++){let o=c.array[r][t];for(let i=0;i<r&&i<a;i++)o=n.Complex.sub(o,n.Complex.mul(e.array[r][i],c.array[i][t]));c.array[r][t]=o}for(let t=0;t<l;t++)for(let r=Math.min(a,s)-1;r>=0;r--){let o=c.array[r][t];for(let i=r+1;i<a;i++)o=n.Complex.sub(o,n.Complex.mul(e.array[r][i],c.array[i][t]));const i=e.array[r][r];c.array[r][t]=n.Complex.rdiv(o,i)}return o.MultiArray.setType(c),c},u.sytrd=(e,t)=>{const r=e.dimension[0],o=new Array(r),i=new Array(r-1),s=new Array(r-1);for(let a=0;a<r-1;a++){const l=r-a-1,u=new Array(l);for(let t=0;t<l;t++)u[t]=n.Complex.copy(e.array[a+1+t][a]);const{alpha:m,v:h,tau:p}=c.LAPACK.larfg_original(u);s[a]=p,i[a]=m,e.array[a+1][a]=m;for(let t=1;t<l;t++)e.array[a+1+t][a]=h[t];n.Complex.realIsZero(n.Complex.abs(p))||t(e,h,n.Complex.conj(p),a+1,a+1),o[a]=n.Complex.copy(e.array[a][a])}return o[r-1]=n.Complex.copy(e.array[r-1][r-1]),{diag:o,offdiag:i,taus:s}},u.ungtr0=(e,t)=>{const r=e.dimension[0],i=new o.MultiArray([r,r]);i.array=c.LAPACK.eye([r,r]);for(let o=r-2;o>=0;o--){const s=t[o];if(n.Complex.realIsZero(n.Complex.abs(s)))continue;const a=r-o-1,l=new Array(a);l[0]=n.Complex.one();for(let t=1;t<a;t++)l[t]=n.Complex.copy(e.array[o+1+t][o]);const c=new Array(r);for(let e=0;e<r;e++){let t=n.Complex.zero();for(let r=0;r<a;r++)n.Complex.mulAndSumTo(t,n.Complex.conj(l[r]),i.array[o+1+r][e]);c[e]=t}for(let e=0;e<a;e++){const t=n.Complex.mul(s,l[e]);for(let s=0;s<r;s++)i.array[o+1+e][s]=n.Complex.sub(i.array[o+1+e][s],n.Complex.mul(t,c[s]))}}return i},u.ungtr=(e,t)=>{const r=e.dimension[0],i=new o.MultiArray([r,r]);i.array=c.LAPACK.eye([r,r]);for(let o=r-2;o>=0;o--){const s=t[o];if(n.Complex.realIsZero(n.Complex.abs(s)))continue;const a=r-o-1,l=new Array(a);l[0]=n.Complex.one();for(let t=1;t<a;t++)l[t]=n.Complex.copy(e.array[o+1+t][o]);const c=new Array(r);for(let e=0;e<r;e++){let t=n.Complex.zero();for(let r=0;r<a;r++)n.Complex.mulAndSumTo(t,n.Complex.conj(l[r]),i.array[o+1+r][e]);c[e]=t}for(let e=0;e<a;e++){const t=n.Complex.mul(s,l[e]);for(let s=0;s<r;s++)i.array[o+1+e][s]=n.Complex.sub(i.array[o+1+e][s],n.Complex.mul(t,c[s]))}}return i},u.sytrd_debug=e=>{console.log("\n===== DEBUG: LAPACK.sytrd_debug =====\n");const t=e.dimension[0],r=o.MultiArray.copy(e),{diag:i,offdiag:u,taus:m}=c.LAPACK.sytrd(e,c.LAPACK.her2_zhtrd_update);console.log("Diag D ="),console.log("Offdiag E ="),console.log("Taus =");let h=new o.MultiArray([t,t]);h.array=c.LAPACK.eye(t,t);for(let r=t-2;r>=0;r--){const o=t-r-1,i=new Array(o);for(let t=0;t<o;t++)i[t]=e.array[r+1+t][r];const s=m[r];n.Complex.realIsZero(n.Complex.abs(s))||c.LAPACK.larf_left(h,i,s,r+1,0)}const p=new o.MultiArray([t,t]);for(let e=0;e<t;e++)p.array[e][e]=i[e],e<t-1&&(p.array[e][e+1]=u[e],p.array[e+1][e]=u[e]);console.log("\nMatriz T reconstruída:");const d=l.Evaluator.Create();console.log(o.MultiArray.unparse(p,d));const x=s.MathOperation.mtimes(a.LinearAlgebra.transpose(h),s.MathOperation.mtimes(r,h));console.log("\nMatriz Qᵀ * A * Q ="),console.log(o.MultiArray.unparse(x,d)),console.log("\nElementos fora da banda tridiagonal (devem ≈ 0):");for(let e=0;e<t;e++)for(let r=0;r<t;r++)Math.abs(n.Complex.realToNumber(x.array[e][r]))>1e-7&&Math.abs(e-r)>1&&console.log("\n===== FIM DEBUG SYTRD =====\n");return{diag:i,offdiag:u,taus:m,Q:h,T:p,QtA:x}},u.sytrd_blocked=(e,t)=>{const r=e.dimension[0];if(r!==e.dimension[1])throw new Error("sytrd_blocked: A must be square");const o=new Array(r),s=new Array(r),a=new Array(r);if(0===r)return{diag:o,offdiag:s,taus:a};if(1===r)return o[0]=e.array[0][0],s[0]=n.Complex.zero(),a[0]=n.Complex.zero(),{diag:o,offdiag:s,taus:a};const l=Math.max(1,Math.floor(null!=t?t:i.BLAS.settings.blockSize));for(let t=0;t<r-1;t+=l){const i=Math.min(l,r-1-t);for(let m=0;m<i;m++){const i=t+m,h=r-i-1,p=new Array(h);for(let t=0;t<h;t++)p[t]=e.array[i+1+t][i];const d=c.LAPACK.larfg_original(p),x=d.v,f=d.tau,C=d.alpha;a[i]=f,o[i]=e.array[i][i],s[i]=C;for(let t=0;t<h;t++)e.array[i+1+t][i]=x[t];if(n.Complex.realIsZero(n.Complex.abs(f)))continue;const g=i+1,y=i+1;u.larf_left_block(e,x,f,g,y,l),u.larf_right_conj_block(e,x,f,g,y,l)}}return o[r-1]=e.array[r-1][r-1],s[r-1]=n.Complex.zero(),a[r-1]=n.Complex.zero(),{diag:o,offdiag:s,taus:a}},u.sytrd_blocked_w=(e,t)=>{const r=e.dimension[0];if(r!==e.dimension[1])throw new Error("sytrd_blocked_w: A must be square");const o=new Array(r),s=new Array(r),a=new Array(r);if(0===r)return{diag:o,offdiag:s,taus:a};if(1===r)return o[0]=e.array[0][0],s[0]=n.Complex.zero(),a[0]=n.Complex.zero(),{diag:o,offdiag:s,taus:a};const l=Math.max(1,Math.floor(null!=t?t:i.BLAS.settings.blockSize));for(let t=0;t<r-1;t+=l){const i=Math.min(l,r-1-t),u=new Array(r-t-1),m=new Array(r-t-1);for(let e=0;e<r-t-1;e++)u[e]=new Array(i).fill(n.Complex.zero()),m[e]=new Array(i).fill(n.Complex.zero());for(let l=0;l<i;l++){const i=t+l,h=r-i-1,p=new Array(h);for(let t=0;t<h;t++)p[t]=e.array[i+1+t][i];const d=c.LAPACK.larfg_original(p),x=d.v,f=d.tau,C=d.alpha;a[i]=f,o[i]=e.array[i][i],s[i]=C;for(let t=0;t<h;t++)e.array[i+1+t][i]=x[t],u[t][l]=x[t];if(!n.Complex.realIsZero(n.Complex.abs(f)))for(let t=0;t<h;t++){let r=n.Complex.zero();for(let o=0;o<=t;o++)r=n.Complex.add(r,n.Complex.mul(u[o][l],n.Complex.conj(e.array[i+1+o][i+1+t])));m[t][l]=n.Complex.mul(f,r)}}for(let o=0;o<r-t-1;o++)for(let s=o;s<r-t-1;s++){let r=n.Complex.zero(),a=n.Complex.zero();for(let e=0;e<i;e++)r=n.Complex.add(r,n.Complex.mul(u[o][e],n.Complex.conj(m[s][e]))),a=n.Complex.add(a,n.Complex.mul(m[o][e],n.Complex.conj(u[s][e])));e.array[t+1+o][t+1+s]=n.Complex.sub(e.array[t+1+o][t+1+s],n.Complex.add(r,a)),o!==s&&(e.array[t+1+s][t+1+o]=n.Complex.conj(e.array[t+1+o][t+1+s]))}}return o[r-1]=e.array[r-1][r-1],s[r-1]=n.Complex.zero(),a[r-1]=n.Complex.zero(),{diag:o,offdiag:s,taus:a}},u.steqr_values=(e,t,r)=>{const{D:n}=c.LAPACK.steqr_vectors(e,t,r);return n},u.steqr_vectors_1=(e,t,r)=>{const i=e.length,s=null!=r?r:1e3*i,a=e.slice(),l=t.slice();let u=i-1,m=0;const h=new o.MultiArray([i,i]);for(h.array=c.LAPACK.eye(i,i);u>0&&m<s;){let e=u-1;for(;e>=0&&n.Complex.realIsZero(n.Complex.abs(l[e]));)e--;if(e<0){u--;continue}const t=a[u-1],r=a[u],o=l[u-1],s=n.Complex.mul(n.Complex.sub(t,r),n.Complex.onediv2()),c=n.Complex.add(r,n.Complex.rdiv(n.Complex.mul(o,o),n.Complex.add(s,n.Complex.sign(s))));let p=n.Complex.sub(a[0],c),d=l[0];for(let e=0;e<u;e++){const t=n.Complex.sqrt(n.Complex.add(n.Complex.mul(p,p),n.Complex.mul(d,d))),r=n.Complex.rdiv(p,t),o=n.Complex.rdiv(d,t);for(let t=0;t<i;t++){const i=h.array[e][t],s=h.array[e+1][t];h.array[e][t]=n.Complex.add(n.Complex.mul(r,i),n.Complex.mul(o,s)),h.array[e+1][t]=n.Complex.sub(n.Complex.mul(r,s),n.Complex.mul(o,i))}e>0&&(l[e-1]=n.Complex.mul(t,n.Complex.sign(l[e-1])));const s=a[e],c=a[e+1],m=l[e];a[e]=n.Complex.add(n.Complex.add(n.Complex.mul(n.Complex.mul(r,r),s),n.Complex.mul(n.Complex.mul(o,o),c)),n.Complex.mul(n.Complex.mul(n.Complex.mul(r,o),m),n.Complex.two())),a[e+1]=n.Complex.add(n.Complex.add(n.Complex.mul(n.Complex.mul(o,o),s),n.Complex.mul(n.Complex.mul(r,r),c)),n.Complex.mul(n.Complex.mul(n.Complex.mul(r,o),m),n.Complex.create(-2))),l[e]=n.Complex.sub(n.Complex.mul(n.Complex.mul(r,o),n.Complex.sub(c,s)),m),e<u-1&&(p=l[e],d=n.Complex.mul(o,l[e+1]),l[e+1]=n.Complex.mul(r,l[e+1]))}m++}const p=o.MultiArray.toColumnVector(a);return o.MultiArray.setType(p),o.MultiArray.setType(h),{D:p,V:h}},u.steqr_vectors_0=(e,t,r)=>{const i=e.length,s=null!=r?r:Math.max(c.LAPACK.settings.maxIterationFactor,i*c.LAPACK.settings.maxIterationFactor),a=new Array(i),l=new Array(i);for(let t=0;t<i;t++)a[t]=n.Complex.realToNumber(e[t]);for(let e=0;e<i-1;e++)l[e]=n.Complex.realToNumber(t[e]);l[i-1]=0;const u=new o.MultiArray([i,i]),m=c.LAPACK.eye(i,i);u.array=m;const h=Number.EPSILON||2220446049250313e-31,p=a.slice(),d=l.slice();let x=i-1,f=0;const C=Array.from({length:i},(e,t)=>Array.from({length:i},(e,r)=>t===r?n.Complex.create(1):n.Complex.create(0)));let g=!1;try{for(;x>0&&f<s;){let e=x-1;for(;e>=0;){if(Math.abs(d[e])<=100*h*(Math.abs(p[e])+Math.abs(p[e+1]))){d[e]=0;break}e--}if(e<0&&(e=0),e===x){x--;continue}let t=0;for(;e<x&&t<s&&f<s;){t++,f++;const e=p[x],r=p[x-1],o=d[x-1],s=(r-e)/2,a=Math.hypot(s,o),l=s+(s>=0?a:-a),c=0===l?e-Math.abs(o):e+o*o/l;let u=p[0]-c,m=d[0],g=0;for(let e=0;e<x;e++){const t=Math.hypot(u,m);if(0===t){e<x-1&&(u=d[e],m=0);continue}const r=u/t,o=m/t,s=n.Complex.create(r),a=n.Complex.create(o);for(let t=0;t<i;t++){const r=C[e][t],o=C[e+1][t],i=n.Complex.add(n.Complex.mul(s,r),n.Complex.mul(a,o)),l=n.Complex.sub(n.Complex.mul(s,o),n.Complex.mul(a,r));C[e][t]=i,C[e+1][t]=l}e>0&&(d[e-1]=g);const l=p[e],c=p[e+1],h=d[e],f=r*h-o*((c-l)/2),y=l+2*o*r*h,_=c-2*o*r*h;if(p[e]=y,p[e+1]=_,d[e]=f,e<x-1){const t=d[e+1];g=o*t,d[e+1]=r*t,u=d[e],m=g}else g=0*o,u=d[e],m=0}x-1>=0&&(d[x-1]=g);for(let e=0;e<x;e++){const t=100*h*(Math.abs(p[e])+Math.abs(p[e+1]));Math.abs(d[e])<=t&&(d[e]=0)}for(;x>0&&0===d[x-1];)x--}}}catch(e){g=!0}const y=p.slice(),_=new o.MultiArray([i,i]);for(let e=0;e<i;e++)for(let t=0;t<i;t++)_.array[e][t]=C[e][t];o.MultiArray.setType(_);const A=(()=>{const e=Array.from({length:i},()=>Array(i).fill(0));for(let t=0;t<i;t++)e[t][t]=a[t],t<i-1&&(e[t][t+1]=l[t],e[t+1][t]=l[t]);const t=Array.from({length:i},(e,t)=>Array(i).fill(0));for(let e=0;e<i;e++)for(let r=0;r<i;r++)t[e][r]=n.Complex.realToNumber(_.array[e][r]);const r=Array.from({length:i},()=>Array(i).fill(0));for(let n=0;n<i;n++)for(let o=0;o<i;o++)if(0!==e[n][o])for(let s=0;s<i;s++)r[n][s]+=e[n][o]*t[o][s];const o=Array.from({length:i},()=>Array(i).fill(0));for(let e=0;e<i;e++)for(let r=0;r<i;r++)o[e][r]=t[e][r]*y[r];let s=0;for(let e=0;e<i;e++)for(let t=0;t<i;t++){const n=r[e][t]-o[e][t];s+=n*n}return Math.sqrt(s)})(),E=1e-8*Math.max(1,A);if(g||!(A<=E)){const e=Array.from({length:i},()=>Array(i).fill(0));for(let t=0;t<i;t++)e[t][t]=a[t],t<i-1&&(e[t][t+1]=l[t],e[t+1][t]=l[t]);const t=Array.from({length:i},(e,t)=>Array.from({length:i},(e,r)=>t===r?1:0)),r=1e-12,c=Math.max(50,Math.floor(s/Math.max(1,i))),m=e=>{let t=0;for(let r=0;r<i;r++)for(let n=r+1;n<i;n++)t+=e[r][n]*e[r][n];return Math.sqrt(t)};for(let n=0;n<c;n++){let n=!1;for(let o=0;o<i-1;o++)for(let s=o+1;s<i;s++){const a=e[o][s];if(Math.abs(a)<=r)continue;const l=e[o][o],c=e[s][s],u=.5*Math.atan2(2*a,c-l),m=Math.cos(u),h=Math.sin(u);for(let t=0;t<i;t++)if(t!==o&&t!==s){const r=e[t][o],n=e[t][s];e[t][o]=m*r-h*n,e[o][t]=e[t][o],e[t][s]=h*r+m*n,e[s][t]=e[t][s]}const p=m*m*l-2*h*m*a+h*h*c,d=h*h*l+2*h*m*a+m*m*c;e[o][o]=p,e[s][s]=d,e[o][s]=0,e[s][o]=0;for(let e=0;e<i;e++){const r=t[e][o],n=t[e][s];t[e][o]=m*r-h*n,t[e][s]=h*r+m*n}n=!0}if(!n)break;if(m(e)<=r)break}const h=new o.MultiArray([i,1]);for(let t=0;t<i;t++)h.array[t][0]=n.Complex.create(e[t][t]);for(let e=0;e<i;e++)for(let r=0;r<i;r++)u.array[e][r]=n.Complex.create(t[e][r]);return o.MultiArray.setType(h),o.MultiArray.setType(u),{D:h,V:u}}const T=y.map((e,t)=>({val:e,i:t})).sort((e,t)=>e.val-t.val),L=T.map(e=>e.val),b=Array.from({length:i},()=>Array(i).fill(n.Complex.create(0)));for(let e=0;e<i;e++){const t=T[e].i;for(let r=0;r<i;r++)b[r][e]=_.array[r][t]}const M=new o.MultiArray([i,1]);for(let e=0;e<i;e++)M.array[e][0]=n.Complex.create(L[e]);return u.array=b,o.MultiArray.setType(M),o.MultiArray.setType(u),{D:M,V:u}},u.steqr_vectors_2=(e,t,r)=>{const i=e.length,s=null!=r?r:Math.max(c.LAPACK.settings.maxIterationFactor,i*c.LAPACK.settings.maxIterationFactor),a=e.map(e=>n.Complex.real(e)),l=t.map(e=>n.Complex.real(e));l[i-1]=n.Complex.zero();const u=new o.MultiArray([i,i]);u.array=c.LAPACK.eye(i,i);const m=n.Complex.epsilon(),h=n.Complex.create(100),p=a.slice(),d=l.slice();let x=i-1,f=0;const C=c.LAPACK.eye(i,i);let g=!1;try{for(;x>0&&f<s;){let e=x-1;for(;e>=0;){const t=n.Complex.abs(d[e]),r=n.Complex.mul(n.Complex.mul(m,h),n.Complex.add(n.Complex.abs(p[e]),n.Complex.abs(p[e+1])));if(n.Complex.toBoolean(n.Complex.le(t,r))){d[e]=n.Complex.zero();break}e--}if(e<0&&(e=0),e===x){x--;continue}let t=0;for(;e<x&&t<s&&f<s;){t++,f++;const e=p[x],r=p[x-1],o=d[x-1],s=n.Complex.rdiv(n.Complex.sub(r,e),n.Complex.two()),a=n.Complex.hypot(s,o),l=n.Complex.add(s,n.Complex.toBoolean(n.Complex.ge(s,n.Complex.zero()))?a:n.Complex.neg(a)),c=n.Complex.toBoolean(n.Complex.eq(l,n.Complex.zero()))?n.Complex.sub(e,n.Complex.abs(o)):n.Complex.add(e,n.Complex.rdiv(n.Complex.mul(o,o),l));let u=n.Complex.sub(p[0],c),g=d[0],y=n.Complex.zero();for(let e=0;e<x;e++){const t=n.Complex.hypot(u,g);if(n.Complex.toBoolean(n.Complex.eq(t,n.Complex.zero()))){e<x-1&&(u=d[e],g=n.Complex.zero());continue}const r=n.Complex.rdiv(u,t),o=n.Complex.rdiv(g,t),s=r,a=o;for(let t=0;t<i;t++){const r=C[e][t],o=C[e+1][t],i=n.Complex.add(n.Complex.mul(s,r),n.Complex.mul(a,o)),l=n.Complex.sub(n.Complex.mul(s,o),n.Complex.mul(a,r));C[e][t]=i,C[e+1][t]=l}e>0&&(d[e-1]=y);const l=p[e],c=p[e+1],m=d[e],h=n.Complex.sub(n.Complex.mul(r,m),n.Complex.mul(o,n.Complex.rdiv(n.Complex.sub(c,l),n.Complex.two()))),f=n.Complex.add(l,n.Complex.mul(n.Complex.two(),n.Complex.mul(o,n.Complex.mul(r,m)))),_=n.Complex.sub(c,n.Complex.mul(n.Complex.two(),n.Complex.mul(o,n.Complex.mul(r,m))));if(p[e]=f,p[e+1]=_,d[e]=h,e<x-1){const t=d[e+1];y=n.Complex.mul(o,t),d[e+1]=n.Complex.mul(r,t),u=d[e],g=y}else y=n.Complex.mul(o,n.Complex.zero()),u=d[e],g=n.Complex.zero()}x-1>=0&&(d[x-1]=y);for(let e=0;e<x;e++){const t=n.Complex.mul(m,n.Complex.mul(h,n.Complex.add(n.Complex.abs(p[e]),n.Complex.abs(p[e+1]))));n.Complex.toBoolean(n.Complex.le(n.Complex.abs(d[e]),t))&&(d[e]=n.Complex.zero())}for(;x>0&&n.Complex.toBoolean(n.Complex.eq(d[x-1],n.Complex.zero()));)x--}}}catch(e){g=!0}const y=p.slice(),_=new o.MultiArray([i,i]);for(let e=0;e<i;e++)for(let t=0;t<i;t++)_.array[e][t]=C[e][t];o.MultiArray.setType(_);const A=(()=>{const e=Array.from({length:i},()=>Array(i).fill(n.Complex.zero()));for(let t=0;t<i;t++)e[t][t]=a[t],t<i-1&&(e[t][t+1]=l[t],e[t+1][t]=l[t]);const t=Array.from({length:i},(e,t)=>Array(i).fill(n.Complex.zero()));for(let e=0;e<i;e++)for(let r=0;r<i;r++)t[e][r]=_.array[e][r];const r=Array.from({length:i},()=>Array(i).fill(n.Complex.zero()));for(let o=0;o<i;o++)for(let s=0;s<i;s++)if(n.Complex.toBoolean(n.Complex.ne(e[o][s],n.Complex.zero())))for(let a=0;a<i;a++)n.Complex.mulAndSumTo(r[o][a],e[o][s],t[s][a]);const o=Array.from({length:i},()=>Array(i).fill(n.Complex.zero()));for(let e=0;e<i;e++)for(let r=0;r<i;r++)o[e][r]=n.Complex.mul(t[e][r],y[r]);let s=n.Complex.zero();for(let e=0;e<i;e++)for(let t=0;t<i;t++){const i=n.Complex.sub(r[e][t],o[e][t]);n.Complex.mulAndSumTo(s,i,i)}return n.Complex.sqrt(s)})(),E=n.Complex.mul(n.Complex.create(1e-8),n.Complex.max(n.Complex.one(),A));if(g||!n.Complex.toBoolean(n.Complex.le(A,E))){const e=Array.from({length:i},()=>Array(i).fill(n.Complex.zero()));for(let t=0;t<i;t++)e[t][t]=a[t],t<i-1&&(e[t][t+1]=l[t],e[t+1][t]=l[t]);const t=Array.from({length:i},(e,t)=>Array.from({length:i},(e,r)=>t===r?n.Complex.one():n.Complex.zero())),r=n.Complex.create(1e-12),c=Math.max(50,Math.floor(s/Math.max(1,i))),m=e=>{let t=n.Complex.zero();for(let r=0;r<i;r++)for(let o=r+1;o<i;o++)n.Complex.mulAndSumTo(t,e[r][o],e[r][o]);return n.Complex.sqrt(t)};for(let o=0;o<c;o++){let o=!1;for(let s=0;s<i-1;s++)for(let a=s+1;a<i;a++){const l=e[s][a];if(n.Complex.toBoolean(n.Complex.le(n.Complex.abs(l),r)))continue;const c=e[s][s],u=e[a][a],m=n.Complex.mul(n.Complex.onediv2(),n.Complex.atan2(n.Complex.mul(n.Complex.two(),l),n.Complex.sub(u,c))),h=n.Complex.cos(m),p=n.Complex.sin(m);for(let t=0;t<i;t++)if(t!==s&&t!==a){const r=e[t][s],o=e[t][a];e[t][s]=n.Complex.sub(n.Complex.mul(h,r),n.Complex.mul(p,o)),e[s][t]=e[t][s],e[t][a]=n.Complex.add(n.Complex.mul(p,r),n.Complex.mul(h,o)),e[a][t]=e[t][a]}const d=n.Complex.add(n.Complex.sub(n.Complex.mul(n.Complex.mul(h,h),c),n.Complex.mul(n.Complex.mul(n.Complex.mul(n.Complex.two(),p),h),l)),n.Complex.mul(n.Complex.mul(p,p),u)),x=n.Complex.add(n.Complex.add(n.Complex.mul(n.Complex.mul(p,p),c),n.Complex.mul(n.Complex.mul(n.Complex.mul(n.Complex.two(),p),h),l)),n.Complex.mul(n.Complex.mul(h,h),u));e[s][s]=d,e[a][a]=x,e[s][a]=n.Complex.zero(),e[a][s]=n.Complex.zero();for(let e=0;e<i;e++){const r=t[e][s],o=t[e][a];t[e][s]=n.Complex.sub(n.Complex.mul(h,r),n.Complex.mul(p,o)),t[e][a]=n.Complex.add(n.Complex.mul(p,r),n.Complex.mul(h,o))}o=!0}if(!o)break;if(m(e)<=r)break}const h=new o.MultiArray([i,1]);for(let t=0;t<i;t++)h.array[t][0]=e[t][t];for(let e=0;e<i;e++)for(let r=0;r<i;r++)u.array[e][r]=t[e][r];return o.MultiArray.setType(h),o.MultiArray.setType(u),{D:h,V:u}}const T=y.map((e,t)=>({val:e,i:t})).sort((e,t)=>n.Complex.realToNumber(n.Complex.sub(e.val,t.val))),L=T.map(e=>e.val),b=Array.from({length:i},()=>Array(i).fill(n.Complex.create(0)));for(let e=0;e<i;e++){const t=T[e].i;for(let r=0;r<i;r++)b[r][e]=_.array[r][t]}const M=new o.MultiArray([i,1]);for(let e=0;e<i;e++)M.array[e][0]=L[e];return u.array=b,o.MultiArray.setType(M),o.MultiArray.setType(u),{D:M,V:u}},u.numeric_jacobi_symmetric_dense=(e,t,r)=>{const o=e.length;if(0===o)return{Dnum:[],Vnum:[]};if(1===o)return{Dnum:[e[0]],Vnum:[[n.Complex.one()]]};const i=Array.from({length:o},()=>Array(o).fill(0));for(let r=0;r<o;r++)if(i[r][r]=e[r],r<o-1){const e=t[r];i[r][r+1]=e,i[r+1][r]=e}const s=Array.from({length:o},(e,t)=>Array.from({length:o},(e,r)=>t===r?1:0)),a=Number.EPSILON||2220446049250313e-31,l=Math.max(50,Math.min(5e3,Math.floor(r/Math.max(1,o)))),c=e=>{let t=0;for(let r=0;r<o;r++)for(let n=r+1;n<o;n++)t+=e[r][n]*e[r][n];return Math.sqrt(t)};for(let e=0;e<l;e++){let e=!1;for(let t=0;t<o-1;t++)for(let r=t+1;r<o;r++){const n=i[t][r],l=1e-15*(Math.abs(i[t][t])+Math.abs(i[r][r]))+a;if(Math.abs(n)<=l)continue;const c=i[t][t],u=i[r][r],m=2*n;if(0===m)continue;const h=(u-c)/m,p=(h>=0?1:-1)/(Math.abs(h)+Math.sqrt(1+h*h)),d=1/Math.sqrt(1+p*p),x=p*d;for(let e=0;e<o;e++)if(e!==t&&e!==r){const n=i[e][t],o=i[e][r];i[e][t]=d*n-x*o,i[t][e]=i[e][t],i[e][r]=x*n+d*o,i[r][e]=i[e][r]}const f=d*d*c-2*x*d*n+x*x*u,C=x*x*c+2*x*d*n+d*d*u;i[t][t]=f,i[r][r]=C,i[t][r]=0,i[r][t]=0;for(let e=0;e<o;e++){const n=s[e][t],o=s[e][r];s[e][t]=d*n-x*o,s[e][r]=x*n+d*o}e=!0}if(!e)break;if(c(i)<=1e-14)break}const u=new Array(o);for(let e=0;e<o;e++)u[e]=i[e][e];return{Dnum:u,Vnum:Array.from({length:o},(e,t)=>Array.from({length:o},(e,r)=>n.Complex.create(s[t][r])))}},u.tridiag_her_to_dense=(e,t)=>{const r=e.length,o=Array.from({length:r},()=>Array.from({length:r},()=>n.Complex.zero()));for(let i=0;i<r;i++)o[i][i]=n.Complex.copy(e[i]),i<r-1&&(o[i][i+1]=n.Complex.copy(t[i]),o[i+1][i]=n.Complex.conj(t[i]));return o},u.compute_residual_numeric=(e,t,r)=>{const o=e.length,i=Array.from({length:o},()=>Array(o).fill(0));for(let e=0;e<o;e++)for(let r=0;r<o;r++)i[e][r]=n.Complex.realToNumber(t.array[e][r]);const s=Array.from({length:o},()=>Array(o).fill(0));for(let t=0;t<o;t++)s[t][t]=n.Complex.realToNumber(n.Complex.real(e[t][t])),t<o-1&&(s[t][t+1]=n.Complex.realToNumber(n.Complex.real(e[t][t+1])),s[t+1][t]=s[t][t+1]);const a=Array.from({length:o},()=>Array(o).fill(0));for(let e=0;e<o;e++)for(let t=0;t<o;t++){const r=s[e][t];if(0!==r)for(let n=0;n<o;n++)a[e][n]+=r*i[t][n]}const l=Array.from({length:o},()=>Array(o).fill(0));for(let e=0;e<o;e++)for(let t=0;t<o;t++)l[e][t]=i[e][t]*r[t];let c=0;for(let e=0;e<o;e++)for(let t=0;t<o;t++){const r=a[e][t]-l[e][t];c+=r*r}return Math.sqrt(c)},u.compute_residual_complex=(e,t,r)=>{const o=e.length;let i=0;for(let s=0;s<o;s++)for(let a=0;a<o;a++){let l=n.Complex.zero();for(let r=0;r<o;r++)n.Complex.mulAndSumTo(l,e[s][r],t.array[r][a]);const c="number"==typeof r[0]?n.Complex.create(r[a]):r[a],u=n.Complex.mul(t.array[s][a],c),m=n.Complex.sub(l,u),h=n.Complex.realToNumber(n.Complex.abs(m));i+=h*h}return Math.sqrt(i)},u.column_pivot=(e,t,r=0,o=e.length)=>{const i=e.slice(r,o).map(e=>n.Complex.abs(e[t])),s=i.reduce((e,t,r,o)=>n.Complex.toBoolean(n.Complex.gt(t,o[e]))?r:e,0);return{pivotRow:s,pivotAbs:i[s],pivotIsZero:n.Complex.realIsZero(i[s])}},u.normalize_eigenvector_phases=(e,t=!0)=>{const r=e.length,o=e[0].length;for(let i=0;i<o;i++){const{pivotRow:o,pivotAbs:s,pivotIsZero:a}=c.LAPACK.column_pivot(e,i);if(a)continue;const l=e[o][i];let u=n.Complex.rdiv(n.Complex.conj(l),s);t&&n.Complex.realLessThan(n.Complex.mul(l,u),0)&&(u=n.Complex.neg(u));for(let t=0;t<r;t++)e[t][i]=n.Complex.mul(e[t][i],u)}},u.test_orthonormality=e=>{const t=e.dimension[0],r=Array.from({length:t},()=>Array(t).fill(0));for(let o=0;o<t;o++)for(let i=0;i<t;i++){let s=0;for(let r=0;r<t;r++)s+=n.Complex.realToNumber(n.Complex.mul(n.Complex.conj(e.array[r][o]),e.array[r][i]));r[o][i]=s}let o=0,i=0;for(let e=0;e<t;e++)for(let n=0;n<t;n++)e===n?i=Math.max(i,Math.abs(1-r[e][e])):o=Math.max(o,Math.abs(r[e][n]));return{maxOffDiag:o,maxDiagDeviation:i}},u.test_residual=(e,t,r)=>{const n=e.length,o=new Array(n);for(let e=0;e<n;e++)o[e]=r.array[e][0];return u.compute_residual_complex(e,t,o)},u.diag_eigenpairs=(e,t,r)=>{const o=e.length,i=[];for(let s=0;s<o;s++){const a=new Array(o);for(let e=0;e<o;e++)a[e]=t.array[e][s];const l=new Array(o).fill(n.Complex.zero());for(let t=0;t<o;t++){let r=n.Complex.zero();for(let i=0;i<o;i++)r=n.Complex.add(r,n.Complex.mul(e[t][i],a[i]));l[t]=r}let c=n.Complex.zero();for(let e=0;e<o;e++)c=n.Complex.add(c,n.Complex.mul(n.Complex.conj(a[e]),l[e]));let u=n.Complex.zero();for(let e=0;e<o;e++)u=n.Complex.add(u,n.Complex.mul(n.Complex.conj(a[e]),a[e]));const m=n.Complex.rdiv(c,u),h=r.array[s][0],p=n.Complex.sub(h,m),d=n.Complex.realToNumber(n.Complex.abs(p));let x=0;for(let e=0;e<o;e++){const t=l[e],r=n.Complex.mul(h,a[e]),o=n.Complex.sub(t,r),i=n.Complex.realToNumber(n.Complex.abs(o));x+=i*i}const f=Math.sqrt(x);i.push({j:s,lambda:h,rq:m,abs_lambda_minus_rq:d,resnorm:f})}return i.forEach(e=>{}),i},u.match_evals_to_rayleighs=(e,t)=>{const r=e.length,o=(e.map((e,t)=>({val:e,i:t,re:n.Complex.realToNumber(n.Complex.real(e))})),t.map((e,t)=>({val:e,i:t,re:n.Complex.realToNumber(n.Complex.real(e))})),Array(r).fill(!1)),i=[];for(let s=0;s<r;s++){let a=-1,l=1/0;for(let i=0;i<r;i++){if(o[i])continue;const r=n.Complex.sub(e[s],t[i]),c=n.Complex.realToNumber(n.Complex.abs(r));c<l&&(l=c,a=i)}a>=0&&(o[a]=!0,i.push({evalIndex:s,rqIndex:a,diff:l}))}return console.log("match_evals_to_rayleighs mapping:"),i.forEach(r=>{const o=n.Complex.realToNumber(n.Complex.real(e[r.evalIndex])),i=n.Complex.realToNumber(n.Complex.real(t[r.rqIndex]));console.log(`eval idx=${r.evalIndex} (val=${o}) -> rq idx=${r.rqIndex} (val=${i}) diff=${r.diff}`)}),i},u.steqr_vectors_original=(e,t,r)=>{const i=e.length,s=null!=r?r:Math.max(1e3,1e3*i),a=new Array(i),l=new Array(i);for(let r=0;r<i-1;r++)a[r]=n.Complex.copy(e[r]),l[r]=n.Complex.copy(t[r]);a[i-1]=n.Complex.copy(e[i-1]),l[i-1]=n.Complex.zero();let m=!1;for(let e=0;e<i;e++){if(n.Complex.isComplexValue(a[e])){m=!0;break}if(e<i-1&&n.Complex.isComplexValue(l[e])){m=!0;break}}console.log("----- State of tridiagonal about to be solved -----"),console.log("# Arguments:"),console.log("# Prepare Dwork and Ework:"),console.log("# Input is complex?:"),console.log(" needComplexPath =",null!=m&&m);const h=new Array(i),p=new Array(i),d=new Array(i);if(m){h[0]=n.Complex.one();for(let e=0;e<i-1;e++){const t=l[e],r=n.Complex.abs(t);if(n.Complex.realIsZero(r))h[e+1]=n.Complex.copy(h[e]);else{const o=n.Complex.mul(n.Complex.conj(h[e]),t);h[e+1]=n.Complex.rdiv(r,o);const i=n.Complex.realToNumber(n.Complex.abs(h[e+1]));0!==i&&Math.abs(i-1)>1e-12&&(h[e+1]=n.Complex.rdiv(h[e+1],n.Complex.abs(h[e+1])))}}console.log("# Phases u[] for Hermitian -> real-offdiag transform");for(let e=0;e<i;e++)p[e]=n.Complex.realToNumber(a[e]);for(let e=0;e<i-1;e++){const t=n.Complex.mul(n.Complex.conj(h[e]),n.Complex.mul(l[e],h[e+1]));d[e]=n.Complex.realToNumber(n.Complex.abs(t))}}else{for(let e=0;e<i;e++)p[e]=n.Complex.realToNumber(a[e]);for(let e=0;e<i-1;e++)d[e]=n.Complex.realToNumber(l[e])}d[i-1]=0,console.log(" Dnum = [",p.map(e=>e.toString()).join(", "),"]"),console.log(" Enum = [",d.map(e=>e.toString()).join(", "),"]");const x=new o.MultiArray([i,i]);x.array=c.LAPACK.eye(i,i);const f=u.numeric_jacobi_symmetric_dense(p,d,s);console.log("# LAPACK.numeric_jacobi_symmetric_dense(Dnum, Enum, maxIts)"),console.log(" core.Dnum:",JSON.stringify(f.Dnum));const C=f.Dnum.slice(),g=f.Vnum.map(e=>e.map(e=>n.Complex.copy(e)));if(m)for(let e=0;e<i;e++){const t=h[e];for(let r=0;r<i;r++)g[e][r]=n.Complex.mul(t,g[e][r])}const y=new o.MultiArray([i,i]);for(let e=0;e<i;e++)for(let t=0;t<i;t++)y.array[e][t]=n.Complex.copy(g[e][t]);o.MultiArray.setType(y);const _=C.map(e=>n.Complex.create(e));c.LAPACK.normalize_eigenvector_phases(y.array);const A=u.tridiag_her_to_dense(a,l),E=_.slice(),T=u.compute_residual_complex(A,y,E);if(T>1e-8*Math.max(1,T)){const e=c.LAPACK.jacobi_symmetric_hermitian(A,Math.max(50,Math.floor(s/Math.max(1,i))),1e-12),t=new o.MultiArray([i,1]);for(let r=0;r<i;r++)t.array[r][0]=e.D[r];for(let t=0;t<i;t++)for(let r=0;r<i;r++)x.array[t][r]=e.V[t][r];const r=e.D.map((e,t)=>({val:e,i:t})).sort((e,t)=>n.Complex.realToNumber(n.Complex.sub(e.val,t.val))),a=Array.from({length:i},()=>Array(i).fill(n.Complex.zero()));for(let t=0;t<i;t++){const n=r[t].i;for(let r=0;r<i;r++)a[r][t]=e.V[r][n]}for(let e=0;e<i;e++)for(let t=0;t<i;t++)x.array[e][t]=a[e][t];c.LAPACK.normalize_eigenvector_phases(x.array);const l=new o.MultiArray([i,1]);for(let e=0;e<i;e++)l.array[e][0]=r[e].val;return o.MultiArray.setType(l),o.MultiArray.setType(x),{D:l,V:x,complex:m}}const L=_.map((e,t)=>({val:e,i:t})).sort((e,t)=>n.Complex.realToNumber(e.val)-n.Complex.realToNumber(t.val)),b=L.map(e=>e.val),M=Array.from({length:i},()=>Array(i).fill(n.Complex.zero()));for(let e=0;e<i;e++){const t=L[e].i;for(let r=0;r<i;r++)M[r][e]=n.Complex.copy(y.array[r][t])}for(let e=0;e<i;e++)for(let t=0;t<i;t++)x.array[e][t]=n.Complex.copy(M[e][t]);c.LAPACK.normalize_eigenvector_phases(x.array);const S=new o.MultiArray([i,1]);for(let e=0;e<i;e++)S.array[e][0]=n.Complex.copy(b[e]);return o.MultiArray.setType(S),o.MultiArray.setType(x),{D:S,V:x,complex:m}},u.steqr_vectors=(e,t,r)=>{const i=e.length,s=null!=r?r:Math.max(1e3,1e3*i),a=new Array(i),l=new Array(i);for(let r=0;r<i-1;r++)a[r]=n.Complex.copy(e[r]),l[r]=n.Complex.copy(t[r]);a[i-1]=n.Complex.copy(e[i-1]),l[i-1]=n.Complex.zero();let m=!1;for(let e=0;e<i;e++){if(n.Complex.isComplexValue(a[e])){m=!0;break}if(e<i-1&&n.Complex.isComplexValue(l[e])){m=!0;break}}const h=new Array(i),p=new Array(i),d=new Array(i);if(m){h[0]=n.Complex.one();for(let e=0;e<i-1;e++){const t=l[e],r=n.Complex.abs(t);if(n.Complex.realIsZero(r))h[e+1]=n.Complex.copy(h[e]);else{const o=n.Complex.rdiv(n.Complex.conj(t),r);h[e+1]=n.Complex.mul(h[e],o);const i=n.Complex.realToNumber(n.Complex.abs(h[e+1]));0!==i&&Math.abs(i-1)>1e-12&&(h[e+1]=n.Complex.rdiv(h[e+1],n.Complex.abs(h[e+1])))}}for(let e=0;e<i;e++)p[e]=n.Complex.realToNumber(a[e]);for(let e=0;e<i-1;e++){const t=n.Complex.mul(n.Complex.conj(h[e]),n.Complex.mul(l[e],h[e+1]));d[e]=n.Complex.realToNumber(n.Complex.abs(t))}}else{for(let e=0;e<i;e++)p[e]=n.Complex.realToNumber(a[e]);for(let e=0;e<i-1;e++)d[e]=n.Complex.realToNumber(l[e])}d[i-1]=0;const x=c.LAPACK.eye(i,i),f=u.numeric_jacobi_symmetric_dense(p,d,s),C=f.Dnum.slice(),g=f.Vnum.map(e=>e.map(e=>n.Complex.copy(e)));if(m)for(let e=0;e<i;e++){const t=h[e];for(let r=0;r<i;r++)g[e][r]=n.Complex.mul(t,g[e][r])}const y=new o.MultiArray([i,i]);for(let e=0;e<i;e++)for(let t=0;t<i;t++)y.array[e][t]=n.Complex.copy(g[e][t]);o.MultiArray.setType(y);const _=C.map(e=>n.Complex.create(e));c.LAPACK.normalize_eigenvector_phases(y.array);const A=u.tridiag_her_to_dense(a,l),E=_.slice(),T=u.compute_residual_complex(A,y,E);if(T>1e-8*Math.max(1,T)){const e=c.LAPACK.jacobi_symmetric_hermitian(A,Math.max(50,Math.floor(s/Math.max(1,i))),1e-12),t=new o.MultiArray([i,1]);for(let r=0;r<i;r++)t.array[r][0]=e.D[r];for(let t=0;t<i;t++)for(let r=0;r<i;r++)x[t][r]=e.V[t][r];const r=e.D.map((e,t)=>({val:e,i:t})).sort((e,t)=>n.Complex.realToNumber(n.Complex.sub(e.val,t.val))),a=Array.from({length:i},()=>Array(i).fill(n.Complex.zero()));for(let t=0;t<i;t++){const n=r[t].i;for(let r=0;r<i;r++)a[r][t]=e.V[r][n]}for(let e=0;e<i;e++)for(let t=0;t<i;t++)x[e][t]=a[e][t];return c.LAPACK.normalize_eigenvector_phases(x),{D:r.map(e=>e.val),V:x,complex:m}}const L=_.map((e,t)=>({val:e,i:t})).sort((e,t)=>n.Complex.realToNumber(e.val)-n.Complex.realToNumber(t.val)),b=L.map(e=>e.val),M=Array.from({length:i},()=>Array(i).fill(n.Complex.zero()));for(let e=0;e<i;e++){const t=L[e].i;for(let r=0;r<i;r++)M[r][e]=n.Complex.copy(y.array[r][t])}for(let e=0;e<i;e++)for(let t=0;t<i;t++)x[e][t]=n.Complex.copy(M[e][t]);c.LAPACK.normalize_eigenvector_phases(x);const S=new o.MultiArray([i,1]);for(let e=0;e<i;e++)S.array[e][0]=n.Complex.copy(b[e]);return o.MultiArray.setType(S),{D:b,V:x,complex:m}},u.orgtr_blocked_w=(e,t,r)=>{var s,a,l,u;const m=e.dimension[0];if(m!==e.dimension[1])throw new Error("orgtr_blocked_w: A must be square");const h=new o.MultiArray([m,m]);h.array=c.LAPACK.eye(m,m);const p=Math.max(1,Math.floor(null!=r?r:i.BLAS.settings.blockSize));for(let r=m-2;r>=0;r-=p){const o=Math.min(p,r+1),i=new Array(m-r-1),c=new Array(m-r-1);for(let e=0;e<m-r-1;e++)i[e]=new Array(o).fill(n.Complex.zero()),c[e]=new Array(o).fill(n.Complex.zero());for(let t=0;t<o;t++){const n=r-o+1+t,s=m-n-1;for(let r=0;r<s;r++)i[r][t]=e.array[n+1+r][n]}for(let e=0;e<o;e++){const s=r-o+1+e,a=t[s],l=m-s-1;if(!n.Complex.realIsZero(n.Complex.abs(a)))for(let t=0;t<l;t++){let r=n.Complex.zero();for(let o=0;o<=t;o++)r=n.Complex.add(r,n.Complex.mul(i[o][e],n.Complex.conj(h.array[s+1+o][s+1+t])));c[t][e]=n.Complex.mul(a,r)}}for(let e=0;e<m-r-1;e++)for(let t=0;t<m;t++){let m=n.Complex.zero(),p=n.Complex.zero();for(let h=0;h<o;h++)m=n.Complex.add(m,n.Complex.mul(i[e][h],n.Complex.conj(null!==(a=null===(s=c[t-r-1+e])||void 0===s?void 0:s[h])&&void 0!==a?a:n.Complex.zero()))),p=n.Complex.add(p,n.Complex.mul(c[e][h],n.Complex.conj(null!==(u=null===(l=i[t-r-1+e])||void 0===l?void 0:l[h])&&void 0!==u?u:n.Complex.zero())));h.array[r+1+e][t]=n.Complex.sub(h.array[r+1+e][t],n.Complex.add(m,p))}}return h},u.eig_symmetric=(e,t=!1)=>{e.dimension[0];const r=o.MultiArray.copy(e),{diag:n,offdiag:i,taus:a}=c.LAPACK.sytrd(r,c.LAPACK.her2_zhtrd_update);if(t){let e=c.LAPACK.ungtr(r,a);const{D:t,V:l}=c.LAPACK.steqr_vectors(n,i),u=new o.MultiArray([l.length,l[0].length]);return u.array=l,e=s.MathOperation.mtimes(e,u),{D:o.MultiArray.toDiagonalMatrix(t),V:e}}return{D:o.MultiArray.toColumnVector(c.LAPACK.steqr_vectors(n,i).D)}},u.eig_symmetric0=(e,t=!1,r)=>{const s=e.dimension[0],a=o.MultiArray.copy(e),{diag:l,offdiag:u,taus:m}=c.LAPACK.sytrd(a,c.LAPACK.her2_zhtrd_update);if(!t){const e=c.LAPACK.steqr_vectors(l,u,r);return{D:o.MultiArray.toColumnVector(e.D)}}const h=c.LAPACK.steqr_vectors(l,u,r),p=new o.MultiArray([s,s]);p.array=c.LAPACK.eye(s,s);for(let e=s-2;e>=0;e--){const t=s-e-1,r=[n.Complex.one()];for(let n=1;n<t;n++)r[n]=a.array[e+1+n][e];const o=m[e];n.Complex.realIsZero(n.Complex.abs(o))||c.LAPACK.larf_left(p,r,o,e+1,0)}const d=new o.MultiArray([p.dimension[0],h.V[0].length]);return i.BLAS.gemm(n.Complex.one(),p.array,p.dimension[0],p.dimension[1],h.V,h.V[0].length,n.Complex.zero(),d.array),c.LAPACK.normalize_eigenvector_phases(d.array),o.MultiArray.setType(d),{D:o.MultiArray.toDiagonalMatrix(h.D),V:d}},u.eig_symmetric1=(e,t=!1,r=1e4)=>{const i=e.dimension[0];if(i!==e.dimension[1])throw new Error("eig_symmetric: matrix must be square.");const s=o.MultiArray.copy(e),{diag:a,offdiag:l,taus:m}=c.LAPACK.sytrd(s,c.LAPACK.her2_zhtrd_update),h=new Array(i),p=new Array(i);for(let e=0;e<i;e++)h[e]=n.Complex.realToNumber(a[e]),p[e]=e<i-1?n.Complex.realToNumber(l[e]):0;const d=u.numeric_jacobi_symmetric_dense(h,p,r),x=d.Dnum.slice(),f=d.Vnum.map(e=>e.map(e=>n.Complex.realToNumber(e))),C=c.LAPACK.ungtr(s,m),g=new o.MultiArray([i,i]);for(let e=0;e<i;e++)for(let t=0;t<i;t++){let r=n.Complex.zero();for(let o=0;o<i;o++)n.Complex.mulAndSumTo(r,C.array[t][o],n.Complex.create(f[o][e]));g.array[t][e]=r}return console.log(x.map(e=>e.toString()).join()),{D:x,V:g}},u.eig_symmetric2=(e,t=!1,r)=>{const s=e.dimension[0],a=o.MultiArray.copy(e),{diag:l,offdiag:u,taus:m}=c.LAPACK.sytrd(a,c.LAPACK.larf_left);if(!t){const e=c.LAPACK.steqr_vectors(l,u,r);return{D:o.MultiArray.toColumnVector(e.D)}}const h=c.LAPACK.steqr_vectors(l,u,r),p=new o.MultiArray([s,s]);p.array=c.LAPACK.eye(s,s);for(let e=s-2;e>=0;e--){const t=s-e-1,r=[n.Complex.one()];for(let n=1;n<t;n++)r[n]=a.array[e+1+n][e];const o=m[e];n.Complex.realIsZero(n.Complex.abs(o))||c.LAPACK.larf_left(p,r,o,e+1,0)}const d=new o.MultiArray([p.dimension[0],h.V[0].length]);return i.BLAS.gemm(n.Complex.one(),p.array,p.dimension[0],p.dimension[1],h.V,h.V[0].length,n.Complex.zero(),d.array),c.LAPACK.normalize_eigenvector_phases(d.array),o.MultiArray.setType(d),{D:o.MultiArray.toDiagonalMatrix(h.D),V:d}},u.eig_symmetric3=(e,t="asc")=>{const r=e.dimension[0];if(r!==e.dimension[1])throw new Error("eig_symmetric: A must be square");const i=o.MultiArray.copy(e),{diag:s,offdiag:a,taus:l}=c.LAPACK.sytrd(i,c.LAPACK.larf_left),u=c.LAPACK.steqr_vectors(s,a),m=new Array(r);for(let e=0;e<r;e++)m[e]=u.D[e];const h=u.V,p=c.LAPACK.orgtr(i,l),d=new o.MultiArray([r,r]);for(let e=0;e<r;e++)for(let t=0;t<r;t++)d.array[e][t]=n.Complex.zero();for(let e=0;e<r;e++)for(let t=0;t<r;t++){const o=p.array[e][t];for(let i=0;i<r;i++)d.array[e][i]=n.Complex.add(d.array[e][i],n.Complex.mul(o,h[t][i]))}const x=Array.from({length:r},(e,t)=>t);"none"!==t&&x.sort((e,r)=>{const o=Math.abs(n.Complex.realToNumber(m[e])),i=Math.abs(n.Complex.realToNumber(m[r]));return"asc"===t?o-i:i-o});const f=x.map(e=>m[e]),C=new o.MultiArray([r,r]);for(let e=0;e<r;e++)for(let t=0;t<r;t++)C.array[e][t]=d.array[e][x[t]];o.MultiArray.setType(C);const g=new o.MultiArray([r,r]);for(let e=0;e<r;e++)for(let t=0;t<r;t++)g.array[e][t]=n.Complex.zero();for(let e=0;e<r;e++)g.array[e][e]=f[e];return o.MultiArray.setType(g),{V:C,D:g,evals:f}},u.eig_symmetric4=(e,t=!1,r=1e4)=>{const i=e.dimension[0];if(i!==e.dimension[1])throw new Error("eig_symmetric: matrix must be square.");const s=o.MultiArray.copy(e),{diag:a,offdiag:m,taus:h}=c.LAPACK.sytrd(s,c.LAPACK.her2_zhtrd_update),p=new Array(i),d=new Array(i);for(let e=0;e<i;e++)p[e]=n.Complex.realToNumber(a[e]),d[e]=e<i-1?n.Complex.realToNumber(m[e]):0;const x=u.numeric_jacobi_symmetric_dense(p,d,r);console.log("# LAPACK.numeric_jacobi_symmetric_dense(Dnum, Enum, maxIts)"),console.log(" core.Dnum:",JSON.stringify(x.Dnum));const f=x.Dnum.slice();if(!t)return{D:o.MultiArray.toColumnVector(f.map(e=>n.Complex.create(e)))};const C=new o.MultiArray([i,i]);C.array=x.Vnum;const g=c.LAPACK.ungtr(s,h),y=new o.MultiArray([i,i]);for(let e=0;e<i;e++)for(let t=0;t<i;t++){let r=n.Complex.zero();for(let o=0;o<i;o++)r=n.Complex.add(r,n.Complex.mul(g.array[t][o],C.array[o][e]));y.array[t][e]=r}c.LAPACK.normalize_eigenvector_phases(y.array),o.MultiArray.setType(y);const _=l.Evaluator.Create();return console.log(o.MultiArray.unparse(e,_)),console.log(`eigenvalues: [${f.map(e=>e.toString()).join(", ")}]`),{D:o.MultiArray.toDiagonalMatrix(f.map(e=>n.Complex.create(e))),V:y}},u.eig_symmetric5=(e,t=!1,r=1e4)=>{const s=e.dimension[0],a=o.MultiArray.copy(e),{diag:l,offdiag:m,taus:h}=c.LAPACK.sytrd(a,c.LAPACK.her2_zhtrd_update);if(!t){const e=c.LAPACK.steqr_vectors(l,m,r);return{D:o.MultiArray.toColumnVector(e.D)}}const p=new Array(s),d=new Array(s);for(let e=0;e<s;e++)p[e]=n.Complex.realToNumber(n.Complex.real(l[e])),d[e]=e<s-1?n.Complex.realToNumber(n.Complex.real(m[e])):0;const x=u.numeric_jacobi_symmetric_dense(p,d,r),f=x.Dnum.slice(),C=x.Vnum.map(e=>e.slice());if(!t){const e=new o.MultiArray([s,1]);for(let t=0;t<s;t++)e.array[t][0]=n.Complex.create(f[t]);return o.MultiArray.setType(e),{D:e}}const g=c.LAPACK.ungtr(a,h),y=new o.MultiArray([s,s]);for(let e=0;e<s;e++)for(let t=0;t<s;t++){const r=C[e][t];y.array[e][t]=n.Complex.create(n.Complex.realToNumber(r))}o.MultiArray.setType(y);const _=new o.MultiArray([s,s]);i.BLAS.gemm(n.Complex.one(),g.array,g.dimension[0],g.dimension[1],y.array,y.dimension[1],n.Complex.zero(),_.array);const A=f.map((e,t)=>({val:e,i:t})).sort((e,t)=>e.val-t.val),E=A.map(e=>e.val),T=new o.MultiArray([s,s]);for(let e=0;e<s;e++){const t=A[e].i;for(let r=0;r<s;r++){const o=_.array[r][t];T.array[r][e]=n.Complex.copy(o)}}o.MultiArray.setType(T),c.LAPACK.normalize_eigenvector_pha