diff --git a/.claude/settings.local.json b/.claude/settings.local.json index c14d84d..a60f8a5 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,7 +1,18 @@ { "permissions": { "allow": [ - "Bash(mkdir:*)" + "Bash(mkdir:*)", + "Bash(uv run:*)", + "Bash(pnpm exec tsc:*)", + "Bash(pnpm run lint)", + "Bash(for file in balanceMapSlice.ts rowDataSlice.ts bubblePlotSlice.ts)", + "Bash(do)", + "Bash(echo:*)", + "Bash(done)", + "Bash(pnpm run typecheck:*)", + "Bash(for file in src/lib/features/bubblePlot/bubblePlotSlice.ts src/lib/features/heatmap/heatmapSlice.ts src/lib/features/histogram/histogramSlice.ts)", + "Bash(pnpm test:*)", + "Bash(make typecheck:*)" ], "deny": [], "ask": [] diff --git a/data/dummy_data_various_types.csv b/data/dummy_data_various_types.csv index 5ce8210..ab40632 100644 --- a/data/dummy_data_various_types.csv +++ b/data/dummy_data_various_types.csv @@ -1,280 +1,280 @@ idx_int,idx_str,url,pa_null,np_nan,np_inf,np_negative_inf,np_int16,one_value_string,one_value_int,one_value_float,one_value_bool,int8,int16,int32,int64,uint8,uint16,uint32,uint64,halffloat,float,double,bool,bool_with_nulls,int_with_nulls,string,string_with_nulls,datetime,datetime_with_nulls,list_of_integers,list_of_strings,blob,dict,dict_with_nulls,struct,struct_with_nulls,s3_url,s3_alternative_url 0,s0,https://placehold.co/300x400.png,,,inf,-inf,0,single value,1,1.23456789,True,-26,-137,-897,-365,146,882,72,910,0.2274,0.9993535,0.8399471646724719,False,,,"multiple -lines string",emoji 🤣,2023-12-20,2023-05-14,[65 67],['Nbr' 'nTP3fA' 'bnFbmOHnK'],b'\xf7t\xe6',"[('lQu', 95)]",,"{'x': 3, 'y': '7dW'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-12-20,2023-05-14,[65 67],['oLI' 'SRABr1' 'VjArnVgxw'],b'\xf7t\xe6',"[('Chd', 95)]",,"{'x': 3, 'y': 'Sx8'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 1,s1,https://placehold.co/301x399.png,,,inf,-inf,1,single value,1,1.23456789,True,51,-258,875,129,75,255,793,919,0.608,0.5558066,0.7728227800168045,True,True,1.0,"multiple -lines string",emoji 🤣,2023-01-28,2023-09-08,[35 81 18],['YaX' 'Rvj7uf' 'f0LYTH8xI'],b'(d\xb1\xab\xa9(\xf5=\xb1',"[('fwU', 93)]",,"{'x': 21, 'y': 'eDl'}","{'x': 60, 'y': 'bMh'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -2,s2,https://placehold.co/302x398.png,,,inf,-inf,2,single value,1,1.23456789,True,-36,264,-747,693,8,708,248,549,0.3794,0.47321013,0.23005368303143392,True,,2.0,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-02-12,2023-08-07,[83 96 75 14],['ZM1' 'JRcore' 'ogrNwwmq6'],b'&(l\xa7pa\x033',"[('tWu', 42)]","[('9DW', 92)]","{'x': 11, 'y': '0YZ'}","{'x': 89, 'y': '0X9'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-01-28,2023-09-08,[35 81 18],['vqc' 'Ch5esM' '2wleOV911'],b'(d\xb1\xab\xa9(\xf5=\xb1',"[('NJM', 93)]",,"{'x': 21, 'y': 'p9m'}","{'x': 60, 'y': 'NQp'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +2,s2,https://placehold.co/302x398.png,,,inf,-inf,2,single value,1,1.23456789,True,-36,264,-747,693,8,708,248,549,0.3794,0.47321013,0.23005368303143392,True,,2.0,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-02-12,2023-08-07,[83 96 75 14],['xCZ' 'kwPRQe' 'NHpCq5Qnu'],b'&(l\xa7pa\x033',"[('Dmh', 42)]","[('wao', 92)]","{'x': 11, 'y': 'TfP'}","{'x': 89, 'y': 'esI'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 3,s3,https://placehold.co/303x397.png,,,inf,-inf,3,single value,1,1.23456789,True,-114,-437,250,682,198,814,46,418,0.744,0.31285486,0.13133512640937806,True,True,,"multiple -lines string",,2023-06-18,2023-04-01,[62 28],['OLk' 'Tkx9NI' 'Q0Wobtqn6'],b'.\xd4\x84\x03',"[('qs0', 20)]","[('wnV', 29)]","{'x': 17, 'y': 'hVp'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-06-18,2023-04-01,[62 28],['VdY' 'Xye4JS' 'nE2NiiUHU'],b'.\xd4\x84\x03',"[('QGz', 20)]","[('78Q', 29)]","{'x': 17, 'y': 'my7'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 4,s4,https://placehold.co/304x396.png,,,inf,-inf,4,single value,1,1.23456789,True,-22,20,135,-344,27,920,120,605,0.2056,0.12052258,0.8680543225322929,True,,,"multiple -lines string",,2023-03-27,2023-12-20,[50 74],['2tO' 'y4CqpI' 'qK3yn9Ffc'],,"[('D1K', 80)]","[('TsC', 13)]","{'x': 70, 'y': 'VBT'}","{'x': 93, 'y': 'zuI'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -5,s5,https://placehold.co/305x395.png,,,inf,-inf,5,single value,1,1.23456789,True,-57,-905,-491,-881,205,449,213,94,0.7876,0.73102367,0.9632366534401319,False,,,emoji 🤣,c having special characters: !@#$%^&*(),2023-06-26,2023-02-15,[81 50],,b'*\xc9\xbf\x13\xaf',"[('6e3', 14)]","[('FyF', 51)]","{'x': 57, 'y': 'cCV'}","{'x': 50, 'y': 'Nam'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-03-27,2023-12-20,[50 74],['AKw' '9iEU1j' 'jQKxKDpI6'],,"[('1j9', 80)]","[('Uij', 13)]","{'x': 70, 'y': '6jT'}","{'x': 93, 'y': 'Vhu'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +5,s5,https://placehold.co/305x395.png,,,inf,-inf,5,single value,1,1.23456789,True,-57,-905,-491,-881,205,449,213,94,0.7876,0.73102367,0.9632366534401319,False,,,emoji 🤣,c having special characters: !@#$%^&*(),2023-06-26,2023-02-15,[81 50],,b'*\xc9\xbf\x13\xaf',"[('v93', 14)]","[('JJ2', 51)]","{'x': 57, 'y': 'UIh'}","{'x': 50, 'y': 'yJ7'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 6,s6,https://placehold.co/306x394.png,,,inf,-inf,6,single value,1,1.23456789,True,60,923,496,-170,222,9,238,816,0.6035,0.19259903,0.03130231374751624,True,,2.0,a with space,"multiple -lines string",2023-01-17,2023-02-07,[38],['gMX' 'Adx9G8' '1aSQHqNgA'],b'\xc2k',"[('F1x', 73)]","[('P0Y', 36)]","{'x': 89, 'y': 'G8D'}","{'x': 95, 'y': 'rWt'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -7,s7,https://placehold.co/307x393.png,,,inf,-inf,7,single value,1,1.23456789,True,-108,757,-902,810,127,823,55,580,0.11426,0.11528202,0.7312700669736856,True,True,2.0,,,2023-04-08,2023-05-22,[69 26 1 92],['C72' 'qFl41s' 'NLjVHWGau'],b'J',"[('sd0', 52)]","[('MkF', 14)]","{'x': 69, 'y': 'Qtu'}","{'x': 70, 'y': 'Fua'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-01-17,2023-02-07,[38],['Qh2' 'UVvsja' 'SS8VFgM0F'],b'\xc2k',"[('9i1', 73)]","[('jT6', 36)]","{'x': 89, 'y': 'Dsw'}","{'x': 95, 'y': 'ZmZ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +7,s7,https://placehold.co/307x393.png,,,inf,-inf,7,single value,1,1.23456789,True,-108,757,-902,810,127,823,55,580,0.11426,0.11528202,0.7312700669736856,True,True,2.0,,,2023-04-08,2023-05-22,[69 26 1 92],['mxk' '754LEg' 'w9YooJeTY'],b'J',"[('lfu', 52)]","[('cVo', 14)]","{'x': 69, 'y': 'dP8'}","{'x': 70, 'y': '5DD'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 8,s8,https://placehold.co/308x392.png,,,inf,-inf,8,single value,1,1.23456789,True,-26,-516,-848,627,51,797,349,317,0.4146,0.42176265,0.9095245109478184,True,True,3.0,a with space,"multiple -lines string",2023-07-17,2023-04-10,,['b52' 'Ztd26f' 'EeVVhDIq2'],b'\x89f\xa7\xd6Q\x05\x8d',"[('imz', 51)]","[('Bl6', 45)]","{'x': 23, 'y': 'Nc6'}","{'x': 0, 'y': 'QvS'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -9,s9,https://placehold.co/309x391.png,,,inf,-inf,9,single value,1,1.23456789,True,-7,430,884,81,82,241,106,955,0.8633,0.79534185,0.8573600920924986,True,False,1.0,emoji 🤣,,2023-04-08,2023-11-24,[ 1 80 40 11],['AnH' 'Tmt9OB' 'GhnuKoneN'],b'\xa3\x14V',"[('J4C', 56)]","[('O7T', 76)]","{'x': 17, 'y': 'GpN'}","{'x': 71, 'y': 'Mbk'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-07-17,2023-04-10,,['8Hh' 'O6kGL7' '5UQSyPx3B'],b'\x89f\xa7\xd6Q\x05\x8d',"[('9td', 51)]","[('qoP', 45)]","{'x': 23, 'y': 'oAa'}","{'x': 0, 'y': 'cij'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +9,s9,https://placehold.co/309x391.png,,,inf,-inf,9,single value,1,1.23456789,True,-7,430,884,81,82,241,106,955,0.8633,0.79534185,0.8573600920924986,True,False,1.0,emoji 🤣,,2023-04-08,2023-11-24,[ 1 80 40 11],['pdb' 'IKaRde' 'buFrEHS2J'],b'\xa3\x14V',"[('CmV', 56)]","[('GXy', 76)]","{'x': 17, 'y': 'XKy'}","{'x': 71, 'y': 'C13'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 10,s10,https://placehold.co/310x390.png,,,inf,-inf,10,single value,1,1.23456789,True,82,-770,-87,974,249,250,830,235,0.923,0.74506456,0.9645204722702085,True,,2.0,,"multiple -lines string",2023-03-06,2023-07-09,[54],['o41' 'eoPni6' 'JDWYlgAAC'],b'\xad\xaeE3\x82)\xbfe',"[('tSW', 53)]","[('Dwn', 63)]","{'x': 29, 'y': 'm31'}","{'x': 67, 'y': 'uuP'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-03-06,2023-07-09,[54],['pDz' 'fOvz1d' 'OOdTXglHi'],b'\xad\xaeE3\x82)\xbfe',"[('JjW', 53)]","[('42c', 63)]","{'x': 29, 'y': 'p8K'}","{'x': 67, 'y': 'CY5'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 11,s11,https://placehold.co/311x389.png,,,inf,-inf,11,single value,1,1.23456789,True,86,-252,919,369,110,876,47,945,0.4658,0.054882616,0.7600940784380972,True,False,1.0,"multiple -lines string",c having special characters: !@#$%^&*(),2023-11-26,2023-02-04,[84 61],['TP9' 'gyv1pl' 'BArp5B1Id'],b'\xf6',"[('ENk', 43)]","[('Edw', 54)]","{'x': 32, 'y': 'nhN'}","{'x': 2, 'y': '4XO'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -12,s12,https://placehold.co/312x388.png,,,inf,-inf,12,single value,1,1.23456789,True,-54,678,-123,-260,143,4,572,333,0.481,0.4551437,0.44229876238091026,True,False,3.0,emoji 🤣,,2023-12-07,2023-05-27,[24 22 23],['9Z8' '50kEny' 'dx9qWCA79'],b'\xb2\x82\x86\x11\xedaO\xc5',"[('Naq', 97)]","[('cm4', 19)]","{'x': 11, 'y': 'ukr'}","{'x': 6, 'y': 'DM3'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",c having special characters: !@#$%^&*(),2023-11-26,2023-02-04,[84 61],['lC2' 'eY1gOH' 'afUozD13k'],b'\xf6',"[('WiA', 43)]","[('Og8', 54)]","{'x': 32, 'y': 'QQj'}","{'x': 2, 'y': 'dGJ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +12,s12,https://placehold.co/312x388.png,,,inf,-inf,12,single value,1,1.23456789,True,-54,678,-123,-260,143,4,572,333,0.481,0.4551437,0.44229876238091026,True,False,3.0,emoji 🤣,,2023-12-07,2023-05-27,[24 22 23],['ay5' 'WrRTWP' 'ElndTdtdD'],b'\xb2\x82\x86\x11\xedaO\xc5',"[('AAD', 97)]","[('NqT', 19)]","{'x': 11, 'y': 'VpE'}","{'x': 6, 'y': 'QIb'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 13,s13,https://placehold.co/313x387.png,,,inf,-inf,13,single value,1,1.23456789,True,74,194,-663,497,116,118,336,884,0.9185,0.5224346,0.31195199049513045,False,True,1.0,"multiple -lines string",,2023-01-05,2023-01-30,[20 53 17 35],['ISj' 's8JHUd' 'KF0j7elKP'],b'\xfc\xa9\xca4\x85q\x9e\x95j',"[('VkV', 31)]","[('wDC', 62)]","{'x': 26, 'y': 'hWa'}","{'x': 90, 'y': 'HuW'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -14,s14,https://placehold.co/314x386.png,,,inf,-inf,14,single value,1,1.23456789,True,-41,-460,729,-884,68,800,25,375,0.587,0.6445466,0.32074274043812745,False,True,2.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-01-02,2023-11-30,[72 52 29],['oh3' 'pKMzKG' '5mSoyPstU'],b'\xbb',"[('EVf', 96)]","[('c8u', 21)]","{'x': 20, 'y': 'cWD'}","{'x': 70, 'y': 'zUZ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -15,s15,https://placehold.co/315x385.png,,,inf,-inf,15,single value,1,1.23456789,True,-12,59,-179,853,98,373,803,458,0.03284,0.65016735,0.724422672614117,False,False,1.0,emoji 🤣,emoji 🤣,2023-01-22,2023-03-25,[31 66],['eC9' '9enq52' '2wjZRL9Oa'],b'$j\x1d\xdc\x88R',"[('MNz', 56)]","[('RGZ', 17)]","{'x': 28, 'y': 'Kxf'}","{'x': 40, 'y': 'sSt'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -16,s16,https://placehold.co/316x384.png,,,inf,-inf,16,single value,1,1.23456789,True,-29,-476,186,-210,139,64,256,136,0.9126,0.36469725,0.7458370120309643,False,,2.0,c having special characters: !@#$%^&*(),a with space,2023-04-22,2023-10-08,[78 40 62 22],['YsP' '6ihgIq' 'LSmNqE40f'],,"[('7xc', 26)]",,"{'x': 61, 'y': 'jfM'}","{'x': 41, 'y': 'HmQ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-01-05,2023-01-30,[20 53 17 35],['5Gd' 'F0ee1z' '6JJcfOJtq'],b'\xfc\xa9\xca4\x85q\x9e\x95j',"[('aHT', 31)]","[('JJx', 62)]","{'x': 26, 'y': 'Qu8'}","{'x': 90, 'y': 'Ju4'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +14,s14,https://placehold.co/314x386.png,,,inf,-inf,14,single value,1,1.23456789,True,-41,-460,729,-884,68,800,25,375,0.587,0.6445466,0.32074274043812745,False,True,2.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-01-02,2023-11-30,[72 52 29],['Ptq' 'iOC56a' 'MIgHFivep'],b'\xbb',"[('63U', 96)]","[('xK3', 21)]","{'x': 20, 'y': 'Vdw'}","{'x': 70, 'y': 'Xej'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +15,s15,https://placehold.co/315x385.png,,,inf,-inf,15,single value,1,1.23456789,True,-12,59,-179,853,98,373,803,458,0.03284,0.65016735,0.724422672614117,False,False,1.0,emoji 🤣,emoji 🤣,2023-01-22,2023-03-25,[31 66],['rBH' 's8YGPI' '5g2q3Ujrn'],b'$j\x1d\xdc\x88R',"[('Gba', 56)]","[('ep8', 17)]","{'x': 28, 'y': 'jHg'}","{'x': 40, 'y': '0vx'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +16,s16,https://placehold.co/316x384.png,,,inf,-inf,16,single value,1,1.23456789,True,-29,-476,186,-210,139,64,256,136,0.9126,0.36469725,0.7458370120309643,False,,2.0,c having special characters: !@#$%^&*(),a with space,2023-04-22,2023-10-08,[78 40 62 22],['vQ0' 'Fp4dNZ' 'cui8kBRIg'],,"[('To2', 26)]",,"{'x': 61, 'y': 'EtI'}","{'x': 41, 'y': 'HkL'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 17,s17,https://placehold.co/317x383.png,,,inf,-inf,17,single value,1,1.23456789,True,-25,183,743,150,24,145,7,929,0.2482,0.5606772,0.20035914354871265,True,True,1.0,emoji 🤣,"multiple -lines string",2023-02-26,2023-12-10,[31 56 99 32],['Ara' 'VNqTIA' 'ae24HZKjh'],b'\xbc\xe1',"[('mxa', 64)]",,"{'x': 1, 'y': '59M'}","{'x': 49, 'y': 'X3v'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -18,s18,https://placehold.co/318x382.png,,,inf,-inf,18,single value,1,1.23456789,True,23,862,-44,416,179,223,624,587,0.5776,0.48106188,0.868122813490531,False,,2.0,emoji 🤣,emoji 🤣,2023-03-07,2023-09-27,[55 27],['t3X' '13npgW' '2zMj518Y2'],b'\xf9Gwm\xa7\xc2',"[('tZl', 41)]","[('ZqH', 86)]","{'x': 43, 'y': 'dNR'}","{'x': 36, 'y': '8rb'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -19,s19,https://placehold.co/319x381.png,,,inf,-inf,19,single value,1,1.23456789,True,2,722,704,931,122,238,866,994,0.1655,0.8849984,0.7149240402022476,False,,2.0,c having special characters: !@#$%^&*(),a with space,2023-11-26,2023-06-03,[36 55 64 64],['bTu' '5X1YqW' 'g21nYCsXo'],b'Ne\xb3\xc8[',"[('PMp', 10)]","[('kOw', 42)]","{'x': 2, 'y': 'Xho'}","{'x': 80, 'y': '8M0'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -20,s20,https://placehold.co/320x380.png,,,inf,-inf,20,single value,1,1.23456789,True,21,266,-840,12,212,176,252,546,0.03387,0.53026515,0.5627502863433826,True,False,1.0,,emoji 🤣,2023-04-08,2023-04-12,[28 73 59],['blu' '17rNy8' 'H6h8l7qgA'],b'\xff)\xfc\xc8\x8a\xb4',"[('Qvh', 94)]","[('OZG', 92)]","{'x': 81, 'y': '8WU'}","{'x': 4, 'y': 'JyK'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-02-26,2023-12-10,[31 56 99 32],['6Qj' 'cwIAcw' '58cwQPvI2'],b'\xbc\xe1',"[('tgF', 64)]",,"{'x': 1, 'y': 'Nv3'}","{'x': 49, 'y': 'lhW'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +18,s18,https://placehold.co/318x382.png,,,inf,-inf,18,single value,1,1.23456789,True,23,862,-44,416,179,223,624,587,0.5776,0.48106188,0.868122813490531,False,,2.0,emoji 🤣,emoji 🤣,2023-03-07,2023-09-27,[55 27],['8U5' 'okXkzl' '5WzPTpjRx'],b'\xf9Gwm\xa7\xc2',"[('sec', 41)]","[('nzY', 86)]","{'x': 43, 'y': 'Tbx'}","{'x': 36, 'y': 't1S'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +19,s19,https://placehold.co/319x381.png,,,inf,-inf,19,single value,1,1.23456789,True,2,722,704,931,122,238,866,994,0.1655,0.8849984,0.7149240402022476,False,,2.0,c having special characters: !@#$%^&*(),a with space,2023-11-26,2023-06-03,[36 55 64 64],['cDm' '4vY2nO' 'yreVvFQ0u'],b'Ne\xb3\xc8[',"[('6CG', 10)]","[('vX3', 42)]","{'x': 2, 'y': 'Spc'}","{'x': 80, 'y': 'qf2'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +20,s20,https://placehold.co/320x380.png,,,inf,-inf,20,single value,1,1.23456789,True,21,266,-840,12,212,176,252,546,0.03387,0.53026515,0.5627502863433826,True,False,1.0,,emoji 🤣,2023-04-08,2023-04-12,[28 73 59],['b2q' 'J8cKvW' 'B9h3lcBGY'],b'\xff)\xfc\xc8\x8a\xb4',"[('GAQ', 94)]","[('a2B', 92)]","{'x': 81, 'y': 'RIH'}","{'x': 4, 'y': 'xZs'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 21,s21,https://placehold.co/321x379.png,,,inf,-inf,21,single value,1,1.23456789,True,-76,109,603,664,227,778,691,512,0.3115,0.44103217,0.4715324601025127,True,False,3.0,a with space,"multiple -lines string",2023-05-24,2023-08-03,[42 94 90],['TtL' 'FxJpRa' '5HSUPwePu'],b'\xd5|\x19\x97',"[('xKk', 31)]","[('x4G', 51)]","{'x': 36, 'y': 'XBl'}","{'x': 2, 'y': '1UR'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-05-24,2023-08-03,[42 94 90],['Q6T' 'mA65MP' 'h3FPuRIlP'],b'\xd5|\x19\x97',"[('i9E', 31)]","[('oFr', 51)]","{'x': 36, 'y': 'EJH'}","{'x': 2, 'y': 'Gkx'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 22,s22,https://placehold.co/322x378.png,,,inf,-inf,22,single value,1,1.23456789,True,-127,819,-200,81,52,852,718,295,0.7803,0.40448546,0.5432328057899581,False,False,,"multiple -lines string",,2023-05-05,2023-05-30,[37],['t0S' 'stzysh' 'A6P3MsHar'],b'Wh?\x07C\x1f',"[('Zss', 84)]","[('v1E', 35)]","{'x': 58, 'y': 'Qwi'}","{'x': 61, 'y': 'tbz'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -23,s23,https://placehold.co/323x377.png,,,inf,-inf,23,single value,1,1.23456789,True,-41,-423,-603,-367,150,281,302,319,0.2776,0.57242775,0.15924573827926447,False,False,3.0,emoji 🤣,,2023-06-16,2023-03-24,[33 47 55 75],['AJO' 'CBnD3X' 'kfFNuYUPn'],b'6',"[('TKu', 22)]","[('DLF', 18)]","{'x': 10, 'y': '3EB'}","{'x': 13, 'y': 'EoC'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-05-05,2023-05-30,[37],['xUk' 'JzZsnW' 'LtBPFX7TO'],b'Wh?\x07C\x1f',"[('Uk4', 84)]","[('jjL', 35)]","{'x': 58, 'y': 'uD1'}","{'x': 61, 'y': 'cmf'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +23,s23,https://placehold.co/323x377.png,,,inf,-inf,23,single value,1,1.23456789,True,-41,-423,-603,-367,150,281,302,319,0.2776,0.57242775,0.15924573827926447,False,False,3.0,emoji 🤣,,2023-06-16,2023-03-24,[33 47 55 75],['rPM' 'f7otYj' 'c9LVC2JSx'],b'6',"[('Ybn', 22)]","[('YOz', 18)]","{'x': 10, 'y': 'L1j'}","{'x': 13, 'y': 'FX4'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 24,s24,https://placehold.co/324x376.png,,,inf,-inf,24,single value,1,1.23456789,True,107,-319,300,-488,143,62,638,917,0.2201,0.80397695,0.2037012492762742,True,True,1.0,"multiple lines string","multiple -lines string",2023-03-27,2023-04-20,[ 3 49 68],['mbp' 'D0ezNm' 'REpOaUVgA'],b'\xf1v\xb9\xa7x\xa0',"[('39v', 85)]","[('ike', 78)]","{'x': 81, 'y': 'sRl'}","{'x': 60, 'y': '6ns'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -25,s25,https://placehold.co/325x375.png,,,inf,-inf,25,single value,1,1.23456789,True,29,-444,-185,774,56,216,55,571,0.2126,0.5384015,0.09116449040619168,False,True,3.0,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-03-17,2023-10-02,[58 66 74 44],['k7G' 'dp0CXP' '9K63LSFZH'],b'T5\xa4\x1c\xef\x13',"[('3wl', 36)]","[('Nnl', 8)]","{'x': 97, 'y': 'lvT'}","{'x': 16, 'y': 'gWW'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-03-27,2023-04-20,[ 3 49 68],['yjQ' '312WnX' 'RCI4hiCGI'],b'\xf1v\xb9\xa7x\xa0',"[('9nb', 85)]","[('uhP', 78)]","{'x': 81, 'y': 'GBY'}","{'x': 60, 'y': 'jvD'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +25,s25,https://placehold.co/325x375.png,,,inf,-inf,25,single value,1,1.23456789,True,29,-444,-185,774,56,216,55,571,0.2126,0.5384015,0.09116449040619168,False,True,3.0,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-03-17,2023-10-02,[58 66 74 44],['tUB' 'Y3A4Bj' '1BU0rWEoB'],b'T5\xa4\x1c\xef\x13',"[('FhS', 36)]","[('DKO', 8)]","{'x': 97, 'y': 'HCW'}","{'x': 16, 'y': '2tu'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 26,s26,https://placehold.co/326x374.png,,,inf,-inf,26,single value,1,1.23456789,True,-91,597,939,-199,38,853,725,831,0.515,0.6616552,0.15365803816111268,True,False,2.0,"multiple -lines string",emoji 🤣,2023-12-10,2023-07-20,[45 63 90],,b'\xc9',"[('64z', 53)]","[('wSh', 49)]","{'x': 21, 'y': 'rZ4'}","{'x': 22, 'y': '4Bb'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -27,s27,https://placehold.co/327x373.png,,,inf,-inf,27,single value,1,1.23456789,True,1,976,527,119,108,826,525,348,0.9756,0.7378558,0.45369363460528267,True,True,,c having special characters: !@#$%^&*(),emoji 🤣,2023-10-21,2023-10-11,[ 5 58],['3UD' 'qpNVGM' 'rerqtHioR'],b'\xc6y',"[('oTi', 48)]","[('oYS', 19)]","{'x': 5, 'y': 'Iej'}","{'x': 77, 'y': 'DFl'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-12-10,2023-07-20,[45 63 90],,b'\xc9',"[('XxN', 53)]","[('zph', 49)]","{'x': 21, 'y': 'FT2'}","{'x': 22, 'y': 'Vg8'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +27,s27,https://placehold.co/327x373.png,,,inf,-inf,27,single value,1,1.23456789,True,1,976,527,119,108,826,525,348,0.9756,0.7378558,0.45369363460528267,True,True,,c having special characters: !@#$%^&*(),emoji 🤣,2023-10-21,2023-10-11,[ 5 58],['Sou' '3ejxjn' 'zuCdZyV6b'],b'\xc6y',"[('VMK', 48)]","[('KiF', 19)]","{'x': 5, 'y': 'MwM'}","{'x': 77, 'y': 'G9m'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 28,s28,https://placehold.co/328x372.png,,,inf,-inf,28,single value,1,1.23456789,True,63,12,919,661,180,794,473,839,0.459,0.5201681,0.5303543937282561,True,False,1.0,"multiple -lines string",,2023-02-28,2023-06-22,[29],['Rdz' 'HzmA4K' 'R1VxavU07'],b'R>:r',"[('TKk', 10)]","[('DDn', 74)]","{'x': 56, 'y': 'sqw'}","{'x': 78, 'y': '5TG'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -29,s29,https://placehold.co/329x371.png,,,inf,-inf,29,single value,1,1.23456789,True,59,-355,415,141,41,688,27,778,0.557,0.42681706,0.017861892478319374,True,,1.0,a with space,c having special characters: !@#$%^&*(),2023-05-18,2023-11-23,[36 41],['zUH' 'LnnBbu' 'QzkChMbyI'],b'\x80\xf4\t\x02\xc3',"[('wOc', 20)]","[('jZb', 57)]","{'x': 15, 'y': 'aNx'}","{'x': 14, 'y': 'Wi2'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -30,s30,https://placehold.co/330x370.png,,,inf,-inf,30,single value,1,1.23456789,True,-108,-205,158,-441,185,460,982,872,0.861,0.87666535,0.7967978278640275,False,,1.0,a with space,,2023-04-09,2023-07-25,[86 5 67],['bNi' 'CdxnuV' 'xUZpfbH9v'],b'\xe9R\xaa\x8d\x16\x0e\x1a\x89',"[('2pH', 62)]",,"{'x': 38, 'y': 'lb1'}","{'x': 7, 'y': 'Y6P'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -31,s31,https://placehold.co/331x369.png,,,inf,-inf,31,single value,1,1.23456789,True,32,51,218,624,166,928,77,228,0.535,0.4175061,0.2941679733434779,True,,,a with space,c having special characters: !@#$%^&*(),2023-07-11,2023-03-04,[28],['OWO' 'U6mbjh' 'PInRVkLUh'],b'W\x0fe\xdf',"[('d9P', 27)]","[('cJj', 76)]","{'x': 91, 'y': 'WoS'}","{'x': 61, 'y': 'iSC'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -32,s32,https://placehold.co/332x368.png,,,inf,-inf,32,single value,1,1.23456789,True,75,643,-600,-513,141,609,215,269,0.1844,0.46194285,0.9118360349599111,True,False,2.0,a with space,,2023-08-31,2023-03-14,[16 95 21],['Y7g' 'btP7yS' 'eQMgV0Lh8'],b'-\xb7O7\x1f\n\xee',"[('ObQ', 5)]","[('NcJ', 94)]","{'x': 48, 'y': 'OHy'}","{'x': 97, 'y': 'SGa'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -33,s33,https://placehold.co/333x367.png,,,inf,-inf,33,single value,1,1.23456789,True,-71,579,-361,260,222,104,385,827,0.2996,0.9903413,0.9675112636137777,False,,1.0,a with space,emoji 🤣,2023-11-15,2023-09-08,[48],,b'#f\xa5Sm',"[('zxH', 27)]","[('dql', 18)]","{'x': 44, 'y': 'GEI'}","{'x': 95, 'y': '5QK'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -34,s34,https://placehold.co/334x366.png,,,inf,-inf,34,single value,1,1.23456789,True,-107,363,56,908,121,98,364,797,0.31,0.00023752358,0.18545887467665434,True,True,3.0,a with space,emoji 🤣,2023-02-18,2023-05-04,[85],['WvA' 'wFv0Yg' '7NZRBT7qY'],b'O+V;`xV',"[('DjR', 36)]","[('7LI', 30)]","{'x': 68, 'y': 'MuN'}","{'x': 93, 'y': 'fCc'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -35,s35,https://placehold.co/335x365.png,,,inf,-inf,35,single value,1,1.23456789,True,124,821,-313,-104,132,510,665,290,0.3972,0.1854729,0.46209729076566064,False,,1.0,c having special characters: !@#$%^&*(),,2023-02-01,2023-05-01,[50 2 41],['HDB' 'Tq0Zf2' 'pCLxb0lnX'],b'\x05D\xe0\x13\xf2\xbb\xa9\x8dl',"[('NsP', 67)]","[('bSP', 56)]","{'x': 41, 'y': 'gGe'}","{'x': 12, 'y': 'GOt'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -36,s36,https://placehold.co/336x364.png,,,inf,-inf,36,single value,1,1.23456789,True,107,981,-541,295,162,384,525,724,0.4268,0.38396388,0.0012318351664258875,False,,1.0,emoji 🤣,a with space,2023-10-04,2023-10-02,[50],['v2R' 'ra6fSE' 'VQOEXfnQs'],b'\xa8\x89\x87\x85uj',"[('PqL', 48)]","[('rfB', 30)]","{'x': 58, 'y': 'Zi2'}","{'x': 61, 'y': 'Jt3'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-02-28,2023-06-22,[29],['2JD' '6sy3ZH' 'TX3EqEyPX'],b'R>:r',"[('cgZ', 10)]","[('3jk', 74)]","{'x': 56, 'y': 'td7'}","{'x': 78, 'y': 'cy1'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +29,s29,https://placehold.co/329x371.png,,,inf,-inf,29,single value,1,1.23456789,True,59,-355,415,141,41,688,27,778,0.557,0.42681706,0.017861892478319374,True,,1.0,a with space,c having special characters: !@#$%^&*(),2023-05-18,2023-11-23,[36 41],['S05' '8H4KPf' 'A1lquCu2r'],b'\x80\xf4\t\x02\xc3',"[('chB', 20)]","[('5Gz', 57)]","{'x': 15, 'y': 'YlQ'}","{'x': 14, 'y': 'htc'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +30,s30,https://placehold.co/330x370.png,,,inf,-inf,30,single value,1,1.23456789,True,-108,-205,158,-441,185,460,982,872,0.861,0.87666535,0.7967978278640275,False,,1.0,a with space,,2023-04-09,2023-07-25,[86 5 67],['6AZ' 'DUd7ne' '7cbp0MoDh'],b'\xe9R\xaa\x8d\x16\x0e\x1a\x89',"[('hpR', 62)]",,"{'x': 38, 'y': 'Vjr'}","{'x': 7, 'y': '02u'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +31,s31,https://placehold.co/331x369.png,,,inf,-inf,31,single value,1,1.23456789,True,32,51,218,624,166,928,77,228,0.535,0.4175061,0.2941679733434779,True,,,a with space,c having special characters: !@#$%^&*(),2023-07-11,2023-03-04,[28],['6Cp' 'wL7SWk' 'tJ5J4x6mK'],b'W\x0fe\xdf',"[('mQa', 27)]","[('8N2', 76)]","{'x': 91, 'y': 'ztf'}","{'x': 61, 'y': '3gV'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +32,s32,https://placehold.co/332x368.png,,,inf,-inf,32,single value,1,1.23456789,True,75,643,-600,-513,141,609,215,269,0.1844,0.46194285,0.9118360349599111,True,False,2.0,a with space,,2023-08-31,2023-03-14,[16 95 21],['ZpR' 'sQXXJc' 'HPeOaAEAw'],b'-\xb7O7\x1f\n\xee',"[('AgG', 5)]","[('TY6', 94)]","{'x': 48, 'y': 'Oc6'}","{'x': 97, 'y': 'UbV'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +33,s33,https://placehold.co/333x367.png,,,inf,-inf,33,single value,1,1.23456789,True,-71,579,-361,260,222,104,385,827,0.2996,0.9903413,0.9675112636137777,False,,1.0,a with space,emoji 🤣,2023-11-15,2023-09-08,[48],,b'#f\xa5Sm',"[('MRz', 27)]","[('nLD', 18)]","{'x': 44, 'y': 'lbg'}","{'x': 95, 'y': 'Nnm'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +34,s34,https://placehold.co/334x366.png,,,inf,-inf,34,single value,1,1.23456789,True,-107,363,56,908,121,98,364,797,0.31,0.00023752358,0.18545887467665434,True,True,3.0,a with space,emoji 🤣,2023-02-18,2023-05-04,[85],['3Cj' 'kGOM5W' 'CZKtp5rBU'],b'O+V;`xV',"[('3FM', 36)]","[('Dnz', 30)]","{'x': 68, 'y': 'lbN'}","{'x': 93, 'y': 'rHV'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +35,s35,https://placehold.co/335x365.png,,,inf,-inf,35,single value,1,1.23456789,True,124,821,-313,-104,132,510,665,290,0.3972,0.1854729,0.46209729076566064,False,,1.0,c having special characters: !@#$%^&*(),,2023-02-01,2023-05-01,[50 2 41],['JPu' 'EuEvqr' 'K2IGlozIo'],b'\x05D\xe0\x13\xf2\xbb\xa9\x8dl',"[('rWE', 67)]","[('iKV', 56)]","{'x': 41, 'y': 'yEM'}","{'x': 12, 'y': 'Pqj'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +36,s36,https://placehold.co/336x364.png,,,inf,-inf,36,single value,1,1.23456789,True,107,981,-541,295,162,384,525,724,0.4268,0.38396388,0.0012318351664258875,False,,1.0,emoji 🤣,a with space,2023-10-04,2023-10-02,[50],['DSB' 'bszpPw' 'Iv9IvCtoS'],b'\xa8\x89\x87\x85uj',"[('LWZ', 48)]","[('MFk', 30)]","{'x': 58, 'y': 'Kdn'}","{'x': 61, 'y': 'h7I'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 37,s37,https://placehold.co/337x363.png,,,inf,-inf,37,single value,1,1.23456789,True,-40,354,-46,212,214,404,698,164,0.8,0.9325899,0.598327265122427,False,,1.0,"multiple -lines string",,2023-01-20,2023-04-30,[45],['KDG' 'AUuRqp' 'hlhHVlnES'],b'\xd0)\x81\xd6K\x98C',"[('iZg', 57)]","[('91k', 52)]","{'x': 38, 'y': 'mEg'}","{'x': 77, 'y': 'tlr'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -38,s38,https://placehold.co/338x362.png,,,inf,-inf,38,single value,1,1.23456789,True,-80,663,906,-297,220,822,311,4,0.3494,0.070029706,0.6073064482626712,True,True,1.0,a with space,,2023-06-03,2023-11-13,[43],['8Gr' 'gmolaH' 'r8IRh1E2J'],b'\x9d\xb9\x1d',"[('Shh', 57)]","[('ZLX', 58)]","{'x': 70, 'y': 'JZO'}","{'x': 97, 'y': 'tBh'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -39,s39,https://placehold.co/339x361.png,,,inf,-inf,39,single value,1,1.23456789,True,90,529,-531,470,234,517,882,850,0.4683,0.009485434,0.24753995560337516,False,False,2.0,c having special characters: !@#$%^&*(),,2023-03-09,2023-06-13,[ 0 91 62 23],['DBl' 'd6DYye' 'NdjIs9hVL'],b'\xc8\xe9\xc2K\x1c\xb5',"[('gmm', 99)]","[('YlO', 1)]","{'x': 2, 'y': 'GRp'}","{'x': 70, 'y': 'jqa'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-01-20,2023-04-30,[45],['tU6' 'QlTrKV' 'L8ZswsRhc'],b'\xd0)\x81\xd6K\x98C',"[('8wz', 57)]","[('Q5K', 52)]","{'x': 38, 'y': 'Sa5'}","{'x': 77, 'y': 'gHI'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +38,s38,https://placehold.co/338x362.png,,,inf,-inf,38,single value,1,1.23456789,True,-80,663,906,-297,220,822,311,4,0.3494,0.070029706,0.6073064482626712,True,True,1.0,a with space,,2023-06-03,2023-11-13,[43],['ds6' 'NUgarD' 'v7p1heEJQ'],b'\x9d\xb9\x1d',"[('jH4', 57)]","[('exi', 58)]","{'x': 70, 'y': 'O5Z'}","{'x': 97, 'y': 'q6X'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +39,s39,https://placehold.co/339x361.png,,,inf,-inf,39,single value,1,1.23456789,True,90,529,-531,470,234,517,882,850,0.4683,0.009485434,0.24753995560337516,False,False,2.0,c having special characters: !@#$%^&*(),,2023-03-09,2023-06-13,[ 0 91 62 23],['jY6' 'fpIzKM' 'Wx4sKAJd7'],b'\xc8\xe9\xc2K\x1c\xb5',"[('QDo', 99)]","[('bG4', 1)]","{'x': 2, 'y': 'DNw'}","{'x': 70, 'y': 'Jkt'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 40,s40,https://placehold.co/340x360.png,,,inf,-inf,40,single value,1,1.23456789,True,-70,371,398,-420,74,475,6,378,0.625,0.052683838,0.5584126725831979,False,True,3.0,c having special characters: !@#$%^&*(),"multiple -lines string",2023-08-02,2023-10-13,[97],['XnG' 'BB19sM' 'LT6mnOjke'],b'\x8c\x8a\xe3-\x9fZ\xd0',"[('qGm', 82)]","[('qSv', 87)]","{'x': 91, 'y': 'wLe'}","{'x': 30, 'y': 'MFm'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -41,s41,https://placehold.co/341x359.png,,,inf,-inf,41,single value,1,1.23456789,True,126,496,45,-211,145,976,2,77,0.3777,0.08854341,0.22554014244373544,True,False,2.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-05-23,2023-09-22,[16 98 81],['aBK' 'soRRCQ' '5WMO5AHO4'],"b',\xd4\xfam\x90\x15P'","[('Rsc', 98)]","[('CKo', 15)]","{'x': 34, 'y': '5mE'}","{'x': 24, 'y': 'vti'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -42,s42,https://placehold.co/342x358.png,,,inf,-inf,42,single value,1,1.23456789,True,41,254,-251,-140,238,708,622,409,0.8364,0.037596773,0.16082546907819006,False,False,3.0,emoji 🤣,,2023-08-20,2023-11-16,[23],['Zek' 'tUJrhQ' 'R6FEecAtp'],b'\xc1Q\xff\xb7\xe4',"[('Em5', 55)]","[('xgm', 38)]","{'x': 37, 'y': '3eX'}","{'x': 7, 'y': 'Rrp'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-08-02,2023-10-13,[97],['gVM' 'qfoIjz' 'QDcrr1eoq'],b'\x8c\x8a\xe3-\x9fZ\xd0',"[('afg', 82)]","[('QZL', 87)]","{'x': 91, 'y': 'U3Y'}","{'x': 30, 'y': '3Hd'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +41,s41,https://placehold.co/341x359.png,,,inf,-inf,41,single value,1,1.23456789,True,126,496,45,-211,145,976,2,77,0.3777,0.08854341,0.22554014244373544,True,False,2.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-05-23,2023-09-22,[16 98 81],['XKX' 'mhnjqi' 'dXKZ5BDsy'],"b',\xd4\xfam\x90\x15P'","[('JE6', 98)]","[('l3L', 15)]","{'x': 34, 'y': 'XdM'}","{'x': 24, 'y': 'b4d'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +42,s42,https://placehold.co/342x358.png,,,inf,-inf,42,single value,1,1.23456789,True,41,254,-251,-140,238,708,622,409,0.8364,0.037596773,0.16082546907819006,False,False,3.0,emoji 🤣,,2023-08-20,2023-11-16,[23],['qHB' 'L3TLbo' 'P1KbVYJVk'],b'\xc1Q\xff\xb7\xe4',"[('WeS', 55)]","[('2GU', 38)]","{'x': 37, 'y': 'GTZ'}","{'x': 7, 'y': 'xfy'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 43,s43,https://placehold.co/343x357.png,,,inf,-inf,43,single value,1,1.23456789,True,91,-811,693,-754,75,862,918,573,0.5874,0.47978133,0.6515194668022647,False,,1.0,"multiple -lines string",c having special characters: !@#$%^&*(),2023-08-01,2023-06-10,[84],['f7Z' 'J69Pqc' 'UDO4lKNEf'],b']6',"[('uaP', 0)]","[('1FA', 87)]","{'x': 18, 'y': 'dI6'}","{'x': 1, 'y': 'eMv'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -44,s44,https://placehold.co/344x356.png,,,inf,-inf,44,single value,1,1.23456789,True,59,248,-963,986,8,644,749,131,0.294,0.5807572,0.3259254639520749,False,False,,emoji 🤣,,2023-03-20,2023-11-04,[16],['vuP' '1uRr6Y' 'ICtu8zF9O'],b'\x9d',"[('4ZP', 47)]","[('jfD', 84)]","{'x': 7, 'y': 'zwR'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",c having special characters: !@#$%^&*(),2023-08-01,2023-06-10,[84],['GBr' '9BY8Dz' 'tgjzEPyVc'],b']6',"[('4NC', 0)]","[('fO3', 87)]","{'x': 18, 'y': 'enG'}","{'x': 1, 'y': 'R3N'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +44,s44,https://placehold.co/344x356.png,,,inf,-inf,44,single value,1,1.23456789,True,59,248,-963,986,8,644,749,131,0.294,0.5807572,0.3259254639520749,False,False,,emoji 🤣,,2023-03-20,2023-11-04,[16],['fph' 'V1Za1C' 'dGMEBdqir'],b'\x9d',"[('8qd', 47)]","[('Ha6', 84)]","{'x': 7, 'y': 'gox'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 45,s45,https://placehold.co/345x355.png,,,inf,-inf,45,single value,1,1.23456789,True,79,408,-771,99,73,869,362,600,0.714,0.27168697,0.5902639388856225,False,True,2.0,,"multiple -lines string",2023-08-02,2023-03-30,[18 63],['Hzl' 'wUMVmI' '5BRh8LojI'],,"[('jfF', 62)]","[('McW', 25)]","{'x': 83, 'y': 'Zqc'}","{'x': 55, 'y': 'BiD'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -46,s46,https://placehold.co/346x354.png,,,inf,-inf,46,single value,1,1.23456789,True,-114,400,388,-847,185,770,750,748,0.528,0.3982874,0.4332467489716556,False,True,,c having special characters: !@#$%^&*(),emoji 🤣,2023-04-26,2023-05-22,[10 53],['If9' '4ChZES' 'FqZ8pIx5F'],b'\xcd[\xd5',"[('Sgp', 87)]","[('FhD', 11)]","{'x': 50, 'y': 'es6'}","{'x': 83, 'y': 'Pgd'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -47,s47,https://placehold.co/347x353.png,,,inf,-inf,47,single value,1,1.23456789,True,61,306,-438,679,235,436,507,41,0.5347,0.09169933,0.9843514074029039,True,False,2.0,,,2023-04-02,2023-07-22,[20 10 91 4],['21r' 'Wz5FYr' 'sK9EjHvIH'],b'\xa3\xab\xec',"[('o9s', 3)]",,"{'x': 44, 'y': '7gS'}","{'x': 21, 'y': 'AlK'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-08-02,2023-03-30,[18 63],['2Eb' 'NXStaz' 'n0h6Oj5sR'],,"[('Y20', 62)]","[('QAA', 25)]","{'x': 83, 'y': 'lOJ'}","{'x': 55, 'y': 'QBw'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +46,s46,https://placehold.co/346x354.png,,,inf,-inf,46,single value,1,1.23456789,True,-114,400,388,-847,185,770,750,748,0.528,0.3982874,0.4332467489716556,False,True,,c having special characters: !@#$%^&*(),emoji 🤣,2023-04-26,2023-05-22,[10 53],['zDD' 'CilLUi' 'eV0vWqaTZ'],b'\xcd[\xd5',"[('wPA', 87)]","[('2RA', 11)]","{'x': 50, 'y': '6II'}","{'x': 83, 'y': 'umV'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +47,s47,https://placehold.co/347x353.png,,,inf,-inf,47,single value,1,1.23456789,True,61,306,-438,679,235,436,507,41,0.5347,0.09169933,0.9843514074029039,True,False,2.0,,,2023-04-02,2023-07-22,[20 10 91 4],['JO1' 'BEuVx5' '18ox1ztD4'],b'\xa3\xab\xec',"[('h03', 3)]",,"{'x': 44, 'y': 'UVJ'}","{'x': 21, 'y': 'Ye5'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 48,s48,https://placehold.co/348x352.png,,,inf,-inf,48,single value,1,1.23456789,True,61,981,-563,458,144,22,273,88,0.4812,0.33637047,0.14958064266756577,False,,1.0,a with space,"multiple -lines string",2023-09-27,2023-11-05,[40 45 11 69],['Ctl' 'RJoWcU' 'RYxPY8EcF'],b'\xf6\x88\xc7\x0e.\x0ee',"[('Cgk', 26)]","[('iLZ', 91)]","{'x': 15, 'y': 'GlG'}","{'x': 15, 'y': 'KZR'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -49,s49,https://placehold.co/349x351.png,,,inf,-inf,49,single value,1,1.23456789,True,46,-368,799,-4,252,996,505,401,0.497,0.5225192,0.46459859663581016,False,,2.0,a with space,emoji 🤣,2023-06-17,2023-08-15,[25 47 51],['K12' 'BGCSzO' 'jD8uQO001'],b'u\xb8\xee',"[('csX', 15)]","[('3WO', 46)]","{'x': 8, 'y': 'pMl'}","{'x': 42, 'y': 'MtY'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -50,s50,https://placehold.co/350x350.png,,,inf,-inf,50,single value,1,1.23456789,True,61,-373,306,109,229,564,805,295,0.765,0.7322718,0.6804566263593252,True,True,1.0,emoji 🤣,,2023-02-27,2023-11-30,[54 99 74],['xtS' 'V2ceN5' '9UAgN2BR4'],b'G\xde\xc5\x9dj\xa9z\xfc',"[('tTf', 30)]","[('Gwc', 70)]","{'x': 76, 'y': 'Uzg'}","{'x': 57, 'y': 'SPH'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-09-27,2023-11-05,[40 45 11 69],['x9X' 'Oj7h7u' 'g0g4ai18e'],b'\xf6\x88\xc7\x0e.\x0ee',"[('aiO', 26)]","[('6DV', 91)]","{'x': 15, 'y': 'PRA'}","{'x': 15, 'y': 'VJf'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +49,s49,https://placehold.co/349x351.png,,,inf,-inf,49,single value,1,1.23456789,True,46,-368,799,-4,252,996,505,401,0.497,0.5225192,0.46459859663581016,False,,2.0,a with space,emoji 🤣,2023-06-17,2023-08-15,[25 47 51],['WqM' 'yeuPH7' 'M3EHMoQro'],b'u\xb8\xee',"[('u37', 15)]","[('vX4', 46)]","{'x': 8, 'y': 'gXI'}","{'x': 42, 'y': 'XRg'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +50,s50,https://placehold.co/350x350.png,,,inf,-inf,50,single value,1,1.23456789,True,61,-373,306,109,229,564,805,295,0.765,0.7322718,0.6804566263593252,True,True,1.0,emoji 🤣,,2023-02-27,2023-11-30,[54 99 74],['f8V' 'Rgksbu' 'dwApzQlkL'],b'G\xde\xc5\x9dj\xa9z\xfc',"[('qTx', 30)]","[('ZJA', 70)]","{'x': 76, 'y': 'FOH'}","{'x': 57, 'y': 'tNV'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 51,s51,https://placehold.co/351x349.png,,,inf,-inf,51,single value,1,1.23456789,True,-78,-28,-974,-304,6,676,738,839,0.10297,0.0033463622,0.3955450838799687,True,,2.0,"multiple -lines string",a with space,2023-10-11,2023-08-10,[22 14 26 74],['cXs' 'xjGJXk' 'e1Mo4iCpp'],b'\xbd',"[('Vc0', 13)]","[('GoX', 23)]","{'x': 70, 'y': 'NwC'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -52,s52,https://placehold.co/352x348.png,,,inf,-inf,52,single value,1,1.23456789,True,-21,768,-775,308,173,713,882,294,0.3345,0.46731076,0.9746998518706899,True,False,1.0,,a with space,2023-01-26,2023-02-10,[80 50 52],['aX3' 'QjBvKN' 'Ap0mxDoJJ'],b'I9I',"[('Pkw', 33)]","[('WxK', 18)]","{'x': 97, 'y': 'P2k'}","{'x': 38, 'y': '8UC'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",a with space,2023-10-11,2023-08-10,[22 14 26 74],['xQE' 'KoNCP3' 'CrHe69s7Q'],b'\xbd',"[('vhy', 13)]","[('pV4', 23)]","{'x': 70, 'y': 'L53'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +52,s52,https://placehold.co/352x348.png,,,inf,-inf,52,single value,1,1.23456789,True,-21,768,-775,308,173,713,882,294,0.3345,0.46731076,0.9746998518706899,True,False,1.0,,a with space,2023-01-26,2023-02-10,[80 50 52],['Cs9' '0gxwsR' 'bZya1W84U'],b'I9I',"[('CZQ', 33)]","[('fLH', 18)]","{'x': 97, 'y': 'I90'}","{'x': 38, 'y': 'D6i'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 53,s53,https://placehold.co/353x347.png,,,inf,-inf,53,single value,1,1.23456789,True,-74,282,300,997,140,457,14,615,0.0755,0.29700288,0.7218876279269351,False,False,1.0,"multiple -lines string",c having special characters: !@#$%^&*(),2023-03-07,2023-07-15,[91 50],['9s8' 'OrJQUd' 'LE4rXLvNM'],b'\x9c',"[('BM2', 23)]","[('TVR', 39)]","{'x': 23, 'y': 'lyu'}","{'x': 5, 'y': 'iY5'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -54,s54,https://placehold.co/354x346.png,,,inf,-inf,54,single value,1,1.23456789,True,115,382,-203,243,167,82,191,525,0.7534,0.8528218,0.6569838575644931,True,True,3.0,emoji 🤣,emoji 🤣,2023-09-05,2023-03-09,[ 3 6 34],['QSO' 'ZM4OtB' 'JTfsUkiH8'],b'\x8c\x90\xf3',"[('fYl', 72)]",,"{'x': 43, 'y': 'j9B'}","{'x': 88, 'y': 'DCQ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -55,s55,https://placehold.co/355x345.png,,,inf,-inf,55,single value,1,1.23456789,True,-65,-291,632,92,169,144,984,799,0.2722,0.71555334,0.7570592676112233,False,False,1.0,a with space,a with space,2023-09-11,2023-09-21,[71],['G4Z' 'pZDYUv' 'h7i71S87X'],b'\\\x10',"[('y7q', 63)]","[('giD', 66)]","{'x': 79, 'y': 'vt9'}","{'x': 19, 'y': 'SCo'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",c having special characters: !@#$%^&*(),2023-03-07,2023-07-15,[91 50],['Z3W' 'oXnlpU' 'VQigMcWcw'],b'\x9c',"[('DA2', 23)]","[('paU', 39)]","{'x': 23, 'y': 'zNZ'}","{'x': 5, 'y': '3pw'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +54,s54,https://placehold.co/354x346.png,,,inf,-inf,54,single value,1,1.23456789,True,115,382,-203,243,167,82,191,525,0.7534,0.8528218,0.6569838575644931,True,True,3.0,emoji 🤣,emoji 🤣,2023-09-05,2023-03-09,[ 3 6 34],['i4u' 'zmW2wF' 'qk467s1XD'],b'\x8c\x90\xf3',"[('kiT', 72)]",,"{'x': 43, 'y': 'uoH'}","{'x': 88, 'y': 'l4u'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +55,s55,https://placehold.co/355x345.png,,,inf,-inf,55,single value,1,1.23456789,True,-65,-291,632,92,169,144,984,799,0.2722,0.71555334,0.7570592676112233,False,False,1.0,a with space,a with space,2023-09-11,2023-09-21,[71],['eUn' 'PPy0If' 'yqhwUqxNx'],b'\\\x10',"[('80g', 63)]","[('aGG', 66)]","{'x': 79, 'y': 'xIU'}","{'x': 19, 'y': '1uE'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 56,s56,https://placehold.co/356x344.png,,,inf,-inf,56,single value,1,1.23456789,True,120,479,-717,70,136,84,630,690,0.8975,0.5891085,0.952648638038717,False,True,3.0,"multiple -lines string",,2023-02-13,2023-01-02,[80],['wXa' 'HCPPKY' '6gob2I4nd'],b'\xf4',"[('x0X', 82)]","[('o1r', 26)]","{'x': 55, 'y': 'uxV'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-02-13,2023-01-02,[80],['PDM' '6uLONC' 'ROhcc9hoH'],b'\xf4',"[('4DJ', 82)]","[('xmX', 26)]","{'x': 55, 'y': 'wC7'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 57,s57,https://placehold.co/357x343.png,,,inf,-inf,57,single value,1,1.23456789,True,2,434,-122,8,177,77,484,636,0.5264,0.27726564,0.9078186529846402,True,False,1.0,"multiple -lines string",emoji 🤣,2023-04-07,2023-12-27,[71 18 62 37],['Z4s' 'zi6sEg' '3iCPU6zUj'],b'\x7fJ\x91$W\xd3\xfd',"[('OXh', 4)]","[('2zl', 65)]","{'x': 49, 'y': 'ATL'}","{'x': 36, 'y': 'n1M'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -58,s58,https://placehold.co/358x342.png,,,inf,-inf,58,single value,1,1.23456789,True,100,-352,-41,-907,26,456,27,421,0.801,0.9103391,0.7242853081264119,True,True,,a with space,,2023-02-11,2023-05-05,[12],['zgE' 'z6cwB6' '1gQH8wylh'],b'\x0c\xd5A\x1dD\xe5P',"[('Rd6', 26)]","[('RWJ', 1)]","{'x': 80, 'y': 'InV'}","{'x': 68, 'y': '4yR'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -59,s59,https://placehold.co/359x341.png,,,inf,-inf,59,single value,1,1.23456789,True,-78,-683,504,773,121,877,713,864,0.979,0.045100678,0.7491616391012831,False,,1.0,,,2023-08-15,2023-04-20,[30],['0CP' 'NLbWph' 'JeVmn1uj3'],b'\x06\x14N',"[('jzK', 14)]","[('haO', 29)]","{'x': 77, 'y': '5p7'}","{'x': 65, 'y': 'PW2'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -60,s60,https://placehold.co/360x340.png,,,inf,-inf,60,single value,1,1.23456789,True,6,700,-548,-43,193,0,38,22,0.84,0.109467596,0.14592207403514545,True,False,,a with space,a with space,2023-09-19,2023-03-27,[95 21],['a1i' 'ipkOba' 'WoukdTGUD'],b'4cUk\xc0\x00\xc8',"[('XQl', 52)]","[('Qtw', 27)]","{'x': 22, 'y': 'ByT'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-04-07,2023-12-27,[71 18 62 37],['yx6' 'RHKT2O' 'ZM6rQnBow'],b'\x7fJ\x91$W\xd3\xfd',"[('BLW', 4)]","[('zgA', 65)]","{'x': 49, 'y': 'acr'}","{'x': 36, 'y': 'egD'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +58,s58,https://placehold.co/358x342.png,,,inf,-inf,58,single value,1,1.23456789,True,100,-352,-41,-907,26,456,27,421,0.801,0.9103391,0.7242853081264119,True,True,,a with space,,2023-02-11,2023-05-05,[12],['8w3' 'Ndr86Z' 'fnN8du9Wm'],b'\x0c\xd5A\x1dD\xe5P',"[('L12', 26)]","[('KqH', 1)]","{'x': 80, 'y': 'bi3'}","{'x': 68, 'y': '0rv'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +59,s59,https://placehold.co/359x341.png,,,inf,-inf,59,single value,1,1.23456789,True,-78,-683,504,773,121,877,713,864,0.979,0.045100678,0.7491616391012831,False,,1.0,,,2023-08-15,2023-04-20,[30],['ZIK' 'YoWWKr' '99HXg1iwW'],b'\x06\x14N',"[('T3D', 14)]","[('JL9', 29)]","{'x': 77, 'y': 'a9n'}","{'x': 65, 'y': 'JFz'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +60,s60,https://placehold.co/360x340.png,,,inf,-inf,60,single value,1,1.23456789,True,6,700,-548,-43,193,0,38,22,0.84,0.109467596,0.14592207403514545,True,False,,a with space,a with space,2023-09-19,2023-03-27,[95 21],['Kaq' 'hAhdBw' 'KCnMT4OsN'],b'4cUk\xc0\x00\xc8',"[('E3B', 52)]","[('ymI', 27)]","{'x': 22, 'y': 'tV6'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 61,s61,https://placehold.co/361x339.png,,,inf,-inf,61,single value,1,1.23456789,True,-108,248,19,11,4,50,952,574,0.867,0.39163014,0.10279240449266569,False,False,,"multiple -lines string",emoji 🤣,2023-06-16,2023-04-30,[66 53 9],['WFg' 'F6cW1G' 'C7dDyQE4e'],,"[('xwb', 46)]","[('jOp', 9)]","{'x': 68, 'y': '8KG'}","{'x': 63, 'y': 'CbD'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -62,s62,https://placehold.co/362x338.png,,,inf,-inf,62,single value,1,1.23456789,True,-56,842,852,-548,28,684,272,142,0.408,0.124437556,0.5709045018441643,True,True,1.0,,,2023-10-06,2023-05-07,[20 79],['fLe' 'rNHu9G' 'CLgR0OVSn'],b'\xfa\xe0Y\xac\xfc\xc6hy\x82',"[('QZ8', 94)]","[('1Aw', 39)]","{'x': 17, 'y': '9ss'}","{'x': 33, 'y': 'vCk'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-06-16,2023-04-30,[66 53 9],['b90' 'AgSB3t' 'jhMKSxLsF'],,"[('dOa', 46)]","[('IlI', 9)]","{'x': 68, 'y': 'Y4F'}","{'x': 63, 'y': 'SgI'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +62,s62,https://placehold.co/362x338.png,,,inf,-inf,62,single value,1,1.23456789,True,-56,842,852,-548,28,684,272,142,0.408,0.124437556,0.5709045018441643,True,True,1.0,,,2023-10-06,2023-05-07,[20 79],['AXh' 'O2I1A3' 'zZyTttp7Q'],b'\xfa\xe0Y\xac\xfc\xc6hy\x82',"[('1GU', 94)]","[('D9J', 39)]","{'x': 17, 'y': 'JJf'}","{'x': 33, 'y': 'esC'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 63,s63,https://placehold.co/363x337.png,,,inf,-inf,63,single value,1,1.23456789,True,38,257,-185,227,164,716,230,992,0.552,0.9564157,0.01836763694054,True,True,,,"multiple -lines string",2023-03-30,2023-09-12,[23],['Bov' 'CzfAPx' 'j5eZffTYI'],b'\xeaw\xce8\x9f',"[('i5h', 11)]","[('rQU', 41)]","{'x': 42, 'y': 'n1b'}","{'x': 37, 'y': 'VLh'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -64,s64,https://placehold.co/364x336.png,,,inf,-inf,64,single value,1,1.23456789,True,-111,-317,-342,-89,165,771,85,664,0.254,0.7979893,0.48235638155159155,True,False,3.0,a with space,a with space,2023-06-27,2023-07-02,[56 93],['KIu' 'hvPU1S' '8LvJnOng0'],b'5\x8f7\xbb\x9b\x9a3\xb9H',"[('zcq', 86)]","[('zWD', 79)]","{'x': 17, 'y': 'YQr'}","{'x': 96, 'y': 'gYX'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-03-30,2023-09-12,[23],['Dff' 'AUxid7' 'IPz26A4dr'],b'\xeaw\xce8\x9f',"[('Sn7', 11)]","[('Wyi', 41)]","{'x': 42, 'y': 'Cjq'}","{'x': 37, 'y': 'Kop'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +64,s64,https://placehold.co/364x336.png,,,inf,-inf,64,single value,1,1.23456789,True,-111,-317,-342,-89,165,771,85,664,0.254,0.7979893,0.48235638155159155,True,False,3.0,a with space,a with space,2023-06-27,2023-07-02,[56 93],['tgF' 'jD0vIh' 'roAIVMPIL'],b'5\x8f7\xbb\x9b\x9a3\xb9H',"[('2GQ', 86)]","[('1ho', 79)]","{'x': 17, 'y': '3pp'}","{'x': 96, 'y': 'jDe'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 65,s65,https://placehold.co/365x335.png,,,inf,-inf,65,single value,1,1.23456789,True,3,-337,539,-783,82,445,473,144,0.1962,0.25898266,0.2103495799188686,False,True,2.0,"multiple -lines string",a with space,2023-07-16,2023-01-16,,['wVJ' 'Y08YMN' 'b5ZqlRtva'],b'\\',"[('tRQ', 0)]","[('wIp', 56)]","{'x': 62, 'y': 'II5'}","{'x': 64, 'y': 'uOX'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -66,s66,https://placehold.co/366x334.png,,,inf,-inf,66,single value,1,1.23456789,True,-40,998,-454,-527,135,448,125,224,0.5054,0.5885542,0.34601656764483957,True,False,1.0,emoji 🤣,,2023-11-03,2023-03-03,[25 70 29 6],['1Jy' 'iNbUnA' 'vwSWJfdjM'],b'\xf2)/|ke\x9c \xb2',"[('VJJ', 65)]","[('tvR', 26)]","{'x': 50, 'y': 'jcw'}","{'x': 0, 'y': 'Hyz'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",a with space,2023-07-16,2023-01-16,,['OQb' 'qV5vli' 'OeT8fGxCj'],b'\\',"[('MAT', 0)]","[('W6g', 56)]","{'x': 62, 'y': 'sJJ'}","{'x': 64, 'y': 'mRA'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +66,s66,https://placehold.co/366x334.png,,,inf,-inf,66,single value,1,1.23456789,True,-40,998,-454,-527,135,448,125,224,0.5054,0.5885542,0.34601656764483957,True,False,1.0,emoji 🤣,,2023-11-03,2023-03-03,[25 70 29 6],['tu6' 'K2jUdf' 'BALznFvgQ'],b'\xf2)/|ke\x9c \xb2',"[('DPN', 65)]","[('FWX', 26)]","{'x': 50, 'y': 'neu'}","{'x': 0, 'y': '8Jv'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 67,s67,https://placehold.co/367x333.png,,,inf,-inf,67,single value,1,1.23456789,True,-69,850,215,-569,239,880,811,502,0.595,0.9823305,0.7758047357929561,False,,,"multiple -lines string",emoji 🤣,2023-09-24,2023-06-07,,['PqP' 'EBqUhA' 'rQEPcyLas'],b'\xcd\x02\x88s\x9c-\xb4',"[('8Pu', 20)]","[('T1O', 33)]","{'x': 31, 'y': 'iwK'}","{'x': 3, 'y': 'MH8'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -68,s68,https://placehold.co/368x332.png,,,inf,-inf,68,single value,1,1.23456789,True,-115,397,72,-660,108,487,536,961,0.3394,0.88419896,0.9412375042323865,False,True,1.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-09-25,2023-09-25,[0],['nip' 'uaUkxR' 'FZXe1cb51'],b'\xa8\xcf',"[('GRf', 48)]","[('UBR', 88)]","{'x': 95, 'y': 'oYf'}","{'x': 26, 'y': 'xvY'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -69,s69,https://placehold.co/369x331.png,,,inf,-inf,69,single value,1,1.23456789,True,113,695,535,-450,64,799,144,973,0.5693,0.6007984,0.0724162721463415,False,False,3.0,emoji 🤣,,2023-03-15,2023-02-04,,,b'\x8a\x10l',"[('Ppv', 84)]","[('kny', 39)]","{'x': 96, 'y': 'y4T'}","{'x': 31, 'y': 'KWA'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -70,s70,https://placehold.co/370x330.png,,,inf,-inf,70,single value,1,1.23456789,True,121,631,-984,635,85,33,524,820,0.8877,0.90372396,0.5342422059764451,False,,1.0,,,2023-01-08,2023-09-24,,['JJR' 'zhbuXM' 'Z5f0pKGyt'],b'\xe7\xa4\xb4\xcd\x91Z\xf8\x03\xb2',"[('Px0', 96)]","[('uIR', 89)]","{'x': 97, 'y': 'SXk'}","{'x': 54, 'y': 'WHo'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -71,s71,https://placehold.co/371x329.png,,,inf,-inf,71,single value,1,1.23456789,True,-120,495,195,312,243,347,211,615,0.5566,0.9891849,0.8825334858196,True,,1.0,emoji 🤣,,2023-10-24,2023-03-05,[72 0 35 34],,b'\xdf.',"[('I9d', 14)]",,"{'x': 25, 'y': 'ZQJ'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -72,s72,https://placehold.co/372x328.png,,,inf,-inf,72,single value,1,1.23456789,True,-39,256,243,277,144,94,24,103,0.7207,0.74335283,0.08250853444042128,False,False,,,emoji 🤣,2023-06-13,2023-02-19,[22 8 33 45],['vuk' 'FhF4vT' 'YYojmLVOk'],,"[('Nj0', 51)]",,"{'x': 79, 'y': '4Ks'}","{'x': 79, 'y': 'Pe5'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -73,s73,https://placehold.co/373x327.png,,,inf,-inf,73,single value,1,1.23456789,True,-76,715,-843,757,254,71,579,946,0.805,0.06498641,0.8245140468968338,False,True,3.0,,,2023-03-26,2023-09-12,[29 94 74 98],['VEU' 'VB5INM' '1MjeBsrdF'],b'g\x97:\xbe#)\xd3\xf7N',"[('01e', 24)]","[('Rj7', 19)]","{'x': 93, 'y': 'TJe'}","{'x': 87, 'y': 'JEK'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -74,s74,https://placehold.co/374x326.png,,,inf,-inf,74,single value,1,1.23456789,True,1,136,-524,-644,70,550,393,38,0.989,0.40158024,0.35780135092827137,True,False,2.0,emoji 🤣,a with space,2023-03-13,2023-05-29,[59 76],['tCd' 'Ze11MF' 'CIX3BYOtD'],"b'0,Q\xfb\xac\x92\xf8\x12Q'","[('Eo8', 4)]","[('afj', 65)]","{'x': 68, 'y': 'dVv'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -75,s75,https://placehold.co/375x325.png,,,inf,-inf,75,single value,1,1.23456789,True,-45,853,69,-978,216,153,66,946,0.603,0.8378257,0.32209470221933534,False,,2.0,,c having special characters: !@#$%^&*(),2023-02-24,2023-11-21,[44 60],['jdg' '3vSFkp' 'BBGjxrzuL'],b'N\t\xf8n\x13\xc2',"[('dnN', 46)]","[('5Ad', 35)]","{'x': 81, 'y': 'Yz1'}","{'x': 17, 'y': 'CIY'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-09-24,2023-06-07,,['KGt' 'n9dm6V' 'VrhEAiHoI'],b'\xcd\x02\x88s\x9c-\xb4',"[('jZ3', 20)]","[('MQd', 33)]","{'x': 31, 'y': 'DE3'}","{'x': 3, 'y': 'RkP'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +68,s68,https://placehold.co/368x332.png,,,inf,-inf,68,single value,1,1.23456789,True,-115,397,72,-660,108,487,536,961,0.3394,0.88419896,0.9412375042323865,False,True,1.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-09-25,2023-09-25,[0],['Pvy' 'UBCetA' 'zNrz7k6CQ'],b'\xa8\xcf',"[('Ma5', 48)]","[('yNX', 88)]","{'x': 95, 'y': 'RYf'}","{'x': 26, 'y': 'TSZ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +69,s69,https://placehold.co/369x331.png,,,inf,-inf,69,single value,1,1.23456789,True,113,695,535,-450,64,799,144,973,0.5693,0.6007984,0.0724162721463415,False,False,3.0,emoji 🤣,,2023-03-15,2023-02-04,,,b'\x8a\x10l',"[('FDE', 84)]","[('ZDL', 39)]","{'x': 96, 'y': 'NcY'}","{'x': 31, 'y': 'hKu'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +70,s70,https://placehold.co/370x330.png,,,inf,-inf,70,single value,1,1.23456789,True,121,631,-984,635,85,33,524,820,0.8877,0.90372396,0.5342422059764451,False,,1.0,,,2023-01-08,2023-09-24,,['wBg' 'Bye1Un' 'WeNGmWv7O'],b'\xe7\xa4\xb4\xcd\x91Z\xf8\x03\xb2',"[('kUt', 96)]","[('fqw', 89)]","{'x': 97, 'y': 'xW5'}","{'x': 54, 'y': 'gBt'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +71,s71,https://placehold.co/371x329.png,,,inf,-inf,71,single value,1,1.23456789,True,-120,495,195,312,243,347,211,615,0.5566,0.9891849,0.8825334858196,True,,1.0,emoji 🤣,,2023-10-24,2023-03-05,[72 0 35 34],,b'\xdf.',"[('urF', 14)]",,"{'x': 25, 'y': 'u2A'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +72,s72,https://placehold.co/372x328.png,,,inf,-inf,72,single value,1,1.23456789,True,-39,256,243,277,144,94,24,103,0.7207,0.74335283,0.08250853444042128,False,False,,,emoji 🤣,2023-06-13,2023-02-19,[22 8 33 45],['jgp' 'kjVe6M' 'CIJQ2N9u8'],,"[('IxY', 51)]",,"{'x': 79, 'y': '5hV'}","{'x': 79, 'y': 'zLQ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +73,s73,https://placehold.co/373x327.png,,,inf,-inf,73,single value,1,1.23456789,True,-76,715,-843,757,254,71,579,946,0.805,0.06498641,0.8245140468968338,False,True,3.0,,,2023-03-26,2023-09-12,[29 94 74 98],['tBD' 'NXKveC' 'cwrN8fKxJ'],b'g\x97:\xbe#)\xd3\xf7N',"[('eBJ', 24)]","[('LS5', 19)]","{'x': 93, 'y': 'U05'}","{'x': 87, 'y': 'KYu'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +74,s74,https://placehold.co/374x326.png,,,inf,-inf,74,single value,1,1.23456789,True,1,136,-524,-644,70,550,393,38,0.989,0.40158024,0.35780135092827137,True,False,2.0,emoji 🤣,a with space,2023-03-13,2023-05-29,[59 76],['7Tc' '4JlLF7' 'BYZ8fOcR9'],"b'0,Q\xfb\xac\x92\xf8\x12Q'","[('fEt', 4)]","[('yOr', 65)]","{'x': 68, 'y': 'NNd'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +75,s75,https://placehold.co/375x325.png,,,inf,-inf,75,single value,1,1.23456789,True,-45,853,69,-978,216,153,66,946,0.603,0.8378257,0.32209470221933534,False,,2.0,,c having special characters: !@#$%^&*(),2023-02-24,2023-11-21,[44 60],['GLw' '4yWQdN' 'uuIxp07Lj'],b'N\t\xf8n\x13\xc2',"[('8Ub', 46)]","[('7dV', 35)]","{'x': 81, 'y': 'GtJ'}","{'x': 17, 'y': 'Ndn'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 76,s76,https://placehold.co/376x324.png,,,inf,-inf,76,single value,1,1.23456789,True,-37,520,396,785,44,249,232,197,0.8066,0.2305692,0.9774663863147858,True,False,,,"multiple -lines string",2023-02-16,2023-10-31,[15 65],['WOe' 'fQrSO4' '2uKiv7RyK'],b'R7Y',"[('zoC', 90)]","[('nec', 26)]","{'x': 65, 'y': '1oO'}","{'x': 42, 'y': 'k7e'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -77,s77,https://placehold.co/377x323.png,,,inf,-inf,77,single value,1,1.23456789,True,-18,-559,-483,-479,131,673,108,645,0.963,0.8306425,0.20085908986229417,False,True,1.0,c having special characters: !@#$%^&*(),a with space,2023-08-26,2023-10-03,,['6tx' 'XYPZTQ' 'GOAwwln6E'],b':8\x97\x11\xb6\xfb\xe5\xb4',"[('XB1', 91)]","[('x9M', 56)]","{'x': 44, 'y': 'LaW'}","{'x': 41, 'y': 'gYV'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-02-16,2023-10-31,[15 65],['fP4' 'tOPhRf' 'INuhR694f'],b'R7Y',"[('zcI', 90)]","[('kEa', 26)]","{'x': 65, 'y': 'uRj'}","{'x': 42, 'y': 'iKU'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +77,s77,https://placehold.co/377x323.png,,,inf,-inf,77,single value,1,1.23456789,True,-18,-559,-483,-479,131,673,108,645,0.963,0.8306425,0.20085908986229417,False,True,1.0,c having special characters: !@#$%^&*(),a with space,2023-08-26,2023-10-03,,['PFb' 't6vVl9' 'jsWFHTGP2'],b':8\x97\x11\xb6\xfb\xe5\xb4',"[('ZX7', 91)]","[('05G', 56)]","{'x': 44, 'y': 'P98'}","{'x': 41, 'y': 'YUO'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 78,s78,https://placehold.co/378x322.png,,,inf,-inf,78,single value,1,1.23456789,True,59,-437,-902,781,35,437,145,578,0.9443,0.12033876,0.6931939408226809,True,,,"multiple -lines string",emoji 🤣,2023-04-14,2023-12-23,[15 59],['oie' '0gVZ2c' 'uVixkZVYk'],b'J\x0b\x9a\x0b',"[('BhE', 22)]","[('GSL', 28)]","{'x': 62, 'y': 'xsc'}","{'x': 17, 'y': 'xEO'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-04-14,2023-12-23,[15 59],['MLj' 'lQM3Sc' 'wS8LUWoo7'],b'J\x0b\x9a\x0b',"[('N3I', 22)]","[('mWF', 28)]","{'x': 62, 'y': 'UJf'}","{'x': 17, 'y': 'CsM'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 79,s79,https://placehold.co/379x321.png,,,inf,-inf,79,single value,1,1.23456789,True,70,291,915,860,69,117,110,390,0.1411,0.046945356,0.8214407280098664,False,False,,"multiple lines string","multiple -lines string",2023-07-29,2023-06-21,[12 55],['BzP' 'oBrUBH' 'tYDZw69Cr'],b'=$',"[('Ogz', 39)]","[('6YN', 27)]","{'x': 76, 'y': 'HjF'}","{'x': 29, 'y': 'fY3'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -80,s80,https://placehold.co/380x320.png,,,inf,-inf,80,single value,1,1.23456789,True,43,533,768,123,251,770,227,178,0.4065,0.3840906,0.041183495279271676,True,True,,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-02-11,2023-07-20,[33 38 66 7],,b'[9\\\x01\x9e\x02\xca\xa1{',"[('Iaf', 88)]","[('BmO', 23)]","{'x': 54, 'y': 'ndT'}","{'x': 57, 'y': '4Na'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -81,s81,https://placehold.co/381x319.png,,,inf,-inf,81,single value,1,1.23456789,True,124,830,60,-199,158,890,110,967,0.324,0.036731936,0.6703854583544122,False,,1.0,emoji 🤣,c having special characters: !@#$%^&*(),2023-11-12,2023-11-20,[54 26 92 52],['xG7' 'YXipN2' 'Ig00rVq4j'],b'\xce2e\x8c/\xd4t\x0c',"[('LMs', 71)]","[('Xrc', 77)]","{'x': 34, 'y': 'yBK'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -82,s82,https://placehold.co/382x318.png,,,inf,-inf,82,single value,1,1.23456789,True,-121,409,-721,203,18,305,469,553,0.0869,0.95727026,0.951549974355327,False,True,3.0,a with space,,2023-09-25,2023-02-04,[29],['B6n' 'BvbdFo' '9xb50OXir'],b'\xc8\xfc\x12m\xf9@n\x95',"[('FmP', 60)]","[('LFo', 87)]","{'x': 25, 'y': 'Fnr'}","{'x': 17, 'y': 'jjG'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-07-29,2023-06-21,[12 55],['W4m' 'QJBVWF' 'zkmL2dDx5'],b'=$',"[('OCv', 39)]","[('RMP', 27)]","{'x': 76, 'y': 'AWj'}","{'x': 29, 'y': 'Bm2'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +80,s80,https://placehold.co/380x320.png,,,inf,-inf,80,single value,1,1.23456789,True,43,533,768,123,251,770,227,178,0.4065,0.3840906,0.041183495279271676,True,True,,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-02-11,2023-07-20,[33 38 66 7],,b'[9\\\x01\x9e\x02\xca\xa1{',"[('ZY0', 88)]","[('wO8', 23)]","{'x': 54, 'y': 'uDU'}","{'x': 57, 'y': 'sXQ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +81,s81,https://placehold.co/381x319.png,,,inf,-inf,81,single value,1,1.23456789,True,124,830,60,-199,158,890,110,967,0.324,0.036731936,0.6703854583544122,False,,1.0,emoji 🤣,c having special characters: !@#$%^&*(),2023-11-12,2023-11-20,[54 26 92 52],['SFh' 'fjBFZf' '4Y25zyxxf'],b'\xce2e\x8c/\xd4t\x0c',"[('uVL', 71)]","[('fry', 77)]","{'x': 34, 'y': 'Hqy'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +82,s82,https://placehold.co/382x318.png,,,inf,-inf,82,single value,1,1.23456789,True,-121,409,-721,203,18,305,469,553,0.0869,0.95727026,0.951549974355327,False,True,3.0,a with space,,2023-09-25,2023-02-04,[29],['ntg' 'Sujc4D' 'ZVDM4bnj6'],b'\xc8\xfc\x12m\xf9@n\x95',"[('SwC', 60)]","[('Pzm', 87)]","{'x': 25, 'y': 'ARV'}","{'x': 17, 'y': '46S'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 83,s83,https://placehold.co/383x317.png,,,inf,-inf,83,single value,1,1.23456789,True,46,410,372,246,188,267,33,447,0.6333,0.8262057,0.12421996672805935,True,,,a with space,"multiple -lines string",2023-09-20,2023-08-04,[18],['ZRi' 'RBaepZ' 'ITGgrscAX'],b'\xdf\xe5n\xad9-\x9c',"[('6wd', 52)]","[('kco', 57)]","{'x': 44, 'y': 'yif'}","{'x': 39, 'y': 'yJm'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -84,s84,https://placehold.co/384x316.png,,,inf,-inf,84,single value,1,1.23456789,True,-94,136,-504,929,107,960,622,499,0.736,0.8007697,0.8962213026850383,True,False,1.0,a with space,,2023-12-02,2023-03-06,[24],['Cg4' 'KbFpiA' 'MozPf8eGF'],b'\xe4\xf9\xd0',"[('nCI', 55)]","[('aj9', 69)]","{'x': 64, 'y': 'Jdy'}","{'x': 64, 'y': 'QtJ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -85,s85,https://placehold.co/385x315.png,,,inf,-inf,85,single value,1,1.23456789,True,77,636,-699,-239,181,53,775,14,0.848,0.6297779,0.5947766373769361,True,True,3.0,c having special characters: !@#$%^&*(),a with space,2023-12-31,2023-01-08,[54],['9Iy' 'DN8pbW' 'vTMVTucHY'],b'[\x8c\x98\xa9\x08\xe5\xe9',"[('MDO', 92)]","[('Wvy', 35)]","{'x': 85, 'y': 'fFV'}","{'x': 48, 'y': '4s6'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -86,s86,https://placehold.co/386x314.png,,,inf,-inf,86,single value,1,1.23456789,True,-48,648,-820,682,166,235,935,622,0.1228,0.21632402,0.616604581862474,True,,,c having special characters: !@#$%^&*(),,2023-09-16,2023-10-28,[73 9],['kWC' 'RNYdWC' 'scmc5F9Hp'],b'\x9c\x8b\xfe\xbf\xb9-',"[('ShV', 58)]","[('KGT', 79)]","{'x': 18, 'y': 'iiI'}","{'x': 28, 'y': 'A8v'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -87,s87,https://placehold.co/387x313.png,,,inf,-inf,87,single value,1,1.23456789,True,35,-49,-394,-559,90,388,368,668,0.8765,0.51826036,0.6129441748656059,False,True,2.0,,,2023-10-10,2023-12-09,[51 19],['Ulw' 'W1uhw3' 'U3x8EE5GX'],b'\xdeC\xfc\x9a\x82+\xdf',"[('nvZ', 64)]","[('efr', 55)]","{'x': 54, 'y': 'EOm'}","{'x': 77, 'y': 'fa9'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -88,s88,https://placehold.co/388x312.png,,,inf,-inf,88,single value,1,1.23456789,True,-79,104,122,631,201,989,747,288,0.643,0.59727407,0.29883588633731384,False,True,3.0,a with space,,2023-04-24,2023-11-28,[49 27],['TeL' 'YHteOt' 'LAQvc1v9r'],b'\xe9\x01C\xda',"[('7sG', 50)]","[('Z4v', 32)]","{'x': 59, 'y': 'MTp'}","{'x': 46, 'y': 'zhs'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-09-20,2023-08-04,[18],['LAW' 'ohoNMd' 'ZEHNJSsav'],b'\xdf\xe5n\xad9-\x9c',"[('gOa', 52)]","[('aR4', 57)]","{'x': 44, 'y': 'Dmy'}","{'x': 39, 'y': '49K'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +84,s84,https://placehold.co/384x316.png,,,inf,-inf,84,single value,1,1.23456789,True,-94,136,-504,929,107,960,622,499,0.736,0.8007697,0.8962213026850383,True,False,1.0,a with space,,2023-12-02,2023-03-06,[24],['JlP' 'Gw7HWF' 'b2cxxUweo'],b'\xe4\xf9\xd0',"[('wNX', 55)]","[('ITI', 69)]","{'x': 64, 'y': 'JI9'}","{'x': 64, 'y': 'LF0'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +85,s85,https://placehold.co/385x315.png,,,inf,-inf,85,single value,1,1.23456789,True,77,636,-699,-239,181,53,775,14,0.848,0.6297779,0.5947766373769361,True,True,3.0,c having special characters: !@#$%^&*(),a with space,2023-12-31,2023-01-08,[54],['OgK' 'UivuNZ' 'Q8DliS6cm'],b'[\x8c\x98\xa9\x08\xe5\xe9',"[('Hxg', 92)]","[('KvY', 35)]","{'x': 85, 'y': 'Gpq'}","{'x': 48, 'y': '0d3'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +86,s86,https://placehold.co/386x314.png,,,inf,-inf,86,single value,1,1.23456789,True,-48,648,-820,682,166,235,935,622,0.1228,0.21632402,0.616604581862474,True,,,c having special characters: !@#$%^&*(),,2023-09-16,2023-10-28,[73 9],['X2t' 'tyYDcO' 'r1cOqXByB'],b'\x9c\x8b\xfe\xbf\xb9-',"[('3EY', 58)]","[('o7C', 79)]","{'x': 18, 'y': 'AQJ'}","{'x': 28, 'y': '8aI'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +87,s87,https://placehold.co/387x313.png,,,inf,-inf,87,single value,1,1.23456789,True,35,-49,-394,-559,90,388,368,668,0.8765,0.51826036,0.6129441748656059,False,True,2.0,,,2023-10-10,2023-12-09,[51 19],['7vl' 'QwXqfA' 'A9lsgusBS'],b'\xdeC\xfc\x9a\x82+\xdf',"[('Uzp', 64)]","[('zak', 55)]","{'x': 54, 'y': 'gzw'}","{'x': 77, 'y': '8gr'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +88,s88,https://placehold.co/388x312.png,,,inf,-inf,88,single value,1,1.23456789,True,-79,104,122,631,201,989,747,288,0.643,0.59727407,0.29883588633731384,False,True,3.0,a with space,,2023-04-24,2023-11-28,[49 27],['kBB' 'T4MANX' 'dPzFUjb0Q'],b'\xe9\x01C\xda',"[('mh0', 50)]","[('FIF', 32)]","{'x': 59, 'y': 'lvO'}","{'x': 46, 'y': 'bAK'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 89,s89,https://placehold.co/389x311.png,,,inf,-inf,89,single value,1,1.23456789,True,-25,-302,-301,-232,89,733,594,477,0.704,0.5250315,0.9352018152994597,True,False,,emoji 🤣,"multiple -lines string",2023-12-29,2023-03-17,[23],['86e' 'NwXQ7i' 'LWceWwxJL'],b'=\xce\x1d\xc2\xa9\xdb',"[('Rck', 91)]","[('7rL', 19)]","{'x': 18, 'y': 'eWu'}","{'x': 50, 'y': 'wId'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -90,s90,https://placehold.co/390x310.png,,,inf,-inf,90,single value,1,1.23456789,True,3,-888,-8,15,18,762,553,230,0.9106,0.26023337,0.9473504626310387,False,True,3.0,emoji 🤣,,2023-02-09,2023-06-23,[62 3],['Q6x' 'VJGyOp' 'hTExIqqB9'],b'\x0f\xca\xdeb\x07\xee',"[('iSS', 38)]","[('m5J', 66)]","{'x': 51, 'y': '5fP'}","{'x': 69, 'y': 'RYw'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -91,s91,https://placehold.co/391x309.png,,,inf,-inf,91,single value,1,1.23456789,True,-127,-999,139,348,38,824,424,922,0.625,0.51524794,0.6253046602139478,True,,3.0,a with space,a with space,2023-08-08,2023-02-16,[ 7 81 11],['r4E' 'h0C3Bf' 'Q0tveH30S'],"b""'\xfc\xd2=\xec\x9c\x8a\x99\xba""","[('gLl', 71)]","[('qzg', 15)]","{'x': 48, 'y': 'Avt'}","{'x': 87, 'y': '11o'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -92,s92,https://placehold.co/392x308.png,,,inf,-inf,92,single value,1,1.23456789,True,125,-359,-810,-485,125,400,612,419,0.336,0.49118635,0.7834227259416147,True,,3.0,a with space,,2023-05-09,2023-01-15,[33 81],['5NX' 'FhmiXb' 'IwXILft9S'],b'\xd9',"[('5yC', 60)]","[('es6', 67)]","{'x': 98, 'y': 'Kbs'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-12-29,2023-03-17,[23],['Bho' 'Ow6cjB' 'wBeiwtr7b'],b'=\xce\x1d\xc2\xa9\xdb',"[('nZl', 91)]","[('vhF', 19)]","{'x': 18, 'y': 'Vkv'}","{'x': 50, 'y': 'MSz'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +90,s90,https://placehold.co/390x310.png,,,inf,-inf,90,single value,1,1.23456789,True,3,-888,-8,15,18,762,553,230,0.9106,0.26023337,0.9473504626310387,False,True,3.0,emoji 🤣,,2023-02-09,2023-06-23,[62 3],['lG4' 'hWRnLR' '9miekS9Y7'],b'\x0f\xca\xdeb\x07\xee',"[('uUc', 38)]","[('pHX', 66)]","{'x': 51, 'y': 'YXM'}","{'x': 69, 'y': 'Ank'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +91,s91,https://placehold.co/391x309.png,,,inf,-inf,91,single value,1,1.23456789,True,-127,-999,139,348,38,824,424,922,0.625,0.51524794,0.6253046602139478,True,,3.0,a with space,a with space,2023-08-08,2023-02-16,[ 7 81 11],['9PR' 'IssjRR' 'kwn9XoEwJ'],"b""'\xfc\xd2=\xec\x9c\x8a\x99\xba""","[('NPh', 71)]","[('pBx', 15)]","{'x': 48, 'y': 'B5o'}","{'x': 87, 'y': 'iI0'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +92,s92,https://placehold.co/392x308.png,,,inf,-inf,92,single value,1,1.23456789,True,125,-359,-810,-485,125,400,612,419,0.336,0.49118635,0.7834227259416147,True,,3.0,a with space,,2023-05-09,2023-01-15,[33 81],['C8i' '2eySDz' 'zJhteCGhZ'],b'\xd9',"[('3CK', 60)]","[('Dpv', 67)]","{'x': 98, 'y': 'QjT'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 93,s93,https://placehold.co/393x307.png,,,inf,-inf,93,single value,1,1.23456789,True,5,-781,-748,39,194,623,517,156,0.825,0.9963358,0.612257985881158,False,,3.0,a with space,"multiple -lines string",2023-01-08,2023-12-27,[74 75 48],['GVZ' 'e8NBQv' '2WNl7A4dh'],b'Y\x83c',"[('WSg', 91)]","[('X72', 77)]","{'x': 98, 'y': '9M9'}","{'x': 53, 'y': 'Ryt'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -94,s94,https://placehold.co/394x306.png,,,inf,-inf,94,single value,1,1.23456789,True,-75,589,-20,-209,172,766,691,549,0.363,0.89743614,0.4843984475740406,False,,3.0,c having special characters: !@#$%^&*(),,2023-04-11,2023-05-27,[92 25 17],['jku' 'Rv630p' 'NIhsHFk6j'],b'\x7f',"[('z5Z', 72)]","[('YJR', 77)]","{'x': 37, 'y': 'Bjc'}","{'x': 23, 'y': 'xxH'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-01-08,2023-12-27,[74 75 48],['IKV' 'iF1ZGs' 'k5n6Grem7'],b'Y\x83c',"[('F7a', 91)]","[('WQ3', 77)]","{'x': 98, 'y': 'fTp'}","{'x': 53, 'y': 'wzr'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +94,s94,https://placehold.co/394x306.png,,,inf,-inf,94,single value,1,1.23456789,True,-75,589,-20,-209,172,766,691,549,0.363,0.89743614,0.4843984475740406,False,,3.0,c having special characters: !@#$%^&*(),,2023-04-11,2023-05-27,[92 25 17],['rMM' 'fNKKkM' '3u5c1f6Vq'],b'\x7f',"[('TIA', 72)]","[('1Dp', 77)]","{'x': 37, 'y': 'MjZ'}","{'x': 23, 'y': '2ha'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 95,s95,https://placehold.co/395x305.png,,,inf,-inf,95,single value,1,1.23456789,True,-23,-146,-73,-665,140,302,281,440,0.03424,0.46338075,0.6608201182992507,False,False,3.0,c having special characters: !@#$%^&*(),"multiple -lines string",2023-06-25,2023-01-26,[80 86],['OSL' '0IZbcN' 'JOVzNEMr7'],b'\xee\x90\x99C\xc2\xd0\x02\xa3\xa5',"[('KVB', 57)]","[('7IV', 15)]","{'x': 86, 'y': 'Ymx'}","{'x': 70, 'y': 'PDl'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -96,s96,https://placehold.co/396x304.png,,,inf,-inf,96,single value,1,1.23456789,True,-125,759,184,782,241,918,319,96,0.8306,0.6229374,0.5530014525919584,False,True,,c having special characters: !@#$%^&*(),,2023-04-17,2023-11-04,[40 5 68 43],['DXQ' 'sedBEm' 'LtST18iwI'],b'\xdd',"[('O7i', 33)]","[('U7C', 86)]","{'x': 21, 'y': 'U0g'}","{'x': 62, 'y': 'x50'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-06-25,2023-01-26,[80 86],['nJM' 'b3HNsp' 'YzCQjzCvi'],b'\xee\x90\x99C\xc2\xd0\x02\xa3\xa5',"[('K5W', 57)]","[('xWn', 15)]","{'x': 86, 'y': 'rvX'}","{'x': 70, 'y': 'Oi2'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +96,s96,https://placehold.co/396x304.png,,,inf,-inf,96,single value,1,1.23456789,True,-125,759,184,782,241,918,319,96,0.8306,0.6229374,0.5530014525919584,False,True,,c having special characters: !@#$%^&*(),,2023-04-17,2023-11-04,[40 5 68 43],['1t9' 'vyVFgo' 'hBid61z73'],b'\xdd',"[('4Qk', 33)]","[('RXz', 86)]","{'x': 21, 'y': 'sDu'}","{'x': 62, 'y': 'O8i'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 97,s97,https://placehold.co/397x303.png,,,inf,-inf,97,single value,1,1.23456789,True,-75,248,279,-743,219,206,737,996,0.3452,0.7478716,0.5974758626319301,False,False,2.0,"multiple -lines string",c having special characters: !@#$%^&*(),2023-04-11,2023-04-03,[27],['tCq' 'pgrxMp' '1juJtVEFE'],b'y\xfd\xd3\xb1m',"[('EGd', 51)]","[('CKb', 70)]","{'x': 34, 'y': 'd65'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -98,s98,https://placehold.co/398x302.png,,,inf,-inf,98,single value,1,1.23456789,True,92,-616,346,-504,125,228,442,410,0.774,0.03486516,0.7838325534188619,False,True,1.0,emoji 🤣,,2023-09-17,2023-08-20,[18],['tb6' 'F7nvdE' '2ODH0A2TV'],b'\x86k\xe2\xd2',"[('50D', 0)]","[('heN', 14)]","{'x': 45, 'y': '1Ya'}","{'x': 61, 'y': 'j9P'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -99,s99,https://placehold.co/399x301.png,,,inf,-inf,99,single value,1,1.23456789,True,62,426,-873,-105,57,852,951,950,0.3628,0.8949214,0.48090383144898485,False,True,3.0,emoji 🤣,,2023-09-03,2023-01-21,[43 67],['wyJ' 'mIeFVr' '9Qh8yXv6U'],b'\xb4\xbd\xdb\xc6\xce\xe3\x9f',"[('F5k', 39)]",,"{'x': 54, 'y': 'RgB'}","{'x': 21, 'y': 'iea'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -100,s100,https://placehold.co/400x300.png,,,inf,-inf,100,single value,1,1.23456789,True,17,661,-983,-841,147,909,314,288,0.861,0.8601268,0.040754106092472764,True,True,1.0,,c having special characters: !@#$%^&*(),2023-10-02,2023-11-03,[50 12 82],['mFF' 'ciuDCL' 'FuMk9TsuZ'],b'v\xeb\xb9\xfbE\x93\x0e',"[('JTh', 0)]","[('9Po', 43)]","{'x': 84, 'y': 'bmH'}","{'x': 28, 'y': 'SEB'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -101,s101,https://placehold.co/401x299.png,,,inf,-inf,101,single value,1,1.23456789,True,89,153,816,498,219,577,876,253,0.2195,0.4574321,0.16399948098949724,True,False,,c having special characters: !@#$%^&*(),,2023-02-01,2023-02-07,[55 75 50 36],,b'SYr\xbf\xcb',"[('yL2', 62)]","[('t7G', 26)]","{'x': 84, 'y': 'mGq'}","{'x': 41, 'y': '9fN'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",c having special characters: !@#$%^&*(),2023-04-11,2023-04-03,[27],['Y5S' 'lj9C2E' 'fyCoKdrL0'],b'y\xfd\xd3\xb1m',"[('YgO', 51)]","[('vHR', 70)]","{'x': 34, 'y': 'TnH'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +98,s98,https://placehold.co/398x302.png,,,inf,-inf,98,single value,1,1.23456789,True,92,-616,346,-504,125,228,442,410,0.774,0.03486516,0.7838325534188619,False,True,1.0,emoji 🤣,,2023-09-17,2023-08-20,[18],['Pra' 'giqwzc' 'dIwrxBIZM'],b'\x86k\xe2\xd2',"[('Lt2', 0)]","[('qry', 14)]","{'x': 45, 'y': 'UIM'}","{'x': 61, 'y': 'iX1'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +99,s99,https://placehold.co/399x301.png,,,inf,-inf,99,single value,1,1.23456789,True,62,426,-873,-105,57,852,951,950,0.3628,0.8949214,0.48090383144898485,False,True,3.0,emoji 🤣,,2023-09-03,2023-01-21,[43 67],['Lhf' 'x9IwiL' 'yccSXGj3i'],b'\xb4\xbd\xdb\xc6\xce\xe3\x9f',"[('zLQ', 39)]",,"{'x': 54, 'y': '9RP'}","{'x': 21, 'y': '3R5'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +100,s100,https://placehold.co/400x300.png,,,inf,-inf,100,single value,1,1.23456789,True,17,661,-983,-841,147,909,314,288,0.861,0.8601268,0.040754106092472764,True,True,1.0,,c having special characters: !@#$%^&*(),2023-10-02,2023-11-03,[50 12 82],['5ty' 'M0KFFE' 'IDbugzt32'],b'v\xeb\xb9\xfbE\x93\x0e',"[('pyv', 0)]","[('UvI', 43)]","{'x': 84, 'y': 'x4G'}","{'x': 28, 'y': 'MCA'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +101,s101,https://placehold.co/401x299.png,,,inf,-inf,101,single value,1,1.23456789,True,89,153,816,498,219,577,876,253,0.2195,0.4574321,0.16399948098949724,True,False,,c having special characters: !@#$%^&*(),,2023-02-01,2023-02-07,[55 75 50 36],,b'SYr\xbf\xcb',"[('sXi', 62)]","[('ltn', 26)]","{'x': 84, 'y': 'pdm'}","{'x': 41, 'y': 'Yxn'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 102,s102,https://placehold.co/402x298.png,,,inf,-inf,102,single value,1,1.23456789,True,-85,76,758,-149,199,74,965,195,0.9746,0.39116976,0.4386072164895384,True,True,3.0,"multiple lines string","multiple -lines string",2023-05-17,2023-10-03,[89 28 32],['HRs' 'YwP8KX' 'SQbD7WWJS'],b'\x00c\xf9\x07\xa4\x0e\xc8v',"[('Fx8', 41)]","[('aZp', 77)]","{'x': 64, 'y': 'DTi'}","{'x': 30, 'y': 'zCW'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-05-17,2023-10-03,[89 28 32],['NLq' 'O8JodD' 'GSWxYpJRl'],b'\x00c\xf9\x07\xa4\x0e\xc8v',"[('L2F', 41)]","[('JlU', 77)]","{'x': 64, 'y': 'RqC'}","{'x': 30, 'y': 'AaE'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 103,s103,https://placehold.co/403x297.png,,,inf,-inf,103,single value,1,1.23456789,True,33,707,-435,687,60,434,740,597,0.78,0.27295938,0.7248265598740583,True,False,2.0,"multiple lines string","multiple -lines string",2023-01-12,2023-06-06,[54],,b'|;Mj\x94Q',"[('4Vq', 80)]","[('fPY', 96)]","{'x': 63, 'y': 'RbK'}","{'x': 17, 'y': 'LAl'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-01-12,2023-06-06,[54],,b'|;Mj\x94Q',"[('0Ht', 80)]","[('5lT', 96)]","{'x': 63, 'y': '6eO'}","{'x': 17, 'y': 'TSq'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 104,s104,https://placehold.co/404x296.png,,,inf,-inf,104,single value,1,1.23456789,True,73,-271,-431,931,126,102,376,833,0.11426,0.47667682,0.5932786483101787,True,,1.0,emoji 🤣,"multiple -lines string",2023-10-29,2023-06-28,,['KkM' 'M0jQb6' 'gbtjQzW52'],b';KJ\xa1w',"[('78C', 98)]",,"{'x': 22, 'y': 'Pck'}","{'x': 16, 'y': 'FIB'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -105,s105,https://placehold.co/405x295.png,,,inf,-inf,105,single value,1,1.23456789,True,61,695,346,-311,104,421,288,521,0.566,0.044376664,0.6502941858734539,False,,3.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-01-16,2023-05-12,[12],['Tdi' 'muPGtk' '4vvVSNQLl'],b'\xd8\xf4\xd1m7\x08',"[('izR', 7)]","[('e5D', 91)]","{'x': 76, 'y': 'rWM'}","{'x': 86, 'y': 'wlL'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -106,s106,https://placehold.co/406x294.png,,,inf,-inf,106,single value,1,1.23456789,True,99,733,895,698,166,703,436,516,0.9854,0.85219353,0.4792789285762873,True,True,,,a with space,2023-05-09,2023-11-07,[10 16 67 46],['pIn' '8srmRt' 'v5XqhPx8Y'],b'\xe7>FS\xfe~y\xbc',"[('UsR', 16)]","[('v3q', 53)]","{'x': 86, 'y': 'dOa'}","{'x': 55, 'y': 'J0o'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-10-29,2023-06-28,,['Bzz' 'mFLD0T' 'RGI9Dx7CH'],b';KJ\xa1w',"[('TIn', 98)]",,"{'x': 22, 'y': 'P4w'}","{'x': 16, 'y': '5Jc'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +105,s105,https://placehold.co/405x295.png,,,inf,-inf,105,single value,1,1.23456789,True,61,695,346,-311,104,421,288,521,0.566,0.044376664,0.6502941858734539,False,,3.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-01-16,2023-05-12,[12],['HP1' 'QXqE7r' 's68VRQEDI'],b'\xd8\xf4\xd1m7\x08',"[('nSQ', 7)]","[('opq', 91)]","{'x': 76, 'y': 'gs2'}","{'x': 86, 'y': 'cDw'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +106,s106,https://placehold.co/406x294.png,,,inf,-inf,106,single value,1,1.23456789,True,99,733,895,698,166,703,436,516,0.9854,0.85219353,0.4792789285762873,True,True,,,a with space,2023-05-09,2023-11-07,[10 16 67 46],['5Sr' 'JH3yvV' 'jc7e5OUnZ'],b'\xe7>FS\xfe~y\xbc',"[('5iS', 16)]","[('oZZ', 53)]","{'x': 86, 'y': 'x8F'}","{'x': 55, 'y': 'J7e'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 107,s107,https://placehold.co/407x293.png,,,inf,-inf,107,single value,1,1.23456789,True,-115,439,-315,-621,0,763,661,634,0.471,0.03542237,0.6157420219422428,True,False,2.0,c having special characters: !@#$%^&*(),"multiple -lines string",2023-03-04,2023-12-14,[20],['7Xs' 'rSvBpD' 'mH5RiMKpP'],b'L\x90\xb1\xaa\xe5pN\xd3',"[('1S6', 89)]",,"{'x': 20, 'y': 'yq0'}","{'x': 55, 'y': 'FzH'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -108,s108,https://placehold.co/408x292.png,,,inf,-inf,108,single value,1,1.23456789,True,-34,-754,815,568,130,737,276,841,0.1821,0.32905138,0.3290174378146622,True,,1.0,a with space,c having special characters: !@#$%^&*(),2023-04-19,2023-01-28,[11 36 41],['GNd' 'zSgVaI' '5z52Dm7tO'],b'J\t\xbf?\xe0\xff\r\xd0',"[('NmM', 37)]","[('6Q4', 12)]","{'x': 22, 'y': 'O1b'}","{'x': 56, 'y': 'w8J'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-03-04,2023-12-14,[20],['qIq' 'gTod4n' 'oguDQi78j'],b'L\x90\xb1\xaa\xe5pN\xd3',"[('8lH', 89)]",,"{'x': 20, 'y': 'S4E'}","{'x': 55, 'y': 'TG1'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +108,s108,https://placehold.co/408x292.png,,,inf,-inf,108,single value,1,1.23456789,True,-34,-754,815,568,130,737,276,841,0.1821,0.32905138,0.3290174378146622,True,,1.0,a with space,c having special characters: !@#$%^&*(),2023-04-19,2023-01-28,[11 36 41],['O2D' 'OUrrdV' 'OoT0c5zZ5'],b'J\t\xbf?\xe0\xff\r\xd0',"[('NSV', 37)]","[('wWh', 12)]","{'x': 22, 'y': 'Lfm'}","{'x': 56, 'y': 'UrG'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 109,s109,https://placehold.co/409x291.png,,,inf,-inf,109,single value,1,1.23456789,True,-81,-165,-375,952,204,805,709,864,0.4849,0.9315895,0.47018259269666507,True,False,1.0,c having special characters: !@#$%^&*(),"multiple -lines string",2023-01-21,2023-09-17,[47 27],['4fJ' 'HS64k2' 'k59yE6752'],b'\xaf\x8aL\x18\x1ax',"[('svP', 77)]","[('EmT', 34)]","{'x': 43, 'y': '1Oo'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -110,s110,https://placehold.co/410x290.png,,,inf,-inf,110,single value,1,1.23456789,True,-114,462,311,-44,91,305,581,117,0.5127,0.7352127,0.7442790655949556,True,False,3.0,a with space,emoji 🤣,2023-06-07,2023-03-17,[46 17 77],['aJg' '8r9HE6' '0DlgkCplT'],b'l\x91d',"[('8O7', 34)]","[('2mm', 28)]","{'x': 46, 'y': 'x8g'}","{'x': 0, 'y': 'RhD'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -111,s111,https://placehold.co/411x289.png,,,inf,-inf,111,single value,1,1.23456789,True,71,-798,966,-310,189,97,502,805,0.7417,0.28139096,0.8718327789731212,True,True,2.0,a with space,,2023-09-26,2023-03-08,[70],['XJU' 'k13ZFf' 'PliupqoU7'],"b'""'","[('FRt', 71)]",,"{'x': 41, 'y': 't1G'}","{'x': 92, 'y': 'QiT'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -112,s112,https://placehold.co/412x288.png,,,inf,-inf,112,single value,1,1.23456789,True,77,207,-147,450,248,849,623,908,0.6987,0.2526491,0.4336553339563889,True,,2.0,,c having special characters: !@#$%^&*(),2023-06-11,2023-12-08,[12 99],,,"[('hvD', 53)]","[('pMj', 21)]","{'x': 47, 'y': 'lFC'}","{'x': 64, 'y': '88W'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -113,s113,https://placehold.co/413x287.png,,,inf,-inf,113,single value,1,1.23456789,True,86,-878,686,636,190,797,515,158,0.4026,0.0050821397,0.04366165770736119,False,True,2.0,emoji 🤣,emoji 🤣,2023-09-17,2023-07-13,[ 8 72 37 74],['sSa' 'OQdhtz' 'F3Rth4sMn'],b'\xb5c\xf0',"[('JPz', 12)]","[('g5P', 68)]","{'x': 5, 'y': '5bp'}","{'x': 90, 'y': 'Ce3'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -114,s114,https://placehold.co/414x286.png,,,inf,-inf,114,single value,1,1.23456789,True,123,-600,-39,291,251,334,349,814,0.218,0.6957143,0.16167254414680265,False,True,2.0,c having special characters: !@#$%^&*(),,2023-04-12,2023-06-11,[96 99],['ijU' 'LzIDHP' 'npU2fBReI'],"b'""\x8be;U'","[('U0r', 34)]","[('PMV', 88)]","{'x': 56, 'y': 'Guy'}","{'x': 15, 'y': 'fDT'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -115,s115,https://placehold.co/415x285.png,,,inf,-inf,115,single value,1,1.23456789,True,120,-234,662,858,112,858,842,227,0.645,0.04878358,0.0208611392915381,True,,,a with space,c having special characters: !@#$%^&*(),2023-08-11,2023-12-13,[33],['dHF' 'JjuGhm' 'KfFYCFCdC'],,"[('0YG', 68)]","[('HcD', 0)]","{'x': 89, 'y': 'jvv'}","{'x': 60, 'y': '7eN'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -116,s116,https://placehold.co/416x284.png,,,inf,-inf,116,single value,1,1.23456789,True,61,-707,-846,600,152,434,445,876,0.4216,0.53260255,0.6532630192373301,False,,2.0,c having special characters: !@#$%^&*(),,2023-02-28,2023-12-27,[ 6 35 17 2],['YSy' 'YUJcvd' '95e5bzVV8'],b'\xb0\xcd',"[('bjP', 48)]","[('ME9', 86)]","{'x': 44, 'y': 'Mo8'}","{'x': 25, 'y': 'Xtd'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -117,s117,https://placehold.co/417x283.png,,,inf,-inf,117,single value,1,1.23456789,True,-89,-721,-511,440,55,446,829,215,0.1323,0.96212196,0.3323146253551089,False,False,1.0,emoji 🤣,a with space,2023-09-04,2023-09-14,[43 20 27 53],['OA9' 'x14xQP' 'HOvlHGTna'],b'\xcexM\xd6\xff\x8e\xfa',"[('mUj', 33)]",,"{'x': 86, 'y': 'FYM'}","{'x': 64, 'y': 'vWD'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -118,s118,https://placehold.co/418x282.png,,,inf,-inf,118,single value,1,1.23456789,True,84,860,409,191,160,993,349,947,0.9004,0.10946886,0.5424786357193675,False,,1.0,emoji 🤣,a with space,2023-05-08,2023-03-13,[20 98 12 56],,b'\x02\xe2;',"[('rp0', 4)]","[('31E', 53)]","{'x': 91, 'y': '23Y'}","{'x': 63, 'y': 'FDT'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-01-21,2023-09-17,[47 27],['cZW' 'lU2rcs' 'L5uCNG3iF'],b'\xaf\x8aL\x18\x1ax',"[('IK6', 77)]","[('e7E', 34)]","{'x': 43, 'y': '7IS'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +110,s110,https://placehold.co/410x290.png,,,inf,-inf,110,single value,1,1.23456789,True,-114,462,311,-44,91,305,581,117,0.5127,0.7352127,0.7442790655949556,True,False,3.0,a with space,emoji 🤣,2023-06-07,2023-03-17,[46 17 77],['qYu' 'TOSaus' 'PlLNzAuyf'],b'l\x91d',"[('SP3', 34)]","[('a17', 28)]","{'x': 46, 'y': 'c5s'}","{'x': 0, 'y': 'GLp'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +111,s111,https://placehold.co/411x289.png,,,inf,-inf,111,single value,1,1.23456789,True,71,-798,966,-310,189,97,502,805,0.7417,0.28139096,0.8718327789731212,True,True,2.0,a with space,,2023-09-26,2023-03-08,[70],['8D6' 'axBquK' 'JqwoPCjQ5'],"b'""'","[('H2A', 71)]",,"{'x': 41, 'y': 'EUb'}","{'x': 92, 'y': 'NPP'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +112,s112,https://placehold.co/412x288.png,,,inf,-inf,112,single value,1,1.23456789,True,77,207,-147,450,248,849,623,908,0.6987,0.2526491,0.4336553339563889,True,,2.0,,c having special characters: !@#$%^&*(),2023-06-11,2023-12-08,[12 99],,,"[('agx', 53)]","[('0xt', 21)]","{'x': 47, 'y': 'Qws'}","{'x': 64, 'y': 'QHJ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +113,s113,https://placehold.co/413x287.png,,,inf,-inf,113,single value,1,1.23456789,True,86,-878,686,636,190,797,515,158,0.4026,0.0050821397,0.04366165770736119,False,True,2.0,emoji 🤣,emoji 🤣,2023-09-17,2023-07-13,[ 8 72 37 74],['3VQ' 'N6wn7D' 'C9xR4UXZV'],b'\xb5c\xf0',"[('ddq', 12)]","[('32J', 68)]","{'x': 5, 'y': '98r'}","{'x': 90, 'y': 'M4H'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +114,s114,https://placehold.co/414x286.png,,,inf,-inf,114,single value,1,1.23456789,True,123,-600,-39,291,251,334,349,814,0.218,0.6957143,0.16167254414680265,False,True,2.0,c having special characters: !@#$%^&*(),,2023-04-12,2023-06-11,[96 99],['QKW' 'GGw4gZ' '3mHk0BQSE'],"b'""\x8be;U'","[('W8Q', 34)]","[('rlV', 88)]","{'x': 56, 'y': 'dpy'}","{'x': 15, 'y': 'aC4'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +115,s115,https://placehold.co/415x285.png,,,inf,-inf,115,single value,1,1.23456789,True,120,-234,662,858,112,858,842,227,0.645,0.04878358,0.0208611392915381,True,,,a with space,c having special characters: !@#$%^&*(),2023-08-11,2023-12-13,[33],['3Bd' 'izIIPt' 'bpaneARHd'],,"[('jdW', 68)]","[('FyU', 0)]","{'x': 89, 'y': '996'}","{'x': 60, 'y': 'Juv'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +116,s116,https://placehold.co/416x284.png,,,inf,-inf,116,single value,1,1.23456789,True,61,-707,-846,600,152,434,445,876,0.4216,0.53260255,0.6532630192373301,False,,2.0,c having special characters: !@#$%^&*(),,2023-02-28,2023-12-27,[ 6 35 17 2],['39D' 'rliNT7' 'x3B4xe72i'],b'\xb0\xcd',"[('mHw', 48)]","[('hGA', 86)]","{'x': 44, 'y': '6nv'}","{'x': 25, 'y': '8sk'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +117,s117,https://placehold.co/417x283.png,,,inf,-inf,117,single value,1,1.23456789,True,-89,-721,-511,440,55,446,829,215,0.1323,0.96212196,0.3323146253551089,False,False,1.0,emoji 🤣,a with space,2023-09-04,2023-09-14,[43 20 27 53],['1h9' 'yh8ZU8' 'CSAxoCjl2'],b'\xcexM\xd6\xff\x8e\xfa',"[('CMP', 33)]",,"{'x': 86, 'y': 'yiT'}","{'x': 64, 'y': 'RLs'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +118,s118,https://placehold.co/418x282.png,,,inf,-inf,118,single value,1,1.23456789,True,84,860,409,191,160,993,349,947,0.9004,0.10946886,0.5424786357193675,False,,1.0,emoji 🤣,a with space,2023-05-08,2023-03-13,[20 98 12 56],,b'\x02\xe2;',"[('InO', 4)]","[('6cv', 53)]","{'x': 91, 'y': 'GQ2'}","{'x': 63, 'y': 'WqN'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 119,s119,https://placehold.co/419x281.png,,,inf,-inf,119,single value,1,1.23456789,True,79,-117,-216,865,165,307,606,695,0.6914,0.89447993,0.49327684678379957,False,False,,"multiple -lines string",emoji 🤣,2023-10-10,2023-03-28,[ 9 52],['bsP' 'HGZpvr' '6SgYzV2am'],b'|l\xfff\x89',"[('QsU', 5)]","[('94r', 28)]","{'x': 40, 'y': 'bIr'}","{'x': 58, 'y': 'A7X'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -120,s120,https://placehold.co/420x280.png,,,inf,-inf,120,single value,1,1.23456789,True,108,633,127,66,116,248,663,14,0.683,0.99147534,0.0815264895524267,True,False,1.0,emoji 🤣,,2023-11-21,2023-09-19,[73],['gcL' 'RdTyon' '1dFrYTtLP'],b'<&\x9d\xfd',"[('cYg', 63)]",,"{'x': 57, 'y': 'j3O'}","{'x': 43, 'y': 'rc5'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -121,s121,https://placehold.co/421x279.png,,,inf,-inf,121,single value,1,1.23456789,True,-47,-803,952,579,133,165,822,156,0.8228,0.061517026,0.4032613611238318,False,False,1.0,,a with space,2023-01-25,2023-08-02,,['tsi' 'Onsd62' '4MAE86PWt'],b'\xaa*:',"[('1T1', 3)]",,"{'x': 5, 'y': 'fx7'}","{'x': 78, 'y': 'UTI'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -122,s122,https://placehold.co/422x278.png,,,inf,-inf,122,single value,1,1.23456789,True,-18,-19,416,-716,57,480,136,647,0.53,0.88290626,0.22056112492232327,False,,2.0,a with space,,2023-05-11,2023-06-02,[ 1 85 80 99],['zjx' 'UD0sRX' '4I8IipmO5'],b'\x13\x95\x97:/\xbc\xc9\x91\xd2',"[('UIo', 13)]","[('nJd', 66)]","{'x': 37, 'y': 'LMo'}","{'x': 67, 'y': 'dDk'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-10-10,2023-03-28,[ 9 52],['VbO' 'M63oeK' 'BP2pcBHUW'],b'|l\xfff\x89',"[('yFX', 5)]","[('1WC', 28)]","{'x': 40, 'y': 'QzJ'}","{'x': 58, 'y': 'JJO'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +120,s120,https://placehold.co/420x280.png,,,inf,-inf,120,single value,1,1.23456789,True,108,633,127,66,116,248,663,14,0.683,0.99147534,0.0815264895524267,True,False,1.0,emoji 🤣,,2023-11-21,2023-09-19,[73],['i9o' '4JJVYo' '29GzrIKTk'],b'<&\x9d\xfd',"[('RQc', 63)]",,"{'x': 57, 'y': 'AtL'}","{'x': 43, 'y': 'sTb'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +121,s121,https://placehold.co/421x279.png,,,inf,-inf,121,single value,1,1.23456789,True,-47,-803,952,579,133,165,822,156,0.8228,0.061517026,0.4032613611238318,False,False,1.0,,a with space,2023-01-25,2023-08-02,,['QIc' 'vNxGRz' 'slHon1iCd'],b'\xaa*:',"[('xzW', 3)]",,"{'x': 5, 'y': 'BiO'}","{'x': 78, 'y': 'Ehe'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +122,s122,https://placehold.co/422x278.png,,,inf,-inf,122,single value,1,1.23456789,True,-18,-19,416,-716,57,480,136,647,0.53,0.88290626,0.22056112492232327,False,,2.0,a with space,,2023-05-11,2023-06-02,[ 1 85 80 99],['zzG' 'ypueBx' 'HZdxLceXK'],b'\x13\x95\x97:/\xbc\xc9\x91\xd2',"[('Q7d', 13)]","[('hGt', 66)]","{'x': 37, 'y': 'KQm'}","{'x': 67, 'y': 'WpM'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 123,s123,https://placehold.co/423x277.png,,,inf,-inf,123,single value,1,1.23456789,True,-76,930,834,-604,43,983,758,260,0.815,0.516079,0.4183997886676527,False,True,1.0,"multiple -lines string",,2023-12-19,2023-07-29,[24 2 16],['0fS' 'lqPL2l' 'VSID1u7a6'],b'\xb6\x1a',"[('WXr', 6)]","[('XDH', 57)]","{'x': 74, 'y': 'oj8'}","{'x': 15, 'y': 'd9Y'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -124,s124,https://placehold.co/424x276.png,,,inf,-inf,124,single value,1,1.23456789,True,-105,534,-755,-989,172,334,898,156,0.498,0.9065137,0.20357828034224268,True,False,,,emoji 🤣,2023-07-15,2023-03-02,[23 28 42 24],['7h9' 'DpLm4I' 'WxHwqFEg8'],b'2\xae\xe1\xfe\x94',"[('P5y', 14)]","[('FyQ', 0)]","{'x': 39, 'y': '4uH'}","{'x': 18, 'y': 'Mrf'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -125,s125,https://placehold.co/425x275.png,,,inf,-inf,125,single value,1,1.23456789,True,25,-249,199,630,159,541,242,46,0.0672,0.5713189,0.8404524062769335,True,True,2.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-10-08,2023-09-25,[89 64 83 27],['D04' 'wzInjq' '5JzjuxZEO'],b'\xf5vm\xdc',"[('78t', 34)]","[('k8R', 28)]","{'x': 98, 'y': 'miH'}","{'x': 49, 'y': 'F0r'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -126,s126,https://placehold.co/426x274.png,,,inf,-inf,126,single value,1,1.23456789,True,88,-857,62,325,172,758,542,323,0.4053,0.662112,0.17419333657825364,True,True,3.0,a with space,emoji 🤣,2023-06-03,2023-09-19,[91],['QpY' '7NEkXk' 'SE4HNdc06'],b'\xa5^\x9f\xf0',"[('Iap', 18)]","[('CQa', 7)]","{'x': 18, 'y': 'X1t'}","{'x': 11, 'y': 'ir1'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -127,s127,https://placehold.co/427x273.png,,,inf,-inf,127,single value,1,1.23456789,True,123,-392,500,921,60,105,39,843,0.4976,0.5437789,0.9607805514869769,True,,2.0,emoji 🤣,a with space,2023-05-13,2023-08-06,[52 41 58],['PVz' '0oRaFx' 'MPMDEaIaG'],b'\x9aL',"[('MW1', 34)]","[('nKu', 50)]","{'x': 87, 'y': 'RGi'}","{'x': 31, 'y': 'agk'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -128,s128,https://placehold.co/428x272.png,,,inf,-inf,128,single value,1,1.23456789,True,59,224,705,276,46,562,228,684,0.72,0.8644929,0.4159073661469408,True,True,,a with space,emoji 🤣,2023-08-15,2023-10-10,[33],['r8b' 'YPX4gf' 'jlGYqyxzJ'],b'w\x1b',"[('Z4R', 47)]","[('LqI', 59)]","{'x': 61, 'y': '98i'}","{'x': 0, 'y': 'KjB'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -129,s129,https://placehold.co/429x271.png,,,inf,-inf,129,single value,1,1.23456789,True,-5,147,-242,-502,148,80,547,129,0.10657,0.7339099,0.8462452920190493,True,True,2.0,c having special characters: !@#$%^&*(),a with space,2023-07-08,2023-05-16,[95 95 24],['9oQ' '0O1Vfx' 'IdakEAWJ1'],b'\xabc\xb3\xa1\x84',"[('OUH', 23)]","[('oDM', 90)]","{'x': 24, 'y': '54t'}","{'x': 57, 'y': 'YqR'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-12-19,2023-07-29,[24 2 16],['Pnm' '4s4nlT' 'UU4RRyotr'],b'\xb6\x1a',"[('Um1', 6)]","[('aPx', 57)]","{'x': 74, 'y': 'iQ3'}","{'x': 15, 'y': 'rpT'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +124,s124,https://placehold.co/424x276.png,,,inf,-inf,124,single value,1,1.23456789,True,-105,534,-755,-989,172,334,898,156,0.498,0.9065137,0.20357828034224268,True,False,,,emoji 🤣,2023-07-15,2023-03-02,[23 28 42 24],['COt' 'w2CXSV' 'tmtc1TbIK'],b'2\xae\xe1\xfe\x94',"[('1Bn', 14)]","[('gw1', 0)]","{'x': 39, 'y': '4A4'}","{'x': 18, 'y': 'L4T'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +125,s125,https://placehold.co/425x275.png,,,inf,-inf,125,single value,1,1.23456789,True,25,-249,199,630,159,541,242,46,0.0672,0.5713189,0.8404524062769335,True,True,2.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-10-08,2023-09-25,[89 64 83 27],['Ssm' 'oJpI6u' 'VESTCTviH'],b'\xf5vm\xdc',"[('NRw', 34)]","[('lqq', 28)]","{'x': 98, 'y': 'VOJ'}","{'x': 49, 'y': 'Owk'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +126,s126,https://placehold.co/426x274.png,,,inf,-inf,126,single value,1,1.23456789,True,88,-857,62,325,172,758,542,323,0.4053,0.662112,0.17419333657825364,True,True,3.0,a with space,emoji 🤣,2023-06-03,2023-09-19,[91],['l39' '7G0eYd' 'aiNejnCdN'],b'\xa5^\x9f\xf0',"[('KTm', 18)]","[('7vl', 7)]","{'x': 18, 'y': 'jeH'}","{'x': 11, 'y': 'Wol'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +127,s127,https://placehold.co/427x273.png,,,inf,-inf,127,single value,1,1.23456789,True,123,-392,500,921,60,105,39,843,0.4976,0.5437789,0.9607805514869769,True,,2.0,emoji 🤣,a with space,2023-05-13,2023-08-06,[52 41 58],['54O' 'aGzbSH' 'rFRA6l4Go'],b'\x9aL',"[('SlB', 34)]","[('AzU', 50)]","{'x': 87, 'y': 'Sl0'}","{'x': 31, 'y': 'Gc9'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +128,s128,https://placehold.co/428x272.png,,,inf,-inf,128,single value,1,1.23456789,True,59,224,705,276,46,562,228,684,0.72,0.8644929,0.4159073661469408,True,True,,a with space,emoji 🤣,2023-08-15,2023-10-10,[33],['Mpv' 'Xe7CpR' 'sZe9ObzxD'],b'w\x1b',"[('8e7', 47)]","[('wyB', 59)]","{'x': 61, 'y': 'jbt'}","{'x': 0, 'y': '7KY'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +129,s129,https://placehold.co/429x271.png,,,inf,-inf,129,single value,1,1.23456789,True,-5,147,-242,-502,148,80,547,129,0.10657,0.7339099,0.8462452920190493,True,True,2.0,c having special characters: !@#$%^&*(),a with space,2023-07-08,2023-05-16,[95 95 24],['NRf' '0Nu883' '4o3QJq5Qr'],b'\xabc\xb3\xa1\x84',"[('Thc', 23)]","[('J8Q', 90)]","{'x': 24, 'y': '87s'}","{'x': 57, 'y': 'ZUz'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 130,s130,https://placehold.co/430x270.png,,,inf,-inf,130,single value,1,1.23456789,True,108,-814,-463,-247,79,132,919,410,0.14,0.5212603,0.6287648182059451,True,,2.0,"multiple -lines string",emoji 🤣,2023-09-22,2023-12-28,[ 6 56],['fGc' 'n13Dce' '53Ic5t7KU'],b'\xe83\r\xa6\xb5t\xde\x11\xc9',"[('LW7', 16)]","[('wEn', 83)]","{'x': 97, 'y': 'I6h'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-09-22,2023-12-28,[ 6 56],['HOl' '0amiYY' '5sIJ0PHxT'],b'\xe83\r\xa6\xb5t\xde\x11\xc9',"[('rqj', 16)]","[('YSX', 83)]","{'x': 97, 'y': 'UYN'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 131,s131,https://placehold.co/431x269.png,,,inf,-inf,131,single value,1,1.23456789,True,-88,349,890,-966,117,796,222,94,0.2637,0.8681608,0.7353502986657526,False,False,,"multiple lines string","multiple -lines string",2023-05-14,2023-04-03,[79 42 99 76],['Sye' 'koZy3u' 'Ui9SF8dBZ'],b'?',"[('slQ', 49)]","[('Rx0', 72)]","{'x': 97, 'y': 't2T'}","{'x': 44, 'y': 'EX1'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-05-14,2023-04-03,[79 42 99 76],['XQe' 'UvgoeL' 'MK8uNWBoI'],b'?',"[('0aC', 49)]","[('I1m', 72)]","{'x': 97, 'y': 'Tjl'}","{'x': 44, 'y': 'xOT'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 132,s132,https://placehold.co/432x268.png,,,inf,-inf,132,single value,1,1.23456789,True,28,-537,841,-274,212,899,5,626,0.2666,0.24528553,0.7677238880667803,False,True,2.0,"multiple -lines string",,2023-07-30,2023-04-19,[50 72 31],,b'\x8e',"[('lkF', 31)]","[('rli', 18)]","{'x': 22, 'y': 'V2z'}","{'x': 22, 'y': 'vfi'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -133,s133,https://placehold.co/433x267.png,,,inf,-inf,133,single value,1,1.23456789,True,-114,372,-80,-152,202,137,321,754,0.7324,0.15734066,0.5048448818930178,False,,,emoji 🤣,emoji 🤣,2023-03-01,2023-08-29,[86],['vV7' 'yVbq9E' 'w6AQOfMXS'],b'\xd5&\x86t\xf1\xee',"[('xAI', 69)]","[('Jog', 44)]","{'x': 15, 'y': 'zB5'}","{'x': 6, 'y': '5jE'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -134,s134,https://placehold.co/434x266.png,,,inf,-inf,134,single value,1,1.23456789,True,-84,794,-593,-911,251,183,467,931,0.2507,0.16040011,0.5433005233632884,True,True,,,c having special characters: !@#$%^&*(),2023-12-30,2023-12-21,[44 85 58 3],['fjS' 'NTtgat' 'wqilBIzbv'],b'\x93\xad',"[('iKp', 13)]","[('qoA', 12)]","{'x': 72, 'y': '35q'}","{'x': 26, 'y': '9Vo'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -135,s135,https://placehold.co/435x265.png,,,inf,-inf,135,single value,1,1.23456789,True,-64,-341,-476,-225,228,400,731,291,0.6333,0.33400887,0.513995867808725,True,True,3.0,,,2023-12-30,2023-05-22,[28],['fLu' 'xsyf34' '8JkxisEdA'],b'v',"[('uSj', 78)]",,"{'x': 18, 'y': 'Wgl'}","{'x': 78, 'y': 'BNn'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -136,s136,https://placehold.co/436x264.png,,,inf,-inf,136,single value,1,1.23456789,True,-40,-237,-173,-396,163,329,74,793,0.4944,0.23869003,0.5880583780900792,True,False,1.0,a with space,,2023-08-01,2023-10-18,[76 78 86 43],['AEe' 'ppMKmg' 's6uMXuuY1'],b'u\x04\x85\xcd\x13\x12\x8a\xaf',"[('jud', 67)]","[('xj7', 51)]","{'x': 79, 'y': 'VLq'}","{'x': 54, 'y': 'TvN'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -137,s137,https://placehold.co/437x263.png,,,inf,-inf,137,single value,1,1.23456789,True,-58,-46,529,945,226,784,3,810,0.573,0.93009037,0.029394445756507293,True,True,1.0,emoji 🤣,emoji 🤣,2023-08-04,2023-08-25,,['8it' '6mt78s' 'REJpxYyhI'],b'\x9b\x9c\x97',"[('5MP', 79)]","[('jXk', 85)]","{'x': 54, 'y': 'Joo'}","{'x': 56, 'y': 'Uhk'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-07-30,2023-04-19,[50 72 31],,b'\x8e',"[('6c5', 31)]","[('XTD', 18)]","{'x': 22, 'y': 'ib9'}","{'x': 22, 'y': 'kJ0'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +133,s133,https://placehold.co/433x267.png,,,inf,-inf,133,single value,1,1.23456789,True,-114,372,-80,-152,202,137,321,754,0.7324,0.15734066,0.5048448818930178,False,,,emoji 🤣,emoji 🤣,2023-03-01,2023-08-29,[86],['xlK' 'xVspeq' 'xWjywf6BV'],b'\xd5&\x86t\xf1\xee',"[('LVM', 69)]","[('aAi', 44)]","{'x': 15, 'y': 'MLL'}","{'x': 6, 'y': 'dqY'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +134,s134,https://placehold.co/434x266.png,,,inf,-inf,134,single value,1,1.23456789,True,-84,794,-593,-911,251,183,467,931,0.2507,0.16040011,0.5433005233632884,True,True,,,c having special characters: !@#$%^&*(),2023-12-30,2023-12-21,[44 85 58 3],['gfA' 'IFgfIL' 'W1azWSI9p'],b'\x93\xad',"[('0sW', 13)]","[('3NH', 12)]","{'x': 72, 'y': 'Kob'}","{'x': 26, 'y': 'dCD'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +135,s135,https://placehold.co/435x265.png,,,inf,-inf,135,single value,1,1.23456789,True,-64,-341,-476,-225,228,400,731,291,0.6333,0.33400887,0.513995867808725,True,True,3.0,,,2023-12-30,2023-05-22,[28],['GQk' 'qqjkrs' 'Ww6SEMCia'],b'v',"[('IeR', 78)]",,"{'x': 18, 'y': 'eWi'}","{'x': 78, 'y': 'D65'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +136,s136,https://placehold.co/436x264.png,,,inf,-inf,136,single value,1,1.23456789,True,-40,-237,-173,-396,163,329,74,793,0.4944,0.23869003,0.5880583780900792,True,False,1.0,a with space,,2023-08-01,2023-10-18,[76 78 86 43],['y0x' '1BAZOK' 'sLRDlytTN'],b'u\x04\x85\xcd\x13\x12\x8a\xaf',"[('G7G', 67)]","[('tEp', 51)]","{'x': 79, 'y': '0DO'}","{'x': 54, 'y': 'oQy'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +137,s137,https://placehold.co/437x263.png,,,inf,-inf,137,single value,1,1.23456789,True,-58,-46,529,945,226,784,3,810,0.573,0.93009037,0.029394445756507293,True,True,1.0,emoji 🤣,emoji 🤣,2023-08-04,2023-08-25,,['8Wu' 'rWw5m9' 'lVbT6mXZe'],b'\x9b\x9c\x97',"[('WjH', 79)]","[('1cg', 85)]","{'x': 54, 'y': 'lyD'}","{'x': 56, 'y': 'qGA'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 138,s138,https://placehold.co/438x262.png,,,inf,-inf,138,single value,1,1.23456789,True,-120,955,-98,-31,146,507,846,282,0.838,0.1058341,0.39551516984901525,True,,2.0,"multiple -lines string",,2023-08-14,2023-12-06,[4],['KHQ' 'I7CRBs' 'QYXzENpOS'],b'$c',"[('EJw', 61)]","[('E90', 71)]","{'x': 88, 'y': 'QwQ'}","{'x': 1, 'y': 'ysU'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-08-14,2023-12-06,[4],['0XP' 'ispjAx' 'BLKH51zc8'],b'$c',"[('zv2', 61)]","[('knp', 71)]","{'x': 88, 'y': 'koz'}","{'x': 1, 'y': 'rXx'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 139,s139,https://placehold.co/439x261.png,,,inf,-inf,139,single value,1,1.23456789,True,-41,-598,848,625,19,851,645,68,0.4043,0.69899076,0.6061887135611715,False,True,2.0,"multiple -lines string",emoji 🤣,2023-05-11,2023-11-08,[49 74 14 31],['We9' 'DyF5QH' 'Xw3HNfVOw'],b'#\xcf',"[('Wtn', 89)]","[('GSW', 41)]","{'x': 5, 'y': 'DFL'}","{'x': 96, 'y': 'UHx'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -140,s140,https://placehold.co/440x260.png,,,inf,-inf,140,single value,1,1.23456789,True,0,369,-965,21,184,983,117,659,0.771,0.18922155,0.5977235652558643,False,False,3.0,c having special characters: !@#$%^&*(),,2023-03-17,2023-06-26,,['Oc8' 'QyU7Aa' 'qFGJJByVK'],b'k\xebK\x18\xa7W\xdcZ',"[('leF', 65)]","[('sIJ', 25)]","{'x': 69, 'y': 'Sx0'}","{'x': 37, 'y': 'RDi'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -141,s141,https://placehold.co/441x259.png,,,inf,-inf,141,single value,1,1.23456789,True,107,986,-316,-583,145,68,880,10,0.422,0.88163716,0.7929560946056315,True,False,3.0,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-10-13,2023-05-21,[89 70 56],['Fvb' 'gz7h6i' 'tCmDDBRts'],b'\x07\\ \x08',"[('zHf', 7)]","[('yQd', 76)]","{'x': 47, 'y': 'Eil'}","{'x': 77, 'y': '1a5'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-05-11,2023-11-08,[49 74 14 31],['RYK' '4gpPkL' 'INO7uXggn'],b'#\xcf',"[('Pus', 89)]","[('0fU', 41)]","{'x': 5, 'y': '856'}","{'x': 96, 'y': 'tG7'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +140,s140,https://placehold.co/440x260.png,,,inf,-inf,140,single value,1,1.23456789,True,0,369,-965,21,184,983,117,659,0.771,0.18922155,0.5977235652558643,False,False,3.0,c having special characters: !@#$%^&*(),,2023-03-17,2023-06-26,,['UIQ' 'nxCQQj' '9Ds5fZTvv'],b'k\xebK\x18\xa7W\xdcZ',"[('6MD', 65)]","[('qwI', 25)]","{'x': 69, 'y': 'nPm'}","{'x': 37, 'y': 'gGv'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +141,s141,https://placehold.co/441x259.png,,,inf,-inf,141,single value,1,1.23456789,True,107,986,-316,-583,145,68,880,10,0.422,0.88163716,0.7929560946056315,True,False,3.0,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-10-13,2023-05-21,[89 70 56],['WGv' 'gSCecS' 'bvgX5TFIu'],b'\x07\\ \x08',"[('IUO', 7)]","[('Yvz', 76)]","{'x': 47, 'y': 'mk7'}","{'x': 77, 'y': '0LO'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 142,s142,https://placehold.co/442x258.png,,,inf,-inf,142,single value,1,1.23456789,True,7,534,-981,-886,46,545,605,253,0.3538,0.9613153,0.6550093388321085,True,,3.0,"multiple -lines string",,2023-10-04,2023-07-08,[44 82],['Yh0' 'OPk9pk' 'jI7ozlNAb'],b'\x7f',"[('nnu', 42)]","[('YDN', 19)]","{'x': 30, 'y': 'bVa'}","{'x': 34, 'y': 'BQ7'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-10-04,2023-07-08,[44 82],['ACX' 'NlOyT2' 'BAanrRXJX'],b'\x7f',"[('hvo', 42)]","[('vQL', 19)]","{'x': 30, 'y': 'BMQ'}","{'x': 34, 'y': 'qqX'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 143,s143,https://placehold.co/443x257.png,,,inf,-inf,143,single value,1,1.23456789,True,87,-854,-680,-384,232,773,503,841,0.9585,0.46547002,0.9921333163406724,True,False,,"multiple -lines string",c having special characters: !@#$%^&*(),2023-06-05,2023-02-18,[71],['MmK' 'yRmUYd' 'g2luCq1GN'],b'\x8f\xb4\x06\xe2\xadc\xd0',"[('wnU', 44)]","[('Buw', 38)]","{'x': 29, 'y': 'qzU'}","{'x': 86, 'y': 'Qc4'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -144,s144,https://placehold.co/444x256.png,,,inf,-inf,144,single value,1,1.23456789,True,-66,171,799,926,48,52,997,871,0.1843,0.8790715,0.283854528608645,True,True,3.0,emoji 🤣,a with space,2023-09-05,2023-10-29,[94 27 74],['LLK' 'v0MYRs' 'MfihslQFz'],"b'\xcfCg\x80,\\\xed'","[('G9Z', 70)]","[('I5p', 78)]","{'x': 17, 'y': '9Ue'}","{'x': 96, 'y': 'N7A'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",c having special characters: !@#$%^&*(),2023-06-05,2023-02-18,[71],['Hwm' 'hPE7ty' 'yhvCkPX4K'],b'\x8f\xb4\x06\xe2\xadc\xd0',"[('N4p', 44)]","[('JOH', 38)]","{'x': 29, 'y': '13A'}","{'x': 86, 'y': 'pKC'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +144,s144,https://placehold.co/444x256.png,,,inf,-inf,144,single value,1,1.23456789,True,-66,171,799,926,48,52,997,871,0.1843,0.8790715,0.283854528608645,True,True,3.0,emoji 🤣,a with space,2023-09-05,2023-10-29,[94 27 74],['Pto' 'hxiyKJ' 'AEH45kkrl'],"b'\xcfCg\x80,\\\xed'","[('c2x', 70)]","[('8ru', 78)]","{'x': 17, 'y': 'WLZ'}","{'x': 96, 'y': 'PoP'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 145,s145,https://placehold.co/445x255.png,,,inf,-inf,145,single value,1,1.23456789,True,10,-137,-489,219,13,449,946,549,0.09033,0.0051451707,0.35915102966623147,False,False,3.0,,"multiple -lines string",2023-08-06,2023-07-09,[46],['ixl' 'NQO9IE' 'itBdwaiY7'],b'\xaf\xe3W2\x9a\xe8\x1c`',"[('8aP', 56)]","[('bh1', 77)]","{'x': 72, 'y': '591'}","{'x': 22, 'y': '41u'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -146,s146,https://placehold.co/446x254.png,,,inf,-inf,146,single value,1,1.23456789,True,114,734,-601,-175,142,204,573,133,0.771,0.81994694,0.3838471518677963,True,,2.0,c having special characters: !@#$%^&*(),,2023-07-09,2023-05-16,[53 59 56 46],['FEQ' 'z0EfbV' 'srHkCUVIh'],b'\xff\x0ct\xe2\xfe\xd5y\xcd',"[('B4M', 29)]",,"{'x': 3, 'y': 'EuC'}","{'x': 57, 'y': 'qgO'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -147,s147,https://placehold.co/447x253.png,,,inf,-inf,147,single value,1,1.23456789,True,-48,843,-347,524,158,125,440,711,0.06824,0.22862516,0.4658128070202485,True,False,3.0,,emoji 🤣,2023-06-12,2023-02-12,,['hWZ' 'wZcSH9' 'gZUs9BvYB'],b'\xd3\xc8\xaf',"[('M7Q', 17)]","[('7mJ', 10)]","{'x': 8, 'y': 'pzc'}","{'x': 81, 'y': 'yVU'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -148,s148,https://placehold.co/448x252.png,,,inf,-inf,148,single value,1,1.23456789,True,7,-512,-29,649,0,746,193,22,0.837,0.9087013,0.8359980637812094,True,False,,emoji 🤣,a with space,2023-06-29,2023-12-19,[ 4 83],['9Wo' 'YKvSNk' 'immdvrHuR'],b'\xee',"[('t46', 92)]",,"{'x': 25, 'y': 'Txt'}","{'x': 0, 'y': 'TKm'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-08-06,2023-07-09,[46],['0M1' '7EmxIO' 'zESBkJXnc'],b'\xaf\xe3W2\x9a\xe8\x1c`',"[('Xhp', 56)]","[('FWB', 77)]","{'x': 72, 'y': 'Sy6'}","{'x': 22, 'y': 'VGQ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +146,s146,https://placehold.co/446x254.png,,,inf,-inf,146,single value,1,1.23456789,True,114,734,-601,-175,142,204,573,133,0.771,0.81994694,0.3838471518677963,True,,2.0,c having special characters: !@#$%^&*(),,2023-07-09,2023-05-16,[53 59 56 46],['nrW' 'JVEFJq' 'H9HUVBnAT'],b'\xff\x0ct\xe2\xfe\xd5y\xcd',"[('SbG', 29)]",,"{'x': 3, 'y': 'JHN'}","{'x': 57, 'y': '9ta'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +147,s147,https://placehold.co/447x253.png,,,inf,-inf,147,single value,1,1.23456789,True,-48,843,-347,524,158,125,440,711,0.06824,0.22862516,0.4658128070202485,True,False,3.0,,emoji 🤣,2023-06-12,2023-02-12,,['Op2' 'bq1f1h' 'YnTQ1LAMW'],b'\xd3\xc8\xaf',"[('VFF', 17)]","[('eMC', 10)]","{'x': 8, 'y': 'Rcg'}","{'x': 81, 'y': 'aez'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +148,s148,https://placehold.co/448x252.png,,,inf,-inf,148,single value,1,1.23456789,True,7,-512,-29,649,0,746,193,22,0.837,0.9087013,0.8359980637812094,True,False,,emoji 🤣,a with space,2023-06-29,2023-12-19,[ 4 83],['YXJ' 'HLk8sJ' '7F3YiUzdr'],b'\xee',"[('EsO', 92)]",,"{'x': 25, 'y': 'C22'}","{'x': 0, 'y': 'GQv'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 149,s149,https://placehold.co/449x251.png,,,inf,-inf,149,single value,1,1.23456789,True,34,-72,906,516,116,42,846,814,0.4373,0.0011201114,0.23579209395920986,True,False,,"multiple lines string","multiple -lines string",2023-02-03,2023-03-31,[53 32 49],['rq1' '9Qf7W4' '91h1pSZVP'],b'\x07\xdd\nw\xce\x84\xd6\xf0^',"[('xHr', 97)]","[('OkW', 63)]","{'x': 15, 'y': 'LUK'}","{'x': 51, 'y': 'uQl'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -150,s150,https://placehold.co/450x250.png,,,inf,-inf,150,single value,1,1.23456789,True,34,959,-530,98,53,751,714,345,0.9155,0.5561817,0.7760002070354295,False,,2.0,,emoji 🤣,2023-02-10,2023-10-22,[14 95],['EJq' 'zCN2fF' 'r6w6uaVTT'],b'{9\xf6X',"[('4Yx', 44)]","[('wPE', 41)]","{'x': 51, 'y': 'G2W'}","{'x': 9, 'y': 'HPZ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-02-03,2023-03-31,[53 32 49],['ORi' 'jtp0yi' 'NMxeXVyUR'],b'\x07\xdd\nw\xce\x84\xd6\xf0^',"[('tff', 97)]","[('71N', 63)]","{'x': 15, 'y': 'pH8'}","{'x': 51, 'y': 'Spc'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +150,s150,https://placehold.co/450x250.png,,,inf,-inf,150,single value,1,1.23456789,True,34,959,-530,98,53,751,714,345,0.9155,0.5561817,0.7760002070354295,False,,2.0,,emoji 🤣,2023-02-10,2023-10-22,[14 95],['2CE' 'K10f8N' 'R0Xy8ZEur'],b'{9\xf6X',"[('8VH', 44)]","[('5AL', 41)]","{'x': 51, 'y': 'cyV'}","{'x': 9, 'y': 'MdK'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 151,s151,https://placehold.co/451x249.png,,,inf,-inf,151,single value,1,1.23456789,True,-96,663,166,-588,117,970,391,301,0.7217,0.7566358,0.4053101830857434,True,False,3.0,"multiple -lines string",,2023-11-03,2023-12-07,[45],,b'\x0b\xbd]e\xb03%',"[('XBc', 93)]","[('T3x', 98)]","{'x': 4, 'y': 'GBZ'}","{'x': 97, 'y': 'agg'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-11-03,2023-12-07,[45],,b'\x0b\xbd]e\xb03%',"[('MnN', 93)]","[('z4e', 98)]","{'x': 4, 'y': '7lB'}","{'x': 97, 'y': '3nL'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 152,s152,https://placehold.co/452x248.png,,,inf,-inf,152,single value,1,1.23456789,True,-6,-450,115,399,2,882,25,362,0.6104,0.25868833,0.6018553836620085,True,False,3.0,"multiple -lines string",emoji 🤣,2023-12-04,2023-09-02,,,b'\xed\xd1G',"[('3lF', 3)]","[('rNi', 58)]","{'x': 17, 'y': 'c9G'}","{'x': 20, 'y': 'Bnr'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -153,s153,https://placehold.co/453x247.png,,,inf,-inf,153,single value,1,1.23456789,True,-124,-663,377,443,143,110,434,395,0.949,0.19313286,0.6325405332263061,False,True,,a with space,c having special characters: !@#$%^&*(),2023-11-10,2023-07-11,[61 81],['CPw' 'dHnAnq' 'ZuJJEvQdg'],b'FD',"[('6k7', 5)]","[('kYu', 46)]","{'x': 92, 'y': 'yTI'}","{'x': 80, 'y': 'lbf'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -154,s154,https://placehold.co/454x246.png,,,inf,-inf,154,single value,1,1.23456789,True,105,-129,-167,-272,214,760,172,217,0.3967,0.08409823,0.37284863718893446,False,,3.0,,c having special characters: !@#$%^&*(),2023-03-16,2023-11-14,[12 94],['WCh' '1Ba7mQ' 'iOj5qOpx4'],b'\xfab',"[('Hae', 17)]","[('NJ0', 10)]","{'x': 41, 'y': 'FNd'}","{'x': 62, 'y': '6OZ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -155,s155,https://placehold.co/455x245.png,,,inf,-inf,155,single value,1,1.23456789,True,102,-360,823,300,184,662,299,140,0.954,0.32643357,0.5126152052058052,False,False,3.0,,,2023-10-06,2023-04-16,,,b'\xd7\n@\xf1\x89\xb3',"[('PV1', 95)]","[('eko', 67)]","{'x': 60, 'y': 'sys'}","{'x': 50, 'y': '6NR'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",emoji 🤣,2023-12-04,2023-09-02,,,b'\xed\xd1G',"[('nQZ', 3)]","[('vtO', 58)]","{'x': 17, 'y': '2Vr'}","{'x': 20, 'y': 'h7f'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +153,s153,https://placehold.co/453x247.png,,,inf,-inf,153,single value,1,1.23456789,True,-124,-663,377,443,143,110,434,395,0.949,0.19313286,0.6325405332263061,False,True,,a with space,c having special characters: !@#$%^&*(),2023-11-10,2023-07-11,[61 81],['Hi0' 'W3VcMZ' 'b5jC9A942'],b'FD',"[('mZ2', 5)]","[('SLy', 46)]","{'x': 92, 'y': 'ks4'}","{'x': 80, 'y': 'LxV'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +154,s154,https://placehold.co/454x246.png,,,inf,-inf,154,single value,1,1.23456789,True,105,-129,-167,-272,214,760,172,217,0.3967,0.08409823,0.37284863718893446,False,,3.0,,c having special characters: !@#$%^&*(),2023-03-16,2023-11-14,[12 94],['s22' 'fwfPOd' 'MTUAffneK'],b'\xfab',"[('TAY', 17)]","[('3W6', 10)]","{'x': 41, 'y': 'Q4C'}","{'x': 62, 'y': 'OXl'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +155,s155,https://placehold.co/455x245.png,,,inf,-inf,155,single value,1,1.23456789,True,102,-360,823,300,184,662,299,140,0.954,0.32643357,0.5126152052058052,False,False,3.0,,,2023-10-06,2023-04-16,,,b'\xd7\n@\xf1\x89\xb3',"[('eQb', 95)]","[('UGB', 67)]","{'x': 60, 'y': 'OfF'}","{'x': 50, 'y': 'gls'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 156,s156,https://placehold.co/456x244.png,,,inf,-inf,156,single value,1,1.23456789,True,121,802,-274,20,202,182,644,615,0.135,0.5598443,0.413031174647697,True,,3.0,"multiple -lines string",a with space,2023-06-25,2023-12-29,[7],['kys' 'RoORaD' 'ioQaRY9Ai'],b'SL\xa6\x87\x82',"[('AgH', 73)]","[('tsq', 25)]","{'x': 7, 'y': 'ZCA'}","{'x': 55, 'y': 'h1i'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",a with space,2023-06-25,2023-12-29,[7],['GBa' 'vh1RDo' 'fXgwsxY2N'],b'SL\xa6\x87\x82',"[('Sce', 73)]","[('k0h', 25)]","{'x': 7, 'y': 'lK3'}","{'x': 55, 'y': 'OeC'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 157,s157,https://placehold.co/457x243.png,,,inf,-inf,157,single value,1,1.23456789,True,-88,976,982,-240,11,847,325,957,0.4836,0.115843855,0.06913278618661944,True,False,1.0,emoji 🤣,"multiple -lines string",2023-05-30,2023-11-06,[32 80 74],['exT' 'gt2iVU' 'i9iGaOBSM'],"b""'7\xbf\xf7GbK\x1d'""","[('R8W', 62)]","[('NqB', 11)]","{'x': 62, 'y': 'MdG'}","{'x': 31, 'y': 'O3J'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -158,s158,https://placehold.co/458x242.png,,,inf,-inf,158,single value,1,1.23456789,True,-101,-528,-147,-325,73,94,409,209,0.27,0.37669536,0.43716538881682654,False,False,2.0,a with space,emoji 🤣,2023-09-30,2023-08-21,[94 27 69],['jzQ' '1fgUKx' '7tirfILLW'],,"[('O6U', 10)]","[('1wK', 36)]","{'x': 8, 'y': 'iZC'}","{'x': 26, 'y': '73R'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-05-30,2023-11-06,[32 80 74],['PeI' 'LkvnU5' 'MBn3ihTvA'],"b""'7\xbf\xf7GbK\x1d'""","[('lpe', 62)]","[('opU', 11)]","{'x': 62, 'y': 'Hyu'}","{'x': 31, 'y': '9VQ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +158,s158,https://placehold.co/458x242.png,,,inf,-inf,158,single value,1,1.23456789,True,-101,-528,-147,-325,73,94,409,209,0.27,0.37669536,0.43716538881682654,False,False,2.0,a with space,emoji 🤣,2023-09-30,2023-08-21,[94 27 69],['XpN' 'pLSr6b' '02mLlyOWX'],,"[('Y4z', 10)]","[('Uny', 36)]","{'x': 8, 'y': 'bC3'}","{'x': 26, 'y': 'PVp'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 159,s159,https://placehold.co/459x241.png,,,inf,-inf,159,single value,1,1.23456789,True,6,969,-950,417,223,970,117,984,0.54,0.009072404,0.09739339255355217,False,False,1.0,"multiple -lines string",c having special characters: !@#$%^&*(),2023-11-21,2023-09-22,[98 47 55 63],['Q0O' 'sGFUsd' '37EgEKG89'],b'\\\xb4>8]\x83\x85;',"[('jCu', 95)]",,"{'x': 10, 'y': 'ShW'}","{'x': 63, 'y': 'pC6'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -160,s160,https://placehold.co/460x240.png,,,inf,-inf,160,single value,1,1.23456789,True,72,-850,688,892,15,373,835,992,0.162,0.8186794,0.4050207990803215,False,True,2.0,c having special characters: !@#$%^&*(),a with space,2023-04-18,2023-12-10,[75 10],,,"[('fdX', 67)]","[('7zl', 12)]","{'x': 41, 'y': '6Ri'}","{'x': 57, 'y': 'N5r'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -161,s161,https://placehold.co/461x239.png,,,inf,-inf,161,single value,1,1.23456789,True,-57,438,721,-544,199,911,786,622,0.8413,0.12844872,0.5929183998317819,False,True,,c having special characters: !@#$%^&*(),,2023-05-19,2023-02-06,[18 86],['5i1' 'JwQV7V' 'beqcdWFMF'],b'\xa3',"[('IJo', 82)]","[('bTP', 53)]","{'x': 12, 'y': 'zBl'}","{'x': 35, 'y': 'A4V'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -162,s162,https://placehold.co/462x238.png,,,inf,-inf,162,single value,1,1.23456789,True,-117,321,-426,-81,101,519,723,615,0.846,0.28334296,0.5794148993435008,False,True,3.0,a with space,,2023-12-16,2023-11-01,,['zRf' 'HMrtFm' 'YHyNZQeRT'],b'd\xc8\xe35',"[('qyN', 85)]","[('6Re', 3)]","{'x': 73, 'y': 'KSm'}","{'x': 12, 'y': 'uke'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -163,s163,https://placehold.co/463x237.png,,,inf,-inf,163,single value,1,1.23456789,True,33,634,213,-809,203,899,224,827,0.955,0.018427718,0.6626212790083204,False,,2.0,emoji 🤣,c having special characters: !@#$%^&*(),2023-09-28,2023-02-10,[5 3],['0df' 'ACLtTT' 'hRRk7GWSk'],b'\xde\xac\x9c%',"[('AbP', 34)]","[('kgd', 48)]","{'x': 72, 'y': 'CpQ'}","{'x': 86, 'y': 'Wxu'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",c having special characters: !@#$%^&*(),2023-11-21,2023-09-22,[98 47 55 63],['oxo' 'Ne3awt' 'x0AHkD9eK'],b'\\\xb4>8]\x83\x85;',"[('Bzt', 95)]",,"{'x': 10, 'y': '32f'}","{'x': 63, 'y': 'Wrd'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +160,s160,https://placehold.co/460x240.png,,,inf,-inf,160,single value,1,1.23456789,True,72,-850,688,892,15,373,835,992,0.162,0.8186794,0.4050207990803215,False,True,2.0,c having special characters: !@#$%^&*(),a with space,2023-04-18,2023-12-10,[75 10],,,"[('yha', 67)]","[('f6D', 12)]","{'x': 41, 'y': 'uOS'}","{'x': 57, 'y': 'y9q'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +161,s161,https://placehold.co/461x239.png,,,inf,-inf,161,single value,1,1.23456789,True,-57,438,721,-544,199,911,786,622,0.8413,0.12844872,0.5929183998317819,False,True,,c having special characters: !@#$%^&*(),,2023-05-19,2023-02-06,[18 86],['an5' '6yrSVA' 'yNHjfe58j'],b'\xa3',"[('SdU', 82)]","[('dVG', 53)]","{'x': 12, 'y': 'kTf'}","{'x': 35, 'y': 'Yle'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +162,s162,https://placehold.co/462x238.png,,,inf,-inf,162,single value,1,1.23456789,True,-117,321,-426,-81,101,519,723,615,0.846,0.28334296,0.5794148993435008,False,True,3.0,a with space,,2023-12-16,2023-11-01,,['uKV' 'ONtB7o' 'p5hLdPOka'],b'd\xc8\xe35',"[('c0w', 85)]","[('9gM', 3)]","{'x': 73, 'y': 'RNf'}","{'x': 12, 'y': '8my'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +163,s163,https://placehold.co/463x237.png,,,inf,-inf,163,single value,1,1.23456789,True,33,634,213,-809,203,899,224,827,0.955,0.018427718,0.6626212790083204,False,,2.0,emoji 🤣,c having special characters: !@#$%^&*(),2023-09-28,2023-02-10,[5 3],['iaE' 'vGYqxU' '2Th3uAGq8'],b'\xde\xac\x9c%',"[('FrQ', 34)]","[('f5y', 48)]","{'x': 72, 'y': 'RT8'}","{'x': 86, 'y': 'OgH'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 164,s164,https://placehold.co/464x236.png,,,inf,-inf,164,single value,1,1.23456789,True,-96,-738,148,-262,151,359,531,682,0.1547,0.43224078,0.09526150795462629,True,,1.0,"multiple -lines string",,2023-12-13,2023-01-17,[58],['hWq' '2VbYqd' 'SJeCwEJwp'],b'~IZ\xddWG',"[('HNM', 83)]","[('2Ib', 10)]","{'x': 1, 'y': '4XS'}","{'x': 62, 'y': 'd7q'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -165,s165,https://placehold.co/465x235.png,,,inf,-inf,165,single value,1,1.23456789,True,-81,787,-851,712,155,899,112,459,0.6235,0.8401215,0.6521232455304379,True,True,3.0,,emoji 🤣,2023-10-16,2023-12-10,[42],['gJS' 'oFc1pD' 'xj51I4TAt'],b'\x15\xbb<\x19\x81\xae\n',"[('UKR', 10)]","[('yVf', 86)]","{'x': 59, 'y': 'hhB'}","{'x': 74, 'y': 'BE5'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",,2023-12-13,2023-01-17,[58],['MEF' 'd1kjV3' 'PhTa1acw5'],b'~IZ\xddWG',"[('Lr5', 83)]","[('oTB', 10)]","{'x': 1, 'y': 'LjI'}","{'x': 62, 'y': 'AMg'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +165,s165,https://placehold.co/465x235.png,,,inf,-inf,165,single value,1,1.23456789,True,-81,787,-851,712,155,899,112,459,0.6235,0.8401215,0.6521232455304379,True,True,3.0,,emoji 🤣,2023-10-16,2023-12-10,[42],['l7c' 'XSOnp4' 'tZJhPdnFc'],b'\x15\xbb<\x19\x81\xae\n',"[('xYb', 10)]","[('hGk', 86)]","{'x': 59, 'y': 'cku'}","{'x': 74, 'y': 'Bqc'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 166,s166,https://placehold.co/466x234.png,,,inf,-inf,166,single value,1,1.23456789,True,118,-857,-687,122,116,695,139,355,0.474,0.3921512,0.3121480566964471,True,,,a with space,"multiple -lines string",2023-07-31,2023-10-04,[33 7],['zSq' 'exF3lX' '87eCr0uIa'],b'\xbf\xb8~z\xe5',"[('e5g', 2)]","[('qjO', 27)]","{'x': 39, 'y': 'wGx'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -167,s167,https://placehold.co/467x233.png,,,inf,-inf,167,single value,1,1.23456789,True,22,-655,-431,571,7,280,558,323,0.3445,0.17949732,0.3990459461371111,False,False,2.0,emoji 🤣,c having special characters: !@#$%^&*(),2023-09-29,2023-11-03,[93 95 99 93],['mIs' 'MCKEVm' '3Vpazov02'],b'b]\xbe\x9f\xab\xd7\xcd\x00',"[('Wsf', 75)]","[('2tp', 56)]","{'x': 84, 'y': 'XF6'}","{'x': 42, 'y': 'LlE'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -168,s168,https://placehold.co/468x232.png,,,inf,-inf,168,single value,1,1.23456789,True,-67,-377,365,-23,121,194,0,132,0.3516,0.7536988,0.8579862539227058,False,False,2.0,,c having special characters: !@#$%^&*(),2023-03-07,2023-02-28,[80 58 83],['6aO' '0TgGoE' 'd9Sf53GRx'],b'\x90\xcc\x0f\x15@L\x16',"[('VBy', 96)]","[('rMi', 53)]","{'x': 77, 'y': 'xxV'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -169,s169,https://placehold.co/469x231.png,,,inf,-inf,169,single value,1,1.23456789,True,87,16,-696,8,91,863,89,887,0.4128,0.788807,0.009030404129550251,False,False,2.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-09-05,2023-07-02,[92 85],['8ff' 'iYeJA7' 'oqtXRTtqe'],b'\xb6u\x16\xb7i(\x96\x0e\xb4',"[('ODH', 72)]","[('ZbP', 96)]","{'x': 68, 'y': '4JO'}","{'x': 87, 'y': 'iVn'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -170,s170,https://placehold.co/470x230.png,,,inf,-inf,170,single value,1,1.23456789,True,-92,595,715,-905,163,194,653,804,0.705,0.17375347,0.5884126333406055,False,True,3.0,c having special characters: !@#$%^&*(),,2023-06-05,2023-02-10,[73],['mWK' 'jkCzH7' 'mtqhjQZRc'],b'\x15k\xd30\x8c\xff\x99\xb9X',"[('iyX', 82)]","[('1uD', 77)]","{'x': 88, 'y': 'j1l'}","{'x': 96, 'y': 'N4S'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -171,s171,https://placehold.co/471x229.png,,,inf,-inf,171,single value,1,1.23456789,True,-30,-120,-319,687,89,666,319,839,0.598,0.7708541,0.5987139801001076,False,,1.0,,a with space,2023-02-16,2023-02-08,[27 41 42 84],['Zuf' 'pwFPq9' 'bzCUpCXia'],b'\xcb\xd3\xe4',"[('H7i', 68)]",,"{'x': 19, 'y': 'SAt'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-07-31,2023-10-04,[33 7],['y21' 'VtfCws' 'WTpw89WTH'],b'\xbf\xb8~z\xe5',"[('jnU', 2)]","[('cw4', 27)]","{'x': 39, 'y': '21k'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +167,s167,https://placehold.co/467x233.png,,,inf,-inf,167,single value,1,1.23456789,True,22,-655,-431,571,7,280,558,323,0.3445,0.17949732,0.3990459461371111,False,False,2.0,emoji 🤣,c having special characters: !@#$%^&*(),2023-09-29,2023-11-03,[93 95 99 93],['Xj5' 'bHNQau' 'VxTtm8A78'],b'b]\xbe\x9f\xab\xd7\xcd\x00',"[('X0s', 75)]","[('1C1', 56)]","{'x': 84, 'y': 'iVd'}","{'x': 42, 'y': 'eTW'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +168,s168,https://placehold.co/468x232.png,,,inf,-inf,168,single value,1,1.23456789,True,-67,-377,365,-23,121,194,0,132,0.3516,0.7536988,0.8579862539227058,False,False,2.0,,c having special characters: !@#$%^&*(),2023-03-07,2023-02-28,[80 58 83],['irc' 'o0z3CU' 'KFNyKdPis'],b'\x90\xcc\x0f\x15@L\x16',"[('Ns2', 96)]","[('5Ii', 53)]","{'x': 77, 'y': 'tT7'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +169,s169,https://placehold.co/469x231.png,,,inf,-inf,169,single value,1,1.23456789,True,87,16,-696,8,91,863,89,887,0.4128,0.788807,0.009030404129550251,False,False,2.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-09-05,2023-07-02,[92 85],['05y' 'ZuCo6i' 'VggBthwVC'],b'\xb6u\x16\xb7i(\x96\x0e\xb4',"[('71O', 72)]","[('6HK', 96)]","{'x': 68, 'y': 'rl3'}","{'x': 87, 'y': 'bEO'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +170,s170,https://placehold.co/470x230.png,,,inf,-inf,170,single value,1,1.23456789,True,-92,595,715,-905,163,194,653,804,0.705,0.17375347,0.5884126333406055,False,True,3.0,c having special characters: !@#$%^&*(),,2023-06-05,2023-02-10,[73],['C0f' 'YsRLn1' 'jS8ydsYk7'],b'\x15k\xd30\x8c\xff\x99\xb9X',"[('7a2', 82)]","[('CU2', 77)]","{'x': 88, 'y': '7aV'}","{'x': 96, 'y': 'acy'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +171,s171,https://placehold.co/471x229.png,,,inf,-inf,171,single value,1,1.23456789,True,-30,-120,-319,687,89,666,319,839,0.598,0.7708541,0.5987139801001076,False,,1.0,,a with space,2023-02-16,2023-02-08,[27 41 42 84],['0II' 'fgXhdW' 'nmyQ6fK4e'],b'\xcb\xd3\xe4',"[('icJ', 68)]",,"{'x': 19, 'y': 'aEE'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 172,s172,https://placehold.co/472x228.png,,,inf,-inf,172,single value,1,1.23456789,True,43,-999,-163,-338,135,92,549,126,0.4597,0.9472979,0.396659776343562,False,True,1.0,a with space,"multiple -lines string",2023-07-20,2023-07-11,[65 54 71 47],['Z8i' 'ZxNNKq' 'Ybd3Bh4Zu'],b'\xa6R\x11\xd7\x0c\x9e\x03',"[('P4X', 86)]","[('8Hq', 66)]","{'x': 80, 'y': 'VBM'}","{'x': 1, 'y': 'geJ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -173,s173,https://placehold.co/473x227.png,,,inf,-inf,173,single value,1,1.23456789,True,-25,-104,806,213,185,671,804,105,0.0759,0.16637759,0.23702785710833618,True,,2.0,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-05-28,2023-09-24,,['cCk' 'JYybQk' 'nlr2cMpsz'],"b""'P\xbf\xf0\x93z\x18_\xd9""","[('Tx6', 27)]","[('B8R', 29)]","{'x': 24, 'y': 'him'}","{'x': 61, 'y': 'pB3'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-07-20,2023-07-11,[65 54 71 47],['9mO' 'Yf0Yh6' 'd5ASExAv4'],b'\xa6R\x11\xd7\x0c\x9e\x03',"[('yHf', 86)]","[('ANH', 66)]","{'x': 80, 'y': 'YLE'}","{'x': 1, 'y': 'juy'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +173,s173,https://placehold.co/473x227.png,,,inf,-inf,173,single value,1,1.23456789,True,-25,-104,806,213,185,671,804,105,0.0759,0.16637759,0.23702785710833618,True,,2.0,c having special characters: !@#$%^&*(),c having special characters: !@#$%^&*(),2023-05-28,2023-09-24,,['rBj' 'MMOE2D' 'fxzNXp9Hb'],"b""'P\xbf\xf0\x93z\x18_\xd9""","[('nTT', 27)]","[('4Do', 29)]","{'x': 24, 'y': 'nOC'}","{'x': 61, 'y': 'aRV'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 174,s174,https://placehold.co/474x226.png,,,inf,-inf,174,single value,1,1.23456789,True,85,327,77,759,59,945,893,603,0.07776,0.7709843,0.2346740382615511,True,False,,"multiple lines string","multiple -lines string",2023-05-04,,[92],['Idr' 'im2GNX' 'X9WwHE4Fy'],b'L\xc3',"[('IIh', 24)]","[('kLN', 44)]","{'x': 91, 'y': 'MpC'}","{'x': 67, 'y': 'jN5'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -175,s175,https://placehold.co/475x225.png,,,inf,-inf,175,single value,1,1.23456789,True,90,-747,2,-964,177,60,138,798,0.00234,0.70857203,0.8837096696607526,False,True,,,c having special characters: !@#$%^&*(),2023-01-01,2023-11-29,[44],['ltn' '3Wd9GV' '98gOqY4d9'],b'\xd2D\x96\xd6\xbb\x19',"[('aKH', 57)]","[('NIG', 88)]","{'x': 69, 'y': '1Ha'}","{'x': 49, 'y': 'PqR'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-05-04,,[92],['xSD' 'WvJtqb' 'LbYrYDwKo'],b'L\xc3',"[('n40', 24)]","[('ftz', 44)]","{'x': 91, 'y': 'BLa'}","{'x': 67, 'y': 'DzT'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +175,s175,https://placehold.co/475x225.png,,,inf,-inf,175,single value,1,1.23456789,True,90,-747,2,-964,177,60,138,798,0.00234,0.70857203,0.8837096696607526,False,True,,,c having special characters: !@#$%^&*(),2023-01-01,2023-11-29,[44],['jpo' 'HXTV6J' '8y59kotTw'],b'\xd2D\x96\xd6\xbb\x19',"[('ilM', 57)]","[('jaG', 88)]","{'x': 69, 'y': '2rM'}","{'x': 49, 'y': 'Yeo'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 176,s176,https://placehold.co/476x224.png,,,inf,-inf,176,single value,1,1.23456789,True,-94,675,-557,803,27,633,510,377,0.968,0.4735739,0.4420243737828575,True,,1.0,,"multiple -lines string",2023-09-04,2023-05-07,[53],['n0X' 'v00kKX' 'R4bR6IIl9'],b'/P\xba',"[('6sU', 40)]","[('Ntv', 46)]","{'x': 98, 'y': '2oK'}","{'x': 39, 'y': '4JF'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -177,s177,https://placehold.co/477x223.png,,,inf,-inf,177,single value,1,1.23456789,True,64,-548,-388,392,219,50,867,904,0.005253,0.05792046,0.33088936298917193,False,,,c having special characters: !@#$%^&*(),,2023-12-09,2023-02-15,[33 0 31],['2Et' 'EfonGa' '4miS40ubK'],b'&\xe7\xd2\xb2\xc3\xae8',"[('4vz', 98)]","[('HXB', 37)]","{'x': 83, 'y': 'Dze'}","{'x': 84, 'y': '6EB'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -178,s178,https://placehold.co/478x222.png,,,inf,-inf,178,single value,1,1.23456789,True,98,60,-8,718,100,402,844,50,0.1031,0.07469442,0.44877757383140304,True,False,1.0,a with space,c having special characters: !@#$%^&*(),2023-05-08,2023-02-14,[66 83 19],['4W0' '17x6yg' 'sij6X7Ok8'],b'\x8c\x87H2lk\xcf\xe3',"[('OFj', 97)]","[('wqs', 88)]","{'x': 82, 'y': 'LpH'}","{'x': 54, 'y': '0WW'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-09-04,2023-05-07,[53],['KRv' 'Ji6ZY8' 'HkcdLbDuM'],b'/P\xba',"[('phP', 40)]","[('Vir', 46)]","{'x': 98, 'y': 'Yml'}","{'x': 39, 'y': 'xQW'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +177,s177,https://placehold.co/477x223.png,,,inf,-inf,177,single value,1,1.23456789,True,64,-548,-388,392,219,50,867,904,0.005253,0.05792046,0.33088936298917193,False,,,c having special characters: !@#$%^&*(),,2023-12-09,2023-02-15,[33 0 31],['Xvl' 'X1djRi' 'gGweRPKuu'],b'&\xe7\xd2\xb2\xc3\xae8',"[('JdU', 98)]","[('HQE', 37)]","{'x': 83, 'y': 'dvj'}","{'x': 84, 'y': 'hH9'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +178,s178,https://placehold.co/478x222.png,,,inf,-inf,178,single value,1,1.23456789,True,98,60,-8,718,100,402,844,50,0.1031,0.07469442,0.44877757383140304,True,False,1.0,a with space,c having special characters: !@#$%^&*(),2023-05-08,2023-02-14,[66 83 19],['8TB' 'NEtRI3' 'MwPYxTsla'],b'\x8c\x87H2lk\xcf\xe3',"[('9IN', 97)]","[('UsV', 88)]","{'x': 82, 'y': 'cJL'}","{'x': 54, 'y': 'usd'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 179,s179,https://placehold.co/479x221.png,,,inf,-inf,179,single value,1,1.23456789,True,-28,183,-737,548,40,788,258,28,0.3147,0.85241467,0.6693904014593614,False,True,2.0,"multiple lines string","multiple -lines string",2023-07-10,2023-01-01,[98 90 89],['R5W' 'nKktQh' 'T66y97cL5'],b'\x85\x15\x99\x82\xd2',"[('nZm', 74)]","[('aY0', 21)]","{'x': 59, 'y': 'MIZ'}","{'x': 73, 'y': 'Ha7'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -180,s180,https://placehold.co/480x220.png,,,inf,-inf,180,single value,1,1.23456789,True,46,14,76,-722,227,4,672,461,0.8076,0.99014837,0.1457565682447517,False,True,1.0,a with space,a with space,2023-03-08,2023-06-17,[44 92],['7nJ' '6iUo8k' '2fRN2Bqpe'],b'\x83\xec\xd5:\xfbW',"[('lX0', 20)]","[('vDa', 40)]","{'x': 61, 'y': 'djO'}","{'x': 17, 'y': 'YDJ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -181,s181,https://placehold.co/481x219.png,,,inf,-inf,181,single value,1,1.23456789,True,77,-992,595,-784,191,465,901,295,0.962,0.6760523,0.4494338352137377,True,True,1.0,emoji 🤣,,2023-01-04,2023-04-18,[81 67 64],,b'L\xab\xd9\xbd\x9f\x06c\xa9\xba',"[('059', 6)]","[('56D', 56)]","{'x': 87, 'y': 'c0P'}","{'x': 83, 'y': '5wQ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -182,s182,https://placehold.co/482x218.png,,,inf,-inf,182,single value,1,1.23456789,True,2,256,3,-134,154,603,689,296,0.79,0.44595832,0.5878843711103869,True,False,2.0,emoji 🤣,,2023-10-30,2023-01-19,[25 19],['pga' 'xT82Ex' 'HgD1OQke0'],b'w\xd8\xcd\xda\xdb\xe0',"[('CIs', 63)]","[('aAs', 49)]","{'x': 14, 'y': 'Zs5'}","{'x': 81, 'y': 'yN7'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -183,s183,https://placehold.co/483x217.png,,,inf,-inf,183,single value,1,1.23456789,True,-128,122,643,-128,245,681,9,725,0.6904,0.64757365,0.9485833548514337,False,True,,c having special characters: !@#$%^&*(),a with space,2023-10-21,2023-11-28,[58 74],['st7' 'ekxTH3' 'fKMDb6k3j'],b'\x9b]\xfd',"[('egS', 1)]","[('oax', 51)]","{'x': 54, 'y': 'dzl'}","{'x': 13, 'y': 'fH7'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-07-10,2023-01-01,[98 90 89],['RJ0' 'VJltYL' 'NgEuevtN7'],b'\x85\x15\x99\x82\xd2',"[('ePp', 74)]","[('XLX', 21)]","{'x': 59, 'y': 'ufg'}","{'x': 73, 'y': '9Ow'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +180,s180,https://placehold.co/480x220.png,,,inf,-inf,180,single value,1,1.23456789,True,46,14,76,-722,227,4,672,461,0.8076,0.99014837,0.1457565682447517,False,True,1.0,a with space,a with space,2023-03-08,2023-06-17,[44 92],['YPT' 'uanQvW' 'ScBAkz2vx'],b'\x83\xec\xd5:\xfbW',"[('mJ6', 20)]","[('Hl2', 40)]","{'x': 61, 'y': '9kr'}","{'x': 17, 'y': '0v0'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +181,s181,https://placehold.co/481x219.png,,,inf,-inf,181,single value,1,1.23456789,True,77,-992,595,-784,191,465,901,295,0.962,0.6760523,0.4494338352137377,True,True,1.0,emoji 🤣,,2023-01-04,2023-04-18,[81 67 64],,b'L\xab\xd9\xbd\x9f\x06c\xa9\xba',"[('wPo', 6)]","[('BpS', 56)]","{'x': 87, 'y': 'ORJ'}","{'x': 83, 'y': 'Vrm'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +182,s182,https://placehold.co/482x218.png,,,inf,-inf,182,single value,1,1.23456789,True,2,256,3,-134,154,603,689,296,0.79,0.44595832,0.5878843711103869,True,False,2.0,emoji 🤣,,2023-10-30,2023-01-19,[25 19],['ZWJ' 'VnBXcb' 'qgv3je68u'],b'w\xd8\xcd\xda\xdb\xe0',"[('rel', 63)]","[('OZn', 49)]","{'x': 14, 'y': 'I7U'}","{'x': 81, 'y': 'I7O'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +183,s183,https://placehold.co/483x217.png,,,inf,-inf,183,single value,1,1.23456789,True,-128,122,643,-128,245,681,9,725,0.6904,0.64757365,0.9485833548514337,False,True,,c having special characters: !@#$%^&*(),a with space,2023-10-21,2023-11-28,[58 74],['93R' 'AOLAdu' '8zI5HOsfy'],b'\x9b]\xfd',"[('EuO', 1)]","[('eMG', 51)]","{'x': 54, 'y': 'wcV'}","{'x': 13, 'y': 'syg'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 184,s184,https://placehold.co/484x216.png,,,inf,-inf,184,single value,1,1.23456789,True,-124,682,-996,821,190,828,260,778,0.5215,0.5943959,0.25252778207541926,False,False,1.0,c having special characters: !@#$%^&*(),"multiple -lines string",2023-05-23,2023-03-13,[64],['gml' 'RSTqro' 'dJ0jwAsPL'],b'\xe1\xcaa\xd3\xcf\x82',"[('Euh', 41)]","[('zIy', 52)]","{'x': 13, 'y': 'PLQ'}","{'x': 94, 'y': 'eCV'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -185,s185,https://placehold.co/485x215.png,,,inf,-inf,185,single value,1,1.23456789,True,89,-185,126,296,144,533,918,406,0.08673,0.38361228,0.35925074791624556,True,False,1.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-07-10,2023-04-19,[40 92],['mbk' 'sf0tyE' 'OfHl2wBqC'],b'\xc7\x1aM\xf8\xf6H',"[('OgM', 74)]","[('kTy', 3)]","{'x': 99, 'y': 'KWk'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -186,s186,https://placehold.co/486x214.png,,,inf,-inf,186,single value,1,1.23456789,True,118,-793,219,904,200,404,649,768,0.958,0.065626144,0.3793585899224238,True,False,2.0,emoji 🤣,a with space,2023-01-21,2023-09-25,[10 55 50 20],['oqd' 'UPfvH8' 'KI0YzH1D2'],b'\x05\xe8\x1f\xc9\xcdd\xe2_\x1f',"[('3tB', 17)]","[('xqA', 42)]","{'x': 82, 'y': 'CJ5'}","{'x': 46, 'y': 'Okc'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-05-23,2023-03-13,[64],['IEd' 'afZMDg' 'mN8DhWD3q'],b'\xe1\xcaa\xd3\xcf\x82',"[('QjJ', 41)]","[('XMR', 52)]","{'x': 13, 'y': 'u3Y'}","{'x': 94, 'y': 'QE2'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +185,s185,https://placehold.co/485x215.png,,,inf,-inf,185,single value,1,1.23456789,True,89,-185,126,296,144,533,918,406,0.08673,0.38361228,0.35925074791624556,True,False,1.0,c having special characters: !@#$%^&*(),emoji 🤣,2023-07-10,2023-04-19,[40 92],['Nyx' 'xlcBqZ' 'IjRfPYzUo'],b'\xc7\x1aM\xf8\xf6H',"[('Y7k', 74)]","[('qOG', 3)]","{'x': 99, 'y': 'V0e'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +186,s186,https://placehold.co/486x214.png,,,inf,-inf,186,single value,1,1.23456789,True,118,-793,219,904,200,404,649,768,0.958,0.065626144,0.3793585899224238,True,False,2.0,emoji 🤣,a with space,2023-01-21,2023-09-25,[10 55 50 20],['dyG' '7Q6Jos' 'y0cJGJ8j6'],b'\x05\xe8\x1f\xc9\xcdd\xe2_\x1f',"[('tWS', 17)]","[('qle', 42)]","{'x': 82, 'y': 'Dh1'}","{'x': 46, 'y': 'Blc'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 187,s187,https://placehold.co/487x213.png,,,inf,-inf,187,single value,1,1.23456789,True,126,154,-227,-939,160,837,171,813,0.7583,0.82151294,0.6055381576448828,False,,,a with space,"multiple -lines string",2023-08-15,2023-08-28,[18 59],['De3' 'SF3XQM' 'hUk98YhA9'],b'\xff6\xdc',"[('MsK', 58)]","[('oV4', 3)]","{'x': 15, 'y': 'fsw'}","{'x': 8, 'y': 'xlR'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -188,s188,https://placehold.co/488x212.png,,,inf,-inf,188,single value,1,1.23456789,True,13,-597,-124,-405,244,512,897,612,0.639,0.37183353,0.35673205304000166,True,True,1.0,a with space,a with space,2023-11-09,2023-10-28,[70 25 39],['A9M' 'Zp44ey' 'yurC2WMGA'],b':',"[('Jwt', 5)]","[('YQr', 93)]","{'x': 50, 'y': 'xeA'}","{'x': 26, 'y': '3Nw'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -189,s189,https://placehold.co/489x211.png,,,inf,-inf,189,single value,1,1.23456789,True,-26,-849,-9,903,211,644,12,404,0.7593,0.81878567,0.5335119252996956,False,True,2.0,c having special characters: !@#$%^&*(),a with space,2023-04-27,2023-03-31,[ 3 22],['zjK' 'V65Igr' 'HvzxELcri'],"b'\xbd\xde\xd4,3'","[('Aap', 46)]","[('UYz', 60)]","{'x': 91, 'y': 'Isi'}","{'x': 18, 'y': 'fNT'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-08-15,2023-08-28,[18 59],['B6k' 'nlceQm' 'YjKtTYfII'],b'\xff6\xdc',"[('Nrw', 58)]","[('igC', 3)]","{'x': 15, 'y': 'uzn'}","{'x': 8, 'y': 'b9o'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +188,s188,https://placehold.co/488x212.png,,,inf,-inf,188,single value,1,1.23456789,True,13,-597,-124,-405,244,512,897,612,0.639,0.37183353,0.35673205304000166,True,True,1.0,a with space,a with space,2023-11-09,2023-10-28,[70 25 39],['1G4' 'aRKWgj' 'JK7ggWW12'],b':',"[('QuD', 5)]","[('CRE', 93)]","{'x': 50, 'y': 'mdJ'}","{'x': 26, 'y': 'yXN'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +189,s189,https://placehold.co/489x211.png,,,inf,-inf,189,single value,1,1.23456789,True,-26,-849,-9,903,211,644,12,404,0.7593,0.81878567,0.5335119252996956,False,True,2.0,c having special characters: !@#$%^&*(),a with space,2023-04-27,2023-03-31,[ 3 22],['2qO' 'JDkyMQ' 'yy2QdDqxu'],"b'\xbd\xde\xd4,3'","[('BWE', 46)]","[('tj8', 60)]","{'x': 91, 'y': '8Gf'}","{'x': 18, 'y': 'E7Y'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 190,s190,https://placehold.co/490x210.png,,,inf,-inf,190,single value,1,1.23456789,True,-102,-947,-117,-272,204,232,167,345,0.724,0.25250876,0.7817903298450294,False,False,1.0,"multiple -lines string",c having special characters: !@#$%^&*(),2023-10-29,2023-04-13,[92 7 40],['LRc' '3uoU53' 'bYsrERg1i'],b'\x1ei\xad@\xfdr\xdc7\xd4',"[('nTB', 41)]","[('0lr', 23)]","{'x': 82, 'y': 'RrG'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",c having special characters: !@#$%^&*(),2023-10-29,2023-04-13,[92 7 40],['Xt0' '1Q8osU' 'VtTLfB4zE'],b'\x1ei\xad@\xfdr\xdc7\xd4',"[('gOf', 41)]","[('b8r', 23)]","{'x': 82, 'y': 'SLW'}",,s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 191,s191,https://placehold.co/491x209.png,,,inf,-inf,191,single value,1,1.23456789,True,8,143,373,365,219,523,641,621,0.637,0.0010294799,0.7053855941122036,False,False,3.0,a with space,"multiple -lines string",2023-05-22,2023-09-07,[45 27 90 67],['8BZ' 'qzOlnZ' 'TV1YFjtFi'],b'~Q\xc4\x96\x95-d',"[('0iT', 76)]","[('NMq', 49)]","{'x': 62, 'y': 'GRL'}","{'x': 25, 'y': 'ilS'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -192,s192,https://placehold.co/492x208.png,,,inf,-inf,192,single value,1,1.23456789,True,78,696,-954,-604,239,345,595,419,0.9805,0.15893829,0.44636864651258557,False,True,2.0,emoji 🤣,emoji 🤣,2023-02-08,2023-01-08,[36 0 66],,b'\xb0\x1f',"[('2Cw', 1)]","[('Mlb', 42)]","{'x': 6, 'y': 'gTM'}","{'x': 91, 'y': 'KEd'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -193,s193,https://placehold.co/493x207.png,,,inf,-inf,193,single value,1,1.23456789,True,-114,943,-134,-302,156,45,320,181,0.9033,0.46853942,0.8642161776741689,True,False,,,c having special characters: !@#$%^&*(),2023-12-21,2023-06-02,,['02b' 'lZZpC4' 'RqZFNhbxK'],b'\xb5',"[('sIk', 26)]","[('dHl', 77)]","{'x': 33, 'y': '9DQ'}","{'x': 95, 'y': 'HtH'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -194,s194,https://placehold.co/494x206.png,,,inf,-inf,194,single value,1,1.23456789,True,-39,-373,-178,42,140,545,318,982,0.6465,0.94430363,0.5581402495938629,True,True,,,a with space,2023-09-09,2023-12-13,[60 35 97],,b'\x8e',"[('L01', 71)]","[('gqS', 27)]","{'x': 5, 'y': '59r'}","{'x': 65, 'y': 'ZB9'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -195,s195,https://placehold.co/495x205.png,,,inf,-inf,195,single value,1,1.23456789,True,-87,-414,-65,-824,45,944,612,824,0.6934,0.10219362,0.5399058395022125,True,,,,,2023-11-29,2023-06-23,[ 3 66 33 56],['l1K' 'vk3UQr' 'xkJ71OQqz'],b'9\x0cs|G\x95\xb1<',"[('iHq', 45)]","[('Toj', 15)]","{'x': 86, 'y': 'LtG'}","{'x': 18, 'y': 'cdW'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-05-22,2023-09-07,[45 27 90 67],['Gxd' 'XeRzWG' 'Jk2mdcdwm'],b'~Q\xc4\x96\x95-d',"[('rZ3', 76)]","[('hBa', 49)]","{'x': 62, 'y': 'RA0'}","{'x': 25, 'y': '7bv'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +192,s192,https://placehold.co/492x208.png,,,inf,-inf,192,single value,1,1.23456789,True,78,696,-954,-604,239,345,595,419,0.9805,0.15893829,0.44636864651258557,False,True,2.0,emoji 🤣,emoji 🤣,2023-02-08,2023-01-08,[36 0 66],,b'\xb0\x1f',"[('mTM', 1)]","[('fan', 42)]","{'x': 6, 'y': 'qJM'}","{'x': 91, 'y': 'uSz'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +193,s193,https://placehold.co/493x207.png,,,inf,-inf,193,single value,1,1.23456789,True,-114,943,-134,-302,156,45,320,181,0.9033,0.46853942,0.8642161776741689,True,False,,,c having special characters: !@#$%^&*(),2023-12-21,2023-06-02,,['wCy' '5QpEB7' 'DIvZqZfbd'],b'\xb5',"[('T30', 26)]","[('AWE', 77)]","{'x': 33, 'y': '5ME'}","{'x': 95, 'y': 'nOG'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +194,s194,https://placehold.co/494x206.png,,,inf,-inf,194,single value,1,1.23456789,True,-39,-373,-178,42,140,545,318,982,0.6465,0.94430363,0.5581402495938629,True,True,,,a with space,2023-09-09,2023-12-13,[60 35 97],,b'\x8e',"[('NYJ', 71)]","[('xRb', 27)]","{'x': 5, 'y': 'TEY'}","{'x': 65, 'y': '61H'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +195,s195,https://placehold.co/495x205.png,,,inf,-inf,195,single value,1,1.23456789,True,-87,-414,-65,-824,45,944,612,824,0.6934,0.10219362,0.5399058395022125,True,,,,,2023-11-29,2023-06-23,[ 3 66 33 56],['0Wn' 'nnmOF1' '7QDikXnL6'],b'9\x0cs|G\x95\xb1<',"[('Vnc', 45)]","[('eUj', 15)]","{'x': 86, 'y': '2os'}","{'x': 18, 'y': 'Toe'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 196,s196,https://placehold.co/496x204.png,,,inf,-inf,196,single value,1,1.23456789,True,-5,648,843,635,34,77,328,0,0.0516,0.8542098,0.03418776593915818,True,False,,"multiple -lines string",a with space,2023-07-26,2023-12-09,[22],['bWV' 'a4OLap' 'Xs7NAxvpC'],b'\xad.\x9dJG!%',"[('2ee', 11)]","[('Evt', 58)]","{'x': 24, 'y': '9vi'}","{'x': 32, 'y': 'chY'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg -197,s197,https://placehold.co/497x203.png,,,inf,-inf,197,single value,1,1.23456789,True,76,991,-345,-605,252,729,784,830,0.67,0.5270241,0.9866929803571616,True,True,1.0,c having special characters: !@#$%^&*(),a with space,2023-07-29,2023-06-07,[52 61 40],['PZy' 'gFP0xO' 'Lsgd9N1qS'],b'\xe4\xbc\xa5\x01\xf0e_',"[('bFb', 42)]","[('X9C', 36)]","{'x': 45, 'y': 'IGN'}","{'x': 55, 'y': 'PCQ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",a with space,2023-07-26,2023-12-09,[22],['SRr' '30CnsG' 'MKa970IKr'],b'\xad.\x9dJG!%',"[('q3H', 11)]","[('qyH', 58)]","{'x': 24, 'y': 'mhC'}","{'x': 32, 'y': 'TEb'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +197,s197,https://placehold.co/497x203.png,,,inf,-inf,197,single value,1,1.23456789,True,76,991,-345,-605,252,729,784,830,0.67,0.5270241,0.9866929803571616,True,True,1.0,c having special characters: !@#$%^&*(),a with space,2023-07-29,2023-06-07,[52 61 40],['QDu' 'rurO7O' 'lGod1Yzti'],b'\xe4\xbc\xa5\x01\xf0e_',"[('Ojy', 42)]","[('l3p', 36)]","{'x': 45, 'y': 'XTm'}","{'x': 55, 'y': '4Mp'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 198,s198,https://placehold.co/498x202.png,,,inf,-inf,198,single value,1,1.23456789,True,50,443,-732,-556,133,812,776,949,0.04416,0.82592076,0.12297080852962672,True,False,1.0,emoji 🤣,"multiple -lines string",2023-04-25,2023-08-03,,['3sj' 'V3XXLO' 'QSO9qzycR'],b'\x01l\xbd|\xf5*\xab',"[('KzK', 80)]",,"{'x': 25, 'y': 'ElL'}","{'x': 48, 'y': '2jJ'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-04-25,2023-08-03,,['bEs' '4zTK9Y' 'vSQND6wsk'],b'\x01l\xbd|\xf5*\xab',"[('3K1', 80)]",,"{'x': 25, 'y': 'Mzc'}","{'x': 48, 'y': 'OaN'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg 199,s199,https://placehold.co/499x201.png,,,inf,-inf,199,single value,1,1.23456789,True,-66,445,-631,256,81,922,970,566,0.5884,0.29837444,0.2311309124276466,True,True,,"multiple lines string","multiple -lines string",2023-08-13,2023-06-26,[69 56],['JlT' 'nHW4PF' '002lghqYV'],b'\x1d',"[('4IH', 84)]","[('Xu0', 89)]","{'x': 97, 'y': 'R8a'}","{'x': 98, 'y': '5ci'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg +lines string",2023-08-13,2023-06-26,[69 56],['OIs' 'DTSI46' '3Onn2A2xK'],b'\x1d',"[('iFf', 84)]","[('xa8', 89)]","{'x': 97, 'y': 'vXn'}","{'x': 98, 'y': '4Yg'}",s3://sense-table-demo/datasets/COCO2017/images/000000000001.jpg,s3alternative://bucket/path/to/file.jpg diff --git a/data/dummy_data_various_types.parquet b/data/dummy_data_various_types.parquet index 34636f4..a7d6934 100644 Binary files a/data/dummy_data_various_types.parquet and b/data/dummy_data_various_types.parquet differ diff --git a/data/lance/dummy_data_various_types.lance/_deletions/0-1-14399067148547273428.arrow b/data/lance/dummy_data_various_types.lance/_deletions/0-1-14399067148547273428.arrow new file mode 100644 index 0000000..95dee4b Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/_deletions/0-1-14399067148547273428.arrow differ diff --git a/data/lance/dummy_data_various_types.lance/_transactions/0-bb9ba407-7979-4376-9467-6b814bb0baf8.txn b/data/lance/dummy_data_various_types.lance/_transactions/0-bb9ba407-7979-4376-9467-6b814bb0baf8.txn new file mode 100644 index 0000000..750c446 Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/_transactions/0-bb9ba407-7979-4376-9467-6b814bb0baf8.txn differ diff --git a/data/lance/dummy_data_various_types.lance/_transactions/1-59bf79e7-c889-48be-9b4c-eb38d9cc977d.txn b/data/lance/dummy_data_various_types.lance/_transactions/1-59bf79e7-c889-48be-9b4c-eb38d9cc977d.txn new file mode 100644 index 0000000..363e8e7 Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/_transactions/1-59bf79e7-c889-48be-9b4c-eb38d9cc977d.txn differ diff --git a/data/lance/dummy_data_various_types.lance/_transactions/2-954d18aa-7b54-4344-a533-6ca41b0ca375.txn b/data/lance/dummy_data_various_types.lance/_transactions/2-954d18aa-7b54-4344-a533-6ca41b0ca375.txn new file mode 100644 index 0000000..f1d13e5 Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/_transactions/2-954d18aa-7b54-4344-a533-6ca41b0ca375.txn differ diff --git a/data/lance/dummy_data_various_types.lance/_transactions/3-d57b9b53-2c32-4cfb-8a7b-68c242fd5311.txn b/data/lance/dummy_data_various_types.lance/_transactions/3-d57b9b53-2c32-4cfb-8a7b-68c242fd5311.txn new file mode 100644 index 0000000..b76740c Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/_transactions/3-d57b9b53-2c32-4cfb-8a7b-68c242fd5311.txn differ diff --git a/data/lance/dummy_data_various_types.lance/_versions/1.manifest b/data/lance/dummy_data_various_types.lance/_versions/1.manifest new file mode 100644 index 0000000..fb81fe7 Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/_versions/1.manifest differ diff --git a/data/lance/dummy_data_various_types.lance/_versions/2.manifest b/data/lance/dummy_data_various_types.lance/_versions/2.manifest new file mode 100644 index 0000000..0e749bb Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/_versions/2.manifest differ diff --git a/data/lance/dummy_data_various_types.lance/_versions/3.manifest b/data/lance/dummy_data_various_types.lance/_versions/3.manifest new file mode 100644 index 0000000..f11fba9 Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/_versions/3.manifest differ diff --git a/data/lance/dummy_data_various_types.lance/_versions/4.manifest b/data/lance/dummy_data_various_types.lance/_versions/4.manifest new file mode 100644 index 0000000..11a91e5 Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/_versions/4.manifest differ diff --git a/data/lance/dummy_data_various_types.lance/data/0001011001001000001101004830154d2a97bc75604d5027a4.lance b/data/lance/dummy_data_various_types.lance/data/0001011001001000001101004830154d2a97bc75604d5027a4.lance new file mode 100644 index 0000000..41c7a6e Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/data/0001011001001000001101004830154d2a97bc75604d5027a4.lance differ diff --git a/data/lance/dummy_data_various_types.lance/data/010101000001111001101111ed61b040b68a48e52f7f52f556.lance b/data/lance/dummy_data_various_types.lance/data/010101000001111001101111ed61b040b68a48e52f7f52f556.lance new file mode 100644 index 0000000..d26a62f Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/data/010101000001111001101111ed61b040b68a48e52f7f52f556.lance differ diff --git a/data/lance/dummy_data_various_types.lance/data/011000111010001010111100383b814f538807c8d81e2bc32e.lance b/data/lance/dummy_data_various_types.lance/data/011000111010001010111100383b814f538807c8d81e2bc32e.lance new file mode 100644 index 0000000..1b34893 Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/data/011000111010001010111100383b814f538807c8d81e2bc32e.lance differ diff --git a/data/lance/dummy_data_various_types.lance/data/011010100001011011111111f81601446296e608186f480ad2.lance b/data/lance/dummy_data_various_types.lance/data/011010100001011011111111f81601446296e608186f480ad2.lance new file mode 100644 index 0000000..f93ba90 Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/data/011010100001011011111111f81601446296e608186f480ad2.lance differ diff --git a/data/lance/dummy_data_various_types.lance/data/11000010110101101111010113cfa8443793b816fa816fa2fb.lance b/data/lance/dummy_data_various_types.lance/data/11000010110101101111010113cfa8443793b816fa816fa2fb.lance new file mode 100644 index 0000000..43f3eb0 Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/data/11000010110101101111010113cfa8443793b816fa816fa2fb.lance differ diff --git a/data/lance/dummy_data_various_types.lance/data/110011100101110101101100501ff144e1b4495104b48919de.lance b/data/lance/dummy_data_various_types.lance/data/110011100101110101101100501ff144e1b4495104b48919de.lance new file mode 100644 index 0000000..746dc4e Binary files /dev/null and b/data/lance/dummy_data_various_types.lance/data/110011100101110101101100501ff144e1b4495104b48919de.lance differ diff --git a/smoosense-gui/package.json b/smoosense-gui/package.json index 009624e..80063f7 100644 --- a/smoosense-gui/package.json +++ b/smoosense-gui/package.json @@ -22,6 +22,7 @@ "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", + "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-avatar": "^1.1.10", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", diff --git a/smoosense-gui/pnpm-lock.yaml b/smoosense-gui/pnpm-lock.yaml index 5fd2f15..7f27339 100644 --- a/smoosense-gui/pnpm-lock.yaml +++ b/smoosense-gui/pnpm-lock.yaml @@ -35,6 +35,9 @@ importers: '@dnd-kit/utilities': specifier: ^3.2.2 version: 3.2.2(react@19.1.0) + '@radix-ui/react-accordion': + specifier: ^1.2.12 + version: 1.2.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-avatar': specifier: ^1.1.10 version: 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -1034,6 +1037,19 @@ packages: '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + '@radix-ui/react-accordion@1.2.12': + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: @@ -1060,6 +1076,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-collapsible@1.1.12': + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: @@ -6556,6 +6585,23 @@ snapshots: '@radix-ui/primitive@1.1.3': {} + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.10)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -6578,6 +6624,22 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.0) diff --git a/smoosense-gui/src/app/DB/page.tsx b/smoosense-gui/src/app/DB/page.tsx new file mode 100644 index 0000000..b160c17 --- /dev/null +++ b/smoosense-gui/src/app/DB/page.tsx @@ -0,0 +1,67 @@ +'use client' + +import { useEffect, Suspense } from 'react' +import { useSearchParams } from 'next/navigation' +import { pathBasename } from '@/lib/utils/pathUtils' +import FolderBrowserNavbar from '@/components/layout/FolderBrowserNavbar' +import DBContent from '@/components/db/DBContent' + +function DBPageContent() { + const searchParams = useSearchParams() + const rootFolder = searchParams.get('rootFolder') + + // Set document title based on rootFolder + useEffect(() => { + if (rootFolder) { + const folderName = pathBasename(rootFolder) + document.title = `${folderName} - Lance DB` || 'SmooSense - Lance DB' + } else { + document.title = 'SmooSense - Lance DB' + } + }, [rootFolder]) + + // If rootFolder is missing, show error + if (!rootFolder) { + return ( +
+ +
+
+
+

+ Error: Missing Database Path +

+

+ This page requires a rootFolder parameter in the URL. +

+

+ Example: /DB?rootFolder=~/data/lance +

+
+
+
+
+ ) + } + + return ( +
+ +
+
+
+ +
+
+
+
+ ) +} + +export default function DB() { + return ( + Loading...}> + + + ) +} diff --git a/smoosense-gui/src/components/db/DBContent.tsx b/smoosense-gui/src/components/db/DBContent.tsx new file mode 100644 index 0000000..7c0ebc7 --- /dev/null +++ b/smoosense-gui/src/components/db/DBContent.tsx @@ -0,0 +1,158 @@ +'use client' + +import { useEffect, useState } from 'react' +import { ResizablePanels } from '@/components/ui/resizable-panels' +import { Badge } from '@/components/ui/badge' +import { AlertCircle, Database, Loader2, Table } from 'lucide-react' +import { pathJoin } from '@/lib/utils/pathUtils' +import TablePreview from './TablePreview' + +export interface TableInfo { + name: string + cnt_rows: number | null + cnt_columns: number | null + cnt_versions: number | null + cnt_indices: number | null +} + +function TablesList({ + tables, + selectedTable, + onTableClick, + onTableDoubleClick +}: { + tables: TableInfo[] + selectedTable: string | null + onTableClick: (tableName: string) => void + onTableDoubleClick: (tableName: string) => void +}) { + return ( +
+
+ {tables.map((table) => ( +
onTableClick(table.name)} + onDoubleClick={() => onTableDoubleClick(table.name)} + className={`flex items-center justify-between p-3 rounded-lg border bg-card hover:bg-accent cursor-pointer transition-colors ${ + selectedTable === table.name ? 'border-primary bg-accent' : '' + }`} + > +
+ + {table.name} + +
+ {table.cnt_rows !== null && table.cnt_columns !== null && ( + + {table.cnt_rows.toLocaleString()} × {table.cnt_columns} + + )} + {table.cnt_versions !== null && ( + + v {table.cnt_versions} + + )} +
+ + ))} + + + ) +} + +export default function DBContent({ rootFolder }: { rootFolder: string }) { + const [tables, setTables] = useState([]) + const [loading, setLoading] = useState(true) + const [error, setError] = useState(null) + const [selectedTable, setSelectedTable] = useState(null) + + useEffect(() => { + if (!rootFolder) return + + const fetchTables = async () => { + setLoading(true) + setError(null) + try { + const response = await fetch(`/api/lance/list-tables?rootFolder=${encodeURIComponent(rootFolder)}`) + if (!response.ok) { + const errorData = await response.json() + throw new Error(errorData.error || 'Failed to fetch tables') + } + const data = await response.json() + setTables(data) + } catch (err) { + setError(err instanceof Error ? err.message : 'Failed to load tables') + } finally { + setLoading(false) + } + } + + fetchTables() + }, [rootFolder]) + + const handleTableClick = (tableName: string) => { + setSelectedTable(tableName) + } + + const handleTableDoubleClick = (tableName: string) => { + const tablePath = pathJoin(rootFolder, `${tableName}.lance`) + const url = `./Table?tablePath=${tablePath}` + window.open(url, '_blank') + } + + if (loading) { + return ( +
+
+ + Loading tables... +
+
+ ) + } + + if (error) { + return ( +
+
+ +

Error Loading Tables

+

{error}

+
+
+ ) + } + + if (tables.length === 0) { + return ( +
+
+ +

No Tables Found

+

+ The Lance database at {rootFolder} does not contain any tables. +

+
+
+ ) + } + + // Find the selected table's info + const selectedTableInfo = selectedTable ? tables.find(t => t.name === selectedTable) : null + + return ( +
+ + + + +
+ ) +} diff --git a/smoosense-gui/src/components/db/LanceColumns.tsx b/smoosense-gui/src/components/db/LanceColumns.tsx new file mode 100644 index 0000000..e4710e1 --- /dev/null +++ b/smoosense-gui/src/components/db/LanceColumns.tsx @@ -0,0 +1,102 @@ +'use client' + +import { useEffect, useState } from 'react' +import { AlertCircle, Loader2 } from 'lucide-react' +import { Badge } from '@/components/ui/badge' +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' + +export interface ColumnInfo { + name: string + type: string +} + +interface LanceColumnsProps { + rootFolder: string + tableName: string +} + +export default function LanceColumns({ rootFolder, tableName }: LanceColumnsProps) { + const [columns, setColumns] = useState(null) + const [loading, setLoading] = useState(false) + const [error, setError] = useState(null) + + useEffect(() => { + const fetchColumns = async () => { + setLoading(true) + setError(null) + setColumns(null) + + try { + const response = await fetch( + `/api/lance/list-columns?rootFolder=${encodeURIComponent(rootFolder)}&tableName=${encodeURIComponent(tableName)}` + ) + if (!response.ok) { + const errorData = await response.json() + throw new Error(errorData.error || 'Failed to fetch columns') + } + const data = await response.json() + setColumns(data) + } catch (err) { + setError(err instanceof Error ? err.message : 'Failed to load columns') + } finally { + setLoading(false) + } + } + + fetchColumns() + }, [rootFolder, tableName]) + + if (loading) { + return ( +
+
+ + Loading columns... +
+
+ ) + } + + if (error) { + return ( +
+
+ +

Error Loading Columns

+

{error}

+
+
+ ) + } + + if (!columns || columns.length === 0) { + return ( +
+

No columns found

+
+ ) + } + + return ( + +
+
+ {columns.map((column) => ( + + + + {column.name} + + + + + {column.type} + + + + ))} +
+
+
+ ) +} diff --git a/smoosense-gui/src/components/db/LanceIndices.tsx b/smoosense-gui/src/components/db/LanceIndices.tsx new file mode 100644 index 0000000..f1138d2 --- /dev/null +++ b/smoosense-gui/src/components/db/LanceIndices.tsx @@ -0,0 +1,139 @@ +'use client' + +import { useEffect, useState } from 'react' +import { AlertCircle, Loader2 } from 'lucide-react' +import { AgGridReact } from 'ag-grid-react' +import { ColDef, GridOptions } from 'ag-grid-community' +import { AllCommunityModule, ModuleRegistry } from 'ag-grid-community' +import { useAGGridTheme, useAGGridDefaultColDef, useAGGridOptions, useAppSelector } from '@/lib/hooks' + +ModuleRegistry.registerModules([AllCommunityModule]) + +export interface IndexInfo { + name: string + index_type: string + columns: string[] + num_unindexed_rows: number | null +} + +interface LanceIndicesProps { + rootFolder: string + tableName: string +} + +export default function LanceIndices({ rootFolder, tableName }: LanceIndicesProps) { + const [indices, setIndices] = useState(null) + const [loading, setLoading] = useState(false) + const [error, setError] = useState(null) + + // Hooks must be called unconditionally at the top + const theme = useAGGridTheme() + const defaultColDef = useAGGridDefaultColDef() + const baseGridOptions = useAGGridOptions() + const rowHeight = useAppSelector((state) => state.ui.rowHeight) + + useEffect(() => { + const fetchIndices = async () => { + setLoading(true) + setError(null) + setIndices(null) + + try { + const response = await fetch( + `/api/lance/list-indices?rootFolder=${encodeURIComponent(rootFolder)}&tableName=${encodeURIComponent(tableName)}` + ) + if (!response.ok) { + const errorData = await response.json() + throw new Error(errorData.error || 'Failed to fetch indices') + } + const data = await response.json() + setIndices(data) + } catch (err) { + setError(err instanceof Error ? err.message : 'Failed to load indices') + } finally { + setLoading(false) + } + } + + fetchIndices() + }, [rootFolder, tableName]) + + if (loading) { + return ( +
+
+ + Loading indices... +
+
+ ) + } + + if (error) { + return ( +
+
+ +

Error Loading Indices

+

{error}

+
+
+ ) + } + + if (!indices || indices.length === 0) { + return ( +
+

No indices found

+
+ ) + } + + // Custom cell renderer for columns + const columnsRenderer = (params: { value: string[] }) => { + if (!params.value || params.value.length === 0) return null + return
{params.value.join(', ')}
+ } + + const columnDefs: ColDef[] = [ + { + field: 'name', + headerName: 'Name', + width: 200 + }, + { + field: 'index_type', + headerName: 'Type', + width: 150 + }, + { + field: 'columns', + headerName: 'Columns', + cellRenderer: columnsRenderer, + flex: 1 + }, + { + field: 'num_unindexed_rows', + headerName: 'Unindexed Rows', + width: 150, + valueFormatter: (params) => params.value !== null && params.value !== undefined ? params.value.toLocaleString() : '' + } + ] + + const gridOptions: GridOptions = { + ...baseGridOptions, + rowHeight + } + + return ( +
+ +
+ ) +} diff --git a/smoosense-gui/src/components/db/LanceVersions.tsx b/smoosense-gui/src/components/db/LanceVersions.tsx new file mode 100644 index 0000000..7fbb1eb --- /dev/null +++ b/smoosense-gui/src/components/db/LanceVersions.tsx @@ -0,0 +1,205 @@ +'use client' + +import { useEffect, useState } from 'react' +import { AlertCircle, Loader2 } from 'lucide-react' +import { AgGridReact } from 'ag-grid-react' +import { ColDef, GridOptions } from 'ag-grid-community' +import { AllCommunityModule, ModuleRegistry } from 'ag-grid-community' +import { useAGGridTheme, useAGGridDefaultColDef, useAGGridOptions, useAppSelector } from '@/lib/hooks' +import { formatRelativeTime, formatDate } from '@/lib/utils/timeUtils' +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' + +ModuleRegistry.registerModules([AllCommunityModule]) + +export interface VersionInfo { + version: number + timestamp: number + total_data_files: number | null + total_rows: number | null + rows_add: number | null + rows_remove: number | null + columns_add: string[] + columns_remove: string[] +} + +interface LanceVersionsProps { + rootFolder: string + tableName: string +} + +export default function LanceVersions({ rootFolder, tableName }: LanceVersionsProps) { + const [versions, setVersions] = useState(null) + const [loading, setLoading] = useState(false) + const [error, setError] = useState(null) + + // Hooks must be called unconditionally at the top + const theme = useAGGridTheme() + const defaultColDef = useAGGridDefaultColDef() + const baseGridOptions = useAGGridOptions() + const rowHeight = useAppSelector((state) => state.ui.rowHeight) + + useEffect(() => { + const fetchVersions = async () => { + setLoading(true) + setError(null) + setVersions(null) + + try { + const response = await fetch( + `/api/lance/list-versions?rootFolder=${encodeURIComponent(rootFolder)}&tableName=${encodeURIComponent(tableName)}` + ) + if (!response.ok) { + const errorData = await response.json() + throw new Error(errorData.error || 'Failed to fetch versions') + } + const data = await response.json() + setVersions(data) + } catch (err) { + setError(err instanceof Error ? err.message : 'Failed to load versions') + } finally { + setLoading(false) + } + } + + fetchVersions() + }, [rootFolder, tableName]) + + if (loading) { + return ( +
+
+ + Loading versions... +
+
+ ) + } + + if (error) { + return ( +
+
+ +

Error Loading Versions

+

{error}

+
+
+ ) + } + + if (!versions || versions.length === 0) { + return ( +
+

No versions found

+
+ ) + } + + // Custom cell renderers + const createdAtRenderer = (params: { value: number }) => { + if (!params.value) return null + const timestampMs = params.value * 1000 + const relativeTime = formatRelativeTime(timestampMs) + const fullDate = formatDate(timestampMs) + + return ( + + +
+ {relativeTime} {relativeTime === 'now' ? '' : 'ago'} +
+
+ + {fullDate} + +
+ ) + } + + const rowsDiffRenderer = (params: { data: VersionInfo }) => { + const { rows_add, rows_remove } = params.data + + return ( +
+ {rows_add !== null && rows_add > 0 && ( +
+ {rows_add.toLocaleString()}
+ )} + {rows_remove !== null && rows_remove > 0 && ( +
- {rows_remove.toLocaleString()}
+ )} +
+ ) + } + + const columnsDiffRenderer = (params: { data: VersionInfo }) => { + const { columns_add, columns_remove } = params.data + + return ( +
+ {columns_add.length > 0 && ( +
+ {columns_add.join(', ')}
+ )} + {columns_remove.length > 0 && ( +
- {columns_remove.join(', ')}
+ )} +
+ ) + } + + const columnDefs: ColDef[] = [ + { + field: 'version', + headerName: 'Version', + width: 100 + }, + { + field: 'timestamp', + headerName: 'Created At', + cellRenderer: createdAtRenderer, + width: 150 + }, + { + field: 'total_data_files', + headerName: 'Data Files', + width: 120, + valueFormatter: (params) => params.value !== null && params.value !== undefined ? params.value.toLocaleString() : '' + }, + { + field: 'total_rows', + headerName: 'Total Rows', + width: 120, + valueFormatter: (params) => params.value !== null ? params.value.toLocaleString() : '' + }, + { + headerName: 'Rows Diff', + cellRenderer: rowsDiffRenderer, + width: 120, + autoHeight: true + }, + { + headerName: 'Columns Diff', + cellRenderer: columnsDiffRenderer, + width: 200, + autoHeight: true + } + ] + + const gridOptions: GridOptions = { + ...baseGridOptions, + rowHeight + } + + return ( + +
+ +
+
+ ) +} diff --git a/smoosense-gui/src/components/db/TablePreview.tsx b/smoosense-gui/src/components/db/TablePreview.tsx new file mode 100644 index 0000000..53f0be2 --- /dev/null +++ b/smoosense-gui/src/components/db/TablePreview.tsx @@ -0,0 +1,93 @@ +'use client' + +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion' +import { Button } from '@/components/ui/button' +import { ExternalLink } from 'lucide-react' +import { pathJoin } from '@/lib/utils/pathUtils' +import type { TableInfo } from './DBContent' +import LanceColumns from './LanceColumns' +import LanceIndices from './LanceIndices' +import LanceVersions from './LanceVersions' + +export default function TablePreview({ + rootFolder, + tableName, + tableInfo +}: { + rootFolder: string + tableName: string | null + tableInfo: TableInfo | null | undefined +}) { + if (!tableName) { + return ( +
+

Select a table to view details

+
+ ) + } + + return ( +
+ {tableInfo?.cnt_rows !== null && tableInfo?.cnt_rows !== undefined && ( +
+

+ {tableInfo.cnt_rows.toLocaleString()} {tableInfo.cnt_rows === 1 ? 'row' : 'rows'} +

+ +
+ )} + + {/* Columns Section */} + + + {tableInfo?.cnt_columns !== null && tableInfo?.cnt_columns !== undefined + ? `${tableInfo.cnt_columns} ${tableInfo.cnt_columns === 1 ? 'column' : 'columns'}` + : 'Columns'} + + + + + + + {/* Lance Indices Section */} + + + {tableInfo?.cnt_indices !== null && tableInfo?.cnt_indices !== undefined + ? `${tableInfo.cnt_indices} ${tableInfo.cnt_indices === 1 ? 'index' : 'indices'}` + : 'Lance Indices'} + + +
+ +
+
+
+ + {/* Lance Versions Section */} + + + {tableInfo?.cnt_versions !== null && tableInfo?.cnt_versions !== undefined + ? `${tableInfo.cnt_versions} ${tableInfo.cnt_versions === 1 ? 'version' : 'versions'}` + : 'Lance Versions'} + + +
+ +
+
+
+
+
+ ) +} diff --git a/smoosense-gui/src/components/folder-browser/TreeNodeComponent.tsx b/smoosense-gui/src/components/folder-browser/TreeNodeComponent.tsx index 3a74ba9..e948220 100644 --- a/smoosense-gui/src/components/folder-browser/TreeNodeComponent.tsx +++ b/smoosense-gui/src/components/folder-browser/TreeNodeComponent.tsx @@ -8,38 +8,7 @@ import { loadFolderContents, setViewingId, toggleNodeExpansion } from '@/lib/fea import { cn } from '@/lib/utils' import { getFileType, FileType } from '@/lib/utils/fileTypes' import { ICONS } from '@/lib/utils/iconUtils' - -// Utility functions for formatting file info -function formatFileSize(bytes: number): string { - if (bytes === 0) return '0 B' - const k = 1024 - const sizes = ['B', 'KB', 'MB', 'GB'] - const i = Math.floor(Math.log(bytes) / Math.log(k)) - return Math.round((bytes / Math.pow(k, i)) * 10) / 10 + ' ' + sizes[i] -} - -function formatDate(timestamp: number): string { - return new Date(timestamp).toLocaleDateString() -} - -function formatRelativeTime(timestamp: number): string { - const now = Date.now() - const diff = now - timestamp - const minute = 60 * 1000 - const hour = minute * 60 - const day = hour * 24 - const week = day * 7 - const month = day * 30 - const year = day * 365 - - if (diff < minute) return 'now' - if (diff < hour) return `${Math.floor(diff / minute)}m` - if (diff < day) return `${Math.floor(diff / hour)}h` - if (diff < week) return `${Math.floor(diff / day)}d` - if (diff < month) return `${Math.floor(diff / week)}w` - if (diff < year) return `${Math.floor(diff / month)}mo` - return `${Math.floor(diff / year)}y` -} +import { formatDate, formatRelativeTime } from '@/lib/utils/timeUtils' export interface ArboristNodeData { id: string @@ -60,6 +29,14 @@ interface TreeNodeComponentProps { dragHandle?: (el: HTMLDivElement | null) => void } +function formatFileSize(bytes: number): string { + if (bytes === 0) return '0 B' + const k = 1024 + const sizes = ['B', 'KB', 'MB', 'GB'] + const i = Math.floor(Math.log(bytes) / Math.log(k)) + return Math.round((bytes / Math.pow(k, i)) * 10) / 10 + ' ' + sizes[i] +} + export default function TreeNodeComponent({ node, style }: TreeNodeComponentProps) { const dispatch = useAppDispatch() const viewingId = useAppSelector(state => state.folderTree.viewingId) diff --git a/smoosense-gui/src/components/folder-browser/previewers/ColumnarTablePreviewer.tsx b/smoosense-gui/src/components/folder-browser/previewers/ColumnarTablePreviewer.tsx index bcfe50a..c8610bd 100644 --- a/smoosense-gui/src/components/folder-browser/previewers/ColumnarTablePreviewer.tsx +++ b/smoosense-gui/src/components/folder-browser/previewers/ColumnarTablePreviewer.tsx @@ -47,7 +47,7 @@ export default function ColumnarTablePreviewer({ item }: ColumnarTablePreviewerP try { const sqlKey = generateSqlKey('parquet_metadata') - const result = await executeQueryAsListOfDict(query, sqlKey, dispatch) + const result = await executeQueryAsListOfDict(query, sqlKey, dispatch, 'duckdb', item.path) setData(result) } catch (err) { console.error('Error executing parquet metadata query:', err) @@ -58,7 +58,9 @@ export default function ColumnarTablePreviewer({ item }: ColumnarTablePreviewerP } fetchData() + // eslint-disable-next-line react-hooks/exhaustive-deps }, [query, dispatch, isParquet]) + // Note: item.path is not included because it's already captured in the query dependency const renderContent = () => { if (!isParquet) { diff --git a/smoosense-gui/src/components/folder-browser/previewers/RowTablePreviewer.tsx b/smoosense-gui/src/components/folder-browser/previewers/RowTablePreviewer.tsx index a7da707..94de6e7 100644 --- a/smoosense-gui/src/components/folder-browser/previewers/RowTablePreviewer.tsx +++ b/smoosense-gui/src/components/folder-browser/previewers/RowTablePreviewer.tsx @@ -29,7 +29,7 @@ export default function RowTablePreviewer({ item }: RowTablePreviewerProps) { try { const sqlKey = generateSqlKey('table_preview') - const result = await executeQueryAsListOfDict(query, sqlKey, dispatch) + const result = await executeQueryAsListOfDict(query, sqlKey, dispatch, 'duckdb', item.path) setData(result) } catch (err) { console.error('Error executing table preview query:', err) @@ -40,7 +40,9 @@ export default function RowTablePreviewer({ item }: RowTablePreviewerProps) { } fetchData() + // eslint-disable-next-line react-hooks/exhaustive-deps }, [query, dispatch]) + // Note: item.path is not included because it's already captured in the query dependency const renderContent = () => { if (isLoading) { diff --git a/smoosense-gui/src/components/providers/TableUrlParamsProvider.tsx b/smoosense-gui/src/components/providers/TableUrlParamsProvider.tsx index f6ac263..bf95afe 100644 --- a/smoosense-gui/src/components/providers/TableUrlParamsProvider.tsx +++ b/smoosense-gui/src/components/providers/TableUrlParamsProvider.tsx @@ -29,12 +29,6 @@ function TableUrlParamsProviderInner({ children }: { children: React.ReactNode } dispatch(uiSliceActions.setBaseUrl(baseUrl)) } - // Handle queryEngine parameter - const queryEngine = searchParams.get('queryEngine') - if (queryEngine && (queryEngine === 'duckdb' || queryEngine === 'athena' || queryEngine === 'lance')) { - dispatch(uiSliceActions.setQueryEngine(queryEngine)) - } - // Handle tablePath specifically const urlTablePath = searchParams.get('tablePath') if (urlTablePath !== currentTablePath) { @@ -47,6 +41,15 @@ function TableUrlParamsProviderInner({ children }: { children: React.ReactNode } } } + // Handle queryEngine parameter + const queryEngine = searchParams.get('queryEngine') + if (queryEngine && (queryEngine === 'duckdb' || queryEngine === 'athena' || queryEngine === 'lance')) { + dispatch(uiSliceActions.setQueryEngine(queryEngine)) + } else if (!queryEngine && urlTablePath && urlTablePath.endsWith('.lance')) { + // If queryEngine is not provided and tablePath ends with .lance, set queryEngine to lance + dispatch(uiSliceActions.setQueryEngine('lance')) + } + // Collect all other URL parameters and batch update UI slice const batchUpdates: Record = {} diff --git a/smoosense-gui/src/components/sql/SqlQueryPanel.tsx b/smoosense-gui/src/components/sql/SqlQueryPanel.tsx index 037bddd..2e77b95 100644 --- a/smoosense-gui/src/components/sql/SqlQueryPanel.tsx +++ b/smoosense-gui/src/components/sql/SqlQueryPanel.tsx @@ -17,6 +17,7 @@ import { useTheme } from 'next-themes' export default function SqlQueryPanel() { const tablePath = useAppSelector((state) => state.ui.tablePath) + const queryEngine = useAppSelector((state) => state.ui.queryEngine) const { theme, systemTheme } = useTheme() const isDark = theme === 'dark' || (theme === 'system' && systemTheme === 'dark') const sqlQuery = useAppSelector((state) => state.ui.sqlQuery) @@ -72,12 +73,18 @@ export default function SqlQueryPanel() { // Initialize default query when no query exists and tablePath is available useEffect(() => { if (tablePath && !sqlQuery) { - dispatch(setSqlQuery(`SELECT * FROM '${tablePath}' LIMIT 10`)) + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + dispatch(setSqlQuery(`SELECT * FROM ${tableRef} LIMIT 10`)) } - }, [tablePath, sqlQuery, dispatch]) + }, [tablePath, queryEngine, sqlQuery, dispatch]) const handleExecuteQuery = async () => { if (!sqlQuery.trim()) return + if (!queryEngine || !tablePath) { + console.error('queryEngine and tablePath are required') + return + } const queryStartTime = Date.now() setStartTime(queryStartTime) @@ -85,14 +92,14 @@ export default function SqlQueryPanel() { setIsLoading(true) // Clear previous results to show loading state setCurrentResult(null) - + try { const sqlKey = generateSqlKey('user_query') - const result = await executeQuery(sqlQuery, sqlKey, dispatch) - + const result = await executeQuery(sqlQuery, sqlKey, dispatch, queryEngine, tablePath) + // Save to Redux store dispatch(setSqlResult(result)) - + // Update local state with raw result setCurrentResult(result) } catch (error) { diff --git a/smoosense-gui/src/components/ui/accordion.tsx b/smoosense-gui/src/components/ui/accordion.tsx new file mode 100644 index 0000000..13edbab --- /dev/null +++ b/smoosense-gui/src/components/ui/accordion.tsx @@ -0,0 +1,57 @@ +"use client" + +import * as React from "react" +import * as AccordionPrimitive from "@radix-ui/react-accordion" +import { ChevronDown } from "lucide-react" + +import { cn } from "@/lib/utils" + +const Accordion = AccordionPrimitive.Root + +const AccordionItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AccordionItem.displayName = "AccordionItem" + +const AccordionTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + svg]:rotate-180", + className + )} + {...props} + > + {children} + + + +)) +AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName + +const AccordionContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + +
{children}
+
+)) +AccordionContent.displayName = AccordionPrimitive.Content.displayName + +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/smoosense-gui/src/lib/api/__tests__/queries.test.ts b/smoosense-gui/src/lib/api/__tests__/queries.test.ts index 9b459d6..341b1f3 100644 --- a/smoosense-gui/src/lib/api/__tests__/queries.test.ts +++ b/smoosense-gui/src/lib/api/__tests__/queries.test.ts @@ -35,7 +35,7 @@ describe('getColumnMetadata', () => { json: async () => mockApiResponse, } as Response) - const result = await getColumnMetadata('/test/file.csv', mockDispatch) + const result = await getColumnMetadata('/test/file.csv', mockDispatch, 'duckdb') expect(result).toHaveLength(5) @@ -131,8 +131,8 @@ describe('getColumnMetadata', () => { }) it('should handle empty file path', async () => { - await expect(getColumnMetadata('', mockDispatch)).rejects.toThrow('Table path cannot be empty') - await expect(getColumnMetadata(' ', mockDispatch)).rejects.toThrow('Table path cannot be empty') + await expect(getColumnMetadata('', mockDispatch, 'duckdb')).rejects.toThrow('Table path cannot be empty') + await expect(getColumnMetadata(' ', mockDispatch, 'duckdb')).rejects.toThrow('Table path cannot be empty') }) it('should handle API errors', async () => { @@ -149,7 +149,7 @@ describe('getColumnMetadata', () => { json: async () => mockErrorResponse, } as Response) - await expect(getColumnMetadata('/nonexistent/file.csv', mockDispatch)).rejects.toThrow('Table not found') + await expect(getColumnMetadata('/nonexistent/file.csv', mockDispatch, 'duckdb')).rejects.toThrow('Table not found') }) it('should call the correct SQL query', async () => { @@ -165,7 +165,7 @@ describe('getColumnMetadata', () => { json: async () => mockApiResponse, } as Response) - await getColumnMetadata('/test/file.csv', mockDispatch) + await getColumnMetadata('/test/file.csv', mockDispatch, 'duckdb') expect(mockFetch).toHaveBeenCalledWith(`${API_PREFIX}/query`, { method: 'POST', @@ -173,7 +173,9 @@ describe('getColumnMetadata', () => { 'Content-Type': 'application/json', }, body: JSON.stringify({ - query: "SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM '/test/file.csv')" + query: "SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM '/test/file.csv')", + queryEngine: 'duckdb', + tablePath: '/test/file.csv' }), }) }) @@ -196,7 +198,7 @@ describe('getColumnMetadata', () => { json: async () => mockApiResponse, } as Response) - const result = await getColumnMetadata('/test/file.csv', mockDispatch) + const result = await getColumnMetadata('/test/file.csv', mockDispatch, 'duckdb') // Should have original columns plus flattened struct fields expect(result).toHaveLength(6) // 3 original + 3 flattened struct fields @@ -252,7 +254,7 @@ describe('getColumnMetadata', () => { json: async () => mockApiResponse, } as Response) - const result = await getColumnMetadata('/test/file.csv', mockDispatch) + const result = await getColumnMetadata('/test/file.csv', mockDispatch, 'duckdb') expect(result).toHaveLength(4) // 1 original + 3 flattened fields @@ -298,7 +300,7 @@ describe('getColumnMetadata', () => { json: async () => mockStatsResponse, } as Response) - const result = await getColumnMetadata('/test/file.parquet', mockDispatch) + const result = await getColumnMetadata('/test/file.parquet', mockDispatch, 'duckdb') expect(result).toHaveLength(2) @@ -361,7 +363,7 @@ describe('getColumnMetadata', () => { json: async () => mockMetadataResponse, } as Response) - const result = await getColumnMetadata('/test/file.csv', mockDispatch) + const result = await getColumnMetadata('/test/file.csv', mockDispatch, 'duckdb') expect(result).toHaveLength(1) expect(result[0].stats).toBeNull() @@ -395,7 +397,7 @@ describe('getColumnMetadata', () => { json: async () => mockStatsResponse, } as Response) - const result = await getColumnMetadata('/test/file.parquet', mockDispatch) + const result = await getColumnMetadata('/test/file.parquet', mockDispatch, 'duckdb') expect(result[0].stats).toEqual({ min: 'active', @@ -433,7 +435,7 @@ describe('getColumnMetadata', () => { json: async () => mockStatsResponse, } as Response) - const result = await getColumnMetadata('/test/file.parquet', mockDispatch) + const result = await getColumnMetadata('/test/file.parquet', mockDispatch, 'duckdb') expect(result[0].stats).toEqual({ min: null, @@ -479,7 +481,7 @@ describe('getColumnMetadata', () => { json: async () => mockStatsResponse, } as Response) - const result = await getColumnMetadata('/test/file.parquet', mockDispatch) + const result = await getColumnMetadata('/test/file.parquet', mockDispatch, 'duckdb') expect(result[0].stats?.allNull).toBe(true) // col_all_null: 100 nulls out of 100 expect(result[1].stats?.allNull).toBe(false) // col_some_null: 25 nulls out of 100 @@ -512,7 +514,7 @@ describe('getColumnMetadata', () => { json: async () => mockStatsErrorResponse, } as Response) - const result = await getColumnMetadata('/test/file.parquet', mockDispatch) + const result = await getColumnMetadata('/test/file.parquet', mockDispatch, 'duckdb') expect(result).toHaveLength(1) expect(result[0].stats).toBeNull() diff --git a/smoosense-gui/src/lib/api/queries.ts b/smoosense-gui/src/lib/api/queries.ts index e4edf21..9550317 100644 --- a/smoosense-gui/src/lib/api/queries.ts +++ b/smoosense-gui/src/lib/api/queries.ts @@ -39,7 +39,9 @@ interface ColumnMeta { export async function executeQuery( sqlQuery: string, sqlKey: string, - dispatch: AppDispatch + dispatch: AppDispatch, + queryEngine: string, + tablePath: string ): Promise { if (!sqlQuery.trim()) { throw new Error('Query cannot be empty') @@ -54,7 +56,12 @@ export async function executeQuery( } dispatch(addExecution({ sqlKey, query: sqlQuery.trim(), result: runningResult })) - const requestData = { query: sqlQuery.trim() } + const requestData = { + query: sqlQuery.trim(), + queryEngine, + tablePath + } + // Executing SQL query try { @@ -97,10 +104,12 @@ export async function executeQueryAsListOfDict( sqlQuery: string, sqlKey: string, // eslint-disable-next-line @typescript-eslint/no-explicit-any - dispatch: any + dispatch: any, + queryEngine: string, + tablePath: string ): Promise { - const rawResult = await executeQuery(sqlQuery, sqlKey, dispatch) - + const rawResult = await executeQuery(sqlQuery, sqlKey, dispatch, queryEngine, tablePath) + if (rawResult.status === 'error') { throw new Error(rawResult.error || 'Query failed') } @@ -114,26 +123,73 @@ export async function executeQueryAsListOfDict( export async function executeQueryAsDictOfList( sqlQuery: string, sqlKey: string, - dispatch: AppDispatch + dispatch: AppDispatch, + queryEngine: string, + tablePath: string ): Promise { - const rawResult = await executeQuery(sqlQuery, sqlKey, dispatch) - + const rawResult = await executeQuery(sqlQuery, sqlKey, dispatch, queryEngine, tablePath) + if (rawResult.status === 'error') { throw new Error(rawResult.error || 'Query failed') } return _.zipObject( - rawResult.column_names, + rawResult.column_names, _.zip(...rawResult.rows) ) as DictOfList } -async function getParquetStats(tablePath: string, dispatch: AppDispatch): Promise | null> { +async function getLanceStats(tablePath: string, dispatch: AppDispatch, queryEngine: string): Promise | null> { + // Only get stats for Lance tables + if (queryEngine !== 'lance') { + return null + } + + try { + const statsQuery = `SUMMARIZE SELECT * FROM lance_table` + + const rows = await executeQueryAsListOfDict(statsQuery, `lance_stats`, dispatch, queryEngine, tablePath) + const statsMap: Record = {} + + for (const row of rows) { + const columnName = String(row.column_name) + const min = row.min === null || typeof row.min === 'boolean' ? null : row.min + const max = row.max === null || typeof row.max === 'boolean' ? null : row.max + const count = Number(row.count || 0) + const nullPercentage = Number(row.null_percentage || 0) + const cntNull = Math.round((nullPercentage / 100) * count) + const cntAll = count + + statsMap[columnName] = { + min, + max, + cntAll, + cntNull, + hasNull: cntNull > 0, + singleValue: min !== null && max !== null && min === max, + allNull: cntNull === cntAll + } + } + + return statsMap + } catch (error) { + // Failed to get Lance stats + console.error(error) + return null + } +} + +async function getParquetStats(tablePath: string, dispatch: AppDispatch, queryEngine: string): Promise | null> { // Check if the file is a Parquet file if (!tablePath.toLowerCase().endsWith('.parquet')) { return null } + // Don't get parquet stats for Lance tables + if (queryEngine === 'lance') { + return null + } + try { const statsQuery = ` SELECT @@ -142,14 +198,14 @@ async function getParquetStats(tablePath: string, dispatch: AppDispatch): Promis MIN(stats_min_value) AS min, MAX(stats_max_value) AS max, -- Sometimes parquet metadata may be wrong for columns with all null values - (CASE WHEN (MIN(stats_min_value) IS NULL AND MAX(stats_max_value) IS NULL) - THEN SUM(num_values) + (CASE WHEN (MIN(stats_min_value) IS NULL AND MAX(stats_max_value) IS NULL) + THEN SUM(num_values) ELSE SUM(stats_null_count) END) AS cntNull FROM parquet_metadata('${tablePath}') GROUP BY path_in_schema ` - const rows = await executeQueryAsListOfDict(statsQuery, `parquet_stats`, dispatch) + const rows = await executeQueryAsListOfDict(statsQuery, `parquet_stats`, dispatch, queryEngine, tablePath) const statsMap: Record = {} for (const row of rows) { @@ -158,7 +214,7 @@ async function getParquetStats(tablePath: string, dispatch: AppDispatch): Promis const max = row.max === null || typeof row.max === 'boolean' ? null : row.max const cntAll = Number(row.cntAll) const cntNull = Number(row.cntNull) - + statsMap[columnName] = { min, max, @@ -179,45 +235,50 @@ async function getParquetStats(tablePath: string, dispatch: AppDispatch): Promis } export async function getColumnMetadata( - tablePath: string, + tablePath: string, // eslint-disable-next-line @typescript-eslint/no-explicit-any - dispatch: any + dispatch: any, + queryEngine: string ): Promise { if (!tablePath.trim()) { throw new Error('Table path cannot be empty') } - const metaQuery = `SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM '${tablePath}')` - const rows = await executeQueryAsListOfDict(metaQuery, `column_metadata`, dispatch) - - // Get Parquet stats if available - const parquetStats = await getParquetStats(tablePath, dispatch) - + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + const metaQuery = `SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM ${tableRef})` + const rows = await executeQueryAsListOfDict(metaQuery, `column_metadata`, dispatch, queryEngine, tablePath) + + // Get stats if available (Lance or Parquet) + const lanceStats = await getLanceStats(tablePath, dispatch, queryEngine) + const parquetStats = await getParquetStats(tablePath, dispatch, queryEngine) + const stats = lanceStats || parquetStats + const columns: ColumnMeta[] = [] - + for (const row of rows) { const columnName = String(row.column_name) const duckdbType = String(row.column_type) - + // Add the original column columns.push({ column_name: columnName, duckdbType, typeShortcuts: computeTypeShortcuts(duckdbType), - stats: parquetStats?.[columnName] || null + stats: stats?.[columnName] || null }) - + // If it's a struct type, flatten the fields and add them as separate columns if (isStructType(duckdbType)) { try { const flattenedFields = flattenStructFields(columnName, duckdbType) - + for (const field of flattenedFields) { columns.push({ column_name: field.column_name, duckdbType: field.duckdbType, typeShortcuts: computeTypeShortcuts(field.duckdbType), - stats: parquetStats?.[field.column_name] || null + stats: stats?.[field.column_name] || null }) } } catch (error) { diff --git a/smoosense-gui/src/lib/features/balanceMap/balanceMapSlice.ts b/smoosense-gui/src/lib/features/balanceMap/balanceMapSlice.ts index 630565c..95d0813 100644 --- a/smoosense-gui/src/lib/features/balanceMap/balanceMapSlice.ts +++ b/smoosense-gui/src/lib/features/balanceMap/balanceMapSlice.ts @@ -31,6 +31,7 @@ interface FetchBalanceMapParams { bubblePlotYColumn: string bubblePlotBreakdownColumn: string // Required - BalanceMap needs breakdown column for color mapping tablePath: string + queryEngine: string filterCondition: string | null xBin: { min: number @@ -55,6 +56,7 @@ const fetchBalanceMapFunction = async ( bubblePlotYColumn, bubblePlotBreakdownColumn, tablePath, + queryEngine, filterCondition, xBin, yBin @@ -64,6 +66,9 @@ const fetchBalanceMapFunction = async ( const whereClause = filterCondition ? `WHERE ${filterCondition}` : '' const additionalWhere = whereClause ? `${whereClause} AND` : 'WHERE' + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + // Build query const query = ` WITH filtered AS ( @@ -71,7 +76,7 @@ const fetchBalanceMapFunction = async ( ${sanitizeName(bubblePlotXColumn)} AS x, ${sanitizeName(bubblePlotYColumn)} AS y, ${sanitizeName(bubblePlotBreakdownColumn)} AS breakdown - FROM '${tablePath}' + FROM ${tableRef} ${additionalWhere} x IS NOT NULL AND y IS NOT NULL ), binned AS ( SELECT @@ -91,7 +96,7 @@ const fetchBalanceMapFunction = async ( ORDER BY 1, 2 ` - const data = await executeQueryAsListOfDict(query, 'balanceMap', dispatch) + const data = await executeQueryAsListOfDict(query, 'balanceMap', dispatch, queryEngine, tablePath) // Process data into a single balance map group (no grouping by breakdown anymore) const items = data as unknown as BalanceMapDataPoint[] diff --git a/smoosense-gui/src/lib/features/balanceMap/useBalanceMap.ts b/smoosense-gui/src/lib/features/balanceMap/useBalanceMap.ts index f2f701c..658c8aa 100644 --- a/smoosense-gui/src/lib/features/balanceMap/useBalanceMap.ts +++ b/smoosense-gui/src/lib/features/balanceMap/useBalanceMap.ts @@ -14,6 +14,7 @@ interface UseBalanceMapResult { export function useBalanceMap(): UseBalanceMapResult { const tablePath = useAppSelector((state) => state.ui.tablePath) + const queryEngine = useAppSelector((state) => state.ui.queryEngine) const bubblePlotXColumn = useAppSelector((state) => state.ui.bubblePlotXColumn) const bubblePlotYColumn = useAppSelector((state) => state.ui.bubblePlotYColumn) const bubblePlotBreakdownColumn = useAppSelector((state) => state.ui.bubblePlotBreakdownColumn) @@ -25,7 +26,7 @@ export function useBalanceMap(): UseBalanceMapResult { // Build parameters for balance map fetching const params = useMemo(() => { - if (!tablePath || !bubblePlotXColumn || !bubblePlotYColumn || !bubblePlotBreakdownColumn || !xStatsData || !yStatsData) { + if (!tablePath || !queryEngine || !bubblePlotXColumn || !bubblePlotYColumn || !bubblePlotBreakdownColumn || !xStatsData || !yStatsData) { return null } @@ -43,11 +44,12 @@ export function useBalanceMap(): UseBalanceMapResult { bubblePlotYColumn, bubblePlotBreakdownColumn, tablePath, + queryEngine, filterCondition, xBin, yBin } - }, [tablePath, bubblePlotXColumn, bubblePlotYColumn, bubblePlotBreakdownColumn, filterCondition, xStatsData, yStatsData]) + }, [tablePath, queryEngine, bubblePlotXColumn, bubblePlotYColumn, bubblePlotBreakdownColumn, filterCondition, xStatsData, yStatsData]) const { data, loading, error, setNeedRefresh } = useAsyncData({ stateSelector: (state) => state.balanceMap, diff --git a/smoosense-gui/src/lib/features/boxplot/boxPlotSlice.ts b/smoosense-gui/src/lib/features/boxplot/boxPlotSlice.ts index 211f510..b9c31e0 100644 --- a/smoosense-gui/src/lib/features/boxplot/boxPlotSlice.ts +++ b/smoosense-gui/src/lib/features/boxplot/boxPlotSlice.ts @@ -16,6 +16,7 @@ interface FetchBoxPlotParams { boxPlotColumns: string[] boxPlotBreakdownColumn: string | null tablePath: string + queryEngine: string filterCondition: string | null } @@ -25,7 +26,7 @@ const fetchBoxPlotFunction = async ( // eslint-disable-next-line @typescript-eslint/no-explicit-any dispatch: any ): Promise => { - const { boxPlotColumns, boxPlotBreakdownColumn, tablePath, filterCondition } = params + const { boxPlotColumns, boxPlotBreakdownColumn, tablePath, queryEngine, filterCondition } = params if (boxPlotColumns.length === 0) { return [] @@ -46,16 +47,19 @@ const fetchBoxPlotFunction = async ( } AS ${e}` } + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + // Build FROM clause - const fromClause = `FROM '${tablePath}'` - + const fromClause = `FROM ${tableRef}` + // Build WHERE clause const whereClause = filterCondition ? `WHERE ${filterCondition}` : '' // Build query const query = ` WITH filtered AS ( - SELECT ${isNil(boxPlotBreakdownColumn) ? 'NULL' : sanitizeName(boxPlotBreakdownColumn)} AS breakdown, + SELECT ${isNil(boxPlotBreakdownColumn) ? 'NULL' : sanitizeName(boxPlotBreakdownColumn)} AS breakdown, ${boxPlotColumns.map(sanitizeName).join(', ')} ${fromClause} ${whereClause} @@ -64,7 +68,7 @@ const fetchBoxPlotFunction = async ( GROUP BY breakdown ` - const data = await executeQueryAsListOfDict(query, 'boxPlot', dispatch) + const data = await executeQueryAsListOfDict(query, 'boxPlot', dispatch, queryEngine, tablePath) // Return raw data directly without grouping return data as unknown as BoxPlotDataPoint[] diff --git a/smoosense-gui/src/lib/features/bubblePlot/bubblePlotSlice.ts b/smoosense-gui/src/lib/features/bubblePlot/bubblePlotSlice.ts index 696b850..24c177a 100644 --- a/smoosense-gui/src/lib/features/bubblePlot/bubblePlotSlice.ts +++ b/smoosense-gui/src/lib/features/bubblePlot/bubblePlotSlice.ts @@ -28,6 +28,7 @@ interface FetchBubblePlotParams { bubblePlotYColumn: string bubblePlotBreakdownColumn: string | null // Optional - BubblePlot can work without breakdown column tablePath: string + queryEngine: string filterCondition: string | null xBin: { min: number @@ -47,11 +48,12 @@ const fetchBubblePlotFunction = async ( // eslint-disable-next-line @typescript-eslint/no-explicit-any dispatch: any ): Promise => { - const { - bubblePlotXColumn, - bubblePlotYColumn, - bubblePlotBreakdownColumn, - tablePath, + const { + bubblePlotXColumn, + bubblePlotYColumn, + bubblePlotBreakdownColumn, + tablePath, + queryEngine, filterCondition, xBin, yBin @@ -61,14 +63,17 @@ const fetchBubblePlotFunction = async ( const whereClause = filterCondition ? `WHERE ${filterCondition}` : '' const additionalWhere = whereClause ? `${whereClause} AND` : 'WHERE' + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + // Build query const query = ` WITH filtered AS ( - SELECT + SELECT ${sanitizeName(bubblePlotXColumn)} AS x, ${sanitizeName(bubblePlotYColumn)} AS y, ${isNil(bubblePlotBreakdownColumn) ? 'NULL' : sanitizeName(bubblePlotBreakdownColumn)} AS breakdown - FROM '${tablePath}' + FROM ${tableRef} ${additionalWhere} x IS NOT NULL AND y IS NOT NULL ), binned AS ( SELECT @@ -87,7 +92,7 @@ const fetchBubblePlotFunction = async ( ORDER BY 1, 2, 3 ` - const data = await executeQueryAsListOfDict(query, 'bubblePlot', dispatch) + const data = await executeQueryAsListOfDict(query, 'bubblePlot', dispatch, queryEngine, tablePath) // Process data into bubble plot groups const grouped = _(data as unknown as BubblePlotDataPoint[]) diff --git a/smoosense-gui/src/lib/features/cardinality/cardinalitySlice.ts b/smoosense-gui/src/lib/features/cardinality/cardinalitySlice.ts index 07ff0cb..f5a0eda 100644 --- a/smoosense-gui/src/lib/features/cardinality/cardinalitySlice.ts +++ b/smoosense-gui/src/lib/features/cardinality/cardinalitySlice.ts @@ -1,7 +1,7 @@ import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit' import { executeQuery, generateSqlKey } from '@/lib/api/queries' import type { ColumnMeta } from '@/lib/api/queries' -import type { AppDispatch } from '@/lib/store' +import type { AppDispatch, RootState } from '@/lib/store' import { sanitizeName } from '@/lib/utils/sql/helpers' // Cardinality levels @@ -89,37 +89,41 @@ export function inferCardinalityFromMetadata(column: ColumnMeta): ColumnCardinal export const queryCardinality = createAsyncThunk< { columnName: string; cardinality: ColumnCardinality }, { columnName: string; tablePath: string }, - { dispatch: AppDispatch } + { dispatch: AppDispatch; state: RootState } >( 'cardinality/queryCardinality', - async ({ columnName, tablePath }, { dispatch }) => { + async ({ columnName, tablePath }, { dispatch, getState }) => { + const state = getState() + const queryEngine = state.ui.queryEngine const cutoff = 1000 + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` const sqlQuery = ` - SELECT + SELECT approx_count_distinct(${sanitizeName(columnName)}) AS approxCntD, - approxCntD / COUNT(*) AS distinctRatio, + approxCntD / COUNT(*) AS distinctRatio, CASE WHEN approx_count_distinct(${sanitizeName(columnName)}) <= ${cutoff} THEN COUNT(DISTINCT ${sanitizeName(columnName)}) ELSE NULL END AS cntD, - CASE - WHEN approx_count_distinct(${sanitizeName(columnName)}) <= ${cutoff} THEN 'low' - ELSE 'high' + CASE + WHEN approx_count_distinct(${sanitizeName(columnName)}) <= ${cutoff} THEN 'low' + ELSE 'high' END AS cardinality - FROM '${tablePath}' + FROM ${tableRef} WHERE ${sanitizeName(columnName)} IS NOT NULL `.trim() // Set up timeout controller const controller = new AbortController() - + try { const timeoutId = setTimeout(() => { controller.abort() }, 5000) // 5 second timeout const sqlKey = generateSqlKey(`cardinality_${columnName}`) - const result = await executeQuery(sqlQuery, sqlKey, dispatch) + const result = await executeQuery(sqlQuery, sqlKey, dispatch, queryEngine, tablePath) clearTimeout(timeoutId) if (controller.signal.aborted) { diff --git a/smoosense-gui/src/lib/features/colStats/colBaseStatsSlice.ts b/smoosense-gui/src/lib/features/colStats/colBaseStatsSlice.ts index 06319f8..9034ca4 100644 --- a/smoosense-gui/src/lib/features/colStats/colBaseStatsSlice.ts +++ b/smoosense-gui/src/lib/features/colStats/colBaseStatsSlice.ts @@ -33,13 +33,26 @@ export const queryBaseColumnStats = createAsyncThunk< { dispatch: AppDispatch; state: RootState } >( 'colBaseStats/queryBaseColumnStats', - async ({ columnName, sqlQuery, filterType }, { dispatch }) => { + async ({ columnName, sqlQuery, filterType }, { dispatch, getState }) => { + const state = getState() + const queryEngine = state.ui.queryEngine + const tablePath = state.ui.tablePath + + if (!queryEngine) { + throw new Error('queryEngine is required') + } + if (!tablePath) { + throw new Error('tablePath is required') + } + return queryColumnStats({ columnName, dispatch, keyPrefix: 'colstats', sqlQuery, - filterType + filterType, + queryEngine, + tablePath }) } ) diff --git a/smoosense-gui/src/lib/features/colStats/colFilteredStatsSlice.ts b/smoosense-gui/src/lib/features/colStats/colFilteredStatsSlice.ts index 6341141..dfca092 100644 --- a/smoosense-gui/src/lib/features/colStats/colFilteredStatsSlice.ts +++ b/smoosense-gui/src/lib/features/colStats/colFilteredStatsSlice.ts @@ -29,13 +29,26 @@ export const queryFilteredColumnStats = createAsyncThunk< { dispatch: AppDispatch; state: RootState } >( 'colFilteredStats/queryFilteredColumnStats', - async ({ columnName, sqlQuery, filterType }, { dispatch }) => { + async ({ columnName, sqlQuery, filterType }, { dispatch, getState }) => { + const state = getState() + const queryEngine = state.ui.queryEngine + const tablePath = state.ui.tablePath + + if (!queryEngine) { + throw new Error('queryEngine is required') + } + if (!tablePath) { + throw new Error('tablePath is required') + } + return queryColumnStats({ columnName, dispatch, keyPrefix: 'colFilteredStats', sqlQuery, - filterType + filterType, + queryEngine, + tablePath }) } ) diff --git a/smoosense-gui/src/lib/features/colStats/queryBuilders.ts b/smoosense-gui/src/lib/features/colStats/queryBuilders.ts index c170d46..07cbd0c 100644 --- a/smoosense-gui/src/lib/features/colStats/queryBuilders.ts +++ b/smoosense-gui/src/lib/features/colStats/queryBuilders.ts @@ -6,15 +6,17 @@ import { INVALID_COLUMN_NAME } from '@/lib/utils/columnNameUtils' // Helper function to build categorical stats query export function buildCategoricalStatsQuery( - columnName: string, - tablePath: string, - filterCondition?: string | null + columnName: string, + tablePath: string, + filterCondition: string | null | undefined, + queryEngine: string ): string { const whereClause = filterCondition ? `WHERE ${filterCondition}` : '' - + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + return ` WITH filtered AS ( - SELECT * FROM '${tablePath}' ${whereClause} + SELECT * FROM ${tableRef} ${whereClause} ), stats AS ( SELECT COUNT(*) AS cnt_all, @@ -45,16 +47,18 @@ export function buildCategoricalStatsQuery( // Helper function to build histogram stats query export function buildHistogramStatsQuery( - columnName: string, - tablePath: string, - histogramNumberOfBins: number, - filterCondition?: string | null + columnName: string, + tablePath: string, + histogramNumberOfBins: number, + filterCondition: string | null | undefined, + queryEngine: string ): string { const whereClause = filterCondition ? `WHERE ${filterCondition}` : '' - + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + return ` WITH filtered AS ( - SELECT * FROM '${tablePath}' ${whereClause} + SELECT * FROM ${tableRef} ${whereClause} ), stats AS ( SELECT COUNT(*) AS cnt_all, @@ -103,14 +107,16 @@ export function buildHistogramStatsQuery( // Helper function to build text stats query export function buildTextStatsQuery( - columnName: string, - tablePath: string, - filterCondition?: string | null + columnName: string, + tablePath: string, + filterCondition: string | null | undefined, + queryEngine: string ): string { const whereClause = filterCondition ? `WHERE ${filterCondition}` : '' - + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + return ` - SELECT + SELECT STRUCT_PACK( min := MIN(${sanitizeName(columnName)}), max := MAX(${sanitizeName(columnName)}) @@ -119,7 +125,7 @@ export function buildTextStatsQuery( COUNT(*) AS cnt_all, COUNT_IF(${sanitizeName(columnName)} IS NULL) AS cnt_null, COUNT(*) - COUNT_IF(${sanitizeName(columnName)} IS NULL) AS cnt_not_null - FROM '${tablePath}' + FROM ${tableRef} ${whereClause} `.trim() } @@ -145,13 +151,16 @@ export function buildColStatsQueryFromState({ throw new Error('No table path found in state') } + // Get query engine from UI state + const queryEngine = state.ui.queryEngine + // Get histogram bins from UI state let histogramNumberOfBins = state.ui.histogramNumberOfBins // Get distinct count from cardinality data if available const cardinalityData = state.columns.cardinality[columnName]?.data const distinctCount = cardinalityData?.cntD - + // Use the smaller value between distinctCount and histogramNumberOfBins for histogram queries if (distinctCount !== null && distinctCount !== undefined && distinctCount > 0) { histogramNumberOfBins = Math.min(histogramNumberOfBins, distinctCount) @@ -165,11 +174,11 @@ export function buildColStatsQueryFromState({ // Build and return appropriate query if (filterType === FilterType.ENUM) { - return buildCategoricalStatsQuery(columnName, tablePath, whereClause) + return buildCategoricalStatsQuery(columnName, tablePath, whereClause, queryEngine) } else if (filterType === FilterType.RANGE) { - return buildHistogramStatsQuery(columnName, tablePath, histogramNumberOfBins, whereClause) + return buildHistogramStatsQuery(columnName, tablePath, histogramNumberOfBins, whereClause, queryEngine) } else { // TEXT or NONE - default to text query - return buildTextStatsQuery(columnName, tablePath, whereClause) + return buildTextStatsQuery(columnName, tablePath, whereClause, queryEngine) } } \ No newline at end of file diff --git a/smoosense-gui/src/lib/features/colStats/statsUtils.ts b/smoosense-gui/src/lib/features/colStats/statsUtils.ts index ea7a726..d7732ab 100644 --- a/smoosense-gui/src/lib/features/colStats/statsUtils.ts +++ b/smoosense-gui/src/lib/features/colStats/statsUtils.ts @@ -75,13 +75,17 @@ export async function queryColumnStats({ dispatch, keyPrefix, sqlQuery, - filterType + filterType, + queryEngine, + tablePath }: { columnName: string dispatch: AppDispatch keyPrefix: string sqlQuery: string filterType: FilterType + queryEngine: string + tablePath: string }): Promise<{ columnName: string; stats: ColumnStats }> { // Set up timeout controller const controller = new AbortController() @@ -92,7 +96,7 @@ export async function queryColumnStats({ }, 15000) // 15 second timeout const sqlKey = generateSqlKey(`${keyPrefix}_${columnName}`) - const result = await executeQueryAsListOfDict(sqlQuery, sqlKey, dispatch) + const result = await executeQueryAsListOfDict(sqlQuery, sqlKey, dispatch, queryEngine, tablePath) clearTimeout(timeoutId) if (controller.signal.aborted) { diff --git a/smoosense-gui/src/lib/features/columnMeta/columnMetaSlice.ts b/smoosense-gui/src/lib/features/columnMeta/columnMetaSlice.ts index a474a1f..a50b072 100644 --- a/smoosense-gui/src/lib/features/columnMeta/columnMetaSlice.ts +++ b/smoosense-gui/src/lib/features/columnMeta/columnMetaSlice.ts @@ -1,6 +1,7 @@ import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit' import type { ColumnMeta } from '@/lib/api/queries' import { getColumnMetadata } from '@/lib/api/queries' +import type { RootState } from '@/lib/store' export interface ColumnMetaState { data: ColumnMeta[] | null @@ -17,8 +18,10 @@ const initialState: ColumnMetaState = { // Async thunk for fetching column metadata export const fetchColumnMetadata = createAsyncThunk( 'columnMeta/fetchColumnMetadata', - async (tablePath: string, { dispatch }) => { - const result = await getColumnMetadata(tablePath, dispatch) + async (tablePath: string, { dispatch, getState }) => { + const state = getState() as RootState + const queryEngine = state.ui.queryEngine + const result = await getColumnMetadata(tablePath, dispatch, queryEngine) return result }, { diff --git a/smoosense-gui/src/lib/features/heatmap/heatmapSlice.ts b/smoosense-gui/src/lib/features/heatmap/heatmapSlice.ts index 01b2d77..37d653f 100644 --- a/smoosense-gui/src/lib/features/heatmap/heatmapSlice.ts +++ b/smoosense-gui/src/lib/features/heatmap/heatmapSlice.ts @@ -32,6 +32,7 @@ interface FetchHeatmapParams { heatmapXColumn: string heatmapYColumn: string tablePath: string + queryEngine: string filterCondition: string | null } @@ -80,7 +81,7 @@ const fetchHeatmapFunction = async ( // eslint-disable-next-line @typescript-eslint/no-explicit-any dispatch: any ): Promise => { - const { heatmapXColumn, heatmapYColumn, tablePath, filterCondition } = params + const { heatmapXColumn, heatmapYColumn, tablePath, queryEngine, filterCondition } = params if (!heatmapXColumn || !heatmapYColumn || !tablePath) { throw new Error('Missing required parameters for heatmap') @@ -90,19 +91,22 @@ const fetchHeatmapFunction = async ( const whereClause = filterCondition ? `WHERE ${filterCondition}` : '' const additionalWhere = whereClause ? `${whereClause} AND` : 'WHERE' + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + const query = ` WITH filtered AS ( - SELECT - ${sanitizeName(heatmapXColumn)} AS x, + SELECT + ${sanitizeName(heatmapXColumn)} AS x, ${sanitizeName(heatmapYColumn)} AS y - FROM '${tablePath}' + FROM ${tableRef} ${additionalWhere} x IS NOT NULL AND y IS NOT NULL - ) SELECT x, y, COUNT(*) AS cnt + ) SELECT x, y, COUNT(*) AS cnt FROM filtered GROUP BY x, y ` - const data = (await executeQueryAsListOfDict(query, 'heatMap', dispatch) as unknown) as HeatmapDataPoint[] + const data = (await executeQueryAsListOfDict(query, 'heatMap', dispatch, queryEngine, tablePath) as unknown) as HeatmapDataPoint[] const heatMap = pivotData(data) return heatMap diff --git a/smoosense-gui/src/lib/features/histogram/histogramSlice.ts b/smoosense-gui/src/lib/features/histogram/histogramSlice.ts index 17de036..a80509e 100644 --- a/smoosense-gui/src/lib/features/histogram/histogramSlice.ts +++ b/smoosense-gui/src/lib/features/histogram/histogramSlice.ts @@ -24,6 +24,7 @@ interface FetchHistogramParams { histogramColumn: string histogramBreakdownColumn: string | null tablePath: string + queryEngine: string filterCondition: string | null histogramStatsData: { bin: { @@ -40,7 +41,7 @@ const fetchHistogramFunction = async ( // eslint-disable-next-line @typescript-eslint/no-explicit-any dispatch: any ): Promise => { - const { histogramColumn, histogramBreakdownColumn, tablePath, filterCondition, histogramStatsData } = params + const { histogramColumn, histogramBreakdownColumn, tablePath, queryEngine, filterCondition, histogramStatsData } = params if (!histogramStatsData?.bin) { throw new Error('Missing histogram bin data') @@ -52,23 +53,26 @@ const fetchHistogramFunction = async ( const whereClause = filterCondition ? `WHERE ${filterCondition}` : '' const additionalWhere = whereClause ? `${whereClause} AND` : 'WHERE' + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + // Build query const query = ` WITH filtered AS ( - SELECT - ${sanitizeName(histogramColumn)} AS value, + SELECT + ${sanitizeName(histogramColumn)} AS value, ${isNil(histogramBreakdownColumn) ? 'NULL' : sanitizeName(histogramBreakdownColumn)} AS breakdown - FROM '${tablePath}' - ${additionalWhere} value IS NOT NULL + FROM ${tableRef} + ${additionalWhere} value IS NOT NULL ) - SELECT breakdown, FLOOR((value - ${min}) / ${step}) AS binIdx, + SELECT breakdown, FLOOR((value - ${min}) / ${step}) AS binIdx, COUNT(*) AS cnt FROM filtered GROUP BY 1, 2 ORDER BY 1, 2 ` - const data = await executeQueryAsListOfDict(query, 'histogram', dispatch) + const data = await executeQueryAsListOfDict(query, 'histogram', dispatch, queryEngine, tablePath) // Process data into histogram groups const grouped = _(data as unknown as HistogramDataPoint[]) diff --git a/smoosense-gui/src/lib/features/rowData/rowDataSlice.ts b/smoosense-gui/src/lib/features/rowData/rowDataSlice.ts index 5d54146..f400508 100644 --- a/smoosense-gui/src/lib/features/rowData/rowDataSlice.ts +++ b/smoosense-gui/src/lib/features/rowData/rowDataSlice.ts @@ -7,16 +7,18 @@ export type RowDataState = BaseAsyncDataState[]> interface FetchRowDataParams { query: string + tablePath: string + queryEngine: string } // Row data fetch function const fetchRowDataFunction = async ( - { query }: FetchRowDataParams, + { query, tablePath, queryEngine }: FetchRowDataParams, // eslint-disable-next-line @typescript-eslint/no-explicit-any dispatch: any ): Promise[]> => { // Fetch the raw row data only - const rowData = await executeQueryAsListOfDict(query, 'rowData', dispatch) + const rowData = await executeQueryAsListOfDict(query, 'rowData', dispatch, queryEngine, tablePath) return rowData } diff --git a/smoosense-gui/src/lib/hooks/useBoxPlot.ts b/smoosense-gui/src/lib/hooks/useBoxPlot.ts index ada34e7..2672e9d 100644 --- a/smoosense-gui/src/lib/hooks/useBoxPlot.ts +++ b/smoosense-gui/src/lib/hooks/useBoxPlot.ts @@ -17,6 +17,7 @@ interface UseBoxPlotResult { */ export function useBoxPlot(): UseBoxPlotResult { const tablePath = useAppSelector((state) => state.ui.tablePath) + const queryEngine = useAppSelector((state) => state.ui.queryEngine) const boxPlotColumns = useAppSelector((state) => state.ui.boxPlotColumns) const boxPlotBreakdownColumn = useAppSelector((state) => state.ui.boxPlotBreakdownColumn) const filterCondition = useAppSelector((state) => extractSqlFilterFromState(state)) @@ -31,9 +32,10 @@ export function useBoxPlot(): UseBoxPlotResult { boxPlotColumns, boxPlotBreakdownColumn, tablePath, + queryEngine, filterCondition } - }, [tablePath, boxPlotColumns, boxPlotBreakdownColumn, filterCondition]) + }, [tablePath, queryEngine, boxPlotColumns, boxPlotBreakdownColumn, filterCondition]) const { data, loading, error, setNeedRefresh } = useAsyncData({ stateSelector: (state) => state.boxPlot, diff --git a/smoosense-gui/src/lib/hooks/useBubblePlot.ts b/smoosense-gui/src/lib/hooks/useBubblePlot.ts index 4e20cbb..e6c56c0 100644 --- a/smoosense-gui/src/lib/hooks/useBubblePlot.ts +++ b/smoosense-gui/src/lib/hooks/useBubblePlot.ts @@ -18,6 +18,7 @@ interface UseBubblePlotResult { */ export function useBubblePlot(): UseBubblePlotResult { const tablePath = useAppSelector((state) => state.ui.tablePath) + const queryEngine = useAppSelector((state) => state.ui.queryEngine) const bubblePlotXColumn = useAppSelector((state) => state.ui.bubblePlotXColumn) const bubblePlotYColumn = useAppSelector((state) => state.ui.bubblePlotYColumn) const bubblePlotBreakdownColumn = useAppSelector((state) => state.ui.bubblePlotBreakdownColumn) @@ -47,11 +48,12 @@ export function useBubblePlot(): UseBubblePlotResult { bubblePlotYColumn, bubblePlotBreakdownColumn, tablePath, + queryEngine, filterCondition, xBin, yBin } - }, [tablePath, bubblePlotXColumn, bubblePlotYColumn, bubblePlotBreakdownColumn, filterCondition, xStatsData, yStatsData]) + }, [tablePath, queryEngine, bubblePlotXColumn, bubblePlotYColumn, bubblePlotBreakdownColumn, filterCondition, xStatsData, yStatsData]) const { data, loading, error, setNeedRefresh } = useAsyncData({ stateSelector: (state) => state.bubblePlot, diff --git a/smoosense-gui/src/lib/hooks/useFileInfo.ts b/smoosense-gui/src/lib/hooks/useFileInfo.ts index 328f10d..67ca404 100644 --- a/smoosense-gui/src/lib/hooks/useFileInfo.ts +++ b/smoosense-gui/src/lib/hooks/useFileInfo.ts @@ -24,6 +24,7 @@ interface UseFileInfoResult { export function useFileInfo(): UseFileInfoResult { const tablePath = useAppSelector((state) => state.ui.tablePath) + const queryEngine = useAppSelector((state) => state.ui.queryEngine) const dispatch = useAppDispatch() const [data, setData] = useState(null) const [loading, setLoading] = useState(false) @@ -50,7 +51,7 @@ export function useFileInfo(): UseFileInfoResult { try { const metadataQuery = `SELECT CAST(key AS VARCHAR) AS key, CAST(value AS VARCHAR) AS value FROM parquet_kv_metadata('${tablePath}')` const sqlKey = generateSqlKey('parquet_kv_metadata') - const metadataResult = await executeQueryAsListOfDict(metadataQuery, sqlKey, dispatch) + const metadataResult = await executeQueryAsListOfDict(metadataQuery, sqlKey, dispatch, queryEngine, tablePath) // Convert the result to metadata object for (const row of metadataResult) { @@ -89,7 +90,7 @@ export function useFileInfo(): UseFileInfoResult { } fetchFileInfo() - }, [tablePath, dispatch]) + }, [tablePath, queryEngine, dispatch]) return { data, loading, error } } \ No newline at end of file diff --git a/smoosense-gui/src/lib/hooks/useHeatMap.ts b/smoosense-gui/src/lib/hooks/useHeatMap.ts index 432021a..8006e78 100644 --- a/smoosense-gui/src/lib/hooks/useHeatMap.ts +++ b/smoosense-gui/src/lib/hooks/useHeatMap.ts @@ -17,6 +17,7 @@ interface UseHeatMapResult { */ export function useHeatMap(): UseHeatMapResult { const tablePath = useAppSelector((state) => state.ui.tablePath) + const queryEngine = useAppSelector((state) => state.ui.queryEngine) const heatmapXColumn = useAppSelector((state) => state.ui.heatmapXColumn) const heatmapYColumn = useAppSelector((state) => state.ui.heatmapYColumn) const filterCondition = useAppSelector((state) => extractSqlFilterFromState(state)) @@ -31,9 +32,10 @@ export function useHeatMap(): UseHeatMapResult { heatmapXColumn, heatmapYColumn, tablePath, + queryEngine, filterCondition } - }, [tablePath, heatmapXColumn, heatmapYColumn, filterCondition]) + }, [tablePath, queryEngine, heatmapXColumn, heatmapYColumn, filterCondition]) const { data, loading, error, setNeedRefresh } = useAsyncData({ stateSelector: (state) => state.heatmap, diff --git a/smoosense-gui/src/lib/hooks/useHistogram.ts b/smoosense-gui/src/lib/hooks/useHistogram.ts index 4aa3019..c5868cb 100644 --- a/smoosense-gui/src/lib/hooks/useHistogram.ts +++ b/smoosense-gui/src/lib/hooks/useHistogram.ts @@ -18,6 +18,7 @@ interface UseHistogramResult { */ export function useHistogram(): UseHistogramResult { const tablePath = useAppSelector((state) => state.ui.tablePath) + const queryEngine = useAppSelector((state) => state.ui.queryEngine) const histogramColumn = useAppSelector((state) => state.ui.histogramColumn) const histogramBreakdownColumn = useAppSelector((state) => state.ui.histogramBreakdownColumn) const filterCondition = useAppSelector((state) => extractSqlFilterFromState(state)) @@ -45,12 +46,13 @@ export function useHistogram(): UseHistogramResult { histogramColumn, histogramBreakdownColumn, tablePath, + queryEngine, filterCondition, histogramStatsData: { bin: histogramStats.bin } } - }, [tablePath, histogramColumn, histogramBreakdownColumn, filterCondition, histogramStatsData]) + }, [tablePath, queryEngine, histogramColumn, histogramBreakdownColumn, filterCondition, histogramStatsData]) const { data, loading, error, setNeedRefresh } = useAsyncData({ stateSelector: (state) => state.histogram, diff --git a/smoosense-gui/src/lib/hooks/useRowData.ts b/smoosense-gui/src/lib/hooks/useRowData.ts index 7e97ecb..e8d3712 100644 --- a/smoosense-gui/src/lib/hooks/useRowData.ts +++ b/smoosense-gui/src/lib/hooks/useRowData.ts @@ -14,6 +14,7 @@ interface UseRowDataResult { export function useRowData(): UseRowDataResult { const tablePath = useAppSelector((state) => state.ui.tablePath) + const queryEngine = useAppSelector((state) => state.ui.queryEngine) const pageSize = useAppSelector((state) => state.viewing.pageSize) const pageNumber = useAppSelector((state) => state.viewing.pageNumber) const sorting = useAppSelector((state) => state.ag.sorting) @@ -24,8 +25,11 @@ export function useRowData(): UseRowDataResult { const query = useMemo(() => { if (!tablePath) return null + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` + const offset = (pageNumber - 1) * pageSize - + // Combine SQL condition with sampling condition using AND let combinedCondition = '' if (sqlCondition && samplingCondition) { @@ -35,32 +39,32 @@ export function useRowData(): UseRowDataResult { } else if (samplingCondition) { combinedCondition = ` WHERE ${samplingCondition}` } - + // When samplingCondition is not null, use reservoir sampling if (samplingCondition !== null) { return `SELECT * - FROM (SELECT * FROM '${tablePath}'${combinedCondition}) + FROM (SELECT * FROM ${tableRef}${combinedCondition}) ORDER BY random() --- Changed from reservoir to random. Reservoir does not work for large dataset. LIMIT ${pageSize}` } - + // Normal query with sorting when samplingCondition is null let orderByClause = '' if (sorting && sorting.length > 0) { const sortClauses = sorting.map(sort => `${sanitizeName(sort.field)} ${sort.direction.toUpperCase()}`) orderByClause = ` ORDER BY ${sortClauses.join(', ')}` } - - return `SELECT * FROM '${tablePath}'${combinedCondition}${orderByClause} LIMIT ${pageSize} OFFSET ${offset}` - }, [tablePath, pageSize, pageNumber, sqlCondition, samplingCondition, sorting]) + + return `SELECT * FROM ${tableRef}${combinedCondition}${orderByClause} LIMIT ${pageSize} OFFSET ${offset}` + }, [tablePath, queryEngine, pageSize, pageNumber, sqlCondition, samplingCondition, sorting]) const { data, loading, error, setNeedRefresh } = useAsyncData({ stateSelector: (state) => state.rowData, fetchAction: fetchRowData, setNeedRefreshAction: setNeedRefreshAction, buildParams: () => { - if (!query) return null - return { query } + if (!query || !tablePath || !queryEngine) return null + return { query, tablePath, queryEngine } }, dependencies: [query] }) diff --git a/smoosense-gui/src/lib/hooks/useTotalRows.ts b/smoosense-gui/src/lib/hooks/useTotalRows.ts index eb82c1c..28a884f 100644 --- a/smoosense-gui/src/lib/hooks/useTotalRows.ts +++ b/smoosense-gui/src/lib/hooks/useTotalRows.ts @@ -7,22 +7,25 @@ import { extractSqlFilterFromState } from '@/lib/utils/state/filterUtils' export function useTotalRows(): number | null { const dispatch = useAppDispatch() const tablePath = useAppSelector((state) => state.ui.tablePath) + const queryEngine = useAppSelector((state) => state.ui.queryEngine) const totalRows = useAppSelector((state) => state.viewing.totalRows) const filterCondition = useAppSelector((state) => extractSqlFilterFromState(state)) - + useEffect(() => { const fetchTotalRows = async () => { - if (!tablePath) { - // Clear total rows if no table path + if (!tablePath || !queryEngine) { + // Clear total rows if no table path or query engine dispatch(setTotalRows(null)) return } - + try { // Build COUNT query with filter conditions + // Use lance_table when queryEngine is lance, otherwise use tablePath + const tableRef = queryEngine === 'lance' ? 'lance_table' : `'${tablePath}'` const whereCondition = filterCondition ? ` WHERE ${filterCondition}` : '' - const countQuery = `SELECT COUNT(*) as total FROM '${tablePath}'${whereCondition}` - const result = await executeQueryAsListOfDict(countQuery, 'totalRows', dispatch) + const countQuery = `SELECT COUNT(*) as total FROM ${tableRef}${whereCondition}` + const result = await executeQueryAsListOfDict(countQuery, 'totalRows', dispatch, queryEngine, tablePath) if (result && result.length > 0) { const total = Number(result[0].total) @@ -35,9 +38,9 @@ export function useTotalRows(): number | null { } } - // Fetch total rows whenever tablePath or filter conditions change + // Fetch total rows whenever tablePath, queryEngine, or filter conditions change fetchTotalRows() - }, [tablePath, filterCondition, dispatch]) + }, [tablePath, queryEngine, filterCondition, dispatch]) return totalRows } \ No newline at end of file diff --git a/smoosense-gui/src/lib/utils/timeUtils.ts b/smoosense-gui/src/lib/utils/timeUtils.ts new file mode 100644 index 0000000..e881f44 --- /dev/null +++ b/smoosense-gui/src/lib/utils/timeUtils.ts @@ -0,0 +1,34 @@ +/** + * Format a timestamp as a relative time string (e.g., "5m ago", "2h ago") + * + * @param timestamp - Unix timestamp in milliseconds + * @returns Relative time string + */ +export function formatRelativeTime(timestamp: number): string { + const now = Date.now() + const diff = now - timestamp + const minute = 60 * 1000 + const hour = minute * 60 + const day = hour * 24 + const week = day * 7 + const month = day * 30 + const year = day * 365 + + if (diff < minute) return 'now' + if (diff < hour) return `${Math.floor(diff / minute)}m` + if (diff < day) return `${Math.floor(diff / hour)}h` + if (diff < week) return `${Math.floor(diff / day)}d` + if (diff < month) return `${Math.floor(diff / week)}w` + if (diff < year) return `${Math.floor(diff / month)}mo` + return `${Math.floor(diff / year)}y` +} + +/** + * Format a timestamp as a date string + * + * @param timestamp - Unix timestamp in milliseconds + * @returns Formatted date string + */ +export function formatDate(timestamp: number): string { + return new Date(timestamp).toLocaleDateString() +} diff --git a/smoosense-py/app_dev.py b/smoosense-py/app_dev.py index 0a7c0dc..f2606ab 100644 --- a/smoosense-py/app_dev.py +++ b/smoosense-py/app_dev.py @@ -54,4 +54,4 @@ def configure_rich_logging() -> None: "Work": "~/Work", "S3 bucket": "s3://sense-table-demo", }, - ).run(threaded=True, debug=True) + ).run(threaded=False, debug=True) diff --git a/smoosense-py/dummy_data/various_types.py b/smoosense-py/dummy_data/various_types.py index fa6a2ab..6d6c4b9 100644 --- a/smoosense-py/dummy_data/various_types.py +++ b/smoosense-py/dummy_data/various_types.py @@ -1,13 +1,21 @@ import os import random +import shutil import string +import sys from datetime import datetime, timedelta +import lancedb import numpy as np import pyarrow as pa import pyarrow.parquet as pq +# Add parent directory to path to import my_logging +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) +from tests.my_logging import getLogger + PWD = os.path.dirname(os.path.abspath(__file__)) +logger = getLogger(__name__) class DummyDataGenerator: @@ -25,6 +33,7 @@ def __init__(self, n_rows=200, seed=42): self.seed = seed self.output_dir = os.path.join(PWD, "../../data") self._set_random_seed() + logger.info(f"Initialized DummyDataGenerator with n_rows={n_rows}, seed={seed}") def _set_random_seed(self): """Set random seeds for reproducibility""" @@ -189,21 +198,82 @@ def generate_arrays(self): def create_table(self): """Create PyArrow table from generated arrays""" + logger.info("Generating arrays...") arrays = self.generate_arrays() + logger.info(f"Creating table with {len(arrays)} columns and {self.n_rows} rows") return pa.Table.from_arrays(list(arrays.values()), names=list(arrays.keys())) def ensure_output_directory(self): """Create output directory if it doesn't exist""" os.makedirs(self.output_dir, exist_ok=True) + def save_lance(self, table, filename): + """Save the data as Lance database with multiple versions""" + lance_path = os.path.join(self.output_dir, "lance") + + # Clear the target folder if it exists + if os.path.exists(lance_path): + logger.info(f"Removing existing Lance directory: {lance_path}") + shutil.rmtree(lance_path) + + logger.info(f"Writing Lance database to {lance_path}") + # Filter out struct and map columns for Lance + lance_columns = [] + lance_column_names = [] + for i, field in enumerate(table.schema): + if not (pa.types.is_struct(field.type) or pa.types.is_map(field.type)): + lance_columns.append(table.column(i)) + lance_column_names.append(field.name) + else: + logger.info( + f"Skipping column '{field.name}' (type: {field.type}) for Lance - unsupported type" + ) + lance_table = pa.Table.from_arrays(lance_columns, names=lance_column_names) + + # Create initial table + db = lancedb.connect(lance_path) + lance_db_table = db.create_table(filename, data=lance_table, mode="overwrite") + logger.info(f"Lance database written successfully with table name: {filename}") + + # Make an update to create a new version + logger.info("Creating version 2: updating rows where bool=true") + lance_db_table.update(where="bool=true", values={"string": "updated"}) + logger.info("Version 2 created successfully") + + # Add more rows to create another version + logger.info("Creating version 3: adding first 3 rows") + df = lance_table.to_pandas() + additional_data = df.head(3) + lance_db_table.add(additional_data) + logger.info("Version 3 created successfully") + + # Add a new column to create another version + logger.info("Creating version 4: adding new_column with default value 'foo'") + lance_db_table.add_columns({"new_column": "'foo'"}) + logger.info("Version 4 created successfully") + + logger.info(f"Lance database with {len(lance_db_table.list_versions())} versions created") + def save_files(self, filename="dummy_data_various_types"): - """Save the generated data as a parquet file""" + """Save the generated data as parquet, csv, and lance files""" + logger.info(f"Saving files with base name: {filename}") self.ensure_output_directory() table = self.create_table() + + # Save as Parquet parquet_path = os.path.join(self.output_dir, f"{filename}.parquet") + logger.info(f"Writing Parquet file to {parquet_path}") pq.write_table(table, parquet_path) + logger.info("Parquet file written successfully") + + # Save as CSV csv_path = os.path.join(self.output_dir, f"{filename}.csv") + logger.info(f"Writing CSV file to {csv_path}") table.to_pandas().to_csv(csv_path, index=False) + logger.info("CSV file written successfully") + + # Save as Lance + self.save_lance(table, filename) def get_schema(self): """Get the schema of the generated data""" @@ -212,11 +282,12 @@ def get_schema(self): if __name__ == "__main__": # Example usage + logger.info("Starting dummy data generation") generator = DummyDataGenerator(n_rows=200, seed=42) # Generate and save data generator.save_files() # Print schema - print("\nSchema:") - print(generator.get_schema()) + logger.info("Data generation complete") + logger.info(f"Schema: \n{generator.get_schema()}") diff --git a/smoosense-py/intests/screenshots/folder_browser_csv_dark.png b/smoosense-py/intests/screenshots/folder_browser_csv_dark.png index 6fa643b..c9dd865 100644 Binary files a/smoosense-py/intests/screenshots/folder_browser_csv_dark.png and b/smoosense-py/intests/screenshots/folder_browser_csv_dark.png differ diff --git a/smoosense-py/intests/screenshots/folder_browser_csv_light.png b/smoosense-py/intests/screenshots/folder_browser_csv_light.png index 3f48b47..73428e1 100644 Binary files a/smoosense-py/intests/screenshots/folder_browser_csv_light.png and b/smoosense-py/intests/screenshots/folder_browser_csv_light.png differ diff --git a/smoosense-py/intests/screenshots/folder_browser_parquet_dark.png b/smoosense-py/intests/screenshots/folder_browser_parquet_dark.png index 77abee5..9b31e13 100644 Binary files a/smoosense-py/intests/screenshots/folder_browser_parquet_dark.png and b/smoosense-py/intests/screenshots/folder_browser_parquet_dark.png differ diff --git a/smoosense-py/intests/screenshots/folder_browser_parquet_light.png b/smoosense-py/intests/screenshots/folder_browser_parquet_light.png index 1518325..11700d1 100644 Binary files a/smoosense-py/intests/screenshots/folder_browser_parquet_light.png and b/smoosense-py/intests/screenshots/folder_browser_parquet_light.png differ diff --git a/smoosense-py/pyproject.toml b/smoosense-py/pyproject.toml index 5788e48..e335180 100644 --- a/smoosense-py/pyproject.toml +++ b/smoosense-py/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "smoosense" -version = "0.1.0" +version = "0.1.1" description = "Smoothly make sense of your large multi-modal datasets" readme = "README.md" requires-python = ">=3.9" @@ -9,6 +9,7 @@ dependencies = [ "click>=8.1.8", "duckdb>=1.2.1", "flask>=3.1.0", + "lancedb>=0.25.2", "pydantic>=2.11.7", "pytz>=2025.2", "requests>=2.32.3", @@ -40,6 +41,7 @@ dev = [ "mypy>=1.17.1", "types-requests>=2.31.0.6", "pandas-stubs>=2.0.0", + "line-profiler>=5.0.0", ] [tool.setuptools] @@ -106,8 +108,9 @@ warn_unreachable = true strict_equality = true exclude = [ "app_dev.py", # Development-only file, not included in package + "tests/", # Test files don't need strict typing ] [[tool.mypy.overrides]] -module = ["boto3.*", "botocore.*", "pandas.*", "IPython.*", "daft.*"] +module = ["boto3.*", "botocore.*", "pandas.*", "IPython.*", "daft.*", "lancedb.*", "pyarrow.*"] ignore_missing_imports = true diff --git a/smoosense-py/smoosense/app.py b/smoosense-py/smoosense/app.py index 453ae71..d9f4233 100644 --- a/smoosense-py/smoosense/app.py +++ b/smoosense-py/smoosense/app.py @@ -9,6 +9,7 @@ from pydantic import ConfigDict, validate_call from smoosense.handlers.fs import fs_bp +from smoosense.handlers.lance import lance_bp from smoosense.handlers.pages import pages_bp from smoosense.handlers.query import query_bp from smoosense.handlers.s3 import s3_bp @@ -64,6 +65,7 @@ def create_app(self) -> Flask: # Register blueprints with url_prefix app.register_blueprint(query_bp, url_prefix=f"{self.url_prefix}/api") app.register_blueprint(fs_bp, url_prefix=f"{self.url_prefix}/api") + app.register_blueprint(lance_bp, url_prefix=f"{self.url_prefix}/api") app.register_blueprint(pages_bp, url_prefix=self.url_prefix) app.register_blueprint(s3_bp, url_prefix=f"{self.url_prefix}/api") diff --git a/smoosense-py/smoosense/handlers/lance.py b/smoosense-py/smoosense/handlers/lance.py new file mode 100644 index 0000000..953a731 --- /dev/null +++ b/smoosense-py/smoosense/handlers/lance.py @@ -0,0 +1,83 @@ +import logging + +from flask import Blueprint, jsonify +from werkzeug.wrappers import Response + +from smoosense.exceptions import InvalidInputException +from smoosense.lance.db_client import LanceDBClient +from smoosense.lance.table_client import LanceTableClient +from smoosense.utils.api import handle_api_errors, require_arg + +logger = logging.getLogger(__name__) +lance_bp = Blueprint("lance", __name__) + + +@lance_bp.get("/lance/list-tables") +@handle_api_errors +def list_tables() -> Response: + """List all tables in a Lance database directory.""" + root_folder = require_arg("rootFolder") + + try: + client = LanceDBClient(root_folder) + tables_info = client.list_tables() + return jsonify([table.model_dump() for table in tables_info]) + except ValueError as e: + raise InvalidInputException(str(e)) from e + except Exception as e: + logger.error(f"Failed to list tables from {root_folder}: {e}") + raise InvalidInputException(f"Failed to list Lance tables: {e}") from e + + +@lance_bp.get("/lance/list-versions") +@handle_api_errors +def list_versions() -> Response: + """List all versions of a table in a Lance database.""" + root_folder = require_arg("rootFolder") + table_name = require_arg("tableName") + + try: + client = LanceTableClient(root_folder, table_name) + versions_info = client.list_versions() + return jsonify([version.model_dump() for version in versions_info]) + except ValueError as e: + raise InvalidInputException(str(e)) from e + except Exception as e: + logger.error(f"Failed to list versions for table {table_name}: {e}") + raise InvalidInputException(f"Failed to list versions: {e}") from e + + +@lance_bp.get("/lance/list-indices") +@handle_api_errors +def list_indices() -> Response: + """List all indices of a table in a Lance database.""" + root_folder = require_arg("rootFolder") + table_name = require_arg("tableName") + + try: + client = LanceTableClient(root_folder, table_name) + indices_info = client.list_indices() + return jsonify([index.model_dump() for index in indices_info]) + except ValueError as e: + raise InvalidInputException(str(e)) from e + except Exception as e: + logger.error(f"Failed to list indices for table {table_name}: {e}") + raise InvalidInputException(f"Failed to list indices: {e}") from e + + +@lance_bp.get("/lance/list-columns") +@handle_api_errors +def list_columns() -> Response: + """List all columns of a table in a Lance database.""" + root_folder = require_arg("rootFolder") + table_name = require_arg("tableName") + + try: + client = LanceTableClient(root_folder, table_name) + columns_info = client.list_columns() + return jsonify([column.model_dump() for column in columns_info]) + except ValueError as e: + raise InvalidInputException(str(e)) from e + except Exception as e: + logger.error(f"Failed to list columns for table {table_name}: {e}") + raise InvalidInputException(f"Failed to list columns: {e}") from e diff --git a/smoosense-py/smoosense/handlers/pages.py b/smoosense-py/smoosense/handlers/pages.py index e8a2522..db249cb 100644 --- a/smoosense-py/smoosense/handlers/pages.py +++ b/smoosense-py/smoosense/handlers/pages.py @@ -65,6 +65,11 @@ def get_tabular_slice_dice() -> Response: return serve_static_html("Table") +@pages_bp.get("/DB") +def get_db() -> Response: + return serve_static_html("DB") + + @pages_bp.get("/MiniTable") def get_mini_table() -> Response: return serve_static_html("MiniTable") diff --git a/smoosense-py/smoosense/handlers/query.py b/smoosense-py/smoosense/handlers/query.py index dd3b49c..d6ec913 100644 --- a/smoosense-py/smoosense/handlers/query.py +++ b/smoosense-py/smoosense/handlers/query.py @@ -3,6 +3,7 @@ from flask import Blueprint, Response, current_app, jsonify, request +from smoosense.lance.table_client import LanceTableClient from smoosense.utils.api import handle_api_errors from smoosense.utils.duckdb_connections import check_permissions from smoosense.utils.serialization import serialize @@ -14,25 +15,45 @@ @query_bp.post("/query") @handle_api_errors def run_query() -> Response: - connection_maker = current_app.config["DUCKDB_CONNECTION_MAKER"] - con = connection_maker() time_start = default_timer() - query = request.json["query"] if request.json else None + + if not request.json: + raise ValueError("JSON body is required") + + query = request.json.get("query") if not query: raise ValueError("query is required in JSON body") check_permissions(query) - column_names = [] - rows = [] + query_engine = request.json.get("queryEngine", "duckdb") + + column_names: list[str] = [] + rows: list[tuple] = [] error = None + try: - result = con.execute(query) - column_names = [desc[0] for desc in result.description] - rows = result.fetchall() + if query_engine == "lance": + # Lance query engine using DuckDB integration + table_path = request.json.get("tablePath") + if not table_path: + raise ValueError("tablePath is required when using lance query engine") + + # Create Lance table client and execute query + lance_client = LanceTableClient.from_table_path(table_path) + column_names, rows = lance_client.run_duckdb_sql(query) + + else: + # DuckDB query engine (default) + connection_maker = current_app.config["DUCKDB_CONNECTION_MAKER"] + con = connection_maker() + result = con.execute(query) + column_names = [desc[0] for desc in result.description] if result.description else [] + rows = result.fetchall() except Exception as e: error = str(e) + logger.error(f"Query execution failed: {error}") return jsonify( { diff --git a/smoosense-py/smoosense/lance/__init__.py b/smoosense-py/smoosense/lance/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smoosense-py/smoosense/lance/db_client.py b/smoosense-py/smoosense/lance/db_client.py new file mode 100644 index 0000000..e2d3eb8 --- /dev/null +++ b/smoosense-py/smoosense/lance/db_client.py @@ -0,0 +1,74 @@ +import logging +import os + +import lancedb +from pydantic import validate_call + +from smoosense.lance.models import TableInfo + +logger = logging.getLogger(__name__) + + +class LanceDBClient: + """Client for interacting with a Lance database.""" + + def __init__(self, root_folder: str): + """ + Initialize the Lance database client. + + Args: + root_folder: Path to the Lance database directory + """ + if root_folder.startswith("~"): + root_folder = os.path.expanduser(root_folder) + + if not os.path.exists(root_folder): + raise ValueError(f"Directory does not exist: {root_folder}") + + if not os.path.isdir(root_folder): + raise ValueError(f"Path is not a directory: {root_folder}") + + self.root_folder = root_folder + self.db = lancedb.connect(root_folder) + logger.info(f"Connected to Lance database at {root_folder}") + + @validate_call + def list_tables(self) -> list[TableInfo]: + """ + List all tables in the database. + + Returns: + List of TableInfo models + """ + table_names = self.db.table_names() + logger.info(f"Found {len(table_names)} tables: {table_names}") + + tables_info: list[TableInfo] = [] + for table_name in table_names: + try: + table = self.db.open_table(table_name) + cnt_versions = len(table.list_versions()) + cnt_indices = len(table.list_indices()) + + tables_info.append( + TableInfo( + name=table_name, + cnt_rows=table.count_rows(), + cnt_columns=len(table.schema), + cnt_versions=cnt_versions, + cnt_indices=cnt_indices, + ) + ) + except Exception as e: + logger.warning(f"Failed to get info for table {table_name}: {e}") + tables_info.append( + TableInfo( + name=table_name, + cnt_rows=None, + cnt_columns=None, + cnt_versions=None, + cnt_indices=None, + ) + ) + + return tables_info diff --git a/smoosense-py/smoosense/lance/models.py b/smoosense-py/smoosense/lance/models.py new file mode 100644 index 0000000..61512e1 --- /dev/null +++ b/smoosense-py/smoosense/lance/models.py @@ -0,0 +1,54 @@ +from typing import Optional + +from pydantic import BaseModel, Field + + +class TableInfo(BaseModel): + """Information about a Lance table.""" + + name: str = Field(..., description="Name of the table") + cnt_rows: Optional[int] = Field(None, description="Number of rows in the table") + cnt_columns: Optional[int] = Field(None, description="Number of columns in the table") + cnt_versions: Optional[int] = Field(None, description="Number of versions of the table") + cnt_indices: Optional[int] = Field(None, description="Number of indices of the table") + + +class VersionInfo(BaseModel): + """Information about a table version.""" + + version: int = Field(..., description="Version number") + timestamp: int = Field(..., description="Unix timestamp (epoch) of the version") + total_data_files: Optional[int] = Field( + None, description="Total number of data files in this version" + ) + total_rows: Optional[int] = Field(None, description="Total number of rows in this version") + rows_add: Optional[int] = Field( + None, description="Number of rows added compared to previous version" + ) + rows_remove: Optional[int] = Field( + None, description="Number of rows deleted compared to previous version" + ) + columns_add: list[str] = Field( + default_factory=list, description="New columns compared to previous version" + ) + columns_remove: list[str] = Field( + default_factory=list, description="Columns removed compared to previous version" + ) + + +class IndexInfo(BaseModel): + """Information about a Lance index.""" + + name: str = Field(..., description="Name of the index") + index_type: str = Field(..., description="Type of the index (e.g., IVF_PQ, BTREE)") + columns: list[str] = Field(..., description="Columns included in the index") + num_unindexed_rows: Optional[int] = Field( + None, description="Number of unindexed rows in the index" + ) + + +class ColumnInfo(BaseModel): + """Information about a table column.""" + + name: str = Field(..., description="Name of the column") + type: str = Field(..., description="Data type of the column") diff --git a/smoosense-py/smoosense/lance/table_client.py b/smoosense-py/smoosense/lance/table_client.py new file mode 100644 index 0000000..8e4ad8b --- /dev/null +++ b/smoosense-py/smoosense/lance/table_client.py @@ -0,0 +1,384 @@ +import logging +import os +from functools import lru_cache + +import duckdb +import lancedb +import pyarrow as pa +from pydantic import validate_call + +from smoosense.lance.models import ColumnInfo, IndexInfo, VersionInfo + +logger = logging.getLogger(__name__) + + +class LanceTableClient: + """Client for interacting with a Lance table.""" + + def __init__(self, root_folder: str, table_name: str): + """ + Initialize the Lance table client. + + Args: + root_folder: Path to the Lance database directory + table_name: Name of the table + """ + if root_folder.startswith("~"): + root_folder = os.path.expanduser(root_folder) + + if not os.path.exists(root_folder): + raise ValueError(f"Directory does not exist: {root_folder}") + + if not os.path.isdir(root_folder): + raise ValueError(f"Path is not a directory: {root_folder}") + + self.root_folder = root_folder + self.table_name = table_name + self.db = lancedb.connect(root_folder) + self.table = self.db.open_table(table_name) + + logger.info(f"Connected to Lance table '{table_name}' at {root_folder}") + + @staticmethod + def from_table_path(table_path: str) -> "LanceTableClient": + """ + Create a LanceTableClient from a table path. + + Args: + table_path: Path to the Lance table (e.g., /path/to/db/table_name.lance) + + Returns: + LanceTableClient instance + + Raises: + ValueError: If the table path is invalid or doesn't end with .lance + """ + # Expand ~ if present + if table_path.startswith("~"): + table_path = os.path.expanduser(table_path) + + # Validate path exists + if not os.path.exists(table_path): + raise ValueError(f"Table path does not exist: {table_path}") + + # Validate path ends with .lance + if not table_path.endswith(".lance"): + raise ValueError(f"Table path must end with .lance: {table_path}") + + # Extract root folder and table name + root_folder = os.path.dirname(table_path) + table_name = os.path.basename(table_path).replace(".lance", "") + + return LanceTableClient(root_folder, table_name) + + @staticmethod + def _filter_duckdb_incompatible_columns(arrow_table: pa.Table) -> tuple[pa.Table, list[str]]: + """ + Filter out columns with DuckDB-incompatible Arrow types. + + Args: + arrow_table: PyArrow table to filter + + Returns: + Tuple of (filtered_arrow_table, incompatible_column_names) + + Raises: + ValueError: If no compatible columns found + """ + compatible_columns = [] + incompatible_columns = [] + + for field in arrow_table.schema: + field_type = field.type + + # Check for DuckDB-incompatible types + is_incompatible = ( + # halffloat (float16) is not supported + pa.types.is_float16(field_type) + or + # Extension types are often not supported + isinstance(field_type, pa.ExtensionType) + or + # Duration types may not be supported + pa.types.is_duration(field_type) + or + # Large binary/string types (64-bit offsets) + pa.types.is_large_binary(field_type) + or pa.types.is_large_string(field_type) + or pa.types.is_large_list(field_type) + ) + + if is_incompatible: + incompatible_columns.append(field.name) + logger.warning( + f"Skipping column '{field.name}' with unsupported type: {field_type}" + ) + else: + compatible_columns.append(field.name) + + if not compatible_columns: + raise ValueError("No compatible columns found in Lance table for DuckDB") + + # Select only compatible columns + filtered_arrow_table = arrow_table.select(compatible_columns) + + return filtered_arrow_table, incompatible_columns + + @staticmethod + @lru_cache(maxsize=3) + def _load_and_filter_arrow_table(table_path: str) -> tuple[pa.Table, list[str]]: + """ + Load and filter Arrow table with class-level LRU cache. + + This is cached at the class level with maxsize=3, meaning it persists + across different LanceTableClient instances for the same table path. + + Args: + table_path: Full path to the Lance table (e.g., /path/to/db/table_name.lance) + + Returns: + Tuple of (filtered_arrow_table, incompatible_column_names) + + Raises: + ValueError: If no compatible columns found + """ + logger.info(f"Loading Arrow table from {table_path} (cache miss)") + + # Parse table path + root_folder = os.path.dirname(table_path) + table_name = os.path.basename(table_path).replace(".lance", "") + + # Connect and load + db = lancedb.connect(root_folder) + table = db.open_table(table_name) + arrow_table = table.to_arrow() + + # Filter incompatible columns + filtered_arrow_table, incompatible_columns = ( + LanceTableClient._filter_duckdb_incompatible_columns(arrow_table) + ) + + if incompatible_columns: + logger.warning( + f"Filtered out {len(incompatible_columns)} incompatible column(s): {', '.join(incompatible_columns)}" + ) + + return filtered_arrow_table, incompatible_columns + + def _get_filtered_arrow_table(self) -> pa.Table: + """ + Get the filtered Arrow table with DuckDB-compatible columns only. + + Uses class-level LRU cache keyed by table path to persist across instances. + + Returns: + Filtered PyArrow table + + Raises: + ValueError: If no compatible columns found + """ + table_path = os.path.join(self.root_folder, f"{self.table_name}.lance") + filtered_arrow_table, _ = self._load_and_filter_arrow_table(table_path) + return filtered_arrow_table + + def run_duckdb_sql(self, query: str) -> tuple[list[str], list[tuple]]: + """ + Execute a SQL query against the Lance table using DuckDB. + + The table is registered as 'lance_table' in DuckDB. + Uses cached Arrow table conversion to avoid repeated conversions on multiple queries. + + Args: + query: SQL query to execute (use 'lance_table' to reference the table) + + Returns: + Tuple of (column_names, rows) where: + - column_names is a list of column name strings + - rows is a list of tuples containing the row data + + Raises: + ValueError: If no compatible columns found or query execution fails + """ + logger.info(f"Executing DuckDB query on Lance table {self.table_name}") + + # Get filtered Arrow table (uses cache if available) + filtered_arrow_table = self._get_filtered_arrow_table() + + # Create DuckDB connection and register the filtered Arrow table + con = duckdb.connect() + con.register("lance_table", filtered_arrow_table) + + # Execute the query + result = con.execute(query) + column_names = [desc[0] for desc in result.description] if result.description else [] + rows = result.fetchall() + + # Close the connection + con.close() + + logger.info(f"Query executed successfully: {len(rows)} rows, {len(column_names)} columns") + + return column_names, rows + + @staticmethod + def _extract_int_from_metadata(metadata: dict, key: str, default: int = 0) -> int: + """ + Extract an integer value from metadata, handling various data types. + + Args: + metadata: Metadata dictionary + key: Key to extract + default: Default value if extraction fails + + Returns: + Integer value or default + """ + try: + return int(metadata.get(key, default) or default) + except (ValueError, TypeError): + return default + + @validate_call + def list_versions(self) -> list[VersionInfo]: + """ + List all versions of the table. + + Returns: + List of VersionInfo models sorted by version number + """ + logger.info(f"Fetching versions for table {self.table_name}") + version_list = self.table.list_versions() + + # Ensure versions are sorted by version number increasingly + version_list = sorted(version_list, key=lambda v: int(v["version"])) + + versions_info: list[VersionInfo] = [] + prev_data_rows = 0 + prev_deletion_rows = 0 + prev_columns: set[str] = set() + + for version in version_list: + timestamp = version["timestamp"] + # Convert datetime to Unix timestamp (epoch) if needed + if hasattr(timestamp, "timestamp"): + timestamp = int(timestamp.timestamp()) + else: + timestamp = int(timestamp) + + metadata = version.get("metadata", {}) + + # Extract fields from metadata using helper function + total_data_rows = self._extract_int_from_metadata(metadata, "total_data_file_rows") + total_deletion_rows = self._extract_int_from_metadata( + metadata, "total_deletion_file_rows" + ) + total_data_files = self._extract_int_from_metadata(metadata, "total_data_files") + + # Calculate diffs + rows_add = total_data_rows - prev_data_rows + rows_remove = total_deletion_rows - prev_deletion_rows + + # Get schema for this version to calculate column differences + try: + # Use to_lance() to access the dataset at a specific version + dataset = self.table.to_lance() + version_dataset = dataset.checkout_version(version["version"]) + current_columns = set(version_dataset.schema.names) + except Exception as e: + logger.warning(f"Failed to get schema for version {version['version']}: {e}") + current_columns = set() + + # Calculate column differences + columns_add = list(current_columns - prev_columns) if prev_columns else [] + columns_remove = list(prev_columns - current_columns) if prev_columns else [] + + versions_info.append( + VersionInfo( + version=version["version"], + timestamp=timestamp, + total_data_files=total_data_files, + total_rows=total_data_rows, + rows_add=rows_add, + rows_remove=rows_remove, + columns_add=columns_add, + columns_remove=columns_remove, + ) + ) + + # Update previous values for next iteration + prev_data_rows = total_data_rows + prev_deletion_rows = total_deletion_rows + prev_columns = current_columns + + logger.info(f"Found {len(versions_info)} versions for table {self.table_name}") + return versions_info + + @validate_call + def list_indices(self) -> list[IndexInfo]: + """ + List all indices of the table. + + Returns: + List of IndexInfo models + """ + logger.info(f"Fetching indices for table {self.table_name}") + + try: + indices_list = self.table.list_indices() + except Exception as e: + logger.error(f"Failed to list indices for table {self.table_name}: {e}") + # If list_indices fails, return empty list + return [] + + indices_info: list[IndexInfo] = [] + + for idx in indices_list: + try: + # Get index stats to extract num_unindexed_rows + stats = self.table.index_stats(idx.name) + num_unindexed_rows = getattr(stats, "num_unindexed_rows", None) + except Exception as e: + logger.warning(f"Failed to get stats for index {idx.name}: {e}") + num_unindexed_rows = None + + indices_info.append( + IndexInfo( + name=idx.name, + index_type=idx.index_type, + columns=idx.columns, + num_unindexed_rows=num_unindexed_rows, + ) + ) + + logger.info(f"Found {len(indices_info)} indices for table {self.table_name}") + return indices_info + + @validate_call + def list_columns(self) -> list[ColumnInfo]: + """ + List all columns of the table with their types. + + Returns: + List of ColumnInfo models + """ + logger.info(f"Fetching columns for table {self.table_name}") + + try: + # Get schema from the table + schema = self.table.schema + columns_info: list[ColumnInfo] = [] + + for field in schema: + columns_info.append( + ColumnInfo( + name=field.name, + type=str(field.type), + ) + ) + + logger.info(f"Found {len(columns_info)} columns for table {self.table_name}") + return columns_info + except Exception as e: + logger.error(f"Failed to list columns for table {self.table_name}: {e}") + # If schema access fails, return empty list + return [] diff --git a/smoosense-py/smoosense/statics/404.html b/smoosense-py/smoosense/statics/404.html index e1b8086..8707538 100644 --- a/smoosense-py/smoosense/statics/404.html +++ b/smoosense-py/smoosense/statics/404.html @@ -1 +1 @@ -404: This page could not be found.

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.

404

This page could not be found.

\ No newline at end of file diff --git a/smoosense-py/smoosense/statics/DB.html b/smoosense-py/smoosense/statics/DB.html new file mode 100644 index 0000000..4b382e1 --- /dev/null +++ b/smoosense-py/smoosense/statics/DB.html @@ -0,0 +1 @@ +
Loading...
\ No newline at end of file diff --git a/smoosense-py/smoosense/statics/DB.txt b/smoosense-py/smoosense/statics/DB.txt new file mode 100644 index 0000000..39fae38 --- /dev/null +++ b/smoosense-py/smoosense/statics/DB.txt @@ -0,0 +1,25 @@ +1:"$Sreact.fragment" +2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] +3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] +4:I[84468,[],""] +5:I[29906,[],""] +6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] +7:I[1377,[],"ClientPageRoot"] +8:I[4751,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","53","static/chunks/53-c1ea9e1118520cc0.js","990","static/chunks/990-4de2b100275dbb74.js","496","static/chunks/496-167b672ad715b8e4.js","213","static/chunks/213-929cdf2f2ab1ba92.js","73","static/chunks/app/DB/page-aa7000bdd78d40f7.js"],"default"] +b:I[94484,[],"OutletBoundary"] +d:I[78892,[],"AsyncMetadataOutlet"] +f:I[94484,[],"ViewportBoundary"] +11:I[94484,[],"MetadataBoundary"] +12:"$Sreact.suspense" +14:I[29872,[],""] +:HL["https://cdn.smoosense.ai/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["https://cdn.smoosense.ai/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","style"] +0:{"P":null,"b":"Nw8PPXXNrI8fWtDB0HVFP","p":"https://cdn.smoosense.ai","c":["","DB"],"i":false,"f":[[["",{"children":["DB",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["DB",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} +9:{} +a:"$0:f:0:1:2:children:2:children:1:props:children:0:props:params" +10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +c:null +15:I[25908,[],"IconMark"] +e:{"metadata":[["$","link","0",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"16x16"}],["$","$L15","1",{}]],"error":null,"digest":"$undefined"} +13:"$e:metadata" diff --git a/smoosense-py/smoosense/statics/FolderBrowser.html b/smoosense-py/smoosense/statics/FolderBrowser.html index a52a9dd..ad73819 100644 --- a/smoosense-py/smoosense/statics/FolderBrowser.html +++ b/smoosense-py/smoosense/statics/FolderBrowser.html @@ -1 +1 @@ -
Loading...
\ No newline at end of file +
Loading...
\ No newline at end of file diff --git a/smoosense-py/smoosense/statics/FolderBrowser.txt b/smoosense-py/smoosense/statics/FolderBrowser.txt index f0cc9f1..b76c7b7 100644 --- a/smoosense-py/smoosense/statics/FolderBrowser.txt +++ b/smoosense-py/smoosense/statics/FolderBrowser.txt @@ -1,11 +1,11 @@ 1:"$Sreact.fragment" -2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] -3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] +2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] +3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] 4:I[84468,[],""] 5:I[29906,[],""] -6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] +6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] 7:I[1377,[],"ClientPageRoot"] -8:I[71739,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","796","static/chunks/796-c55c1ea3dcac0342.js","286","static/chunks/286-48b8d52998d22749.js","496","static/chunks/496-aecfd3fab8435429.js","213","static/chunks/213-4d0b9f96539b2693.js","960","static/chunks/960-b7b352ba5538d2d3.js","381","static/chunks/app/FolderBrowser/page-bf6e6f84c1420889.js"],"default"] +8:I[1217,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","53","static/chunks/53-c1ea9e1118520cc0.js","465","static/chunks/465-af44619db04e4529.js","496","static/chunks/496-167b672ad715b8e4.js","213","static/chunks/213-929cdf2f2ab1ba92.js","960","static/chunks/960-d460d3aba64ef202.js","381","static/chunks/app/FolderBrowser/page-bac992e9ba137d9f.js"],"default"] b:I[94484,[],"OutletBoundary"] d:I[78892,[],"AsyncMetadataOutlet"] f:I[94484,[],"ViewportBoundary"] @@ -14,8 +14,8 @@ f:I[94484,[],"ViewportBoundary"] 14:I[29872,[],""] :HL["https://cdn.smoosense.ai/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["https://cdn.smoosense.ai/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","style"] -0:{"P":null,"b":"EX7F0HqjKDNTM4zsVzu6J","p":"https://cdn.smoosense.ai","c":["","FolderBrowser"],"i":false,"f":[[["",{"children":["FolderBrowser",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["FolderBrowser",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} +:HL["https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","style"] +0:{"P":null,"b":"Nw8PPXXNrI8fWtDB0HVFP","p":"https://cdn.smoosense.ai","c":["","FolderBrowser"],"i":false,"f":[[["",{"children":["FolderBrowser",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["FolderBrowser",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} 9:{} a:"$0:f:0:1:2:children:2:children:1:props:children:0:props:params" 10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] diff --git a/smoosense-py/smoosense/statics/LiteTable.html b/smoosense-py/smoosense/statics/LiteTable.html index 26be424..b590963 100644 --- a/smoosense-py/smoosense/statics/LiteTable.html +++ b/smoosense-py/smoosense/statics/LiteTable.html @@ -1 +1 @@ -
1 rows×9 columns
\ No newline at end of file +
1 rows×9 columns
\ No newline at end of file diff --git a/smoosense-py/smoosense/statics/LiteTable.txt b/smoosense-py/smoosense/statics/LiteTable.txt index 7cddf0a..7d3a921 100644 --- a/smoosense-py/smoosense/statics/LiteTable.txt +++ b/smoosense-py/smoosense/statics/LiteTable.txt @@ -1,11 +1,11 @@ 1:"$Sreact.fragment" -2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] -3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] +2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] +3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] 4:I[84468,[],""] 5:I[29906,[],""] -6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] +6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] 7:I[1377,[],"ClientPageRoot"] -8:I[94034,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","496","static/chunks/496-aecfd3fab8435429.js","213","static/chunks/213-4d0b9f96539b2693.js","553","static/chunks/app/LiteTable/page-c0f3beb4630db188.js"],"default"] +8:I[94034,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","496","static/chunks/496-167b672ad715b8e4.js","213","static/chunks/213-929cdf2f2ab1ba92.js","553","static/chunks/app/LiteTable/page-c0f3beb4630db188.js"],"default"] b:I[94484,[],"OutletBoundary"] d:I[78892,[],"AsyncMetadataOutlet"] f:I[94484,[],"ViewportBoundary"] @@ -14,8 +14,8 @@ f:I[94484,[],"ViewportBoundary"] 14:I[29872,[],""] :HL["https://cdn.smoosense.ai/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["https://cdn.smoosense.ai/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","style"] -0:{"P":null,"b":"EX7F0HqjKDNTM4zsVzu6J","p":"https://cdn.smoosense.ai","c":["","LiteTable"],"i":false,"f":[[["",{"children":["LiteTable",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["LiteTable",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} +:HL["https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","style"] +0:{"P":null,"b":"Nw8PPXXNrI8fWtDB0HVFP","p":"https://cdn.smoosense.ai","c":["","LiteTable"],"i":false,"f":[[["",{"children":["LiteTable",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["LiteTable",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} 9:{} a:"$0:f:0:1:2:children:2:children:1:props:children:0:props:params" 10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] diff --git a/smoosense-py/smoosense/statics/MiniTable.html b/smoosense-py/smoosense/statics/MiniTable.html index 7b8f1c4..ec32e78 100644 --- a/smoosense-py/smoosense/statics/MiniTable.html +++ b/smoosense-py/smoosense/statics/MiniTable.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/smoosense-py/smoosense/statics/MiniTable.txt b/smoosense-py/smoosense/statics/MiniTable.txt index 5f607bc..456d444 100644 --- a/smoosense-py/smoosense/statics/MiniTable.txt +++ b/smoosense-py/smoosense/statics/MiniTable.txt @@ -1,11 +1,11 @@ 1:"$Sreact.fragment" -2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] -3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] +2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] +3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] 4:I[84468,[],""] 5:I[29906,[],""] -6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] +6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] 7:I[1377,[],"ClientPageRoot"] -8:I[75677,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","496","static/chunks/496-aecfd3fab8435429.js","213","static/chunks/213-4d0b9f96539b2693.js","124","static/chunks/app/MiniTable/page-d3f5aa95f232b0e1.js"],"default"] +8:I[75677,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","496","static/chunks/496-167b672ad715b8e4.js","213","static/chunks/213-929cdf2f2ab1ba92.js","124","static/chunks/app/MiniTable/page-6acadfe28a21ac1e.js"],"default"] b:I[94484,[],"OutletBoundary"] d:I[78892,[],"AsyncMetadataOutlet"] f:I[94484,[],"ViewportBoundary"] @@ -14,8 +14,8 @@ f:I[94484,[],"ViewportBoundary"] 14:I[29872,[],""] :HL["https://cdn.smoosense.ai/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["https://cdn.smoosense.ai/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","style"] -0:{"P":null,"b":"EX7F0HqjKDNTM4zsVzu6J","p":"https://cdn.smoosense.ai","c":["","MiniTable"],"i":false,"f":[[["",{"children":["MiniTable",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["MiniTable",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} +:HL["https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","style"] +0:{"P":null,"b":"Nw8PPXXNrI8fWtDB0HVFP","p":"https://cdn.smoosense.ai","c":["","MiniTable"],"i":false,"f":[[["",{"children":["MiniTable",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["MiniTable",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} 9:{} a:"$0:f:0:1:2:children:2:children:1:props:children:0:props:params" 10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] diff --git a/smoosense-py/smoosense/statics/Table.html b/smoosense-py/smoosense/statics/Table.html index 72b6f3f..cfa7770 100644 --- a/smoosense-py/smoosense/statics/Table.html +++ b/smoosense-py/smoosense/statics/Table.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/smoosense-py/smoosense/statics/Table.txt b/smoosense-py/smoosense/statics/Table.txt index e892f0f..4ca8d67 100644 --- a/smoosense-py/smoosense/statics/Table.txt +++ b/smoosense-py/smoosense/statics/Table.txt @@ -1,11 +1,11 @@ 1:"$Sreact.fragment" -2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] -3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] +2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] +3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] 4:I[84468,[],""] 5:I[29906,[],""] -6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] +6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] 7:I[1377,[],"ClientPageRoot"] -8:I[39076,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","765","static/chunks/765-f3f38ac19a0db617.js","769","static/chunks/769-38a429028a9a1959.js","796","static/chunks/796-c55c1ea3dcac0342.js","286","static/chunks/286-48b8d52998d22749.js","555","static/chunks/555-a40f653952bd2083.js","496","static/chunks/496-aecfd3fab8435429.js","213","static/chunks/213-4d0b9f96539b2693.js","947","static/chunks/947-3c453905c69bcd58.js","960","static/chunks/960-b7b352ba5538d2d3.js","637","static/chunks/637-1be29adcabd01448.js","785","static/chunks/785-2563770b687318b2.js","597","static/chunks/app/Table/page-5ddb0e4e6261c300.js"],"default"] +8:I[39076,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","765","static/chunks/765-f3f38ac19a0db617.js","53","static/chunks/53-c1ea9e1118520cc0.js","769","static/chunks/769-38a429028a9a1959.js","465","static/chunks/465-af44619db04e4529.js","555","static/chunks/555-a40f653952bd2083.js","496","static/chunks/496-167b672ad715b8e4.js","213","static/chunks/213-929cdf2f2ab1ba92.js","947","static/chunks/947-e5789eb2fa9c004d.js","960","static/chunks/960-d460d3aba64ef202.js","637","static/chunks/637-a0148480fbb64275.js","785","static/chunks/785-6f7a59e8bb062840.js","597","static/chunks/app/Table/page-d718a570d2548291.js"],"default"] b:I[94484,[],"OutletBoundary"] d:I[78892,[],"AsyncMetadataOutlet"] f:I[94484,[],"ViewportBoundary"] @@ -14,8 +14,8 @@ f:I[94484,[],"ViewportBoundary"] 14:I[29872,[],""] :HL["https://cdn.smoosense.ai/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["https://cdn.smoosense.ai/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","style"] -0:{"P":null,"b":"EX7F0HqjKDNTM4zsVzu6J","p":"https://cdn.smoosense.ai","c":["","Table"],"i":false,"f":[[["",{"children":["Table",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["Table",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} +:HL["https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","style"] +0:{"P":null,"b":"Nw8PPXXNrI8fWtDB0HVFP","p":"https://cdn.smoosense.ai","c":["","Table"],"i":false,"f":[[["",{"children":["Table",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["Table",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} 9:{} a:"$0:f:0:1:2:children:2:children:1:props:children:0:props:params" 10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] diff --git a/smoosense-py/smoosense/statics/example/objectdetection.html b/smoosense-py/smoosense/statics/example/objectdetection.html index 2b78be9..209c3e4 100644 --- a/smoosense-py/smoosense/statics/example/objectdetection.html +++ b/smoosense-py/smoosense/statics/example/objectdetection.html @@ -1,8 +1,8 @@ -

Object Detection Analysis

+

Object Detection Analysis

SmooSense helps evaluate object detection models by visually comparing their predicted bounding boxes against the ground truth. This provides an intuitive way to audit the model's accuracy and identify specific errors on a given dataset.

This example shows COCO dataset object detection results comparing ground truth bounding boxes with model predictions.

Data Source

Data is excerpted from: COCO2017 Object Detection Dataset

-
\ No newline at end of file +
\ No newline at end of file diff --git a/smoosense-py/smoosense/statics/example/objectdetection.txt b/smoosense-py/smoosense/statics/example/objectdetection.txt index 6eb031a..b6f5cfb 100644 --- a/smoosense-py/smoosense/statics/example/objectdetection.txt +++ b/smoosense-py/smoosense/statics/example/objectdetection.txt @@ -1,11 +1,11 @@ 1:"$Sreact.fragment" -2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] -3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] +2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] +3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] 4:I[84468,[],""] 5:I[29906,[],""] -6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] +6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] 7:I[1377,[],"ClientPageRoot"] -8:I[17347,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","765","static/chunks/765-f3f38ac19a0db617.js","496","static/chunks/496-aecfd3fab8435429.js","213","static/chunks/213-4d0b9f96539b2693.js","947","static/chunks/947-3c453905c69bcd58.js","550","static/chunks/app/example/objectdetection/page-84b15bb87333466b.js"],"default"] +8:I[17347,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","765","static/chunks/765-f3f38ac19a0db617.js","496","static/chunks/496-167b672ad715b8e4.js","213","static/chunks/213-929cdf2f2ab1ba92.js","947","static/chunks/947-e5789eb2fa9c004d.js","550","static/chunks/app/example/objectdetection/page-84b15bb87333466b.js"],"default"] b:I[94484,[],"OutletBoundary"] d:I[78892,[],"AsyncMetadataOutlet"] f:I[94484,[],"ViewportBoundary"] @@ -14,8 +14,8 @@ f:I[94484,[],"ViewportBoundary"] 14:I[29872,[],""] :HL["https://cdn.smoosense.ai/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["https://cdn.smoosense.ai/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","style"] -0:{"P":null,"b":"EX7F0HqjKDNTM4zsVzu6J","p":"https://cdn.smoosense.ai","c":["","example","objectdetection"],"i":false,"f":[[["",{"children":["example",{"children":["objectdetection",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["example",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["objectdetection",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} +:HL["https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","style"] +0:{"P":null,"b":"Nw8PPXXNrI8fWtDB0HVFP","p":"https://cdn.smoosense.ai","c":["","example","objectdetection"],"i":false,"f":[[["",{"children":["example",{"children":["objectdetection",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["example",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["objectdetection",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} 9:{} a:"$0:f:0:1:2:children:2:children:2:children:1:props:children:0:props:params" 10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] diff --git a/smoosense-py/smoosense/statics/example/text2image.html b/smoosense-py/smoosense/statics/example/text2image.html index 7a73edc..83082b7 100644 --- a/smoosense-py/smoosense/statics/example/text2image.html +++ b/smoosense-py/smoosense/statics/example/text2image.html @@ -1,4 +1,4 @@ -

Text-to-Image Alignment

+

Text-to-Image Alignment

SmooSense allows users to visualize and evaluate text-to-image AI performance. Its intuitive UI utilizes word scores and visual masks to help pinpoint misalignments between the text and the image, simplifying model analysis.

This example shows human labelers' feedback to text-to-image generation. @@ -23,4 +23,4 @@

Image mask

  • Name your column such that it contains image_mask.
  • Save mask data as a grayscale png file and store url in the column.
  • Ensure there is a column named image_url containing the corresponding image.
  • -

    Data in this page

    Loading...
    \ No newline at end of file +

    Data in this page

    Loading...
    \ No newline at end of file diff --git a/smoosense-py/smoosense/statics/example/text2image.txt b/smoosense-py/smoosense/statics/example/text2image.txt index 57e047b..67b8487 100644 --- a/smoosense-py/smoosense/statics/example/text2image.txt +++ b/smoosense-py/smoosense/statics/example/text2image.txt @@ -1,11 +1,11 @@ 1:"$Sreact.fragment" -2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] -3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] +2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] +3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] 4:I[84468,[],""] 5:I[29906,[],""] -6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] +6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] 7:I[1377,[],"ClientPageRoot"] -8:I[82915,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","765","static/chunks/765-f3f38ac19a0db617.js","496","static/chunks/496-aecfd3fab8435429.js","213","static/chunks/213-4d0b9f96539b2693.js","947","static/chunks/947-3c453905c69bcd58.js","668","static/chunks/app/example/text2image/page-72e55b31e9338d58.js"],"default"] +8:I[82915,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","765","static/chunks/765-f3f38ac19a0db617.js","496","static/chunks/496-167b672ad715b8e4.js","213","static/chunks/213-929cdf2f2ab1ba92.js","947","static/chunks/947-e5789eb2fa9c004d.js","668","static/chunks/app/example/text2image/page-72e55b31e9338d58.js"],"default"] b:I[94484,[],"OutletBoundary"] d:I[78892,[],"AsyncMetadataOutlet"] f:I[94484,[],"ViewportBoundary"] @@ -14,8 +14,8 @@ f:I[94484,[],"ViewportBoundary"] 14:I[29872,[],""] :HL["https://cdn.smoosense.ai/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["https://cdn.smoosense.ai/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","style"] -0:{"P":null,"b":"EX7F0HqjKDNTM4zsVzu6J","p":"https://cdn.smoosense.ai","c":["","example","text2image"],"i":false,"f":[[["",{"children":["example",{"children":["text2image",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["example",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["text2image",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} +:HL["https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","style"] +0:{"P":null,"b":"Nw8PPXXNrI8fWtDB0HVFP","p":"https://cdn.smoosense.ai","c":["","example","text2image"],"i":false,"f":[[["",{"children":["example",{"children":["text2image",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["example",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["text2image",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} 9:{} a:"$0:f:0:1:2:children:2:children:2:children:1:props:children:0:props:params" 10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] diff --git a/smoosense-py/smoosense/statics/example/text2video.html b/smoosense-py/smoosense/statics/example/text2video.html index 680c853..c213950 100644 --- a/smoosense-py/smoosense/statics/example/text2video.html +++ b/smoosense-py/smoosense/statics/example/text2video.html @@ -1,4 +1,4 @@ -

    Text-to-Video Comparison

    +

    Text-to-Video Comparison

    SmooSense provides a platform to evaluate and compare different text-to-video AI models. By presenting videos generated from the same prompt side-by-side, it allows for a direct visual assessment of each model's quality and performance.

    This example shows how to analyze and compare video generation results from multiple models using the same prompts and reference images.

    @@ -10,4 +10,4 @@

    Use SmooSense to compare
    • Hover at a video to play.
    • Click the switch to turn on/off auto-play for all videos.
    • -

    \ No newline at end of file +
    \ No newline at end of file diff --git a/smoosense-py/smoosense/statics/example/text2video.txt b/smoosense-py/smoosense/statics/example/text2video.txt index 95634cb..8a580bc 100644 --- a/smoosense-py/smoosense/statics/example/text2video.txt +++ b/smoosense-py/smoosense/statics/example/text2video.txt @@ -1,11 +1,11 @@ 1:"$Sreact.fragment" -2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] -3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] +2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] +3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] 4:I[84468,[],""] 5:I[29906,[],""] -6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] +6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] 7:I[1377,[],"ClientPageRoot"] -8:I[83578,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","765","static/chunks/765-f3f38ac19a0db617.js","496","static/chunks/496-aecfd3fab8435429.js","213","static/chunks/213-4d0b9f96539b2693.js","947","static/chunks/947-3c453905c69bcd58.js","390","static/chunks/app/example/text2video/page-8e1c302b096dc33f.js"],"default"] +8:I[83578,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","765","static/chunks/765-f3f38ac19a0db617.js","496","static/chunks/496-167b672ad715b8e4.js","213","static/chunks/213-929cdf2f2ab1ba92.js","947","static/chunks/947-e5789eb2fa9c004d.js","390","static/chunks/app/example/text2video/page-8e1c302b096dc33f.js"],"default"] b:I[94484,[],"OutletBoundary"] d:I[78892,[],"AsyncMetadataOutlet"] f:I[94484,[],"ViewportBoundary"] @@ -14,8 +14,8 @@ f:I[94484,[],"ViewportBoundary"] 14:I[29872,[],""] :HL["https://cdn.smoosense.ai/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["https://cdn.smoosense.ai/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","style"] -0:{"P":null,"b":"EX7F0HqjKDNTM4zsVzu6J","p":"https://cdn.smoosense.ai","c":["","example","text2video"],"i":false,"f":[[["",{"children":["example",{"children":["text2video",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["example",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["text2video",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} +:HL["https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","style"] +0:{"P":null,"b":"Nw8PPXXNrI8fWtDB0HVFP","p":"https://cdn.smoosense.ai","c":["","example","text2video"],"i":false,"f":[[["",{"children":["example",{"children":["text2video",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["example",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["text2video",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} 9:{} a:"$0:f:0:1:2:children:2:children:2:children:1:props:children:0:props:params" 10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] diff --git a/smoosense-py/smoosense/statics/index.html b/smoosense-py/smoosense/statics/index.html index c8d0961..a9aae18 100644 --- a/smoosense-py/smoosense/statics/index.html +++ b/smoosense-py/smoosense/statics/index.html @@ -1 +1 @@ -

    Browse local or s3 folders

    Learn more

    Examples of multimodal visualization

    \ No newline at end of file +

    Browse local or s3 folders

    Learn more

    Examples of multimodal visualization

    \ No newline at end of file diff --git a/smoosense-py/smoosense/statics/index.txt b/smoosense-py/smoosense/statics/index.txt index eb34dea..62a218d 100644 --- a/smoosense-py/smoosense/statics/index.txt +++ b/smoosense-py/smoosense/statics/index.txt @@ -1,11 +1,11 @@ 1:"$Sreact.fragment" -2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] -3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] +2:I[33537,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ThemeProvider"] +3:I[68145,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"default"] 4:I[84468,[],""] 5:I[29906,[],""] -6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-aecfd3fab8435429.js","785","static/chunks/785-2563770b687318b2.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] +6:I[84526,["265","static/chunks/6dc81886-0d3828b166e5e246.js","933","static/chunks/933-3fa934a1373c1443.js","769","static/chunks/769-38a429028a9a1959.js","496","static/chunks/496-167b672ad715b8e4.js","785","static/chunks/785-6f7a59e8bb062840.js","177","static/chunks/app/layout-d6f40cc585abf459.js"],"ToasterProvider"] 7:I[1377,[],"ClientPageRoot"] -8:I[36295,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","496","static/chunks/496-aecfd3fab8435429.js","213","static/chunks/213-4d0b9f96539b2693.js","974","static/chunks/app/page-7cd70e6346f43b56.js"],"default"] +8:I[36295,["265","static/chunks/6dc81886-0d3828b166e5e246.js","652","static/chunks/4ec49466-f80a37a142905954.js","346","static/chunks/191d07e0-76e9a3be7a7ac399.js","933","static/chunks/933-3fa934a1373c1443.js","916","static/chunks/916-01ab46af81553d20.js","496","static/chunks/496-167b672ad715b8e4.js","213","static/chunks/213-929cdf2f2ab1ba92.js","974","static/chunks/app/page-43b77bac85ca9e24.js"],"default"] b:I[94484,[],"OutletBoundary"] d:I[78892,[],"AsyncMetadataOutlet"] f:I[94484,[],"ViewportBoundary"] @@ -14,8 +14,8 @@ f:I[94484,[],"ViewportBoundary"] 14:I[29872,[],""] :HL["https://cdn.smoosense.ai/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["https://cdn.smoosense.ai/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","style"] -0:{"P":null,"b":"EX7F0HqjKDNTM4zsVzu6J","p":"https://cdn.smoosense.ai","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/b6835f0bae32f6b8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} +:HL["https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","style"] +0:{"P":null,"b":"Nw8PPXXNrI8fWtDB0HVFP","p":"https://cdn.smoosense.ai","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"https://cdn.smoosense.ai/_next/static/css/4c99ec665fc98ab2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{}],["$","body",null,{"className":"__variable_0d22f4 __variable_a7838a antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L6",null,{}]]}]}]]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],null,["$","$Lb",null,{"children":["$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L11",null,{"children":["$","div",null,{"hidden":true,"children":["$","$12",null,{"fallback":null,"children":"$L13"}]}]}]]}],false]],"m":"$undefined","G":["$14",[]],"s":false,"S":true} 9:{} a:"$0:f:0:1:2:children:1:props:children:0:props:params" 10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] diff --git a/smoosense-py/tests/test_lancedb.py b/smoosense-py/tests/test_lancedb.py new file mode 100644 index 0000000..7d1fbb8 --- /dev/null +++ b/smoosense-py/tests/test_lancedb.py @@ -0,0 +1,57 @@ +import os +import unittest + +import lancedb +from my_logging import getLogger + +from smoosense.lance.db_client import LanceDBClient +from smoosense.lance.table_client import LanceTableClient + +logger = getLogger(__name__) +PWD = os.path.dirname(__file__) + + +class TestLanceDb(unittest.TestCase): + def setUp(self): + self.data_uri = os.path.join(PWD, "../../data/lance/") + self.db = lancedb.connect(self.data_uri) + self.table_name = "dummy_data_various_types" + + def test_read(self): + self.assertListEqual([self.table_name], self.db.table_names() or []) + table = self.db.open_table(self.table_name) + versions = table.list_versions() + self.assertEqual(len(versions), 4) + + +class TestLanceDBClient(unittest.TestCase): + """Test cases for LanceDBClient""" + + def setUp(self): + self.data_uri = os.path.join(PWD, "../../data/lance/") + self.table_name = "dummy_data_various_types" + + def test_list_tables(self): + """Test that DB client can get the table""" + client = LanceDBClient(self.data_uri) + tables = client.list_tables() + table_names = [table.name for table in tables] + self.assertIn(self.table_name, table_names) + + +class TestLanceTableClient(unittest.TestCase): + """Test cases for LanceTableClient""" + + def setUp(self): + self.data_uri = os.path.join(PWD, "../../data/lance/") + self.table_name = "dummy_data_various_types" + + def test_list_versions(self): + """Test that table client can list 4 versions""" + client = LanceTableClient(self.data_uri, self.table_name) + versions = client.list_versions() + self.assertEqual(len(versions), 4) + + +if __name__ == "__main__": + unittest.main() diff --git a/smoosense-py/tests/test_query.py b/smoosense-py/tests/test_query.py index 2aa5608..a096f2a 100644 --- a/smoosense-py/tests/test_query.py +++ b/smoosense-py/tests/test_query.py @@ -1,4 +1,5 @@ import json +import os import unittest from my_logging import getLogger @@ -6,6 +7,7 @@ from smoosense.app import SmooSenseApp logger = getLogger(__name__) +PWD = os.path.dirname(__file__) class TestQueryEndpoint(unittest.TestCase): @@ -55,6 +57,35 @@ def test_update_query_returns_403(self): self.assertIn("exception", response_data) self.assertEqual(response_data["exception"], "builtins.PermissionError") + def test_lance_query_engine(self): + """Test querying a Lance table using the lance query engine""" + # Path to the test Lance table + lance_path = os.path.join(PWD, "../../data/lance/dummy_data_various_types.lance") + + query_payload = { + "query": "SELECT COUNT(*) as row_count FROM lance_table", + "queryEngine": "lance", + "tablePath": lance_path, + } + + response = self.client.post("/api/query", json=query_payload) + + self.assertEqual(response.status_code, 200) + + # Verify response structure + response_data = response.get_json() + logger.info(response_data) + self.assertEqual(response_data["status"], "success") + self.assertIn("column_names", response_data) + self.assertIn("rows", response_data) + self.assertIn("runtime", response_data) + self.assertIsNone(response_data["error"]) + + # Verify query result + self.assertEqual(response_data["column_names"], ["row_count"]) + self.assertIsInstance(response_data["rows"][0][0], int) + self.assertGreater(response_data["rows"][0][0], 0) + if __name__ == "__main__": unittest.main() diff --git a/smoosense-py/uv.lock b/smoosense-py/uv.lock index fd88151..68dc737 100644 --- a/smoosense-py/uv.lock +++ b/smoosense-py/uv.lock @@ -408,6 +408,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, ] +[[package]] +name = "deprecation" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, +] + [[package]] name = "docutils" version = "0.22" @@ -868,6 +880,113 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl", hash = "sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd", size = 39085, upload-time = "2024-12-25T15:26:44.377Z" }, ] +[[package]] +name = "lance-namespace" +version = "0.0.20" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lance-namespace-urllib3-client" }, + { name = "pyarrow" }, + { name = "pylance" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/d6/169b3f0dc4af453e34b9963c3b5665de2e7f74f8abc0c2cbc5baf03a7bdd/lance_namespace-0.0.20.tar.gz", hash = "sha256:d031168e5784392f8cdf174721a0878fcb12f06049643eafebfd7bcbece66742", size = 41051, upload-time = "2025-10-27T04:48:25.357Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/46/1090d94c91a96c23f27262ff44672005eef81966b846aeb66f56cc04dcde/lance_namespace-0.0.20-py3-none-any.whl", hash = "sha256:9a06c9d8756ba711895f430cc0a3b809c1c71d86b92063e2f34ad73e635f3a50", size = 31208, upload-time = "2025-10-27T04:48:24.19Z" }, +] + +[[package]] +name = "lance-namespace-urllib3-client" +version = "0.0.20" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dateutil" }, + { name = "typing-extensions" }, + { name = "urllib3", version = "1.26.20", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "urllib3", version = "2.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/4f/bba4bff0b22d53ee89edd63d1eb638b3b0a2587ca84394779cdb7c14fe17/lance_namespace_urllib3_client-0.0.20.tar.gz", hash = "sha256:662234efa27849b92e6cb186a0bd49c048bcda2d158972f23631a7659ea53c1c", size = 134502, upload-time = "2025-10-27T04:48:27.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/ca/6fa57c5de32a2f8ceffcd1afdf929274c21c2425cf6a64a7c59413580b07/lance_namespace_urllib3_client-0.0.20-py3-none-any.whl", hash = "sha256:e1e4c9b5769adc3fcad5532b6f961c7b139eab9522b7143295719eaeeeb98d0d", size = 229637, upload-time = "2025-10-27T04:48:25.979Z" }, +] + +[[package]] +name = "lancedb" +version = "0.25.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecation" }, + { name = "lance-namespace" }, + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "overrides", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "pyarrow" }, + { name = "pydantic" }, + { name = "tqdm" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/6b/a01f83c10d2e8743cd4629537e7117c8a6728c30b1dfbffe09079b7b8168/lancedb-0.25.2-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:fc3ab86cd95ace8f3d10d1b9f228c5493b7f3b957b752844f83381c60ef08acc", size = 37365341, upload-time = "2025-10-08T19:14:13.158Z" }, + { url = "https://files.pythonhosted.org/packages/a3/a4/b395b7f4df0b6b3f62f280a061bd65f28e9082f3c41583ae728bb9c2bfe5/lancedb-0.25.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:9c0ac06d5377363e7fddea59a4df9541eccef7d33a10913dc07ccd12c76f5e5b", size = 34005214, upload-time = "2025-10-08T18:30:30.018Z" }, + { url = "https://files.pythonhosted.org/packages/24/30/06148694a04c5a3607352ed177f5a2dddbca3c31d13f4cad5e939232849b/lancedb-0.25.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dbbe2d8ee120742ef3649c9b982da1091b322e1557aa01e7a5aa00f2c19da43", size = 34982654, upload-time = "2025-10-08T18:32:31.973Z" }, + { url = "https://files.pythonhosted.org/packages/fc/94/6f9e16a8895f2e322d77f81c0f6fd82768e6da7671d6b65ae4974da9e95d/lancedb-0.25.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:512d01c0a283651e8ab3cec3d876f6caa08b4dabc366a72ce1d59c6a8b812008", size = 38671944, upload-time = "2025-10-08T18:39:13.237Z" }, + { url = "https://files.pythonhosted.org/packages/76/54/3808fd493db43ec5d2bee45aebfcd55255b9b202242d68a9367c6885b9c3/lancedb-0.25.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1342db839f05abd1d40ce92262fd8223ef9f38af6e0fb54be95b6bbd62e81019", size = 34987178, upload-time = "2025-10-08T18:33:33.338Z" }, + { url = "https://files.pythonhosted.org/packages/9a/73/194847ad48eb11c31ac44bec0cc3e638de0132fe33b1385111ccb8803096/lancedb-0.25.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a0c2fb7bcf069e409d2000a5119b008107dc15cab37707c3a3e6eabfe46eae27", size = 38708484, upload-time = "2025-10-08T18:38:52.532Z" }, + { url = "https://files.pythonhosted.org/packages/a9/0a/36d753b01198b0590eb45e283b07d54feaaab89d528cf7bb048eeeaf2dce/lancedb-0.25.2-cp39-abi3-win_amd64.whl", hash = "sha256:9bd990f27667d37cec0f41686e9c83e8051bb45cb4b6d48355fcc9f8e2c6b0f7", size = 41081428, upload-time = "2025-10-08T18:59:54.832Z" }, +] + +[[package]] +name = "line-profiler" +version = "5.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/5c/bbe9042ef5cf4c6cad4bf4d6f7975193430eba9191b7278ea114a3993fbb/line_profiler-5.0.0.tar.gz", hash = "sha256:a80f0afb05ba0d275d9dddc5ff97eab637471167ff3e66dcc7d135755059398c", size = 376919, upload-time = "2025-07-23T20:15:41.819Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/b8/8eb2bd10873a7bb93f412db8f735ff5b708bfcedef6492f2ec0a1f4dc55a/line_profiler-5.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5cd1621ff77e1f3f423dcc2611ef6fba462e791ce01fb41c95dce6d519c48ec8", size = 631005, upload-time = "2025-07-23T20:14:25.307Z" }, + { url = "https://files.pythonhosted.org/packages/36/af/a7fd6b2a83fbc10427e1fdd178a0a80621eeb3b29256b1856d459abb7d2a/line_profiler-5.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:17a44491d16309bc39fc6197b376a120ebc52adc3f50b0b6f9baf99af3124406", size = 490943, upload-time = "2025-07-23T20:14:27.396Z" }, + { url = "https://files.pythonhosted.org/packages/be/50/dcfc2e5386f5b3177cdad8eaa912482fe6a9218149a5cb5e85e871b55f2c/line_profiler-5.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a36a9a5ea5e37b0969a451f922b4dbb109350981187317f708694b3b5ceac3a5", size = 476487, upload-time = "2025-07-23T20:14:30.818Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0c/cdcfc640d5b3338891cd336b465c6112d9d5c2f56ced4f9ea3e795b192c6/line_profiler-5.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67e6e292efaf85d9678fe29295b46efd72c0d363b38e6b424df39b6553c49b3", size = 1412553, upload-time = "2025-07-23T20:14:32.07Z" }, + { url = "https://files.pythonhosted.org/packages/ca/23/bcdf3adf487917cfe431cb009b184c1a81a5099753747fe1a4aee42493f0/line_profiler-5.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9c92c28ee16bf3ba99966854407e4bc927473a925c1629489c8ebc01f8a640", size = 1461495, upload-time = "2025-07-23T20:14:33.396Z" }, + { url = "https://files.pythonhosted.org/packages/ec/04/1360ff19c4c426352ed820bba315670a6d52b3194fcb80af550a50e09310/line_profiler-5.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:51609cc264df6315cd9b9fa76d822a7b73a4f278dcab90ba907e32dc939ab1c2", size = 2510352, upload-time = "2025-07-23T20:14:34.797Z" }, + { url = "https://files.pythonhosted.org/packages/11/af/138966a6edfd95208e92e9cfef79595d6890df31b1749cc0244d36127473/line_profiler-5.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67f9721281655dc2b6763728a63928e3b8a35dfd6160c628a3c599afd0814a71", size = 2445103, upload-time = "2025-07-23T20:14:36.19Z" }, + { url = "https://files.pythonhosted.org/packages/92/95/5c9e4771f819b4d81510fa90b20a608bd3f91c268acd72747cd09f905de9/line_profiler-5.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:c2c27ac0c30d35ca1de5aeebe97e1d9c0d582e3d2c4146c572a648bec8efcfac", size = 461940, upload-time = "2025-07-23T20:14:37.422Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f7/4e0fd2610749136d60f3e168812b5f6c697ffcfbb167b10d4aac24af1223/line_profiler-5.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f32d536c056393b7ca703e459632edc327ff9e0fc320c7b0e0ed14b84d342b7f", size = 634587, upload-time = "2025-07-23T20:14:39.069Z" }, + { url = "https://files.pythonhosted.org/packages/d7/fe/b5458452c2dbf7a9590b5ad3cf4250710a2554a5a045bfa6395cdea1b2d5/line_profiler-5.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a7da04ffc5a0a1f6653f43b13ad2e7ebf66f1d757174b7e660dfa0cbe74c4fc6", size = 492744, upload-time = "2025-07-23T20:14:40.632Z" }, + { url = "https://files.pythonhosted.org/packages/4c/e1/b69e20aeea8a11340f8c5d540c88ecf955a3559d8fbd5034cfe5677c69cf/line_profiler-5.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2746f6b13c19ca4847efd500402d53a5ebb2fe31644ce8af74fbeac5ea4c54c", size = 478101, upload-time = "2025-07-23T20:14:42.306Z" }, + { url = "https://files.pythonhosted.org/packages/0d/3b/b29e5539b2c98d2bd9f5651f10597dd70e07d5b09bb47cc0aa8d48927d72/line_profiler-5.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b4290319a59730c04cbd03755472d10524130065a20a695dc10dd66ffd92172", size = 1455927, upload-time = "2025-07-23T20:14:44.139Z" }, + { url = "https://files.pythonhosted.org/packages/82/1d/dcc75d2cf82bbe6ef65d0f39cc32410e099e7e1cd7f85b121a8d440ce8bc/line_profiler-5.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cd168a8af0032e8e3cb2fbb9ffc7694cdcecd47ec356ae863134df07becb3a2", size = 1508770, upload-time = "2025-07-23T20:14:45.868Z" }, + { url = "https://files.pythonhosted.org/packages/cc/9f/cbf9d011381c878f848f824190ad833fbfeb5426eb6c42811b5b759d5d54/line_profiler-5.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cbe7b095865d00dda0f53d7d4556c2b1b5d13f723173a85edb206a78779ee07a", size = 2551269, upload-time = "2025-07-23T20:14:47.279Z" }, + { url = "https://files.pythonhosted.org/packages/7c/86/06999bff316e2522fc1d11fcd3720be81a7c47e94c785a9d93c290ae0415/line_profiler-5.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ff176045ea8a9e33900856db31b0b979357c337862ae4837140c98bd3161c3c7", size = 2491091, upload-time = "2025-07-23T20:14:48.637Z" }, + { url = "https://files.pythonhosted.org/packages/61/d1/758f2f569b5d4fdc667b88e88e7424081ba3a1d17fb531042ed7f0f08d7f/line_profiler-5.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:474e0962d02123f1190a804073b308a67ef5f9c3b8379184483d5016844a00df", size = 462954, upload-time = "2025-07-23T20:14:50.094Z" }, + { url = "https://files.pythonhosted.org/packages/73/d8/383c37c36f888c4ca82a28ffea27c589988463fc3f0edd6abae221c35275/line_profiler-5.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:729b18c0ac66b3368ade61203459219c202609f76b34190cbb2508b8e13998c8", size = 628109, upload-time = "2025-07-23T20:14:51.71Z" }, + { url = "https://files.pythonhosted.org/packages/54/a3/75a27b1f3e14ae63a2e99f3c7014dbc1e3a37f56c91b63a2fc171e72990d/line_profiler-5.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:438ed24278c428119473b61a473c8fe468ace7c97c94b005cb001137bc624547", size = 489142, upload-time = "2025-07-23T20:14:52.993Z" }, + { url = "https://files.pythonhosted.org/packages/8b/85/f65cdbfe8537da6fab97c42958109858df846563546b9c234a902a98c313/line_profiler-5.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:920b0076dca726caadbf29f0bfcce0cbcb4d9ff034cd9445a7308f9d556b4b3a", size = 475838, upload-time = "2025-07-23T20:14:54.637Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ea/cfa53c8ede0ef539cfe767a390d7ccfc015f89c39cc2a8c34e77753fd023/line_profiler-5.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53326eaad2d807487dcd45d2e385feaaed81aaf72b9ecd4f53c1a225d658006f", size = 1402290, upload-time = "2025-07-23T20:14:56.775Z" }, + { url = "https://files.pythonhosted.org/packages/e4/2c/3467cd5051afbc0eb277ee426e8dffdbd1fcdd82f1bc95a0cd8945b6c106/line_profiler-5.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e3995a989cdea022f0ede5db19a6ab527f818c59ffcebf4e5f7a8be4eb8e880", size = 1457827, upload-time = "2025-07-23T20:14:58.158Z" }, + { url = "https://files.pythonhosted.org/packages/d9/87/d5039608979b37ce3dadfa3eed7bf8bfec53b645acd30ca12c8088cf738d/line_profiler-5.0.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8bf57892a1d3a42273652506746ba9f620c505773ada804367c42e5b4146d6b6", size = 2497423, upload-time = "2025-07-23T20:15:01.015Z" }, + { url = "https://files.pythonhosted.org/packages/59/3e/e5e09699e2841b4f41c16d01ff2adfd20fde6cb73cfa512262f0421e15e0/line_profiler-5.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:43672085f149f5fbf3f08bba072ad7014dd485282e8665827b26941ea97d2d76", size = 2439733, upload-time = "2025-07-23T20:15:02.582Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/18d8fefabd8a56fb963f944149cadb69be67a479ce6723275cae2c943af5/line_profiler-5.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:446bd4f04e4bd9e979d68fdd916103df89a9d419e25bfb92b31af13c33808ee0", size = 460852, upload-time = "2025-07-23T20:15:03.827Z" }, + { url = "https://files.pythonhosted.org/packages/7d/eb/bc4420cf68661406c98d590656d72eed6f7d76e45accf568802dc83615ef/line_profiler-5.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9873fabbae1587778a551176758a70a5f6c89d8d070a1aca7a689677d41a1348", size = 624828, upload-time = "2025-07-23T20:15:05.315Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6e/6e0a4c1009975d27810027427d601acbad75b45947040d0fd80cec5b3e94/line_profiler-5.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2cd6cdb5a4d3b4ced607104dbed73ec820a69018decd1a90904854380536ed32", size = 487651, upload-time = "2025-07-23T20:15:06.961Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2c/e60e61f24faa0e6eca375bdac9c4b4b37c3267488d7cb1a8c5bd74cf5cdc/line_profiler-5.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:34d6172a3bd14167b3ea2e629d71b08683b17b3bc6eb6a4936d74e3669f875b6", size = 474071, upload-time = "2025-07-23T20:15:08.607Z" }, + { url = "https://files.pythonhosted.org/packages/e1/d5/6f178e74746f84cc17381f607d191c54772207770d585fda773b868bfe28/line_profiler-5.0.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5edd859be322aa8252253e940ac1c60cca4c385760d90a402072f8f35e4b967", size = 1405434, upload-time = "2025-07-23T20:15:09.862Z" }, + { url = "https://files.pythonhosted.org/packages/9b/32/ce67bbf81e5c78cc8d606afe6a192fbef30395021b2aaffe15681e186e3f/line_profiler-5.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4f97b223105eed6e525994f5653061bd981e04838ee5d14e01d17c26185094", size = 1467553, upload-time = "2025-07-23T20:15:11.195Z" }, + { url = "https://files.pythonhosted.org/packages/c1/c1/431ffb89a351aaa63f8358442e0b9456a3bb745cebdf9c0d7aa4d47affca/line_profiler-5.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4758007e491bee3be40ebcca460596e0e28e7f39b735264694a9cafec729dfa9", size = 2442489, upload-time = "2025-07-23T20:15:12.602Z" }, + { url = "https://files.pythonhosted.org/packages/ce/9d/e34cc99c8abca3a27911d3542a87361e9c292fa1258d182e4a0a5c442850/line_profiler-5.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:213b19c4b65942db5d477e603c18c76126e3811a39d8bab251d930d8ce82ffba", size = 461377, upload-time = "2025-07-23T20:15:13.871Z" }, + { url = "https://files.pythonhosted.org/packages/8a/4e/915be6af377c4824486e99abeefb94108c829f3b32f1ead72fc9c6e1e30e/line_profiler-5.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba2142d35a3401d348cb743611bac52ba9db9cf026f8aa82c34d13effb98a71", size = 632303, upload-time = "2025-07-23T20:15:26.796Z" }, + { url = "https://files.pythonhosted.org/packages/63/68/d5e9b22ae37d1e65188b754a0979d65fe339057b4d721c153f3fa1d89884/line_profiler-5.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17724b2dff0edb3a4ac402bef6381060a4c424fbaa170e651306495f7c95bba8", size = 491478, upload-time = "2025-07-23T20:15:28.367Z" }, + { url = "https://files.pythonhosted.org/packages/e7/37/7c4750068fb8977749071f08349ba7c330803f9312724948be9becb1d63d/line_profiler-5.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2315baca21a9be299b5a0a89f2ce4ed5cfd12ba039a82784a298dd106d3621d", size = 477089, upload-time = "2025-07-23T20:15:29.875Z" }, + { url = "https://files.pythonhosted.org/packages/68/b9/6c5beddc9eb5c6a3928c1f3849e75f5ce4fd9c7d81f83664ad20286ee61f/line_profiler-5.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:febbfc59502984e2cb0deb27cd163ed71847e36bbb82763f2bf3c9432cc440ab", size = 1409904, upload-time = "2025-07-23T20:15:32.236Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/94b284925890a671f5861ab82e3a98e3c4a73295144708fd6ade600d0ac9/line_profiler-5.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213dc34b1abdcafff944c13e62f2f1d254fc1cb30740ac0257e4567c8bea9a03", size = 1461377, upload-time = "2025-07-23T20:15:34.139Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a6/0733ba988122b8d077363cfbcb9ed143ceca0dbb3715c37285754c9d1daf/line_profiler-5.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:011ac8167855513cac266d698b34b8ded9c673640d105a715c989fd5f27a298c", size = 2507835, upload-time = "2025-07-23T20:15:36.28Z" }, + { url = "https://files.pythonhosted.org/packages/8b/59/93db811611fda1d921e56b324469ffb6b9210dd134bd377f52b3250012e2/line_profiler-5.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4646907f588439845d7739d6a5f10ab08a2f8952d65f61145eeb705e8bb4797e", size = 2444523, upload-time = "2025-07-23T20:15:38.531Z" }, + { url = "https://files.pythonhosted.org/packages/25/58/3d9355385817d64fc582daec8592eb85f0ea39d577001a2f1ce0971c4b95/line_profiler-5.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cb6dced51bf906ddf2a8d75eda3523cee4cfb0102f54610e8f849630341a281", size = 461954, upload-time = "2025-07-23T20:15:40.281Z" }, +] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -1296,6 +1415,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/11/0cc63f9f321ccf63886ac203336777140011fb669e739da36d8db3c53b98/numpy-2.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2e267c7da5bf7309670523896df97f93f6e469fb931161f483cd6882b3b1a5dc", size = 12971844, upload-time = "2025-09-09T15:58:57.359Z" }, ] +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812, upload-time = "2024-01-27T21:01:33.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832, upload-time = "2024-01-27T21:01:31.393Z" }, +] + [[package]] name = "packaging" version = "25.0" @@ -1713,6 +1841,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] +[[package]] +name = "pylance" +version = "0.38.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pyarrow" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/fd/1584088917524acd974c86a1addaa679e7201b9073cfed3ef7e495315fd7/pylance-0.38.3-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:f6c42a8b1c3ffa3ab55cc608351775d537b96ab0fa283075a96495fdf47e1920", size = 46482483, upload-time = "2025-10-28T12:01:46.109Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f9/5e5bcd547c7cc7a126fec2b32ebc42c22ecad3fcd73620793904bc8667bb/pylance-0.38.3-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:14329be831e3de21149f40a1437ad4bc6e5b7427e019586c0115fe05d2f016c1", size = 42459485, upload-time = "2025-10-28T11:38:51.793Z" }, + { url = "https://files.pythonhosted.org/packages/2c/69/8ccd88ca597bb5c1f0b8f8ec4491cafbe388ef867328c07b29fb467f1e34/pylance-0.38.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a872b99c9c4b6a84ff6f4254fd9405ec7672413edd3b4ce3b4ed232fdf1ac3", size = 44575863, upload-time = "2025-10-28T11:34:54.118Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b4/78edb7e2c5a2e604b035a38d35857e5cdb242cec4171f386eed0920941c4/pylance-0.38.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88c87a0ada27856e9917dbf9eb59879891339a37d0cfb05b5df81caab2b11f31", size = 48011877, upload-time = "2025-10-28T11:38:20.902Z" }, + { url = "https://files.pythonhosted.org/packages/19/9b/45539c0724be34455655e70a4a6a3123ad338719687391dc037db0f7462d/pylance-0.38.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b6a3c786f80d0bf8a2da379b89211d3ad9f3c723394bd9e78e5a234d65701b59", size = 44592430, upload-time = "2025-10-28T11:35:19.708Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f3/8bed7707fc4b5bc6032ba1b7af8f2211af9d39f6fe925ae78961a14c85c7/pylance-0.38.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a169b2a254b8cb26399a0cc570784995280d2900d0ed8e50fbd3c38f21a3af76", size = 48024285, upload-time = "2025-10-28T11:38:53.192Z" }, + { url = "https://files.pythonhosted.org/packages/06/49/84966b5e28648740b157bd90e7a89ec99a835cb66a0a619e41c60ec71073/pylance-0.38.3-cp39-abi3-win_amd64.whl", hash = "sha256:ea106742c2032d3ed8aa9232923eed2054aabf683a769ddc564c285ce20b950d", size = 49747295, upload-time = "2025-10-28T11:56:25.262Z" }, +] + [[package]] name = "pytest" version = "8.4.2" @@ -1983,7 +2131,7 @@ wheels = [ [[package]] name = "smoosense" -version = "0.1.0" +version = "0.1.1" source = { editable = "." } dependencies = [ { name = "boto3" }, @@ -1991,6 +2139,7 @@ dependencies = [ { name = "click", version = "8.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "duckdb" }, { name = "flask" }, + { name = "lancedb" }, { name = "pydantic" }, { name = "pytz" }, { name = "requests" }, @@ -2016,6 +2165,7 @@ jupyter = [ [package.dev-dependencies] dev = [ { name = "datamodel-code-generator" }, + { name = "line-profiler" }, { name = "mypy" }, { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, @@ -2042,6 +2192,7 @@ requires-dist = [ { name = "duckdb", specifier = ">=1.2.1" }, { name = "flask", specifier = ">=3.1.0" }, { name = "ipython", marker = "extra == 'jupyter'", specifier = ">=8.0.0" }, + { name = "lancedb", specifier = ">=0.25.2" }, { name = "pandas", marker = "extra == 'jupyter'", specifier = ">=2.3.0" }, { name = "pyarrow", marker = "extra == 'jupyter'", specifier = ">=20.0.0" }, { name = "pydantic", specifier = ">=2.11.7" }, @@ -2054,6 +2205,7 @@ provides-extras = ["jupyter", "daft"] [package.metadata.requires-dev] dev = [ { name = "datamodel-code-generator", specifier = ">=0.31.2" }, + { name = "line-profiler", specifier = ">=5.0.0" }, { name = "mypy", specifier = ">=1.17.1" }, { name = "numpy", specifier = ">=2.0.2" }, { name = "pandas", specifier = ">=2.3.0" },