@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.
Files changed (212) hide show
  1. package/package.json +3 -3
  2. package/export/tests/pframes.test.ts +0 -682
  3. package/export/tests/setup.ts +0 -29
  4. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2LVJN6O24SEU2T6ZZRA3ZNIA.jdata +0 -82
  5. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2MO4YNOSI4C2L7GHVIZ6YSYT.jdata +0 -139
  6. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2R6YWG3EVKXULZJIZYSZYASV.jdata +0 -151
  7. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2RFBXQYLZVPIYLITVUUU3GR6.jdata +0 -136
  8. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2ZCJ73VD223TO7UVCF4DLSKS.jdata +0 -166
  9. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.2ZCOKJLMPCZTTSJQEYCYM2D6.jdata +0 -18
  10. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.32L5DZ6D632DGLU3OIBB3HGX.jdata +0 -76
  11. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.34LTVMPK2UDCR34EHCSEYX3W.jdata +0 -19
  12. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.3K6KCP5JDGW4X7DXT5RF6ZAF.jdata +0 -121
  13. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.5BJ4G7MKY3KGJAZMAYHRDDTI.jdata +0 -106
  14. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.5QIRD6GYS57CH4FPJLYCUDUN.jdata +0 -81
  15. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.6465KFARE44HTYJ4DLVE2POI.jdata +0 -124
  16. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.7EN5RO34NCDPWAWCIBM4UDIA.jdata +0 -62
  17. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.7HQRZGQAFAUVMAXUSH4QK35W.jdata +0 -172
  18. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.7IFCRZFNQ62AIPBKYYWNJKLP.jdata +0 -166
  19. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.7PPYAJDDR7DGHLI5YSFBGIX4.jdata +0 -68
  20. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.A7LBATMSQCBKAPGIUKAFX7ZQ.jdata +0 -13
  21. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.AQUOPWRX3Q2QNR2IWWMMGRCF.jdata +0 -88
  22. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.AY2WCVRGDI4KDBSNN4VWISRV.jdata +0 -19
  23. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.AZHBA2KSN2ZSGCQF32V3AZGH.jdata +0 -18
  24. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.B2X77CFBR4AHVC4UE3YWHRSE.jdata +0 -1
  25. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.BDGKT2HBP4KRZYQW7IOL3MXX.jdata +0 -104
  26. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.BUPSWPETJ4HHWZOY6M3X2AUV.jdata +0 -48
  27. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.CHH6NIYBJUBIWROO4LXF3AK2.jdata +0 -28
  28. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.CHI3Y6POL64COZMAEHK7RKOO.jdata +0 -167
  29. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.D4DU6MUFJX5C572GM25IWLFV.jdata +0 -79
  30. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.DFO4BLLJ4GVHRBYGLAJ7QUN2.jdata +0 -59
  31. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.DFQDMMGE23YQY5MCLNKOMZJM.jdata +0 -118
  32. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.DXWTOE3QM2D4XAICJLVAUOYH.jdata +0 -173
  33. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.E7DBFSJQQOZIWEZ4UIABFVTP.jdata +0 -20
  34. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.FILU5VIR2FDT3SRDYE322USR.jdata +0 -181
  35. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.GF24HO7CQHY55O6JKWEDKHNF.jdata +0 -78
  36. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.HBT3EGHORD2TZRM7XG5PO5II.jdata +0 -136
  37. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.HXBZGAQ724Y567AKGQOAAF2J.jdata +0 -74
  38. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.IBB3SCZSTCEZQFO4S7L6GVUH.jdata +0 -149
  39. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.ICOC34NWMBSXEFXQOO2BNY4H.jdata +0 -59
  40. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.IQPTOXVWTTENLD2E4VKNU56D.jdata +0 -102
  41. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.JP3IIRDA6QZDW4EZLKRII7KS.jdata +0 -86
  42. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.JZE5QCNYF4YHZYRGUZ6XRJHQ.jdata +0 -84
  43. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.K6A7V2JOVSAX7RHIZ2RPXYBP.jdata +0 -1
  44. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.KL7USBR5ZQUIN7K7MF3U7P73.jdata +0 -64
  45. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.KMZNMPE7IWFLWKPMN7OABWXZ.jdata +0 -59
  46. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.KZPHVIUPQIAFL2HTOAJR7VGJ.jdata +0 -1
  47. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.KZSRESLOPXQ4WH6ALAJP7U5H.jdata +0 -196
  48. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.LGBPQ5XC2BUGG4TJWYHTFZGE.jdata +0 -89
  49. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.LMLLDWOFTAPH3QVSOM7MHQ22.jdata +0 -73
  50. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.LVVUZMJT5MREBDWME5RSK7KI.jdata +0 -146
  51. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.LXBE5P62YKG5UDJGJRL6MSQC.jdata +0 -68
  52. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.MLOU6WK4ZV7K6HIWPE3LRWI2.jdata +0 -98
  53. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.NAL3QCUSLD44QGSRCQ5TZOAH.jdata +0 -69
  54. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.NWX7DKTFXRVH4ZYUTZULRDWT.jdata +0 -80
  55. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.O6M53LCMV7A3II22GUPKCJGP.jdata +0 -98
  56. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.PMARMGPM4IBPA3VCS3CYH5WM.jdata +0 -32
  57. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.PMJ37ZMFMTFORL4UYUDVNDZG.jdata +0 -126
  58. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.QPWLPWRWPFGRVQI5OS2RGXBW.jdata +0 -26
  59. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.QQ4RGTF2PBGNUPTLCO3Z3T2C.jdata +0 -22
  60. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.QWXPZSGYDRGIUZS6VDHGVLTF.jdata +0 -72
  61. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.QXQWSMICPPJGLPUQ33IQJK7F.jdata +0 -90
  62. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.RBX3IONPE5K2HMS4MAT4MKQY.jdata +0 -146
  63. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.RHKAHOLA74IHPBG75KQN4NAV.jdata +0 -59
  64. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.RWI3IGNEUOAJR7ZWU7NSPF72.jdata +0 -67
  65. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.SOVBQDZPBYCVZTRZF3CXHWOW.jdata +0 -91
  66. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.SWLOWAB2PTM5R2XN765A3ICZ.jdata +0 -104
  67. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.T3WRQEFUPCZICFXMJ5F6DQX3.jdata +0 -131
  68. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.TETZ2IEF3L2GYDJLNU3BVKMX.jdata +0 -76
  69. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.UXO4UE2Q7HO42SNSO4DULKJJ.jdata +0 -118
  70. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VAUTIV2ROH62WNMZZCIGRBDC.jdata +0 -132
  71. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VBP7Z5WQ2IOHMQIA5UV4DOH3.jdata +0 -71
  72. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VCKGU2COVX6O3RUXNRC7FRCJ.jdata +0 -151
  73. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VOCGDDBWN5H64YJZP3EPSZNU.jdata +0 -158
  74. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.VPEMTWGQVZ6ZSNF426GPHUXI.jdata +0 -93
  75. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.WAS2QNFHHPD2UIZ44F2IKRQ6.jdata +0 -101
  76. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.WYCWV4434DAMKRUU7F7LGZGR.jdata +0 -142
  77. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.XGWYF7VR6EIU3OWPXAWHP2PE.jdata +0 -156
  78. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.XJQYA42VX2WKHPAJWAUBHAXN.jdata +0 -119
  79. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.XLTFOXR4VH54UCW6BVEND6GI.jdata +0 -85
  80. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.YMTPJWXHLMW4IPBQABT3326F.jdata +0 -109
  81. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.YOIX3HY7SWPCY7AOBSDA3GLC.jdata +0 -1
  82. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.YSEQPSWWTXZTW52G5ZZU46RT.jdata +0 -93
  83. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.ZZ54PNLFYZ6GSOR2AESKXRL4.jdata +0 -89
  84. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.datainfo +0 -86
  85. package/export/tests/test_data/complex_join/export.cloneset.CDR3_length_aa.spec +0 -42
  86. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2LVJN6O24SEU2T6ZZRA3ZNIA.jdata +0 -82
  87. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2MO4YNOSI4C2L7GHVIZ6YSYT.jdata +0 -139
  88. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2R6YWG3EVKXULZJIZYSZYASV.jdata +0 -151
  89. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2RFBXQYLZVPIYLITVUUU3GR6.jdata +0 -136
  90. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2ZCJ73VD223TO7UVCF4DLSKS.jdata +0 -166
  91. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.2ZCOKJLMPCZTTSJQEYCYM2D6.jdata +0 -18
  92. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.32L5DZ6D632DGLU3OIBB3HGX.jdata +0 -76
  93. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.34LTVMPK2UDCR34EHCSEYX3W.jdata +0 -19
  94. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.3K6KCP5JDGW4X7DXT5RF6ZAF.jdata +0 -121
  95. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.5BJ4G7MKY3KGJAZMAYHRDDTI.jdata +0 -106
  96. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.5QIRD6GYS57CH4FPJLYCUDUN.jdata +0 -81
  97. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.6465KFARE44HTYJ4DLVE2POI.jdata +0 -124
  98. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.7EN5RO34NCDPWAWCIBM4UDIA.jdata +0 -62
  99. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.7HQRZGQAFAUVMAXUSH4QK35W.jdata +0 -172
  100. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.7IFCRZFNQ62AIPBKYYWNJKLP.jdata +0 -166
  101. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.7PPYAJDDR7DGHLI5YSFBGIX4.jdata +0 -68
  102. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.A7LBATMSQCBKAPGIUKAFX7ZQ.jdata +0 -13
  103. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.AQUOPWRX3Q2QNR2IWWMMGRCF.jdata +0 -88
  104. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.AY2WCVRGDI4KDBSNN4VWISRV.jdata +0 -19
  105. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.AZHBA2KSN2ZSGCQF32V3AZGH.jdata +0 -18
  106. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.B2X77CFBR4AHVC4UE3YWHRSE.jdata +0 -1
  107. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.BDGKT2HBP4KRZYQW7IOL3MXX.jdata +0 -104
  108. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.BUPSWPETJ4HHWZOY6M3X2AUV.jdata +0 -48
  109. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.CHH6NIYBJUBIWROO4LXF3AK2.jdata +0 -28
  110. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.CHI3Y6POL64COZMAEHK7RKOO.jdata +0 -167
  111. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.D4DU6MUFJX5C572GM25IWLFV.jdata +0 -79
  112. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.DFO4BLLJ4GVHRBYGLAJ7QUN2.jdata +0 -59
  113. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.DFQDMMGE23YQY5MCLNKOMZJM.jdata +0 -118
  114. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.DXWTOE3QM2D4XAICJLVAUOYH.jdata +0 -173
  115. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.E7DBFSJQQOZIWEZ4UIABFVTP.jdata +0 -20
  116. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.FILU5VIR2FDT3SRDYE322USR.jdata +0 -181
  117. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.GF24HO7CQHY55O6JKWEDKHNF.jdata +0 -78
  118. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.HBT3EGHORD2TZRM7XG5PO5II.jdata +0 -136
  119. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.HXBZGAQ724Y567AKGQOAAF2J.jdata +0 -74
  120. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.IBB3SCZSTCEZQFO4S7L6GVUH.jdata +0 -149
  121. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.ICOC34NWMBSXEFXQOO2BNY4H.jdata +0 -59
  122. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.IQPTOXVWTTENLD2E4VKNU56D.jdata +0 -102
  123. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.JP3IIRDA6QZDW4EZLKRII7KS.jdata +0 -86
  124. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.JZE5QCNYF4YHZYRGUZ6XRJHQ.jdata +0 -84
  125. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.K6A7V2JOVSAX7RHIZ2RPXYBP.jdata +0 -1
  126. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.KL7USBR5ZQUIN7K7MF3U7P73.jdata +0 -64
  127. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.KMZNMPE7IWFLWKPMN7OABWXZ.jdata +0 -59
  128. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.KZPHVIUPQIAFL2HTOAJR7VGJ.jdata +0 -1
  129. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.KZSRESLOPXQ4WH6ALAJP7U5H.jdata +0 -196
  130. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.LGBPQ5XC2BUGG4TJWYHTFZGE.jdata +0 -89
  131. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.LMLLDWOFTAPH3QVSOM7MHQ22.jdata +0 -73
  132. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.LVVUZMJT5MREBDWME5RSK7KI.jdata +0 -146
  133. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.LXBE5P62YKG5UDJGJRL6MSQC.jdata +0 -68
  134. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.MLOU6WK4ZV7K6HIWPE3LRWI2.jdata +0 -98
  135. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.NAL3QCUSLD44QGSRCQ5TZOAH.jdata +0 -69
  136. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.NWX7DKTFXRVH4ZYUTZULRDWT.jdata +0 -80
  137. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.O6M53LCMV7A3II22GUPKCJGP.jdata +0 -98
  138. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.PMARMGPM4IBPA3VCS3CYH5WM.jdata +0 -32
  139. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.PMJ37ZMFMTFORL4UYUDVNDZG.jdata +0 -126
  140. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.QPWLPWRWPFGRVQI5OS2RGXBW.jdata +0 -26
  141. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.QQ4RGTF2PBGNUPTLCO3Z3T2C.jdata +0 -22
  142. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.QWXPZSGYDRGIUZS6VDHGVLTF.jdata +0 -72
  143. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.QXQWSMICPPJGLPUQ33IQJK7F.jdata +0 -90
  144. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.RBX3IONPE5K2HMS4MAT4MKQY.jdata +0 -146
  145. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.RHKAHOLA74IHPBG75KQN4NAV.jdata +0 -59
  146. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.RWI3IGNEUOAJR7ZWU7NSPF72.jdata +0 -67
  147. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.SOVBQDZPBYCVZTRZF3CXHWOW.jdata +0 -91
  148. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.SWLOWAB2PTM5R2XN765A3ICZ.jdata +0 -104
  149. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.T3WRQEFUPCZICFXMJ5F6DQX3.jdata +0 -131
  150. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.TETZ2IEF3L2GYDJLNU3BVKMX.jdata +0 -76
  151. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.UXO4UE2Q7HO42SNSO4DULKJJ.jdata +0 -118
  152. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VAUTIV2ROH62WNMZZCIGRBDC.jdata +0 -132
  153. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VBP7Z5WQ2IOHMQIA5UV4DOH3.jdata +0 -71
  154. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VCKGU2COVX6O3RUXNRC7FRCJ.jdata +0 -151
  155. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VOCGDDBWN5H64YJZP3EPSZNU.jdata +0 -158
  156. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.VPEMTWGQVZ6ZSNF426GPHUXI.jdata +0 -93
  157. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.WAS2QNFHHPD2UIZ44F2IKRQ6.jdata +0 -101
  158. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.WYCWV4434DAMKRUU7F7LGZGR.jdata +0 -142
  159. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.XGWYF7VR6EIU3OWPXAWHP2PE.jdata +0 -156
  160. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.XJQYA42VX2WKHPAJWAUBHAXN.jdata +0 -119
  161. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.XLTFOXR4VH54UCW6BVEND6GI.jdata +0 -85
  162. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.YMTPJWXHLMW4IPBQABT3326F.jdata +0 -109
  163. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.YOIX3HY7SWPCY7AOBSDA3GLC.jdata +0 -1
  164. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.YSEQPSWWTXZTW52G5ZZU46RT.jdata +0 -93
  165. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.ZZ54PNLFYZ6GSOR2AESKXRL4.jdata +0 -89
  166. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.datainfo +0 -86
  167. package/export/tests/test_data/complex_join/export.cloneset.ReadsCount.spec +0 -37
  168. package/export/tests/test_data/complex_join/metadata.7ZNW7LBUDMBSQJ26KYSSTBPJ.datainfo +0 -5
  169. package/export/tests/test_data/complex_join/metadata.7ZNW7LBUDMBSQJ26KYSSTBPJ.jdata +0 -82
  170. package/export/tests/test_data/complex_join/metadata.7ZNW7LBUDMBSQJ26KYSSTBPJ.spec +0 -14
  171. package/export/tests/test_data/complex_join/request.json +0 -43
  172. package/export/tests/test_data/create_table_request_1/column.datainfo +0 -7
  173. package/export/tests/test_data/create_table_request_1/column.spec +0 -11
  174. package/export/tests/test_data/create_table_request_1/request.json +0 -8
  175. package/export/tests/test_data/create_table_request_2/column.datainfo +0 -7
  176. package/export/tests/test_data/create_table_request_2/column.spec +0 -11
  177. package/export/tests/test_data/create_table_request_2/request.json +0 -8
  178. package/export/tests/test_data/create_table_request_3/column.datainfo +0 -7
  179. package/export/tests/test_data/create_table_request_3/column.spec +0 -11
  180. package/export/tests/test_data/create_table_request_3/request.json +0 -8
  181. package/export/tests/test_data/create_table_request_4/column.datainfo +0 -7
  182. package/export/tests/test_data/create_table_request_4/column.spec +0 -11
  183. package/export/tests/test_data/create_table_request_4/request.json +0 -8
  184. package/export/tests/test_data/create_table_request_fail/column.datainfo +0 -5
  185. package/export/tests/test_data/create_table_request_fail/column.spec +0 -11
  186. package/export/tests/test_data/create_table_request_fail/request.json +0 -8
  187. package/export/tests/test_data/delete_column_request/request.json +0 -27
  188. package/export/tests/test_data/delete_column_request/response.json +0 -13
  189. package/export/tests/test_data/find_columns_request/column.spec +0 -11
  190. package/export/tests/test_data/find_columns_request/request.json +0 -5
  191. package/export/tests/test_data/find_columns_request/response.json +0 -21
  192. package/export/tests/test_data/get_column_spec_request/column.spec +0 -11
  193. package/export/tests/test_data/get_column_spec_request/response.json +0 -11
  194. package/export/tests/test_data/set_column_data_request/column.datainfo +0 -5
  195. package/export/tests/test_data/set_column_data_request/column.jdata +0 -24
  196. package/export/tests/test_data/set_column_data_request/column.spec +0 -14
  197. package/export/tests/test_data/sort_table_request/column1.datainfo +0 -5
  198. package/export/tests/test_data/sort_table_request/column1.jdata +0 -4
  199. package/export/tests/test_data/sort_table_request/column1.spec +0 -11
  200. package/export/tests/test_data/sort_table_request/column2.datainfo +0 -5
  201. package/export/tests/test_data/sort_table_request/column2.jdata +0 -4
  202. package/export/tests/test_data/sort_table_request/column2.spec +0 -15
  203. package/export/tests/test_data/sort_table_request/request.json +0 -18
  204. package/export/tests/test_data/sort_table_request/sorting.json +0 -40
  205. package/export/tests/test_data/unique_values_request/column.datainfo +0 -5
  206. package/export/tests/test_data/unique_values_request/column.jdata +0 -5
  207. package/export/tests/test_data/unique_values_request/column.spec +0 -11
  208. package/export/tests/test_data/unique_values_request/request.json +0 -5
  209. package/export_dist/tests/pframes.test.d.ts +0 -2
  210. package/export_dist/tests/pframes.test.d.ts.map +0 -1
  211. package/export_dist/tests/setup.d.ts +0 -2
  212. 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.12",
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.12"
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
- });