@milaboratories/pframes-rs-node 1.1.12 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/export/tests/pframes.test.ts +0 -682
- package/export/tests/setup.ts +0 -29
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2LVJN6O24SEU2T6ZZRA3ZNIA.jdata +0 -82
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2MO4YNOSI4C2L7GHVIZ6YSYT.jdata +0 -139
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2R6YWG3EVKXULZJIZYSZYASV.jdata +0 -151
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2RFBXQYLZVPIYLITVUUU3GR6.jdata +0 -136
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2ZCJ73VD223TO7UVCF4DLSKS.jdata +0 -166
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2ZCOKJLMPCZTTSJQEYCYM2D6.jdata +0 -18
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.32L5DZ6D632DGLU3OIBB3HGX.jdata +0 -76
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.34LTVMPK2UDCR34EHCSEYX3W.jdata +0 -19
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.3K6KCP5JDGW4X7DXT5RF6ZAF.jdata +0 -121
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.5BJ4G7MKY3KGJAZMAYHRDDTI.jdata +0 -106
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.5QIRD6GYS57CH4FPJLYCUDUN.jdata +0 -81
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.6465KFARE44HTYJ4DLVE2POI.jdata +0 -124
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.7EN5RO34NCDPWAWCIBM4UDIA.jdata +0 -62
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.7HQRZGQAFAUVMAXUSH4QK35W.jdata +0 -172
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.7IFCRZFNQ62AIPBKYYWNJKLP.jdata +0 -166
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.7PPYAJDDR7DGHLI5YSFBGIX4.jdata +0 -68
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.A7LBATMSQCBKAPGIUKAFX7ZQ.jdata +0 -13
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.AQUOPWRX3Q2QNR2IWWMMGRCF.jdata +0 -88
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.AY2WCVRGDI4KDBSNN4VWISRV.jdata +0 -19
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.AZHBA2KSN2ZSGCQF32V3AZGH.jdata +0 -18
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.B2X77CFBR4AHVC4UE3YWHRSE.jdata +0 -1
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.BDGKT2HBP4KRZYQW7IOL3MXX.jdata +0 -104
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.BUPSWPETJ4HHWZOY6M3X2AUV.jdata +0 -48
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.CHH6NIYBJUBIWROO4LXF3AK2.jdata +0 -28
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.CHI3Y6POL64COZMAEHK7RKOO.jdata +0 -167
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.D4DU6MUFJX5C572GM25IWLFV.jdata +0 -79
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.DFO4BLLJ4GVHRBYGLAJ7QUN2.jdata +0 -59
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.DFQDMMGE23YQY5MCLNKOMZJM.jdata +0 -118
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.DXWTOE3QM2D4XAICJLVAUOYH.jdata +0 -173
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.E7DBFSJQQOZIWEZ4UIABFVTP.jdata +0 -20
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.FILU5VIR2FDT3SRDYE322USR.jdata +0 -181
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.GF24HO7CQHY55O6JKWEDKHNF.jdata +0 -78
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.HBT3EGHORD2TZRM7XG5PO5II.jdata +0 -136
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.HXBZGAQ724Y567AKGQOAAF2J.jdata +0 -74
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.IBB3SCZSTCEZQFO4S7L6GVUH.jdata +0 -149
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.ICOC34NWMBSXEFXQOO2BNY4H.jdata +0 -59
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.IQPTOXVWTTENLD2E4VKNU56D.jdata +0 -102
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.JP3IIRDA6QZDW4EZLKRII7KS.jdata +0 -86
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.JZE5QCNYF4YHZYRGUZ6XRJHQ.jdata +0 -84
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.K6A7V2JOVSAX7RHIZ2RPXYBP.jdata +0 -1
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.KL7USBR5ZQUIN7K7MF3U7P73.jdata +0 -64
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.KMZNMPE7IWFLWKPMN7OABWXZ.jdata +0 -59
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.KZPHVIUPQIAFL2HTOAJR7VGJ.jdata +0 -1
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.KZSRESLOPXQ4WH6ALAJP7U5H.jdata +0 -196
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.LGBPQ5XC2BUGG4TJWYHTFZGE.jdata +0 -89
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.LMLLDWOFTAPH3QVSOM7MHQ22.jdata +0 -73
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.LVVUZMJT5MREBDWME5RSK7KI.jdata +0 -146
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.LXBE5P62YKG5UDJGJRL6MSQC.jdata +0 -68
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.MLOU6WK4ZV7K6HIWPE3LRWI2.jdata +0 -98
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.NAL3QCUSLD44QGSRCQ5TZOAH.jdata +0 -69
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.NWX7DKTFXRVH4ZYUTZULRDWT.jdata +0 -80
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.O6M53LCMV7A3II22GUPKCJGP.jdata +0 -98
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.PMARMGPM4IBPA3VCS3CYH5WM.jdata +0 -32
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.PMJ37ZMFMTFORL4UYUDVNDZG.jdata +0 -126
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.QPWLPWRWPFGRVQI5OS2RGXBW.jdata +0 -26
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.QQ4RGTF2PBGNUPTLCO3Z3T2C.jdata +0 -22
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.QWXPZSGYDRGIUZS6VDHGVLTF.jdata +0 -72
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.QXQWSMICPPJGLPUQ33IQJK7F.jdata +0 -90
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.RBX3IONPE5K2HMS4MAT4MKQY.jdata +0 -146
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.RHKAHOLA74IHPBG75KQN4NAV.jdata +0 -59
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.RWI3IGNEUOAJR7ZWU7NSPF72.jdata +0 -67
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.SOVBQDZPBYCVZTRZF3CXHWOW.jdata +0 -91
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.SWLOWAB2PTM5R2XN765A3ICZ.jdata +0 -104
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.T3WRQEFUPCZICFXMJ5F6DQX3.jdata +0 -131
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.TETZ2IEF3L2GYDJLNU3BVKMX.jdata +0 -76
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.UXO4UE2Q7HO42SNSO4DULKJJ.jdata +0 -118
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VAUTIV2ROH62WNMZZCIGRBDC.jdata +0 -132
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VBP7Z5WQ2IOHMQIA5UV4DOH3.jdata +0 -71
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VCKGU2COVX6O3RUXNRC7FRCJ.jdata +0 -151
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VOCGDDBWN5H64YJZP3EPSZNU.jdata +0 -158
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VPEMTWGQVZ6ZSNF426GPHUXI.jdata +0 -93
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.WAS2QNFHHPD2UIZ44F2IKRQ6.jdata +0 -101
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.WYCWV4434DAMKRUU7F7LGZGR.jdata +0 -142
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.XGWYF7VR6EIU3OWPXAWHP2PE.jdata +0 -156
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.XJQYA42VX2WKHPAJWAUBHAXN.jdata +0 -119
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.XLTFOXR4VH54UCW6BVEND6GI.jdata +0 -85
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.YMTPJWXHLMW4IPBQABT3326F.jdata +0 -109
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.YOIX3HY7SWPCY7AOBSDA3GLC.jdata +0 -1
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.YSEQPSWWTXZTW52G5ZZU46RT.jdata +0 -93
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.ZZ54PNLFYZ6GSOR2AESKXRL4.jdata +0 -89
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.datainfo +0 -86
- package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.spec +0 -42
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2LVJN6O24SEU2T6ZZRA3ZNIA.jdata +0 -82
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2MO4YNOSI4C2L7GHVIZ6YSYT.jdata +0 -139
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2R6YWG3EVKXULZJIZYSZYASV.jdata +0 -151
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2RFBXQYLZVPIYLITVUUU3GR6.jdata +0 -136
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2ZCJ73VD223TO7UVCF4DLSKS.jdata +0 -166
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2ZCOKJLMPCZTTSJQEYCYM2D6.jdata +0 -18
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.32L5DZ6D632DGLU3OIBB3HGX.jdata +0 -76
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.34LTVMPK2UDCR34EHCSEYX3W.jdata +0 -19
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.3K6KCP5JDGW4X7DXT5RF6ZAF.jdata +0 -121
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.5BJ4G7MKY3KGJAZMAYHRDDTI.jdata +0 -106
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.5QIRD6GYS57CH4FPJLYCUDUN.jdata +0 -81
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.6465KFARE44HTYJ4DLVE2POI.jdata +0 -124
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.7EN5RO34NCDPWAWCIBM4UDIA.jdata +0 -62
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.7HQRZGQAFAUVMAXUSH4QK35W.jdata +0 -172
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.7IFCRZFNQ62AIPBKYYWNJKLP.jdata +0 -166
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.7PPYAJDDR7DGHLI5YSFBGIX4.jdata +0 -68
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.A7LBATMSQCBKAPGIUKAFX7ZQ.jdata +0 -13
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.AQUOPWRX3Q2QNR2IWWMMGRCF.jdata +0 -88
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.AY2WCVRGDI4KDBSNN4VWISRV.jdata +0 -19
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.AZHBA2KSN2ZSGCQF32V3AZGH.jdata +0 -18
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.B2X77CFBR4AHVC4UE3YWHRSE.jdata +0 -1
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.BDGKT2HBP4KRZYQW7IOL3MXX.jdata +0 -104
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.BUPSWPETJ4HHWZOY6M3X2AUV.jdata +0 -48
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.CHH6NIYBJUBIWROO4LXF3AK2.jdata +0 -28
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.CHI3Y6POL64COZMAEHK7RKOO.jdata +0 -167
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.D4DU6MUFJX5C572GM25IWLFV.jdata +0 -79
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.DFO4BLLJ4GVHRBYGLAJ7QUN2.jdata +0 -59
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.DFQDMMGE23YQY5MCLNKOMZJM.jdata +0 -118
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.DXWTOE3QM2D4XAICJLVAUOYH.jdata +0 -173
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.E7DBFSJQQOZIWEZ4UIABFVTP.jdata +0 -20
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.FILU5VIR2FDT3SRDYE322USR.jdata +0 -181
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.GF24HO7CQHY55O6JKWEDKHNF.jdata +0 -78
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.HBT3EGHORD2TZRM7XG5PO5II.jdata +0 -136
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.HXBZGAQ724Y567AKGQOAAF2J.jdata +0 -74
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.IBB3SCZSTCEZQFO4S7L6GVUH.jdata +0 -149
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.ICOC34NWMBSXEFXQOO2BNY4H.jdata +0 -59
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.IQPTOXVWTTENLD2E4VKNU56D.jdata +0 -102
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.JP3IIRDA6QZDW4EZLKRII7KS.jdata +0 -86
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.JZE5QCNYF4YHZYRGUZ6XRJHQ.jdata +0 -84
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.K6A7V2JOVSAX7RHIZ2RPXYBP.jdata +0 -1
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.KL7USBR5ZQUIN7K7MF3U7P73.jdata +0 -64
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.KMZNMPE7IWFLWKPMN7OABWXZ.jdata +0 -59
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.KZPHVIUPQIAFL2HTOAJR7VGJ.jdata +0 -1
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.KZSRESLOPXQ4WH6ALAJP7U5H.jdata +0 -196
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.LGBPQ5XC2BUGG4TJWYHTFZGE.jdata +0 -89
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.LMLLDWOFTAPH3QVSOM7MHQ22.jdata +0 -73
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.LVVUZMJT5MREBDWME5RSK7KI.jdata +0 -146
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.LXBE5P62YKG5UDJGJRL6MSQC.jdata +0 -68
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.MLOU6WK4ZV7K6HIWPE3LRWI2.jdata +0 -98
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.NAL3QCUSLD44QGSRCQ5TZOAH.jdata +0 -69
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.NWX7DKTFXRVH4ZYUTZULRDWT.jdata +0 -80
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.O6M53LCMV7A3II22GUPKCJGP.jdata +0 -98
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.PMARMGPM4IBPA3VCS3CYH5WM.jdata +0 -32
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.PMJ37ZMFMTFORL4UYUDVNDZG.jdata +0 -126
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.QPWLPWRWPFGRVQI5OS2RGXBW.jdata +0 -26
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.QQ4RGTF2PBGNUPTLCO3Z3T2C.jdata +0 -22
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.QWXPZSGYDRGIUZS6VDHGVLTF.jdata +0 -72
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.QXQWSMICPPJGLPUQ33IQJK7F.jdata +0 -90
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.RBX3IONPE5K2HMS4MAT4MKQY.jdata +0 -146
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.RHKAHOLA74IHPBG75KQN4NAV.jdata +0 -59
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.RWI3IGNEUOAJR7ZWU7NSPF72.jdata +0 -67
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.SOVBQDZPBYCVZTRZF3CXHWOW.jdata +0 -91
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.SWLOWAB2PTM5R2XN765A3ICZ.jdata +0 -104
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.T3WRQEFUPCZICFXMJ5F6DQX3.jdata +0 -131
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.TETZ2IEF3L2GYDJLNU3BVKMX.jdata +0 -76
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.UXO4UE2Q7HO42SNSO4DULKJJ.jdata +0 -118
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VAUTIV2ROH62WNMZZCIGRBDC.jdata +0 -132
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VBP7Z5WQ2IOHMQIA5UV4DOH3.jdata +0 -71
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VCKGU2COVX6O3RUXNRC7FRCJ.jdata +0 -151
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VOCGDDBWN5H64YJZP3EPSZNU.jdata +0 -158
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VPEMTWGQVZ6ZSNF426GPHUXI.jdata +0 -93
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.WAS2QNFHHPD2UIZ44F2IKRQ6.jdata +0 -101
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.WYCWV4434DAMKRUU7F7LGZGR.jdata +0 -142
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.XGWYF7VR6EIU3OWPXAWHP2PE.jdata +0 -156
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.XJQYA42VX2WKHPAJWAUBHAXN.jdata +0 -119
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.XLTFOXR4VH54UCW6BVEND6GI.jdata +0 -85
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.YMTPJWXHLMW4IPBQABT3326F.jdata +0 -109
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.YOIX3HY7SWPCY7AOBSDA3GLC.jdata +0 -1
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.YSEQPSWWTXZTW52G5ZZU46RT.jdata +0 -93
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.ZZ54PNLFYZ6GSOR2AESKXRL4.jdata +0 -89
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.datainfo +0 -86
- package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.spec +0 -37
- package/export/tests/test_data/complex_join/metadata.7ZNW7LBUDMBSQJ26KYSSTBPJ.datainfo +0 -5
- package/export/tests/test_data/complex_join/metadata.7ZNW7LBUDMBSQJ26KYSSTBPJ.jdata +0 -82
- package/export/tests/test_data/complex_join/metadata.7ZNW7LBUDMBSQJ26KYSSTBPJ.spec +0 -14
- package/export/tests/test_data/complex_join/request.json +0 -43
- package/export/tests/test_data/create_table_request_1/column.datainfo +0 -7
- package/export/tests/test_data/create_table_request_1/column.spec +0 -11
- package/export/tests/test_data/create_table_request_1/request.json +0 -8
- package/export/tests/test_data/create_table_request_2/column.datainfo +0 -7
- package/export/tests/test_data/create_table_request_2/column.spec +0 -11
- package/export/tests/test_data/create_table_request_2/request.json +0 -8
- package/export/tests/test_data/create_table_request_3/column.datainfo +0 -7
- package/export/tests/test_data/create_table_request_3/column.spec +0 -11
- package/export/tests/test_data/create_table_request_3/request.json +0 -8
- package/export/tests/test_data/create_table_request_4/column.datainfo +0 -7
- package/export/tests/test_data/create_table_request_4/column.spec +0 -11
- package/export/tests/test_data/create_table_request_4/request.json +0 -8
- package/export/tests/test_data/create_table_request_fail/column.datainfo +0 -5
- package/export/tests/test_data/create_table_request_fail/column.spec +0 -11
- package/export/tests/test_data/create_table_request_fail/request.json +0 -8
- package/export/tests/test_data/delete_column_request/request.json +0 -27
- package/export/tests/test_data/delete_column_request/response.json +0 -13
- package/export/tests/test_data/find_columns_request/column.spec +0 -11
- package/export/tests/test_data/find_columns_request/request.json +0 -5
- package/export/tests/test_data/find_columns_request/response.json +0 -21
- package/export/tests/test_data/get_column_spec_request/column.spec +0 -11
- package/export/tests/test_data/get_column_spec_request/response.json +0 -11
- package/export/tests/test_data/set_column_data_request/column.datainfo +0 -5
- package/export/tests/test_data/set_column_data_request/column.jdata +0 -24
- package/export/tests/test_data/set_column_data_request/column.spec +0 -14
- package/export/tests/test_data/sort_table_request/column1.datainfo +0 -5
- package/export/tests/test_data/sort_table_request/column1.jdata +0 -4
- package/export/tests/test_data/sort_table_request/column1.spec +0 -11
- package/export/tests/test_data/sort_table_request/column2.datainfo +0 -5
- package/export/tests/test_data/sort_table_request/column2.jdata +0 -4
- package/export/tests/test_data/sort_table_request/column2.spec +0 -15
- package/export/tests/test_data/sort_table_request/request.json +0 -18
- package/export/tests/test_data/sort_table_request/sorting.json +0 -40
- package/export/tests/test_data/unique_values_request/column.datainfo +0 -5
- package/export/tests/test_data/unique_values_request/column.jdata +0 -5
- package/export/tests/test_data/unique_values_request/column.spec +0 -11
- package/export/tests/test_data/unique_values_request/request.json +0 -5
- package/export_dist/tests/pframes.test.d.ts +0 -2
- package/export_dist/tests/pframes.test.d.ts.map +0 -1
- package/export_dist/tests/setup.d.ts +0 -2
- package/export_dist/tests/setup.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pframes-rs-node",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.13",
|
|
4
4
|
"description": "PFrames - Node.js Native Addon",
|
|
5
5
|
"homepage": "https://github.com/milaboratory/pframes-rs#readme",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@milaboratories/helpers": "1.13.5",
|
|
41
41
|
"@milaboratories/pl-model-common": "1.25.1",
|
|
42
42
|
"ulid": "3.0.2",
|
|
43
|
-
"@milaboratories/pframes-rs-serv": "1.1.
|
|
43
|
+
"@milaboratories/pframes-rs-serv": "1.1.13"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@milaboratories/build-configs": "1.5.0",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"test": "pnpm run test:ts && pnpm run test:rust",
|
|
73
73
|
"ci-build": "pnpm run build:rust -r --locked && pnpm run build:ts",
|
|
74
74
|
"preci-test": "pnpm run ci-build",
|
|
75
|
-
"ci-test:ts": "ts-builder type-check --target node && pnpm exec vitest run --coverage",
|
|
75
|
+
"ci-test:ts": "ts-builder type-check --target node --project tsconfig.check.json && pnpm exec vitest run --coverage",
|
|
76
76
|
"ci-test:rust": "pnpm run test:nextest -r --locked && pnpm run test:rustdoc -r --locked",
|
|
77
77
|
"ci-test": "pnpm run ci-test:ts && pnpm run ci-test:rust",
|
|
78
78
|
"check:ts": "ts-builder linter --check --target node && ts-builder formatter --check",
|
|
@@ -1,682 +0,0 @@
|
|
|
1
|
-
// Node.js core modules
|
|
2
|
-
import fs from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import process from "node:process";
|
|
5
|
-
import { tmpdir } from "node:os";
|
|
6
|
-
import type { Buffer } from "node:buffer";
|
|
7
|
-
|
|
8
|
-
// Testing framework
|
|
9
|
-
import { describe, test } from "vitest";
|
|
10
|
-
|
|
11
|
-
// Project types and modules
|
|
12
|
-
import type { PFrameInternal } from "@milaboratories/pl-model-middle-layer";
|
|
13
|
-
import type {
|
|
14
|
-
PObjectId,
|
|
15
|
-
PTableColumnSpec,
|
|
16
|
-
PTableSorting,
|
|
17
|
-
PTableVector,
|
|
18
|
-
DataQuery,
|
|
19
|
-
UniqueValuesResponse,
|
|
20
|
-
} from "@milaboratories/pl-model-common";
|
|
21
|
-
import { PFrameFactory } from "..";
|
|
22
|
-
import { PFrame } from "../wrapper";
|
|
23
|
-
import { ulid } from "ulid";
|
|
24
|
-
|
|
25
|
-
// ============================================================================
|
|
26
|
-
// Test Utility Functions
|
|
27
|
-
// ============================================================================
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Get the path to a test case directory
|
|
31
|
-
*/
|
|
32
|
-
function getTestCaseDataPath(testCase: string): string {
|
|
33
|
-
const currentDirectoryPath = path.relative(".", __dirname);
|
|
34
|
-
const testDataPath = path.join(currentDirectoryPath, "test_data");
|
|
35
|
-
return path.join(testDataPath, testCase);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Get the full path to a test file
|
|
40
|
-
*/
|
|
41
|
-
function getTestFilePath(testCase: string, fileName: string): string {
|
|
42
|
-
return path.join(getTestCaseDataPath(testCase), fileName);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Read a test file as Buffer
|
|
47
|
-
*/
|
|
48
|
-
function readTestFile(testCase: string, fileName: string): Buffer {
|
|
49
|
-
return fs.readFileSync(getTestFilePath(testCase, fileName));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Read and parse a JSON test file
|
|
54
|
-
*/
|
|
55
|
-
function readJsonTestFile(testCase: string, fileName: string): any {
|
|
56
|
-
return JSON.parse(readTestFile(testCase, fileName).toString());
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Create a standard data source for tests that reads from test files
|
|
61
|
-
*/
|
|
62
|
-
function createTestDataSource(testCase: string): PFrameInternal.PFrameDataSourceV2 {
|
|
63
|
-
return {
|
|
64
|
-
preloadBlob: function (blobIds: PFrameInternal.PFrameBlobId[]): Promise<void> {
|
|
65
|
-
return new Promise((resolve) => {
|
|
66
|
-
if (new Set(blobIds).size !== blobIds.length) {
|
|
67
|
-
throw new Error("preload requires array of unique values");
|
|
68
|
-
}
|
|
69
|
-
resolve();
|
|
70
|
-
});
|
|
71
|
-
},
|
|
72
|
-
resolveBlobContent: function (blobId: PFrameInternal.PFrameBlobId): Promise<Uint8Array> {
|
|
73
|
-
return new Promise((resolve) => {
|
|
74
|
-
resolve(readTestFile(testCase, blobId));
|
|
75
|
-
});
|
|
76
|
-
},
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Create a failing data source for error testing
|
|
82
|
-
*/
|
|
83
|
-
function createFailingDataSource(): PFrameInternal.PFrameDataSourceV2 {
|
|
84
|
-
return {
|
|
85
|
-
preloadBlob: (): Promise<void> => Promise.resolve(),
|
|
86
|
-
resolveBlobContent: (): Promise<Uint8Array> => Promise.reject(new Error("fail")),
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Read a complete PFrame from test data directory
|
|
92
|
-
* Automatically loads all .spec files and their corresponding .datainfo files
|
|
93
|
-
*/
|
|
94
|
-
async function readPFrame(testCase: string): Promise<PFrame> {
|
|
95
|
-
const dataSource = createTestDataSource(testCase);
|
|
96
|
-
const pframe = PFrameFactory.createPFrame({
|
|
97
|
-
frameId: ulid() as PFrameInternal.PFrameId,
|
|
98
|
-
spillPath: tmpdir() /*, logger: console.log */,
|
|
99
|
-
});
|
|
100
|
-
pframe.setDataSource(dataSource);
|
|
101
|
-
|
|
102
|
-
const testCasePath = getTestCaseDataPath(testCase);
|
|
103
|
-
const files = fs.readdirSync(testCasePath);
|
|
104
|
-
|
|
105
|
-
for (const file of files) {
|
|
106
|
-
if (file.endsWith(".spec")) {
|
|
107
|
-
const columnId = file.replace(".spec", "") as PObjectId;
|
|
108
|
-
const columnSpec = readJsonTestFile(testCase, file);
|
|
109
|
-
pframe.addColumnSpec(columnId, columnSpec);
|
|
110
|
-
|
|
111
|
-
const dataInfoFile = file.replace(".spec", ".datainfo");
|
|
112
|
-
if (files.includes(dataInfoFile)) {
|
|
113
|
-
const dataInfo = readJsonTestFile(testCase, dataInfoFile);
|
|
114
|
-
await pframe.setColumnData(columnId, dataInfo);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return pframe as unknown as PFrame;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// ============================================================================
|
|
123
|
-
// Test Suites
|
|
124
|
-
// ============================================================================
|
|
125
|
-
|
|
126
|
-
describe("PFrame Column Operations", () => {
|
|
127
|
-
test.concurrent("find_columns_request", async ({ expect }) => {
|
|
128
|
-
const testCase = "find_columns_request";
|
|
129
|
-
|
|
130
|
-
const columnId = "column1" as PObjectId;
|
|
131
|
-
const columnSpec = readJsonTestFile(testCase, "column.spec");
|
|
132
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
133
|
-
const expectedResponse = readJsonTestFile(testCase, "response.json");
|
|
134
|
-
|
|
135
|
-
using pframe = PFrameFactory.createPFrame({
|
|
136
|
-
frameId: ulid() as PFrameInternal.PFrameId,
|
|
137
|
-
spillPath: tmpdir(),
|
|
138
|
-
});
|
|
139
|
-
pframe.addColumnSpec(columnId, columnSpec);
|
|
140
|
-
|
|
141
|
-
const actualResponse = await pframe.findColumns(request);
|
|
142
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
test.concurrent("get_column_spec_request", async ({ expect }) => {
|
|
146
|
-
const testCase = "get_column_spec_request";
|
|
147
|
-
|
|
148
|
-
const columnId = "column1" as PObjectId;
|
|
149
|
-
const columnSpec = readJsonTestFile(testCase, "column.spec");
|
|
150
|
-
const expectedResponse = readJsonTestFile(testCase, "response.json");
|
|
151
|
-
|
|
152
|
-
using pframe = PFrameFactory.createPFrame({
|
|
153
|
-
frameId: ulid() as PFrameInternal.PFrameId,
|
|
154
|
-
spillPath: tmpdir(),
|
|
155
|
-
});
|
|
156
|
-
pframe.addColumnSpec(columnId, columnSpec);
|
|
157
|
-
|
|
158
|
-
const actualResponse = await pframe.getColumnSpec(columnId);
|
|
159
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
160
|
-
|
|
161
|
-
const unknownColumnId = "unknown_column1" as PObjectId;
|
|
162
|
-
const unknownColumnSpec = await pframe.getColumnSpec(unknownColumnId);
|
|
163
|
-
expect(unknownColumnSpec).toBeNull();
|
|
164
|
-
|
|
165
|
-
const columnList = await pframe.listColumns();
|
|
166
|
-
expect(columnList).toEqual([{ columnId: columnId, spec: columnSpec, hasData: false }]);
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
test.concurrent("delete_column_request", async ({ expect }) => {
|
|
170
|
-
const testCase = "delete_column_request";
|
|
171
|
-
|
|
172
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
173
|
-
const expectedResponse = readJsonTestFile(testCase, "response.json");
|
|
174
|
-
|
|
175
|
-
using pframe = PFrameFactory.createPFrame({
|
|
176
|
-
frameId: ulid() as PFrameInternal.PFrameId,
|
|
177
|
-
spillPath: tmpdir(),
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
const actualResponse = await pframe.deleteColumn(request);
|
|
181
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
test.concurrent("set_column_data_request", async ({ expect }) => {
|
|
185
|
-
const testCase = "set_column_data_request";
|
|
186
|
-
|
|
187
|
-
const columnId = "column1" as PObjectId;
|
|
188
|
-
const columnSpec = readJsonTestFile(testCase, "column.spec");
|
|
189
|
-
const dataInfo = readJsonTestFile(testCase, "column.datainfo");
|
|
190
|
-
const dataSource = createTestDataSource(testCase);
|
|
191
|
-
|
|
192
|
-
using pframe = PFrameFactory.createPFrame({
|
|
193
|
-
frameId: ulid() as PFrameInternal.PFrameId,
|
|
194
|
-
spillPath: tmpdir(),
|
|
195
|
-
});
|
|
196
|
-
pframe.setDataSource(dataSource);
|
|
197
|
-
|
|
198
|
-
pframe.addColumnSpec(columnId, columnSpec);
|
|
199
|
-
await pframe.setColumnData(columnId, dataInfo);
|
|
200
|
-
|
|
201
|
-
const columnList = await pframe.listColumns();
|
|
202
|
-
expect(columnList).toEqual([{ columnId: columnId, spec: columnSpec, hasData: true }]);
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
test.concurrent("unique_values_request", async ({ expect }) => {
|
|
206
|
-
const testCase = "unique_values_request";
|
|
207
|
-
|
|
208
|
-
const columnId = "column" as PObjectId;
|
|
209
|
-
const columnSpec = readJsonTestFile(testCase, "column.spec");
|
|
210
|
-
const dataInfo = readJsonTestFile(testCase, "column.datainfo");
|
|
211
|
-
const dataSource = createTestDataSource(testCase);
|
|
212
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
213
|
-
|
|
214
|
-
const expectedResponse: UniqueValuesResponse = {
|
|
215
|
-
values: {
|
|
216
|
-
type: "Long",
|
|
217
|
-
data: new BigInt64Array([BigInt(10), BigInt(11), BigInt(12)]),
|
|
218
|
-
isNA: new Uint8Array(),
|
|
219
|
-
absent: new Uint8Array(),
|
|
220
|
-
},
|
|
221
|
-
overflow: false,
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
using pframe = PFrameFactory.createPFrame({
|
|
225
|
-
frameId: ulid() as PFrameInternal.PFrameId,
|
|
226
|
-
spillPath: tmpdir(),
|
|
227
|
-
});
|
|
228
|
-
pframe.setDataSource(dataSource);
|
|
229
|
-
|
|
230
|
-
pframe.addColumnSpec(columnId, columnSpec);
|
|
231
|
-
await pframe.setColumnData(columnId, dataInfo);
|
|
232
|
-
|
|
233
|
-
const actualResponse = await pframe.getUniqueValues(request);
|
|
234
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
describe("PFrame Table Creation", () => {
|
|
239
|
-
// Expected responses for table creation tests
|
|
240
|
-
const createTableExpectedResponses = {
|
|
241
|
-
request1: [
|
|
242
|
-
{
|
|
243
|
-
type: "Int" as const,
|
|
244
|
-
data: new Int32Array([10]),
|
|
245
|
-
isNA: new Uint8Array(),
|
|
246
|
-
absent: new Uint8Array(),
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
type: "Float" as const,
|
|
250
|
-
data: new Float32Array([10.0]),
|
|
251
|
-
isNA: new Uint8Array(),
|
|
252
|
-
absent: new Uint8Array(),
|
|
253
|
-
},
|
|
254
|
-
] as PTableVector[],
|
|
255
|
-
request2: [
|
|
256
|
-
{
|
|
257
|
-
type: "Long" as const,
|
|
258
|
-
data: new BigInt64Array([BigInt(10)]),
|
|
259
|
-
isNA: new Uint8Array(),
|
|
260
|
-
absent: new Uint8Array(),
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
type: "Double" as const,
|
|
264
|
-
data: new Float64Array([10.0]),
|
|
265
|
-
isNA: new Uint8Array(),
|
|
266
|
-
absent: new Uint8Array(),
|
|
267
|
-
},
|
|
268
|
-
] as PTableVector[],
|
|
269
|
-
request3: [
|
|
270
|
-
{
|
|
271
|
-
type: "String" as const,
|
|
272
|
-
data: ["10"],
|
|
273
|
-
isNA: new Uint8Array(),
|
|
274
|
-
absent: new Uint8Array(),
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
type: "Bytes" as const,
|
|
278
|
-
data: [new Uint8Array([49, 48])],
|
|
279
|
-
isNA: new Uint8Array(),
|
|
280
|
-
absent: new Uint8Array(),
|
|
281
|
-
},
|
|
282
|
-
] as PTableVector[],
|
|
283
|
-
request4: [
|
|
284
|
-
{
|
|
285
|
-
type: "String" as const,
|
|
286
|
-
data: ["10"],
|
|
287
|
-
isNA: new Uint8Array(),
|
|
288
|
-
absent: new Uint8Array(),
|
|
289
|
-
},
|
|
290
|
-
{
|
|
291
|
-
type: "Float" as const,
|
|
292
|
-
data: new Float32Array([NaN]),
|
|
293
|
-
isNA: new Uint8Array([128]),
|
|
294
|
-
absent: new Uint8Array(),
|
|
295
|
-
},
|
|
296
|
-
] as PTableVector[],
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
test.concurrent("create_table_request_1", async ({ expect }) => {
|
|
300
|
-
const testCase = "create_table_request_1";
|
|
301
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
302
|
-
const expectedResponse = createTableExpectedResponses.request1;
|
|
303
|
-
|
|
304
|
-
using pframe = await readPFrame(testCase);
|
|
305
|
-
using table = pframe.createTable(ulid() as PFrameInternal.PTableId, request);
|
|
306
|
-
|
|
307
|
-
const columnIndices = Array.from({ length: table.getSpec().length }, (_, i) => i);
|
|
308
|
-
const actualResponse = await table.getData(columnIndices);
|
|
309
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
test.concurrent("create_table_request_2", async ({ expect }) => {
|
|
313
|
-
const testCase = "create_table_request_2";
|
|
314
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
315
|
-
const expectedResponse = createTableExpectedResponses.request2;
|
|
316
|
-
|
|
317
|
-
using pframe = await readPFrame(testCase);
|
|
318
|
-
using table = pframe.createTable(ulid() as PFrameInternal.PTableId, request);
|
|
319
|
-
|
|
320
|
-
const columnIndices = Array.from({ length: table.getSpec().length }, (_, i) => i);
|
|
321
|
-
const actualResponse = await table.getData(columnIndices);
|
|
322
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
323
|
-
});
|
|
324
|
-
|
|
325
|
-
test.concurrent("create_table_request_3", async ({ expect }) => {
|
|
326
|
-
const testCase = "create_table_request_3";
|
|
327
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
328
|
-
const expectedResponse = createTableExpectedResponses.request3;
|
|
329
|
-
|
|
330
|
-
using pframe = await readPFrame(testCase);
|
|
331
|
-
using table = pframe.createTable(ulid() as PFrameInternal.PTableId, request);
|
|
332
|
-
|
|
333
|
-
const columnIndices = Array.from({ length: table.getSpec().length }, (_, i) => i);
|
|
334
|
-
const actualResponse = await table.getData(columnIndices);
|
|
335
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
test.concurrent("create_table_request_4", async ({ expect }) => {
|
|
339
|
-
const testCase = "create_table_request_4";
|
|
340
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
341
|
-
const expectedResponse = createTableExpectedResponses.request4;
|
|
342
|
-
|
|
343
|
-
using pframe = await readPFrame(testCase);
|
|
344
|
-
using table = pframe.createTable(ulid() as PFrameInternal.PTableId, request);
|
|
345
|
-
|
|
346
|
-
const columnIndices = Array.from({ length: table.getSpec().length }, (_, i) => i);
|
|
347
|
-
const actualResponse = await table.getData(columnIndices);
|
|
348
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
349
|
-
});
|
|
350
|
-
|
|
351
|
-
test.concurrent("create_table_request_fail", async ({ expect }) => {
|
|
352
|
-
const testCase = "create_table_request_fail";
|
|
353
|
-
|
|
354
|
-
const columnId = "column" as PObjectId;
|
|
355
|
-
const columnSpec = readJsonTestFile(testCase, "column.spec");
|
|
356
|
-
const dataInfo = readJsonTestFile(testCase, "column.datainfo");
|
|
357
|
-
const dataSource = createFailingDataSource();
|
|
358
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
359
|
-
|
|
360
|
-
using pframe = PFrameFactory.createPFrame({
|
|
361
|
-
frameId: ulid() as PFrameInternal.PFrameId,
|
|
362
|
-
spillPath: tmpdir(),
|
|
363
|
-
});
|
|
364
|
-
pframe.setDataSource(dataSource);
|
|
365
|
-
|
|
366
|
-
pframe.addColumnSpec(columnId, columnSpec);
|
|
367
|
-
await pframe.setColumnData(columnId, dataInfo);
|
|
368
|
-
|
|
369
|
-
using table = pframe.createTable(ulid() as PFrameInternal.PTableId, request);
|
|
370
|
-
|
|
371
|
-
await expect(table.getShape()).rejects.toThrow();
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
// DataQuery requests for createTableV2 tests
|
|
375
|
-
const createTableV2Requests = {
|
|
376
|
-
request1: {
|
|
377
|
-
tableSpec: [
|
|
378
|
-
{
|
|
379
|
-
type: "axis",
|
|
380
|
-
id: { name: "axis", type: "Int" },
|
|
381
|
-
spec: { name: "axis", type: "Int" },
|
|
382
|
-
},
|
|
383
|
-
{
|
|
384
|
-
type: "column",
|
|
385
|
-
id: "column",
|
|
386
|
-
spec: {
|
|
387
|
-
kind: "PColumn",
|
|
388
|
-
axesSpec: [{ name: "axis", type: "Int" }],
|
|
389
|
-
name: "column",
|
|
390
|
-
valueType: "Float",
|
|
391
|
-
},
|
|
392
|
-
},
|
|
393
|
-
] as PTableColumnSpec[],
|
|
394
|
-
dataQuery: { type: "column", column: "column" } as DataQuery,
|
|
395
|
-
},
|
|
396
|
-
request2: {
|
|
397
|
-
tableSpec: [
|
|
398
|
-
{
|
|
399
|
-
type: "axis",
|
|
400
|
-
id: { name: "axis", type: "Long" },
|
|
401
|
-
spec: { name: "axis", type: "Long" },
|
|
402
|
-
},
|
|
403
|
-
{
|
|
404
|
-
type: "column",
|
|
405
|
-
id: "column",
|
|
406
|
-
spec: {
|
|
407
|
-
kind: "PColumn",
|
|
408
|
-
axesSpec: [{ name: "axis", type: "Long" }],
|
|
409
|
-
name: "column",
|
|
410
|
-
valueType: "Double",
|
|
411
|
-
},
|
|
412
|
-
},
|
|
413
|
-
] as PTableColumnSpec[],
|
|
414
|
-
dataQuery: { type: "column", column: "column" } as DataQuery,
|
|
415
|
-
},
|
|
416
|
-
request3: {
|
|
417
|
-
tableSpec: [
|
|
418
|
-
{
|
|
419
|
-
type: "axis",
|
|
420
|
-
id: { name: "axis", type: "String" },
|
|
421
|
-
spec: { name: "axis", type: "String" },
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
type: "column",
|
|
425
|
-
id: "column",
|
|
426
|
-
spec: {
|
|
427
|
-
kind: "PColumn",
|
|
428
|
-
axesSpec: [{ name: "axis", type: "String" }],
|
|
429
|
-
name: "column",
|
|
430
|
-
valueType: "Bytes",
|
|
431
|
-
},
|
|
432
|
-
},
|
|
433
|
-
] as PTableColumnSpec[],
|
|
434
|
-
dataQuery: { type: "column", column: "column" } as DataQuery,
|
|
435
|
-
},
|
|
436
|
-
request4: {
|
|
437
|
-
tableSpec: [
|
|
438
|
-
{
|
|
439
|
-
type: "axis",
|
|
440
|
-
id: { name: "axis", type: "String" },
|
|
441
|
-
spec: { name: "axis", type: "String" },
|
|
442
|
-
},
|
|
443
|
-
{
|
|
444
|
-
type: "column",
|
|
445
|
-
id: "column",
|
|
446
|
-
spec: {
|
|
447
|
-
kind: "PColumn",
|
|
448
|
-
axesSpec: [{ name: "axis", type: "String" }],
|
|
449
|
-
name: "column",
|
|
450
|
-
valueType: "Float",
|
|
451
|
-
},
|
|
452
|
-
},
|
|
453
|
-
] as PTableColumnSpec[],
|
|
454
|
-
dataQuery: { type: "column", column: "column" } as DataQuery,
|
|
455
|
-
},
|
|
456
|
-
};
|
|
457
|
-
|
|
458
|
-
test.concurrent("create_table_by_data_query_1", async ({ expect }) => {
|
|
459
|
-
const testCase = "create_table_request_1";
|
|
460
|
-
const expectedResponse = createTableExpectedResponses.request1;
|
|
461
|
-
const DataqueryRequest = createTableV2Requests.request1;
|
|
462
|
-
|
|
463
|
-
using pframe = await readPFrame(testCase);
|
|
464
|
-
using table = pframe.createTableV2(ulid() as PFrameInternal.PTableId, DataqueryRequest);
|
|
465
|
-
|
|
466
|
-
const columnIndices = Array.from({ length: table.getSpec().length }, (_, i) => i);
|
|
467
|
-
const actualResponse = await table.getData(columnIndices);
|
|
468
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
469
|
-
});
|
|
470
|
-
|
|
471
|
-
test.concurrent("create_table_by_data_query_2", async ({ expect }) => {
|
|
472
|
-
const testCase = "create_table_request_2";
|
|
473
|
-
const expectedResponse = createTableExpectedResponses.request2;
|
|
474
|
-
const DataqueryRequest = createTableV2Requests.request2;
|
|
475
|
-
|
|
476
|
-
using pframe = await readPFrame(testCase);
|
|
477
|
-
using table = pframe.createTableV2(ulid() as PFrameInternal.PTableId, DataqueryRequest);
|
|
478
|
-
|
|
479
|
-
const columnIndices = Array.from({ length: table.getSpec().length }, (_, i) => i);
|
|
480
|
-
const actualResponse = await table.getData(columnIndices);
|
|
481
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
482
|
-
});
|
|
483
|
-
|
|
484
|
-
test.concurrent("create_table_by_data_query_3", async ({ expect }) => {
|
|
485
|
-
const testCase = "create_table_request_3";
|
|
486
|
-
const expectedResponse = createTableExpectedResponses.request3;
|
|
487
|
-
const DataqueryRequest = createTableV2Requests.request3;
|
|
488
|
-
|
|
489
|
-
using pframe = await readPFrame(testCase);
|
|
490
|
-
using table = pframe.createTableV2(ulid() as PFrameInternal.PTableId, DataqueryRequest);
|
|
491
|
-
|
|
492
|
-
const columnIndices = Array.from({ length: table.getSpec().length }, (_, i) => i);
|
|
493
|
-
const actualResponse = await table.getData(columnIndices);
|
|
494
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
test.concurrent("create_table_by_data_query_4", async ({ expect }) => {
|
|
498
|
-
const testCase = "create_table_request_4";
|
|
499
|
-
const expectedResponse = createTableExpectedResponses.request4;
|
|
500
|
-
const DataqueryRequest = createTableV2Requests.request4;
|
|
501
|
-
|
|
502
|
-
using pframe = await readPFrame(testCase);
|
|
503
|
-
using table = pframe.createTableV2(ulid() as PFrameInternal.PTableId, DataqueryRequest);
|
|
504
|
-
|
|
505
|
-
const columnIndices = Array.from({ length: table.getSpec().length }, (_, i) => i);
|
|
506
|
-
const actualResponse = await table.getData(columnIndices);
|
|
507
|
-
expect(actualResponse).toEqual(expectedResponse);
|
|
508
|
-
});
|
|
509
|
-
|
|
510
|
-
test.concurrent("create_table_by_data_query_fail", async ({ expect }) => {
|
|
511
|
-
const testCase = "create_table_request_fail";
|
|
512
|
-
|
|
513
|
-
const columnId = "column" as PObjectId;
|
|
514
|
-
const columnSpec = readJsonTestFile(testCase, "column.spec");
|
|
515
|
-
const dataInfo = readJsonTestFile(testCase, "column.datainfo");
|
|
516
|
-
const dataSource = createFailingDataSource();
|
|
517
|
-
|
|
518
|
-
using pframe = PFrameFactory.createPFrame({
|
|
519
|
-
frameId: ulid() as PFrameInternal.PFrameId,
|
|
520
|
-
spillPath: tmpdir(),
|
|
521
|
-
});
|
|
522
|
-
pframe.setDataSource(dataSource);
|
|
523
|
-
|
|
524
|
-
pframe.addColumnSpec(columnId, columnSpec);
|
|
525
|
-
await pframe.setColumnData(columnId, dataInfo);
|
|
526
|
-
|
|
527
|
-
// Construct DataQuery request for the failing column
|
|
528
|
-
const DataqueryRequest = {
|
|
529
|
-
tableSpec: [
|
|
530
|
-
{
|
|
531
|
-
type: "axis",
|
|
532
|
-
id: { name: "axis", type: "Long" },
|
|
533
|
-
spec: { name: "axis", type: "Long" },
|
|
534
|
-
},
|
|
535
|
-
{
|
|
536
|
-
type: "column",
|
|
537
|
-
id: "column",
|
|
538
|
-
spec: {
|
|
539
|
-
kind: "PColumn",
|
|
540
|
-
axesSpec: [{ name: "axis", type: "Long" }],
|
|
541
|
-
name: "column",
|
|
542
|
-
valueType: "Long",
|
|
543
|
-
},
|
|
544
|
-
},
|
|
545
|
-
] as PTableColumnSpec[],
|
|
546
|
-
dataQuery: {
|
|
547
|
-
type: "column",
|
|
548
|
-
column: "column",
|
|
549
|
-
} as DataQuery,
|
|
550
|
-
};
|
|
551
|
-
|
|
552
|
-
using table = (pframe as unknown as PFrame).createTableV2(
|
|
553
|
-
ulid() as PFrameInternal.PTableId,
|
|
554
|
-
DataqueryRequest,
|
|
555
|
-
);
|
|
556
|
-
|
|
557
|
-
await expect(table.getShape()).rejects.toThrow();
|
|
558
|
-
});
|
|
559
|
-
});
|
|
560
|
-
|
|
561
|
-
describe("PFrame Table Operations", () => {
|
|
562
|
-
test.concurrent("sort_table_request", async ({ expect }) => {
|
|
563
|
-
const testCase = "sort_table_request";
|
|
564
|
-
|
|
565
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
566
|
-
const sorting: PTableSorting[] = readJsonTestFile(testCase, "sorting.json");
|
|
567
|
-
|
|
568
|
-
// Expected response for full sorted data
|
|
569
|
-
let expectedFullResponse: PTableVector[] = [
|
|
570
|
-
{
|
|
571
|
-
type: "Long", // Axis A1 - all values present
|
|
572
|
-
data: new BigInt64Array([BigInt(0), BigInt(0), BigInt(1), BigInt(2)]),
|
|
573
|
-
isNA: new Uint8Array(),
|
|
574
|
-
absent: new Uint8Array(),
|
|
575
|
-
},
|
|
576
|
-
{
|
|
577
|
-
type: "String", // Axis A2 - positions 2,3 absent (no record in column2 for A1=1,2)
|
|
578
|
-
data: ["FloatOne", "FloatTwo", null, null],
|
|
579
|
-
isNA: new Uint8Array([48]),
|
|
580
|
-
absent: new Uint8Array(),
|
|
581
|
-
},
|
|
582
|
-
{
|
|
583
|
-
type: "String", // Column column1 - positions 0,1 are NA (no data for A1=0)
|
|
584
|
-
data: [null, null, "IntOne", "IntTwo"],
|
|
585
|
-
isNA: new Uint8Array([192]),
|
|
586
|
-
absent: new Uint8Array(),
|
|
587
|
-
},
|
|
588
|
-
{
|
|
589
|
-
type: "Float", // Column column2 - positions 2,3 are NA (no data for A1=1,2)
|
|
590
|
-
data: new Float32Array([1.0, 2.0, NaN, NaN]),
|
|
591
|
-
isNA: new Uint8Array([48]),
|
|
592
|
-
absent: new Uint8Array(),
|
|
593
|
-
},
|
|
594
|
-
];
|
|
595
|
-
|
|
596
|
-
// Expected response for range query (rows 1-2, reordered columns)
|
|
597
|
-
const expectedRangeResponse: PTableVector[] = [
|
|
598
|
-
{
|
|
599
|
-
type: "Float", // Column column2 - position 1 is NA
|
|
600
|
-
data: new Float32Array([2.0, NaN]),
|
|
601
|
-
isNA: new Uint8Array([64]),
|
|
602
|
-
absent: new Uint8Array(),
|
|
603
|
-
},
|
|
604
|
-
{
|
|
605
|
-
type: "String", // Column column1 - position 0 is NA
|
|
606
|
-
data: [null, "IntOne"],
|
|
607
|
-
isNA: new Uint8Array([128]),
|
|
608
|
-
absent: new Uint8Array(),
|
|
609
|
-
},
|
|
610
|
-
{
|
|
611
|
-
type: "String", // Axis A2 - position 1 is absent
|
|
612
|
-
data: ["FloatTwo", null],
|
|
613
|
-
isNA: new Uint8Array([64]),
|
|
614
|
-
absent: new Uint8Array(),
|
|
615
|
-
},
|
|
616
|
-
{
|
|
617
|
-
type: "Long", // Axis A1 - all present
|
|
618
|
-
data: new BigInt64Array([BigInt(0), BigInt(1)]),
|
|
619
|
-
isNA: new Uint8Array(),
|
|
620
|
-
absent: new Uint8Array(),
|
|
621
|
-
},
|
|
622
|
-
];
|
|
623
|
-
|
|
624
|
-
using pframe = await readPFrame(testCase);
|
|
625
|
-
using table = pframe.createTable(ulid() as PFrameInternal.PTableId, request);
|
|
626
|
-
|
|
627
|
-
using sortedTable = table.sort(ulid() as PFrameInternal.PTableId, sorting);
|
|
628
|
-
const footprint = await sortedTable.getFootprint();
|
|
629
|
-
expect(footprint).toBeGreaterThan(0);
|
|
630
|
-
|
|
631
|
-
// Test full sorted data
|
|
632
|
-
const columnIndices = sortedTable.getColumnIndices(
|
|
633
|
-
Array.from(sorting, (entry) => entry.column),
|
|
634
|
-
);
|
|
635
|
-
let actualResponse = await sortedTable.getData(columnIndices);
|
|
636
|
-
expect(actualResponse).toEqual(expectedFullResponse);
|
|
637
|
-
|
|
638
|
-
// Test range query with reordered columns
|
|
639
|
-
actualResponse = await sortedTable.getData(
|
|
640
|
-
[columnIndices[3], columnIndices[2], columnIndices[1], columnIndices[0]],
|
|
641
|
-
{ range: { offset: 1, length: 2 } },
|
|
642
|
-
);
|
|
643
|
-
expect(actualResponse).toEqual(expectedRangeResponse);
|
|
644
|
-
});
|
|
645
|
-
});
|
|
646
|
-
|
|
647
|
-
describe("PFrame Complex Operations", () => {
|
|
648
|
-
test.concurrent("complex_join", async ({ expect }) => {
|
|
649
|
-
const testCase = "complex_join";
|
|
650
|
-
using pframe = await readPFrame(testCase);
|
|
651
|
-
|
|
652
|
-
const request = readJsonTestFile(testCase, "request.json");
|
|
653
|
-
using table = pframe.createTable(ulid() as PFrameInternal.PTableId, request);
|
|
654
|
-
|
|
655
|
-
const shape = await table.getShape();
|
|
656
|
-
expect(shape).toEqual({
|
|
657
|
-
columns: 6,
|
|
658
|
-
rows: 7124,
|
|
659
|
-
});
|
|
660
|
-
|
|
661
|
-
// Test profiling functionality (platform-dependent)
|
|
662
|
-
if (process.platform === "win32") {
|
|
663
|
-
expect(PFrameFactory.pprofDump()).rejects.toThrow();
|
|
664
|
-
} else {
|
|
665
|
-
const profile = await PFrameFactory.pprofDump();
|
|
666
|
-
const profilePath = path.join(tmpdir(), `profile_${Date.now()}.pb.gz`);
|
|
667
|
-
fs.writeFileSync(profilePath, profile);
|
|
668
|
-
console.log(`Profile saved to ${profilePath}`);
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
// Test out of bounds range
|
|
672
|
-
const result = await table.getData([0], {
|
|
673
|
-
range: { offset: 10000, length: 20000 },
|
|
674
|
-
});
|
|
675
|
-
expect(result).toMatchObject([{ data: [] }]);
|
|
676
|
-
|
|
677
|
-
const result2 = await table.getData([0], {
|
|
678
|
-
range: { offset: 7123, length: 2 },
|
|
679
|
-
});
|
|
680
|
-
expect(result2[0].data.length).toBe(1);
|
|
681
|
-
});
|
|
682
|
-
});
|