-
Notifications
You must be signed in to change notification settings - Fork 0
/
NumpyArray-min.js
1 lines (1 loc) · 2.71 KB
/
NumpyArray-min.js
1
const NumpyArray=function(...t){t[0].constructor===ArrayBuffer?this.a(...t):this.b(...t)};(()=>{const t=NumpyArray,n=t.prototype,e=t=>{const n=[],e=t=>{return[[/'$/,'"'],[/False/g,"false"],[/True/g,"true"],[/\(/g,"["],[/\)/g,"]"],[/,\s*(?=\]|\})/g,""]].forEach((n,e)=>t=t.replace(...n)),t};for(;t.length>0;){const i=n.length%2==0,r=t.match(i?/[\s\S]*?($|')/:/([\s\S]*?(?!\\)[\s\S]|^)'/);if(null===r)return null;t=t.slice(r[0].length),n.push(i?e(r[0]):r[0].replace(/'$/,'"'))}try{return JSON.parse(n.join(""))}catch(t){return null}};n.a=function(t,n){const i=10+new DataView(t,8).getUint16(0,!0);if(this.numpyHeader=String.fromCharCode.apply(null,new Uint8Array(t.slice(10,i))),void 0===n&&(n=e(this.numpyHeader)),null===n)throw`header "${this.numpyHeader}" could not be parsed`;n.descr.constructor===String&&(n.descr=[["value",n.descr]]);const r=n.descr.map(([t,n],e)=>{const i=n.match(/^(.*?)(\d+)$/);try{return[i[1],parseInt(i[2])]}catch(t){throw`'${n}' is not supported`}}),c=r.reduce((t,[n,e])=>t+e,0),o=n=>{const[e,o]=r[n],u=r.slice(0,n).reduce((t,[n,e])=>t+e,0),s=`'${e}${o}' is not supported`,f=e.match(/^([<\|>])u$/);if(null!==f){if(1!==o&&2!==o&&4!==o)throw s;const n=">"!==f[1],e=new DataView(t,i);return{1:t=>e.getUint8(t*c+u,n),2:t=>e.getUint16(t*c+u,n),4:t=>e.getUint32(t*c+u,n)}[o]}const a=e.match(/^([<\|>])i$/);if(null!==a){if(1!==o&&2!==o&&4!==o)throw s;const n=">"!==a[1],e=new DataView(t,i);return{1:t=>e.getInt8(t*c+u,n),2:t=>e.getInt16(t*c+u,n),4:t=>e.getInt32(t*c+u,n)}[o]}const h=e.match(/^([<>])f$/);if(null!==h){if(4!==o&&8!==o)throw s;const n=">"!==h[1],e=new DataView(t,i);return{4:t=>e.getFloat32(t*c+u,n),8:t=>e.getFloat64(t*c+u,n)}[o]}if(null!==e.match(/^\|?[Sa]$/))return n=>String.fromCharCode.apply(null,new Uint8Array(t.slice(i+n*c+u,i+n*c+u+o))).replace(/\x00*$/,"");throw s};this.size=n.shape.reduce((t,n)=>t*n,1),this.c=n.descr.map(([t,n],e)=>[t,o(e)]),this.fieldNames=n.descr.map(([t,n],e)=>t),this.d()},n.b=function(t,n){this.size=t,this.c=n,this.fieldNames=n.map(([t,n],e)=>t),this.d()},n.d=function(){const t=this.c;if(1===t.length){const n=t[0][1];this.e=(t=>n(t))}else this.e=(n=>t.map(([t,e],i)=>e(n)))},n.get=function(t){return t.constructor===Array?t.reduce((t,n)=>t&&Number.isInteger(n),!0)?t.map((t,n)=>this.e(t)):this.f(t):Number.isInteger(t)?this.e(t):this.f([t])},n.e=null,n.f=function(n){const e=new Map(this.c),i=n.map((t,n)=>{if(!e.has(t))throw`'${t}' is not a field`;return[t,e.get(t)]});return new t(this.size,i)},n[Symbol.iterator]=function*(){for(let t=0;t<this.size;t++)yield this.e(t)},n.toArray=function(){return[...this]},t.getFromURL=((n,e)=>{return new Promise((i,r)=>{const c=new XMLHttpRequest;c.open("GET",n),c.responseType="arraybuffer",c.onload=(()=>i(new t(c.response,e))),c.onerror=r,c.send()})})})();