1
+ 'use client'
2
+ import data from "../data/data_leaderboard.json" ;
3
+ import React from "react" ;
4
+ import {
5
+ Table ,
6
+ TableHeader ,
7
+ TableColumn ,
8
+ TableBody ,
9
+ TableRow ,
10
+ TableCell ,
11
+ getKeyValue ,
12
+ Spinner ,
13
+ } from "@heroui/react" ;
14
+ import { useAsyncList } from "@react-stately/data" ;
15
+
16
+ // Define headers for each table
17
+ const headers : { key : string ; label : string } [ ] = [
18
+ { key : "model_name" , label : "Model" } ,
19
+ { key : "stock_price_forecast_7_day_mae_ts" , label : "Stock price prediction \n for 7 days under TS (MAE)" } ,
20
+ { key : "stock_price_forecast_7_day_mae_ts_w_text" , label : "Stock price prediction for 7 days under TS+Text (MAE)" } ,
21
+ { key : "stock_price_forecast_7_day_mape_ts" , label : "Stock price prediction for 7 days under TS (MAPE)" } ,
22
+ { key : "stock_price_forecast_7_day_mape_ts_w_text" , label : "Stock price prediction for 7 days under TS+Text (MAPE)" } ,
23
+ { key : "stock_price_forecast_30_day_mae_ts" , label : "Stock price prediction for 30 days under TS (MAE)" } ,
24
+ { key : "stock_price_forecast_30_day_mae_ts_w_text" , label : "Stock price prediction for 30 days under TS+Text (MAE)" } ,
25
+ { key : "stock_price_forecast_30_day_mape_ts" , label : "Stock price prediction for 30 days under TS (MAPE)" } ,
26
+ { key : "stock_price_forecast_30_day_mape_ts_w_text" , label : "Stock price prediction for 30 days under TS+Text (MAPE)" } ,
27
+ { key : "temp_forecast_7_day_mse_ts" , label : "Temp. prediction for 7 days under TS (MSE)" } ,
28
+ { key : "temp_forecast_7_day_mse_ts_w_text" , label : "Temp. prediction for 7 days under TS+Text (MSE)" } ,
29
+ { key : "temp_forecast_7_day_mae_ts" , label : "Temp. prediction for 7 days under TS (MAE)" } ,
30
+ { key : "temp_forecast_7_day_mae_ts_w_text" , label : "Temp. prediction for 7 days under TS+Text (MAE)" } ,
31
+ { key : "temp_forecast_14_day_mse_ts" , label : "Temp. prediction for 14 days under TS (MSE)" } ,
32
+ { key : "temp_forecast_14_day_mse_ts_w_text" , label : "Temp. prediction for 14 days under TS+Text (MSE)" } ,
33
+ { key : "temp_forecast_14_day_mae_ts" , label : "Temp. prediction for 14 days under TS (MAE)" } ,
34
+ { key : "temp_forecast_14_day_mae_ts_w_text" , label : "Temp. prediction for 14 days under TS+Text (MAE)" } ,
35
+ { key : "stock_trend_predict_acc_7_day_3_way_ts" , label : "Stock trend prediction for 7 days 3-way under TS (Acc)" } ,
36
+ { key : "stock_trend_predict_acc_7_day_3_way_ts_w_text" , label : "Stock trend prediction for 7 days 3-way under TS+Text (Acc)" } ,
37
+ { key : "stock_trend_predict_acc_7_day_5_way_ts" , label : "Stock trend prediction for 7 days 5-way under TS (Acc)" } ,
38
+ { key : "stock_trend_predict_acc_7_day_5_way_ts_w_text" , label : "Stock trend prediction for 7 days 5-way under TS+Text (Acc)" } ,
39
+ { key : "stock_trend_predict_acc_30_day_3_way_ts" , label : "Stock trend prediction for 30 days 3-way under TS (Acc)" } ,
40
+ { key : "stock_trend_predict_acc_30_day_3_way_ts_w_text" , label : "Stock trend prediction for 30 days 3-way under TS+Text (Acc)" } ,
41
+ { key : "stock_trend_predict_acc_30_day_5_way_ts" , label : "Stock trend prediction for 30 days 5-way under TS (Acc)" } ,
42
+ { key : "stock_trend_predict_acc_30_day_5_way_ts_w_text" , label : "Stock trend prediction for 30 days 5-way under TS+Text (Acc)" } ,
43
+ { key : "temp_trend_predict_acc_past_ts" , label : "Temp. trend prediction past under TS (Acc)" } ,
44
+ { key : "temp_trend_predict_acc_past_ts_w_text" , label : "Temp. trend prediction past under TS+Text (Acc)" } ,
45
+ { key : "temp_trend_predict_acc_future_ts" , label : "Temp. trend prediction future under TS (Acc)" } ,
46
+ { key : "temp_trend_predict_acc_future_ts_w_text" , label : "Temp. trend prediction future under TS+Text (Acc)" } ,
47
+ { key : "stock_indicator_predict_mse_7_day_macd_ts" , label : "MACD prediction for 7 days under TS (MSE)" } ,
48
+ { key : "stock_indicator_predict_mse_7_day_macd_ts_w_text" , label : "MACD prediction for 7 days under TS+Text (MSE)" } ,
49
+ { key : "stock_indicator_predict_mse_7_day_bb_ts" , label : "Bollinger Bands prediction for 7 days under TS (MSE)" } ,
50
+ { key : "stock_indicator_predict_mse_7_day_bb_ts_w_text" , label : "Bollinger Bands prediction for 7 days under TS+Text (MSE)" } ,
51
+ { key : "stock_indicator_predict_mse_30_day_macd_ts" , label : "MACD prediction for 30 days under TS (MSE)" } ,
52
+ { key : "stock_indicator_predict_mse_30_day_macd_ts_w_text" , label : "MACD prediction for 30 days under TS+Text (MSE)" } ,
53
+ { key : "stock_indicator_predict_mse_30_day_bb_ts" , label : "Bollinger Bands prediction for 30 days under TS (MSE)" } ,
54
+ { key : "stock_indicator_predict_mse_30_day_bb_ts_w_text" , label : "Bollinger Bands prediction for 30 days under TS+Text (MSE)" } ,
55
+ { key : "temp_predict_max_mse_ts" , label : "Temp. prediction max under TS (MSE)" } ,
56
+ { key : "temp_predict_max_mse_ts_w_text" , label : "Temp. prediction max under TS+Text (MSE)" } ,
57
+ { key : "temp_predict_max_mae_ts" , label : "Temp. prediction max under TS (MAE)" } ,
58
+ { key : "temp_predict_max_mae_ts_w_text" , label : "Temp. prediction max under TS+Text (MAE)" } ,
59
+ { key : "temp_predict_min_mse_ts" , label : "Temp. prediction min under TS (MSE)" } ,
60
+ { key : "temp_predict_min_mse_ts_w_text" , label : "Temp. prediction min under TS+Text (MSE)" } ,
61
+ { key : "temp_predict_min_mae_ts" , label : "Temp. prediction min under TS (MAE)" } ,
62
+ { key : "temp_predict_min_mae_ts_w_text" , label : "Temp. prediction min under TS+Text (MAE)" } ,
63
+ { key : "temp_predict_diff_mse_ts" , label : "Temp. prediction diff. under TS (MSE)" } ,
64
+ { key : "temp_predict_diff_mse_ts_w_text" , label : "Temp. prediction diff. under TS+Text (MSE)" } ,
65
+ { key : "temp_predict_diff_mae_ts" , label : "Temp. prediction diff. under TS (MAE)" } ,
66
+ { key : "temp_predict_diff_mae_ts_w_text" , label : "Temp. prediction diff. under TS+Text (MAE)" } ,
67
+ { key : "news_stock_corr_acc_7_day_3_way" , label : "News stock corr. for 7 days 3-way (Acc)" } ,
68
+ { key : "news_stock_corr_acc_7_day_5_way" , label : "News stock corr. for 7 days 5-way (Acc)" } ,
69
+ { key : "news_stock_corr_acc_30_day_3_way" , label : "News stock corr. for 30 days 3-way (Acc)" } ,
70
+ { key : "news_stock_corr_acc_30_day_5_way" , label : "News stock corr. for 30 days 5-way (Acc)" } ,
71
+ { key : "news_driven_mcqa_acc_7_day_fin" , label : "News driven MCQA for 7 days for Finance data (Acc)" } ,
72
+ { key : "news_driven_mcqa_acc_7_day_weather" , label : "News driven MCQA for 7 days for Weather data (Acc)" } ,
73
+ { key : "news_driven_mcqa_acc_30_day_fin" , label : "News driven MCQA for 30 days for Finance data (Acc)" } ,
74
+ { key : "news_driven_mcqa_acc_30_day_weather" , label : "News driven MCQA for 30 days for Weather data (Acc)" }
75
+
76
+ ] ;
77
+
78
+ const headers1 : { key : string ; label : string } [ ] = [
79
+ { key : "model_name" , label : "Model" } ,
80
+ { key : "stock_price_forecast_7_day_mae_ts" , label : "Stock price prediction \n for 7 days under TS (MAE)" } ,
81
+ { key : "stock_price_forecast_7_day_mae_ts_w_text" , label : "Stock price prediction for 7 days under TS+Text (MAE)" } ,
82
+ { key : "stock_price_forecast_7_day_mape_ts" , label : "Stock price prediction for 7 days under TS (MAPE)" } ,
83
+ { key : "stock_price_forecast_7_day_mape_ts_w_text" , label : "Stock price prediction for 7 days under TS+Text (MAPE)" } ,
84
+ { key : "stock_price_forecast_30_day_mae_ts" , label : "Stock price prediction for 30 days under TS (MAE)" } ,
85
+ { key : "stock_price_forecast_30_day_mae_ts_w_text" , label : "Stock price prediction for 30 days under TS+Text (MAE)" } ,
86
+ { key : "stock_price_forecast_30_day_mape_ts" , label : "Stock price prediction for 30 days under TS (MAPE)" } ,
87
+ { key : "stock_price_forecast_30_day_mape_ts_w_text" , label : "Stock price prediction for 30 days under TS+Text (MAPE)" } ,
88
+ { key : "temp_forecast_7_day_mse_ts" , label : "Temp. prediction for 7 days under TS (MSE)" } ,
89
+ { key : "temp_forecast_7_day_mse_ts_w_text" , label : "Temp. prediction for 7 days under TS+Text (MSE)" } ,
90
+ { key : "temp_forecast_7_day_mae_ts" , label : "Temp. prediction for 7 days under TS (MAE)" } ,
91
+ { key : "temp_forecast_7_day_mae_ts_w_text" , label : "Temp. prediction for 7 days under TS+Text (MAE)" } ,
92
+ { key : "temp_forecast_14_day_mse_ts" , label : "Temp. prediction for 14 days under TS (MSE)" } ,
93
+ { key : "temp_forecast_14_day_mse_ts_w_text" , label : "Temp. prediction for 14 days under TS+Text (MSE)" } ,
94
+ { key : "temp_forecast_14_day_mae_ts" , label : "Temp. prediction for 14 days under TS (MAE)" } ,
95
+ { key : "temp_forecast_14_day_mae_ts_w_text" , label : "Temp. prediction for 14 days under TS+Text (MAE)" } ,
96
+ ] ;
97
+
98
+ const headers2 : { key : string ; label : string } [ ] = [
99
+ { key : "model_name" , label : "Model" } ,
100
+ { key : "stock_trend_predict_acc_7_day_3_way_ts" , label : "Stock trend prediction for 7 days 3-way under TS (Acc)" } ,
101
+ { key : "stock_trend_predict_acc_7_day_3_way_ts_w_text" , label : "Stock trend prediction for 7 days 3-way under TS+Text (Acc)" } ,
102
+ { key : "stock_trend_predict_acc_7_day_5_way_ts" , label : "Stock trend prediction for 7 days 5-way under TS (Acc)" } ,
103
+ { key : "stock_trend_predict_acc_7_day_5_way_ts_w_text" , label : "Stock trend prediction for 7 days 5-way under TS+Text (Acc)" } ,
104
+ { key : "stock_trend_predict_acc_30_day_3_way_ts" , label : "Stock trend prediction for 30 days 3-way under TS (Acc)" } ,
105
+ { key : "stock_trend_predict_acc_30_day_3_way_ts_w_text" , label : "Stock trend prediction for 30 days 3-way under TS+Text (Acc)" } ,
106
+ { key : "stock_trend_predict_acc_30_day_5_way_ts" , label : "Stock trend prediction for 30 days 5-way under TS (Acc)" } ,
107
+ { key : "stock_trend_predict_acc_30_day_5_way_ts_w_text" , label : "Stock trend prediction for 30 days 5-way under TS+Text (Acc)" } ,
108
+ { key : "temp_trend_predict_acc_past_ts" , label : "Temp. trend prediction past under TS (Acc)" } ,
109
+ { key : "temp_trend_predict_acc_past_ts_w_text" , label : "Temp. trend prediction past under TS+Text (Acc)" } ,
110
+ { key : "temp_trend_predict_acc_future_ts" , label : "Temp. trend prediction future under TS (Acc)" } ,
111
+ { key : "temp_trend_predict_acc_future_ts_w_text" , label : "Temp. trend prediction future under TS+Text (Acc)" } ,
112
+ ] ;
113
+
114
+ const headers3 : { key : string ; label : string } [ ] = [
115
+ { key : "model_name" , label : "Model" } ,
116
+ { key : "stock_indicator_predict_mse_7_day_macd_ts" , label : "MACD prediction for 7 days under TS (MSE)" } ,
117
+ { key : "stock_indicator_predict_mse_7_day_macd_ts_w_text" , label : "MACD prediction for 7 days under TS+Text (MSE)" } ,
118
+ { key : "stock_indicator_predict_mse_7_day_bb_ts" , label : "Bollinger Bands prediction for 7 days under TS (MSE)" } ,
119
+ { key : "stock_indicator_predict_mse_7_day_bb_ts_w_text" , label : "Bollinger Bands prediction for 7 days under TS+Text (MSE)" } ,
120
+ { key : "stock_indicator_predict_mse_30_day_macd_ts" , label : "MACD prediction for 30 days under TS (MSE)" } ,
121
+ { key : "stock_indicator_predict_mse_30_day_macd_ts_w_text" , label : "MACD prediction for 30 days under TS+Text (MSE)" } ,
122
+ { key : "stock_indicator_predict_mse_30_day_bb_ts" , label : "Bollinger Bands prediction for 30 days under TS (MSE)" } ,
123
+ { key : "stock_indicator_predict_mse_30_day_bb_ts_w_text" , label : "Bollinger Bands prediction for 30 days under TS+Text (MSE)" } ,
124
+ { key : "temp_predict_max_mse_ts" , label : "Temp. prediction max under TS (MSE)" } ,
125
+ { key : "temp_predict_max_mse_ts_w_text" , label : "Temp. prediction max under TS+Text (MSE)" } ,
126
+ { key : "temp_predict_max_mae_ts" , label : "Temp. prediction max under TS (MAE)" } ,
127
+ { key : "temp_predict_max_mae_ts_w_text" , label : "Temp. prediction max under TS+Text (MAE)" } ,
128
+ { key : "temp_predict_min_mse_ts" , label : "Temp. prediction min under TS (MSE)" } ,
129
+ { key : "temp_predict_min_mse_ts_w_text" , label : "Temp. prediction min under TS+Text (MSE)" } ,
130
+ { key : "temp_predict_min_mae_ts" , label : "Temp. prediction min under TS (MAE)" } ,
131
+ { key : "temp_predict_min_mae_ts_w_text" , label : "Temp. prediction min under TS+Text (MAE)" } ,
132
+ { key : "temp_predict_diff_mse_ts" , label : "Temp. prediction diff. under TS (MSE)" } ,
133
+ { key : "temp_predict_diff_mse_ts_w_text" , label : "Temp. prediction diff. under TS+Text (MSE)" } ,
134
+ { key : "temp_predict_diff_mae_ts" , label : "Temp. prediction diff. under TS (MAE)" } ,
135
+ { key : "temp_predict_diff_mae_ts_w_text" , label : "Temp. prediction diff. under TS+Text (MAE)" } ,
136
+ ] ;
137
+
138
+ const headers4 : { key : string ; label : string } [ ] = [
139
+ { key : "model_name" , label : "Model" } ,
140
+ { key : "news_stock_corr_acc_7_day_3_way" , label : "News stock corr. for 7 days 3-way (Acc)" } ,
141
+ { key : "news_stock_corr_acc_7_day_5_way" , label : "News stock corr. for 7 days 5-way (Acc)" } ,
142
+ { key : "news_stock_corr_acc_30_day_3_way" , label : "News stock corr. for 30 days 3-way (Acc)" } ,
143
+ { key : "news_stock_corr_acc_30_day_5_way" , label : "News stock corr. for 30 days 5-way (Acc)" } ,
144
+ { key : "news_driven_mcqa_acc_7_day_fin" , label : "News driven MCQA for 7 days for Finance data (Acc)" } ,
145
+ { key : "news_driven_mcqa_acc_7_day_weather" , label : "News driven MCQA for 7 days for Weather data (Acc)" } ,
146
+ { key : "news_driven_mcqa_acc_30_day_fin" , label : "News driven MCQA for 30 days for Finance data (Acc)" } ,
147
+ { key : "news_driven_mcqa_acc_30_day_weather" , label : "News driven MCQA for 30 days for Weather data (Acc)" }
148
+ ] ;
149
+
150
+ function createSortableTable ( headers : { key : string ; label : string } [ ] ) {
151
+ return function SortableTableComponent ( ) {
152
+ const [ isLoading , setIsLoading ] = React . useState ( true ) ;
153
+ type ModelItem = {
154
+ model_name : string ;
155
+ [ key : string ] : any ;
156
+ }
157
+ let list = useAsyncList < ModelItem > ( {
158
+ async load ( { } ) {
159
+ setIsLoading ( false ) ;
160
+ return {
161
+ items : data ,
162
+ } ;
163
+ } ,
164
+
165
+ async sort ( { items, sortDescriptor } ) {
166
+ return {
167
+ items : items . sort ( ( a , b ) => {
168
+ let first = a [ sortDescriptor . column ] ;
169
+ let second = b [ sortDescriptor . column ] ;
170
+ let cmp = ( parseInt ( first ) || first ) < ( parseInt ( second ) || second ) ? - 1 : 1 ;
171
+
172
+ if ( sortDescriptor . direction === "descending" ) {
173
+ cmp *= - 1 ;
174
+ }
175
+
176
+ return cmp ;
177
+ } ) ,
178
+ } ;
179
+ } ,
180
+ } ) ;
181
+
182
+ return (
183
+ < Table
184
+ aria-label = "Dynamic sortable table"
185
+ classNames = { {
186
+ table : "min-h-[400px]" ,
187
+ } }
188
+ sortDescriptor = { list . sortDescriptor }
189
+ onSortChange = { list . sort } >
190
+ < TableHeader >
191
+ { headers . map ( ( h ) => (
192
+ < TableColumn key = { h . key } allowsSorting className = "whitespace-normal break-words text-sm max-w-[150px]" >
193
+ { h . label }
194
+ </ TableColumn >
195
+ ) ) }
196
+ </ TableHeader >
197
+ < TableBody
198
+ isLoading = { isLoading }
199
+ items = { list . items }
200
+ loadingContent = { < Spinner label = "Loading..." /> }
201
+ >
202
+ { ( item ) => (
203
+
204
+ < TableRow key = { item . model_name } className = "hover:bg-white/10" >
205
+ { ( columnKey ) => (
206
+ < TableCell className = {
207
+ columnKey === "model_name"
208
+ ? "sticky left-0 z-10 whitespace-nowrap overflow-hidden text-ellipsis max-w-[200px]"
209
+ : "" } >
210
+ { getKeyValue ( item , columnKey ) }
211
+ </ TableCell >
212
+ ) }
213
+ </ TableRow >
214
+ ) }
215
+ </ TableBody >
216
+ </ Table >
217
+ ) ;
218
+ } ;
219
+ }
220
+
221
+ // Create separate tables
222
+ const SortableTable = createSortableTable ( headers ) ;
223
+ const SortableTableTask1 = createSortableTable ( headers1 ) ;
224
+ const SortableTableTask2 = createSortableTable ( headers2 ) ;
225
+ const SortableTableTask3 = createSortableTable ( headers3 ) ;
226
+ const SortableTableTask4 = createSortableTable ( headers4 ) ;
227
+
228
+ // Export all tables
229
+ export { SortableTable , SortableTableTask1 , SortableTableTask2 , SortableTableTask3 , SortableTableTask4 } ;
0 commit comments