cnhkmcp 2.1.3__py3-none-any.whl → 2.1.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. cnhkmcp/__init__.py +126 -0
  2. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/README.md +38 -0
  3. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/ace.log +0 -0
  4. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/config.json +6 -0
  5. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/ace_lib.py +1514 -0
  6. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/fetch_all_datasets.py +157 -0
  7. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/fetch_all_documentation.py +132 -0
  8. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/fetch_all_operators.py +99 -0
  9. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/helpful_functions.py +180 -0
  10. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/icon.ico +0 -0
  11. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/icon.png +0 -0
  12. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/001_10_Steps_to_Start_on_BRAIN_documentation.json +14 -0
  13. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/001_Intermediate_Pack_-_Improve_your_Alpha_2_2_documentation.json +174 -0
  14. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/001_Intermediate_Pack_-_Understand_Results_1_2_documentation.json +167 -0
  15. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/001_Introduction_to_Alphas_documentation.json +145 -0
  16. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/001_Introduction_to_BRAIN_Expression_Language_documentation.json +107 -0
  17. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/001_WorldQuant_Challenge_documentation.json +56 -0
  18. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/001__Read_this_First_-_Starter_Pack_documentation.json +404 -0
  19. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/002_How_to_choose_the_Simulation_Settings_documentation.json +268 -0
  20. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/002_Simulate_your_first_Alpha_documentation.json +88 -0
  21. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/002__Alpha_Examples_for_Beginners_documentation.json +254 -0
  22. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/002__Alpha_Examples_for_Bronze_Users_documentation.json +114 -0
  23. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/002__Alpha_Examples_for_Silver_Users_documentation.json +79 -0
  24. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/002__How_BRAIN_works_documentation.json +184 -0
  25. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/003_Clear_these_tests_before_submitting_an_Alpha_documentation.json +388 -0
  26. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/003_Parameters_in_the_Simulation_results_documentation.json +243 -0
  27. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/004_Group_Data_Fields_documentation.json +69 -0
  28. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/004_How_to_use_the_Data_Explorer_documentation.json +142 -0
  29. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/004_Model77_dataset_documentation.json +14 -0
  30. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/004_Sentiment1_dataset_documentation.json +14 -0
  31. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/004_Understanding_Data_in_BRAIN_Key_Concepts_and_Tips_documentation.json +182 -0
  32. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/004_Vector_Data_Fields_documentation.json +30 -0
  33. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_Crowding_Risk-Neutralized_Alphas_documentation.json +64 -0
  34. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_D0_documentation.json +66 -0
  35. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_Double_Neutralization_documentation.json +53 -0
  36. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_Fast_D1_Documentation_documentation.json +304 -0
  37. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_Investability_Constrained_Metrics_documentation.json +129 -0
  38. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_Must-read_posts_How_to_improve_your_Alphas_documentation.json +14 -0
  39. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_Neutralization_documentation.json +29 -0
  40. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_RAM_Risk-Neutralized_Alphas_documentation.json +64 -0
  41. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_Risk_Neutralization_Default_setting_documentation.json +75 -0
  42. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_Risk_Neutralized_Alphas_documentation.json +171 -0
  43. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/005_Statistical_Risk-Neutralized_Alphas_documentation.json +51 -0
  44. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/006_EUR_TOP2500_Universe_documentation.json +35 -0
  45. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/006_GLB_TOPDIV3000_Universe_documentation.json +48 -0
  46. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/006_Getting_Started_China_Research_for_Consultants_Gold_documentation.json +142 -0
  47. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/006_Getting_started_on_Illiquid_Universes_Gold_documentation.json +46 -0
  48. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/006_Getting_started_with_USA_TOPSP500_universe_Gold_documentation.json +62 -0
  49. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/006_Global_Alphas_Gold_documentation.json +66 -0
  50. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/006_India_Alphas_documentation.json +35 -0
  51. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Consultant_Dos_and_Don_ts_documentation.json +35 -0
  52. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Consultant_Features_documentation.json +239 -0
  53. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Consultant_Simulation_Features_documentation.json +149 -0
  54. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Consultant_Submission_Tests_documentation.json +363 -0
  55. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Finding_Consultant_Alphas_documentation.json +333 -0
  56. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Power_Pool_Alphas_documentation.json +14 -0
  57. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Research_Advisory_Program_documentation.json +35 -0
  58. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Starting_Guide_for_Research_Consultants_documentation.json +14 -0
  59. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Visualization_Tool_documentation.json +99 -0
  60. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007_Your_Advisor_-_Kunqi_Jiang_documentation.json +53 -0
  61. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007__Brain_Genius_documentation.json +288 -0
  62. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/007__Single_Dataset_Alphas_documentation.json +41 -0
  63. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/008_Advisory_Theme_Calendar_documentation.json +14 -0
  64. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/008_Multiplier_Rules_documentation.json +14 -0
  65. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/008_Overview_of_Themes_documentation.json +14 -0
  66. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/008_Theme_Calendar_documentation.json +14 -0
  67. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/009_Combo_Expression_documentation.json +272 -0
  68. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/009_Global_SuperAlphas_documentation.json +14 -0
  69. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/009_Helpful_Tips_documentation.json +58 -0
  70. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/009_Selection_Expression_documentation.json +1546 -0
  71. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/009_SuperAlpha_Operators_documentation.json +890 -0
  72. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/009_SuperAlpha_Results_documentation.json +83 -0
  73. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/009_What_is_a_SuperAlpha_documentation.json +261 -0
  74. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/010_BRAIN_API_documentation.json +515 -0
  75. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/010_Documentation_for_ACE_API_Library_Gold_documentation.json +27 -0
  76. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/010__Understanding_simulation_limits_documentation.json +210 -0
  77. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/arithmetic_operators.json +209 -0
  78. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/cross_sectional_operators.json +98 -0
  79. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/group_operators.json +121 -0
  80. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/logical_operators.json +145 -0
  81. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/reduce_operators.json +156 -0
  82. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/special_operators.json +35 -0
  83. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/test.txt +1 -0
  84. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/time_series_operators.json +386 -0
  85. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/transformational_operators.json +61 -0
  86. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/vector_operators.json +38 -0
  87. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/main.py +576 -0
  88. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/process_knowledge_base.py +281 -0
  89. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/rag_engine.py +408 -0
  90. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/requirements.txt +7 -0
  91. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/run.bat +3 -0
  92. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/vector_db/_manifest.json +302 -0
  93. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/vector_db/_meta.json +1 -0
  94. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/vector_db/chroma.sqlite3 +0 -0
  95. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242//321/211/320/266/320/246/321/206/320/274/320/261/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/231/320/243/321/205/342/225/235/320/220/321/206/320/230/320/241.py +265 -0
  96. cnhkmcp/untracked/APP/.gitignore +32 -0
  97. cnhkmcp/untracked/APP/MODULAR_STRUCTURE.md +112 -0
  98. cnhkmcp/untracked/APP/README.md +309 -0
  99. cnhkmcp/untracked/APP/Tranformer/Transformer.py +4989 -0
  100. cnhkmcp/untracked/APP/Tranformer/ace.log +0 -0
  101. cnhkmcp/untracked/APP/Tranformer/ace_lib.py +1514 -0
  102. cnhkmcp/untracked/APP/Tranformer/helpful_functions.py +180 -0
  103. cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates.json +7187 -0
  104. cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates_/321/207/320/264/342/225/221/321/204/342/225/233/320/233.json +654 -0
  105. cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_error.json +1 -0
  106. cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_success.json +47312 -0
  107. cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_/321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/320/237/320/277/321/207/320/253/342/224/244/321/206/320/236/320/265/321/210/342/225/234/342/225/234/321/205/320/225/320/265Machine_lib.json +22 -0
  108. cnhkmcp/untracked/APP/Tranformer/parsetab.py +60 -0
  109. cnhkmcp/untracked/APP/Tranformer/template_summary.txt +3182 -0
  110. cnhkmcp/untracked/APP/Tranformer/transformer_config.json +7 -0
  111. cnhkmcp/untracked/APP/Tranformer/validator.py +889 -0
  112. cnhkmcp/untracked/APP/ace.log +69 -0
  113. cnhkmcp/untracked/APP/ace_lib.py +1514 -0
  114. cnhkmcp/untracked/APP/blueprints/__init__.py +6 -0
  115. cnhkmcp/untracked/APP/blueprints/feature_engineering.py +347 -0
  116. cnhkmcp/untracked/APP/blueprints/idea_house.py +221 -0
  117. cnhkmcp/untracked/APP/blueprints/inspiration_house.py +432 -0
  118. cnhkmcp/untracked/APP/blueprints/paper_analysis.py +570 -0
  119. cnhkmcp/untracked/APP/custom_templates/templates.json +1257 -0
  120. cnhkmcp/untracked/APP/give_me_idea/BRAIN_Alpha_Template_Expert_SystemPrompt.md +400 -0
  121. cnhkmcp/untracked/APP/give_me_idea/ace_lib.py +1514 -0
  122. cnhkmcp/untracked/APP/give_me_idea/alpha_data_specific_template_master.py +252 -0
  123. cnhkmcp/untracked/APP/give_me_idea/fetch_all_datasets.py +157 -0
  124. cnhkmcp/untracked/APP/give_me_idea/fetch_all_operators.py +99 -0
  125. cnhkmcp/untracked/APP/give_me_idea/helpful_functions.py +180 -0
  126. cnhkmcp/untracked/APP/give_me_idea/what_is_Alpha_template.md +11 -0
  127. cnhkmcp/untracked/APP/helpful_functions.py +180 -0
  128. cnhkmcp/untracked/APP/hkSimulator/ace_lib.py +1501 -0
  129. cnhkmcp/untracked/APP/hkSimulator/autosimulator.py +447 -0
  130. cnhkmcp/untracked/APP/hkSimulator/helpful_functions.py +180 -0
  131. cnhkmcp/untracked/APP/mirror_config.txt +20 -0
  132. cnhkmcp/untracked/APP/operaters.csv +129 -0
  133. cnhkmcp/untracked/APP/requirements.txt +53 -0
  134. cnhkmcp/untracked/APP/run_app.bat +28 -0
  135. cnhkmcp/untracked/APP/run_app.sh +34 -0
  136. cnhkmcp/untracked/APP/setup_tsinghua.bat +39 -0
  137. cnhkmcp/untracked/APP/setup_tsinghua.sh +43 -0
  138. cnhkmcp/untracked/APP/simulator/alpha_submitter.py +404 -0
  139. cnhkmcp/untracked/APP/simulator/simulator_wqb.py +618 -0
  140. cnhkmcp/untracked/APP/ssrn-3332513.pdf +109188 -19
  141. cnhkmcp/untracked/APP/static/brain.js +589 -0
  142. cnhkmcp/untracked/APP/static/decoder.js +1540 -0
  143. cnhkmcp/untracked/APP/static/feature_engineering.js +1729 -0
  144. cnhkmcp/untracked/APP/static/idea_house.js +937 -0
  145. cnhkmcp/untracked/APP/static/inspiration.js +465 -0
  146. cnhkmcp/untracked/APP/static/inspiration_house.js +868 -0
  147. cnhkmcp/untracked/APP/static/paper_analysis.js +390 -0
  148. cnhkmcp/untracked/APP/static/script.js +3082 -0
  149. cnhkmcp/untracked/APP/static/simulator.js +597 -0
  150. cnhkmcp/untracked/APP/static/styles.css +3127 -0
  151. cnhkmcp/untracked/APP/static/usage_widget.js +508 -0
  152. cnhkmcp/untracked/APP/templates/alpha_inspector.html +511 -0
  153. cnhkmcp/untracked/APP/templates/feature_engineering.html +960 -0
  154. cnhkmcp/untracked/APP/templates/idea_house.html +564 -0
  155. cnhkmcp/untracked/APP/templates/index.html +932 -0
  156. cnhkmcp/untracked/APP/templates/inspiration_house.html +861 -0
  157. cnhkmcp/untracked/APP/templates/paper_analysis.html +91 -0
  158. cnhkmcp/untracked/APP/templates/simulator.html +343 -0
  159. cnhkmcp/untracked/APP/templates/transformer_web.html +580 -0
  160. cnhkmcp/untracked/APP/usage.md +351 -0
  161. cnhkmcp/untracked/APP//321/207/342/225/235/320/250/321/205/320/230/320/226/321/204/342/225/225/320/220/321/211/320/221/320/243/321/206/320/261/320/265/ace_lib.py +1514 -0
  162. cnhkmcp/untracked/APP//321/207/342/225/235/320/250/321/205/320/230/320/226/321/204/342/225/225/320/220/321/211/320/221/320/243/321/206/320/261/320/265/brain_alpha_inspector.py +712 -0
  163. cnhkmcp/untracked/APP//321/207/342/225/235/320/250/321/205/320/230/320/226/321/204/342/225/225/320/220/321/211/320/221/320/243/321/206/320/261/320/265/helpful_functions.py +180 -0
  164. cnhkmcp/untracked/APP//321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/231/320/243/321/205/342/225/235/320/220/321/206/320/230/320/241.py +2460 -0
  165. cnhkmcp/untracked/__init__.py +0 -0
  166. cnhkmcp/untracked/arXiv_API_Tool_Manual.md +490 -0
  167. cnhkmcp/untracked/arxiv_api.py +229 -0
  168. cnhkmcp/untracked/back_up/forum_functions.py +998 -0
  169. cnhkmcp/untracked/back_up/platform_functions.py +2886 -0
  170. cnhkmcp/untracked/brain-consultant.md +31 -0
  171. cnhkmcp/untracked/forum_functions.py +407 -0
  172. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/forum_functions.py +407 -0
  173. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/platform_functions.py +2601 -0
  174. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/user_config.json +31 -0
  175. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272//321/210/320/276/320/271AI/321/210/320/277/342/225/227/321/210/342/224/220/320/251/321/204/342/225/225/320/272/321/206/320/246/320/227/321/206/320/261/320/263/321/206/320/255/320/265/321/205/320/275/320/266/321/204/342/225/235/320/252/321/204/342/225/225/320/233/321/210/342/225/234/342/225/234/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270.md +101 -0
  176. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272//321/211/320/225/320/235/321/207/342/225/234/320/276/321/205/320/231/320/235/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/230/320/241_/321/205/320/276/320/231/321/210/320/263/320/225/321/205/342/224/220/320/225/321/210/320/266/320/221/321/204/342/225/233/320/255/321/210/342/225/241/320/246/321/205/320/234/320/225.py +190 -0
  177. cnhkmcp/untracked/platform_functions.py +2601 -0
  178. cnhkmcp/untracked/sample_mcp_config.json +11 -0
  179. cnhkmcp/untracked/user_config.json +31 -0
  180. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/320/237/320/222/321/210/320/220/320/223/321/206/320/246/320/227/321/206/320/261/320/263_BRAIN_Alpha_Test_Requirements_and_Tips.md +202 -0
  181. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_Alpha_explaination_workflow.md +56 -0
  182. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_BRAIN_6_Tips_Datafield_Exploration_Guide.md +194 -0
  183. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_BRAIN_Alpha_Improvement_Workflow.md +101 -0
  184. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_Dataset_Exploration_Expert_Manual.md +436 -0
  185. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_daily_report_workflow.md +128 -0
  186. cnhkmcp/untracked//321/211/320/225/320/235/321/207/342/225/234/320/276/321/205/320/231/320/235/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/230/320/241_/321/205/320/276/320/231/321/210/320/263/320/225/321/205/342/224/220/320/225/321/210/320/266/320/221/321/204/342/225/233/320/255/321/210/342/225/241/320/246/321/205/320/234/320/225.py +192 -0
  187. {cnhkmcp-2.1.3.dist-info → cnhkmcp-2.1.5.dist-info}/METADATA +1 -1
  188. cnhkmcp-2.1.5.dist-info/RECORD +192 -0
  189. cnhkmcp-2.1.5.dist-info/top_level.txt +1 -0
  190. cnhkmcp-2.1.3.dist-info/RECORD +0 -6
  191. cnhkmcp-2.1.3.dist-info/top_level.txt +0 -1
  192. {cnhkmcp-2.1.3.dist-info → cnhkmcp-2.1.5.dist-info}/WHEEL +0 -0
  193. {cnhkmcp-2.1.3.dist-info → cnhkmcp-2.1.5.dist-info}/entry_points.txt +0 -0
  194. {cnhkmcp-2.1.3.dist-info → cnhkmcp-2.1.5.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,960 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Feature Engineering Assistant - BRAIN</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
8
+ <style>
9
+ .feature-engineering-container {
10
+ max-width: 1200px;
11
+ margin: 0 auto;
12
+ padding: 20px;
13
+ }
14
+
15
+ .header-section {
16
+ text-align: center;
17
+ margin-bottom: 30px;
18
+ }
19
+
20
+ .header-section h1 {
21
+ color: #2c3e50;
22
+ margin-bottom: 10px;
23
+ }
24
+
25
+ .header-section p {
26
+ color: #7f8c8d;
27
+ font-size: 16px;
28
+ }
29
+
30
+ .back-button {
31
+ position: absolute;
32
+ top: 20px;
33
+ left: 20px;
34
+ background: #3498db;
35
+ color: white;
36
+ padding: 10px 20px;
37
+ border: none;
38
+ border-radius: 5px;
39
+ text-decoration: none;
40
+ display: inline-block;
41
+ transition: background-color 0.3s;
42
+ }
43
+
44
+ .back-button:hover {
45
+ background: #2980b9;
46
+ }
47
+
48
+ .config-section {
49
+ background: #f8f9fa;
50
+ padding: 20px;
51
+ border-radius: 8px;
52
+ margin-bottom: 20px;
53
+ }
54
+
55
+ .config-section h3 {
56
+ margin-top: 0;
57
+ color: #2c3e50;
58
+ }
59
+
60
+ .form-group {
61
+ margin-bottom: 15px;
62
+ }
63
+
64
+ .form-group label {
65
+ display: block;
66
+ margin-bottom: 5px;
67
+ font-weight: bold;
68
+ color: #2c3e50;
69
+ }
70
+
71
+ .form-input {
72
+ width: 100%;
73
+ padding: 10px;
74
+ border: 1px solid #ddd;
75
+ border-radius: 4px;
76
+ font-size: 14px;
77
+ }
78
+
79
+ .form-input:focus {
80
+ outline: none;
81
+ border-color: #3498db;
82
+ box-shadow: 0 0 5px rgba(52, 152, 219, 0.3);
83
+ }
84
+
85
+ .btn {
86
+ background: #3498db;
87
+ color: white;
88
+ padding: 10px 20px;
89
+ border: none;
90
+ border-radius: 4px;
91
+ cursor: pointer;
92
+ font-size: 14px;
93
+ transition: background-color 0.3s;
94
+ }
95
+
96
+ .btn:hover {
97
+ background: #2980b9;
98
+ }
99
+
100
+ .btn-success {
101
+ background: #27ae60;
102
+ }
103
+
104
+ .btn-success:hover {
105
+ background: #229954;
106
+ }
107
+
108
+ .btn-secondary {
109
+ background: #95a5a6;
110
+ }
111
+
112
+ .btn-secondary:hover {
113
+ background: #7f8c8d;
114
+ }
115
+
116
+ .options-section {
117
+ background: white;
118
+ border-radius: 8px;
119
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
120
+ margin-bottom: 20px;
121
+ }
122
+
123
+ .options-header {
124
+ background: #3498db;
125
+ color: white;
126
+ padding: 15px 20px;
127
+ border-radius: 8px 8px 0 0;
128
+ display: flex;
129
+ justify-content: space-between;
130
+ align-items: center;
131
+ }
132
+
133
+ .options-container {
134
+ padding: 20px;
135
+ display: grid;
136
+ grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
137
+ gap: 20px;
138
+ }
139
+
140
+ .option-card {
141
+ background: #f8f9fa;
142
+ border: 2px solid #e9ecef;
143
+ border-radius: 8px;
144
+ padding: 20px;
145
+ transition: all 0.3s ease;
146
+ cursor: pointer;
147
+ position: relative;
148
+ }
149
+
150
+ .option-card:hover {
151
+ border-color: #3498db;
152
+ box-shadow: 0 4px 12px rgba(52, 152, 219, 0.15);
153
+ }
154
+
155
+ .option-card.selected {
156
+ border-color: #27ae60;
157
+ background: #f1f8e9;
158
+ }
159
+
160
+ .option-card.editing {
161
+ position: fixed;
162
+ top: 50%;
163
+ left: 50%;
164
+ transform: translate(-50%, -50%);
165
+ z-index: 1000;
166
+ width: 80%;
167
+ max-width: 800px;
168
+ max-height: 80vh;
169
+ overflow-y: auto;
170
+ border-color: #f39c12;
171
+ background: #fef9e7;
172
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
173
+ }
174
+
175
+ .modal-overlay {
176
+ position: fixed;
177
+ top: 0;
178
+ left: 0;
179
+ width: 100%;
180
+ height: 100%;
181
+ background: rgba(0, 0, 0, 0.5);
182
+ z-index: 999;
183
+ display: none;
184
+ }
185
+
186
+ .modal-overlay.active {
187
+ display: block;
188
+ }
189
+
190
+ .option-header {
191
+ display: flex;
192
+ justify-content: space-between;
193
+ align-items: center;
194
+ margin-bottom: 15px;
195
+ }
196
+
197
+ .option-number {
198
+ background: #3498db;
199
+ color: white;
200
+ padding: 5px 10px;
201
+ border-radius: 20px;
202
+ font-size: 12px;
203
+ font-weight: bold;
204
+ }
205
+
206
+ .option-actions {
207
+ display: flex;
208
+ gap: 10px;
209
+ }
210
+
211
+ .option-actions button {
212
+ padding: 5px 10px;
213
+ font-size: 12px;
214
+ border: none;
215
+ border-radius: 4px;
216
+ cursor: pointer;
217
+ }
218
+
219
+ .edit-btn {
220
+ background: #f39c12;
221
+ color: white;
222
+ }
223
+
224
+ .save-btn {
225
+ background: #27ae60;
226
+ color: white;
227
+ }
228
+
229
+ .cancel-btn {
230
+ background: #95a5a6;
231
+ color: white;
232
+ }
233
+
234
+ .select-btn {
235
+ background: #3498db;
236
+ color: white;
237
+ }
238
+
239
+ .send-continue-btn {
240
+ background: #27ae60;
241
+ color: white;
242
+ margin-left: 10px;
243
+ }
244
+
245
+ .option-content {
246
+ line-height: 1.6;
247
+ }
248
+
249
+ .option-field {
250
+ margin-bottom: 10px;
251
+ }
252
+
253
+ .option-field label {
254
+ font-weight: bold;
255
+ color: #2c3e50;
256
+ display: block;
257
+ margin-bottom: 5px;
258
+ }
259
+
260
+ .option-field input,
261
+ .option-field textarea {
262
+ width: 100%;
263
+ padding: 8px;
264
+ border: 1px solid #ddd;
265
+ border-radius: 4px;
266
+ font-size: 14px;
267
+ }
268
+
269
+ .option-field textarea {
270
+ resize: vertical;
271
+ min-height: 80px;
272
+ overflow: hidden;
273
+ }
274
+
275
+ .option-card.editing .option-field textarea {
276
+ min-height: 120px;
277
+ overflow-y: auto;
278
+ }
279
+
280
+ .auto-resize-textarea {
281
+ overflow: hidden;
282
+ resize: none;
283
+ }
284
+
285
+ .option-field.readonly input,
286
+ .option-field.readonly textarea {
287
+ background: #f8f9fa;
288
+ border-color: #e9ecef;
289
+ }
290
+
291
+ .template-actions {
292
+ display: flex;
293
+ gap: 10px;
294
+ margin-bottom: 20px;
295
+ }
296
+
297
+ .pipeline-status {
298
+ background: #fff3cd;
299
+ border: 1px solid #ffeaa7;
300
+ border-radius: 4px;
301
+ padding: 15px;
302
+ margin-bottom: 20px;
303
+ }
304
+
305
+ .pipeline-status h4 {
306
+ margin-top: 0;
307
+ color: #856404;
308
+ }
309
+
310
+ .pipeline-step {
311
+ background: #f8f9fa;
312
+ border-left: 4px solid #3498db;
313
+ padding: 10px 15px;
314
+ margin-bottom: 10px;
315
+ border-radius: 0 4px 4px 0;
316
+ }
317
+
318
+ .pipeline-step strong {
319
+ color: #2c3e50;
320
+ }
321
+
322
+ .notification {
323
+ position: fixed;
324
+ top: 20px;
325
+ right: 20px;
326
+ padding: 15px 20px;
327
+ border-radius: 4px;
328
+ color: white;
329
+ font-weight: bold;
330
+ z-index: 1000;
331
+ animation: slideIn 0.3s ease-out;
332
+ }
333
+
334
+ .notification.success {
335
+ background: #27ae60;
336
+ }
337
+
338
+ .notification.error {
339
+ background: #e74c3c;
340
+ }
341
+
342
+ @keyframes slideIn {
343
+ from {
344
+ transform: translateX(100%);
345
+ opacity: 0;
346
+ }
347
+ to {
348
+ transform: translateX(0);
349
+ opacity: 1;
350
+ }
351
+ }
352
+
353
+ .loading-overlay {
354
+ position: fixed;
355
+ top: 0;
356
+ left: 0;
357
+ width: 100%;
358
+ height: 100%;
359
+ background: rgba(0, 0, 0, 0.5);
360
+ display: flex;
361
+ flex-direction: column;
362
+ justify-content: center;
363
+ align-items: center;
364
+ z-index: 1000;
365
+ }
366
+
367
+ .loading-spinner {
368
+ width: 50px;
369
+ height: 50px;
370
+ border: 5px solid #f3f3f3;
371
+ border-top: 5px solid #3498db;
372
+ border-radius: 50%;
373
+ animation: spin 1s linear infinite;
374
+ }
375
+
376
+ .loading-message {
377
+ color: white;
378
+ margin-top: 20px;
379
+ font-size: 16px;
380
+ }
381
+
382
+ @keyframes spin {
383
+ 0% { transform: rotate(0deg); }
384
+ 100% { transform: rotate(360deg); }
385
+ }
386
+
387
+ .export-section {
388
+ background: #f8f9fa;
389
+ padding: 20px;
390
+ border-radius: 8px;
391
+ margin-top: 20px;
392
+ }
393
+
394
+ .export-section h3 {
395
+ margin-top: 0;
396
+ color: #2c3e50;
397
+ }
398
+
399
+ .category-list {
400
+ display: grid;
401
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
402
+ gap: 10px;
403
+ margin-top: 15px;
404
+ }
405
+
406
+ .category-item {
407
+ background: #ecf0f1;
408
+ padding: 8px 12px;
409
+ border-radius: 4px;
410
+ font-size: 14px;
411
+ border-left: 4px solid #3498db;
412
+ }
413
+
414
+ .quick-actions {
415
+ display: flex;
416
+ gap: 10px;
417
+ margin-bottom: 20px;
418
+ }
419
+
420
+ .quick-actions button {
421
+ padding: 8px 16px;
422
+ font-size: 14px;
423
+ }
424
+
425
+ .empty-conversation {
426
+ text-align: center;
427
+ color: #7f8c8d;
428
+ padding: 40px;
429
+ font-style: italic;
430
+ }
431
+
432
+ /* Operators Reference Modal Styles */
433
+ .operator-category {
434
+ background: #f8f9fa;
435
+ border-radius: 8px;
436
+ margin-bottom: 20px;
437
+ border: 1px solid #e9ecef;
438
+ overflow: hidden;
439
+ }
440
+
441
+ .operator-category.hidden {
442
+ display: none;
443
+ }
444
+
445
+ .operator-category-header {
446
+ background: #3498db;
447
+ color: white;
448
+ padding: 15px 20px;
449
+ cursor: pointer;
450
+ display: flex;
451
+ justify-content: space-between;
452
+ align-items: center;
453
+ transition: background-color 0.3s;
454
+ }
455
+
456
+ .operator-category-header:hover {
457
+ background: #2980b9;
458
+ }
459
+
460
+ .operator-category-header h4 {
461
+ margin: 0;
462
+ font-size: 16px;
463
+ }
464
+
465
+ .operator-category-number {
466
+ background: rgba(255, 255, 255, 0.2);
467
+ padding: 4px 8px;
468
+ border-radius: 12px;
469
+ font-size: 12px;
470
+ font-weight: bold;
471
+ margin-right: 10px;
472
+ }
473
+
474
+ .operator-category-toggle {
475
+ font-size: 18px;
476
+ transition: transform 0.3s;
477
+ }
478
+
479
+ .operator-category-toggle.expanded {
480
+ transform: rotate(180deg);
481
+ }
482
+
483
+ .operator-category-content {
484
+ padding: 0;
485
+ max-height: 0;
486
+ overflow: hidden;
487
+ transition: max-height 0.3s ease-out;
488
+ }
489
+
490
+ .operator-category-content.expanded {
491
+ max-height: 500px;
492
+ padding: 20px;
493
+ }
494
+
495
+ .operator-description {
496
+ color: #2c3e50;
497
+ margin-bottom: 15px;
498
+ font-style: italic;
499
+ line-height: 1.5;
500
+ }
501
+
502
+ .operator-definition {
503
+ color: #6c757d;
504
+ margin-bottom: 10px;
505
+ font-size: 13px;
506
+ line-height: 1.4;
507
+ font-style: italic;
508
+ }
509
+
510
+ .operator-list {
511
+ background: white;
512
+ border-radius: 4px;
513
+ padding: 15px;
514
+ border: 1px solid #e9ecef;
515
+ }
516
+
517
+ .operator-list h5 {
518
+ margin: 0 0 10px 0;
519
+ color: #2c3e50;
520
+ font-size: 14px;
521
+ font-weight: bold;
522
+ }
523
+
524
+ .operators-grid {
525
+ display: flex;
526
+ flex-wrap: wrap;
527
+ gap: 8px;
528
+ }
529
+
530
+ .operator-tag {
531
+ background: #ecf0f1;
532
+ color: #2c3e50;
533
+ padding: 4px 8px;
534
+ border-radius: 4px;
535
+ font-size: 12px;
536
+ font-family: monospace;
537
+ border: 1px solid #bdc3c7;
538
+ }
539
+
540
+ .operator-tag.highlight {
541
+ background: #fff3cd;
542
+ border-color: #ffeaa7;
543
+ color: #856404;
544
+ }
545
+
546
+ .no-results {
547
+ text-align: center;
548
+ color: #7f8c8d;
549
+ padding: 40px;
550
+ font-style: italic;
551
+ }
552
+
553
+ /* Clickable category styles */
554
+ .clickable-category {
555
+ color: #3498db;
556
+ cursor: pointer;
557
+ text-decoration: underline;
558
+ font-weight: bold;
559
+ }
560
+
561
+ .clickable-category:hover {
562
+ color: #2980b9;
563
+ background-color: #f8f9fa;
564
+ padding: 2px 4px;
565
+ border-radius: 3px;
566
+ }
567
+
568
+ /* Category popup tooltip */
569
+ .category-popup {
570
+ position: absolute;
571
+ background: white;
572
+ border: 2px solid #3498db;
573
+ border-radius: 8px;
574
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
575
+ z-index: 1000;
576
+ max-width: 500px;
577
+ min-width: 300px;
578
+ padding: 0;
579
+ display: none;
580
+ }
581
+
582
+ .category-popup-header {
583
+ background: #3498db;
584
+ color: white;
585
+ padding: 10px 15px;
586
+ border-radius: 6px 6px 0 0;
587
+ font-weight: bold;
588
+ display: flex;
589
+ justify-content: space-between;
590
+ align-items: center;
591
+ }
592
+
593
+ .category-popup-close {
594
+ cursor: pointer;
595
+ font-size: 18px;
596
+ font-weight: bold;
597
+ }
598
+
599
+ .category-popup-content {
600
+ padding: 15px;
601
+ }
602
+
603
+ .category-popup-description {
604
+ color: #2c3e50;
605
+ margin-bottom: 15px;
606
+ font-style: italic;
607
+ line-height: 1.4;
608
+ }
609
+
610
+ .category-popup-operators {
611
+ background: #f8f9fa;
612
+ border-radius: 4px;
613
+ padding: 10px;
614
+ border: 1px solid #e9ecef;
615
+ }
616
+
617
+ .category-popup-operators h5 {
618
+ margin: 0 0 8px 0;
619
+ color: #2c3e50;
620
+ font-size: 13px;
621
+ }
622
+
623
+ .popup-operators-grid {
624
+ display: flex;
625
+ flex-wrap: wrap;
626
+ gap: 4px;
627
+ }
628
+
629
+ .popup-operator-tag {
630
+ background: #ecf0f1;
631
+ color: #2c3e50;
632
+ padding: 2px 6px;
633
+ border-radius: 3px;
634
+ font-size: 11px;
635
+ font-family: monospace;
636
+ border: 1px solid #bdc3c7;
637
+ }
638
+
639
+ .readonly-display {
640
+ padding: 10px;
641
+ border: 1px solid #ddd;
642
+ border-radius: 4px;
643
+ background: #f8f9fa;
644
+ font-size: 14px;
645
+ min-height: 35px;
646
+ display: flex;
647
+ align-items: center;
648
+ }
649
+ </style>
650
+ </head>
651
+ <body>
652
+ <div class="feature-engineering-container">
653
+ <a href="{{ url_for('index') }}" class="back-button">← Back to Main</a>
654
+
655
+ <div class="header-section">
656
+ <h1>DataField Guide</h1>
657
+ <p>Get AI-powered recommendations for multi-step DataField Exploration</p>
658
+ </div>
659
+
660
+ <!-- API Configuration Section -->
661
+ <div class="config-section" id="apiConfigSection">
662
+ <h3>API Configuration</h3>
663
+ <div class="form-group">
664
+ <label for="modelProvider">AI Model Provider:</label>
665
+ <select id="modelProvider" class="form-input">
666
+ <option value="deepseek">Deepseek</option>
667
+ <option value="kimi">Kimi</option>
668
+ </select>
669
+ </div>
670
+ <div class="form-group">
671
+ <label for="apiKey">API Key:</label>
672
+ <input type="password" id="apiKey" class="form-input" placeholder="Enter your API key">
673
+ </div>
674
+ <div class="form-group">
675
+ <label for="modelName">Model Name:</label>
676
+ <input type="text" id="modelName" class="form-input" placeholder="e.g., deepseek-chat, kimi-k2-0711-preview">
677
+ <small style="color: #7f8c8d; font-size: 12px;">Enter the specific model name for your chosen provider</small>
678
+ </div>
679
+ <button id="saveApiKey" class="btn">Test & Save Configuration</button>
680
+ </div>
681
+
682
+ <!-- Show API Config Button (hidden by default) -->
683
+ <div class="config-section" id="showApiConfigSection" style="display: none;">
684
+ <h3>API Configuration</h3>
685
+ <p style="color: #27ae60; margin-bottom: 15px;">✅ API configuration saved successfully</p>
686
+ <button id="showApiConfig" class="btn btn-secondary">Show API Configuration</button>
687
+ </div>
688
+
689
+ <!-- Pipeline Status Section -->
690
+ <div class="pipeline-status" id="pipelineStatus" style="display: none;">
691
+ <h4>Current Pipeline Status</h4>
692
+ <div id="pipelineSteps">
693
+ <!-- Pipeline steps will be displayed here -->
694
+ </div>
695
+ </div>
696
+
697
+ <!-- Initial Setup Section -->
698
+ <div class="config-section" id="initialSetup">
699
+ <h3>Start New Feature Engineering Pipeline</h3>
700
+ <div class="template-actions">
701
+ <button id="loadQuestionTemplate" class="btn btn-secondary">Load Question Template</button>
702
+ <button id="editSystemPrompt" class="btn btn-secondary">Edit System Prompt</button>
703
+ <button id="startPipeline" class="btn btn-success">Get AI Recommendations</button>
704
+ </div>
705
+ <div class="form-group">
706
+ <label for="questionTemplate">Question Template:</label>
707
+ <textarea id="questionTemplate" class="form-input" rows="6" placeholder="Click 'Load Question Template' to load the template"></textarea>
708
+ </div>
709
+ </div>
710
+
711
+ <!-- Options Cards Section -->
712
+ <div class="options-section" id="optionsSection" style="display: none;">
713
+ <div class="options-header">
714
+ <h3>AI Recommendations</h3>
715
+ <div class="quick-actions">
716
+ <button id="clearOptions" class="btn btn-secondary">Clear & Start Over</button>
717
+ <button id="exportPipeline" class="btn">Export Pipeline</button>
718
+ </div>
719
+ </div>
720
+ <div class="options-container" id="optionsContainer">
721
+ <!-- Option cards will be dynamically inserted here -->
722
+ </div>
723
+ </div>
724
+
725
+ <!-- Modal Overlay for Editing -->
726
+ <div class="modal-overlay" id="modalOverlay"></div>
727
+
728
+ <!-- Category Popup -->
729
+ <div class="category-popup" id="categoryPopup">
730
+ <div class="category-popup-header">
731
+ <span id="categoryPopupTitle"></span>
732
+ <span class="category-popup-close" onclick="hideCategoryPopup()">&times;</span>
733
+ </div>
734
+ <div class="category-popup-content">
735
+ <div class="category-popup-description" id="categoryPopupDescription"></div>
736
+ <div class="category-popup-operators">
737
+ <h5 id="categoryPopupOperatorsTitle"></h5>
738
+ <div class="popup-operators-grid" id="categoryPopupOperators"></div>
739
+ </div>
740
+ </div>
741
+ </div>
742
+
743
+ <!-- System Prompt Edit Modal -->
744
+ <div class="modal-overlay" id="systemPromptModal" style="display: none;">
745
+ <div class="modal-content" style="position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80%; max-width: 900px; max-height: 80vh; background: white; border-radius: 8px; box-shadow: 0 10px 30px rgba(0,0,0,0.3); z-index: 1001;">
746
+ <div class="modal-header" style="background: #3498db; color: white; padding: 15px 20px; border-radius: 8px 8px 0 0; display: flex; justify-content: space-between; align-items: center;">
747
+ <h3>Edit System Prompt</h3>
748
+ <span class="close" onclick="closeSystemPromptModal()" style="cursor: pointer; font-size: 24px;">&times;</span>
749
+ </div>
750
+ <div class="modal-body" style="padding: 20px; max-height: 60vh; overflow-y: auto;">
751
+ <div class="form-group">
752
+ <label for="systemPromptTextarea">System Prompt:</label>
753
+ <textarea id="systemPromptTextarea" class="form-input" rows="20" placeholder="Enter your custom system prompt here..."></textarea>
754
+ </div>
755
+ <div class="prompt-actions" style="margin-top: 15px; display: flex; gap: 10px;">
756
+ <button id="loadDefaultPrompt" class="btn btn-outline">Load Default Prompt</button>
757
+ </div>
758
+ </div>
759
+ <div class="modal-footer" style="padding: 15px 20px; border-top: 1px solid #eee; display: flex; justify-content: flex-end; gap: 10px;">
760
+ <button onclick="closeSystemPromptModal()" class="btn btn-outline">Cancel</button>
761
+ <button onclick="saveSystemPrompt()" class="btn btn-primary">Save & Apply</button>
762
+ </div>
763
+ </div>
764
+ </div>
765
+
766
+ <!-- Operator Suggestions Modal -->
767
+ <div class="modal-overlay" id="operatorSuggestionsModal" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1001;">
768
+ <div class="modal-content" style="position: absolute; top: 30%; left: 50%; transform: translate(-50%, -50%); width: 98%; max-width: 1600px; max-height: 95vh; background: white; border-radius: 8px; box-shadow: 0 10px 30px rgba(0,0,0,0.3); display: flex; flex-direction: column;">
769
+ <div class="modal-header" style="background: #9b59b6; color: white; padding: 15px 20px; border-radius: 8px 8px 0 0; display: flex; justify-content: space-between; align-items: center;">
770
+ <h3>🎯 Operator Suggestions for Current Step</h3>
771
+ <span class="close" onclick="closeOperatorSuggestionsModal()" style="cursor: pointer; font-size: 24px;">&times;</span>
772
+ </div>
773
+ <div class="modal-body" style="padding: 20px; flex: 1; overflow-y: auto; min-height: 0;">
774
+ <!-- Target Section -->
775
+ <div class="target-section" style="background: #f8f9fa; padding: 8px; border-radius: 8px; margin-bottom: 8px;">
776
+ <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 5px;">
777
+ <h4 style="margin: 0; color: #2c3e50; font-size: 14px;">Research Target:</h4>
778
+ <button id="modalEditTarget" class="btn btn-secondary" style="padding: 3px 8px; font-size: 11px;">Edit Target</button>
779
+ </div>
780
+
781
+ <!-- Target Display (read-only) -->
782
+ <div class="target-display" id="modalTargetDisplay" style="background: white; border: 1px solid #e9ecef; border-radius: 4px; padding: 6px; min-height: 30px; max-height: 40px; overflow-y: auto;">
783
+ <div class="target-text" id="modalTargetText" style="line-height: 1.3; word-wrap: break-word; font-size: 12px;">No target set</div>
784
+ </div>
785
+
786
+ <!-- Target Input (editable) -->
787
+ <div id="modalTargetInputGroup" style="display: none;">
788
+ <textarea id="modalTargetInput" class="form-input" rows="2" placeholder="Describe your research target..." style="min-height: 40px; max-height: 60px; resize: vertical; font-size: 12px;"></textarea>
789
+ <div style="margin-top: 5px;">
790
+ <button id="modalSaveTarget" class="btn btn-success" style="padding: 3px 8px; font-size: 11px;">Save Target</button>
791
+ <button id="modalCancelTarget" class="btn btn-secondary" style="padding: 3px 8px; font-size: 11px; margin-left: 5px;">Cancel</button>
792
+ </div>
793
+ </div>
794
+ </div>
795
+
796
+ <!-- BRAIN Connection Notice -->
797
+ <div id="modalBrainNotice" style="margin-bottom: 8px; padding: 6px; background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; display: none;">
798
+ <div style="color: #856404; font-size: 12px;">
799
+ <strong>💡 Tip:</strong> Connect to WorldQuant BRAIN to get access to the full operator library (400+ operators).
800
+ <button onclick="openBrainLoginModal()" style="background: #3498db; color: white; border: none; padding: 3px 8px; border-radius: 3px; margin-left: 8px; cursor: pointer; font-size: 11px;">Connect to BRAIN</button>
801
+ </div>
802
+ </div>
803
+
804
+ <!-- Expression Section -->
805
+ <div class="expression-section" style="background: #f8f9fa; padding: 8px; border-radius: 8px; margin-bottom: 8px;">
806
+ <h4 style="margin: 0 0 5px 0; color: #2c3e50; font-size: 14px;">Current Expression for Seeking Advice:</h4>
807
+ <textarea id="modalCurrentExpression" class="form-input" rows="2" placeholder="Enter your current expression for this step... (e.g., ts_mean(close, 20) or rank(volume))" style="min-height: 30px; max-height: 40px; resize: vertical; font-size: 12px;"></textarea>
808
+ <div style="margin-top: 5px;">
809
+ <button id="modalStartEvaluation" class="btn btn-warning" style="padding: 5px 10px; font-size: 12px;">Get Operator Suggestions</button>
810
+ <button id="modalClearExpression" class="btn btn-secondary" style="padding: 5px 10px; font-size: 12px;">Clear Expression</button>
811
+ </div>
812
+ </div>
813
+
814
+ <!-- Evaluation Results Section -->
815
+ <div class="evaluation-section" id="modalEvaluationSection" style="display: none;">
816
+ <h4 style="margin: 0 0 10px 0; color: #2c3e50;">Operator Suggestions:</h4>
817
+
818
+ <!-- Filter Controls -->
819
+ <div class="filter-controls" style="display: flex; gap: 10px; margin-bottom: 8px; align-items: center; flex-wrap: wrap; padding: 6px; background: white; border-radius: 4px; border: 1px solid #e9ecef;">
820
+ <label style="display: flex; align-items: center; gap: 5px; font-weight: normal; min-width: 120px; font-size: 12px;">
821
+ <strong>Min Score:</strong>
822
+ <input type="range" id="modalMinScoreFilter" min="0" max="10" value="7" style="width: 80px;">
823
+ <span id="modalMinScoreValue" style="font-weight: bold; color: #3498db;">7</span>
824
+ </label>
825
+ <label style="display: flex; align-items: center; gap: 5px; font-weight: normal; min-width: 100px; font-size: 12px;">
826
+ <input type="checkbox" id="modalShowHighScores" checked> <strong>High (8-10)</strong>
827
+ </label>
828
+ <label style="display: flex; align-items: center; gap: 5px; font-weight: normal; min-width: 100px; font-size: 12px;">
829
+ <input type="checkbox" id="modalShowMediumScores" checked> <strong>Medium (4-7)</strong>
830
+ </label>
831
+ <label style="display: flex; align-items: center; gap: 5px; font-weight: normal; min-width: 100px; font-size: 12px;">
832
+ <input type="checkbox" id="modalShowLowScores"> <strong>Low (0-3)</strong>
833
+ </label>
834
+ </div>
835
+
836
+ <!-- Summary Stats -->
837
+ <div class="summary-stats" id="modalSummaryStats" style="display: none; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 8px; margin-bottom: 8px;">
838
+ <div class="stat-card stat-high" style="background: white; padding: 6px; border-radius: 4px; text-align: center;">
839
+ <div class="stat-number" id="modalHighScoreCount" style="font-size: 14px; font-weight: bold; color: #27ae60;">0</div>
840
+ <div class="stat-label" style="font-size: 11px; color: #7f8c8d;">High (8-10)</div>
841
+ </div>
842
+ <div class="stat-card stat-medium" style="background: white; padding: 6px; border-radius: 4px; text-align: center;">
843
+ <div class="stat-number" id="modalMediumScoreCount" style="font-size: 14px; font-weight: bold; color: #f39c12;">0</div>
844
+ <div class="stat-label" style="font-size: 11px; color: #7f8c8d;">Medium (4-7)</div>
845
+ </div>
846
+ <div class="stat-card stat-low" style="background: white; padding: 6px; border-radius: 4px; text-align: center;">
847
+ <div class="stat-number" id="modalLowScoreCount" style="font-size: 14px; font-weight: bold; color: #e74c3c;">0</div>
848
+ <div class="stat-label" style="font-size: 11px; color: #7f8c8d;">Low (0-3)</div>
849
+ </div>
850
+ </div>
851
+
852
+ <!-- Results Table -->
853
+ <div class="evaluation-table-container" style="overflow-x: auto; max-height: 600px; overflow-y: auto;">
854
+ <table class="evaluation-table" id="modalEvaluationTable" style="width: 100%; border-collapse: collapse; font-size: 13px; border: 1px solid #dee2e6;">
855
+ <thead>
856
+ <tr>
857
+ <th style="background: #f8f9fa; padding: 8px; text-align: left; border: 1px solid #dee2e6; border-bottom: 2px solid #dee2e6; position: sticky; top: 0; z-index: 10; width: 370px;">Operator</th>
858
+ <th style="background: #f8f9fa; padding: 8px; text-align: left; border: 1px solid #dee2e6; border-bottom: 2px solid #dee2e6; position: sticky; top: 0; z-index: 10; min-width: 400px;">Reason</th>
859
+ <th style="background: #f8f9fa; padding: 8px; text-align: center; border: 1px solid #dee2e6; border-bottom: 2px solid #dee2e6; position: sticky; top: 0; z-index: 10; width: 60px;">Score</th>
860
+ </tr>
861
+ </thead>
862
+ <tbody id="modalEvaluationTableBody">
863
+ <tr>
864
+ <td colspan="5" style="text-align: center; color: #7f8c8d; font-style: italic; padding: 20px;">
865
+ No suggestions yet. Enter your expression and click "Get Operator Suggestions".
866
+ </td>
867
+ </tr>
868
+ </tbody>
869
+ </table>
870
+ </div>
871
+ </div>
872
+
873
+ <!-- Progress Section -->
874
+ <div class="progress-section" id="modalProgressSection" style="display: none; background: white; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); margin-top: 20px;">
875
+ <div class="progress-header" style="background: #27ae60; color: white; padding: 10px 15px; border-radius: 8px 8px 0 0;">
876
+ <h4 style="margin: 0; font-size: 14px;">🔄 Evaluating Operators...</h4>
877
+ </div>
878
+ <div class="progress-content" style="padding: 15px;">
879
+ <div class="progress-bar" style="width: 100%; height: 15px; background-color: #e9ecef; border-radius: 8px; overflow: hidden; margin-bottom: 8px;">
880
+ <div class="progress-fill" id="modalProgressFill" style="height: 100%; background: linear-gradient(90deg, #27ae60, #2ecc71); transition: width 0.3s ease; display: flex; align-items: center; justify-content: center; color: white; font-size: 10px; font-weight: bold; width: 0%;">0%</div>
881
+ </div>
882
+ <div class="progress-stats" style="display: flex; justify-content: space-between; font-size: 12px; color: #6c757d;">
883
+ <span id="modalProgressText">Evaluating operators...</span>
884
+ <span id="modalProgressCount">0 / 0</span>
885
+ </div>
886
+ </div>
887
+ </div>
888
+ </div>
889
+ <div class="modal-footer" style="padding: 15px 20px; border-top: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; flex-shrink: 0;">
890
+ <div>
891
+ <button id="modalExportResults" class="btn btn-secondary" style="display: none;">Export Results</button>
892
+ </div>
893
+ <div>
894
+ <button onclick="closeOperatorSuggestionsModal()" class="btn btn-outline">Close</button>
895
+ </div>
896
+ </div>
897
+ </div>
898
+ </div>
899
+
900
+
901
+
902
+ <!-- Export Section -->
903
+ <div class="export-section">
904
+ <h3>Available Feature Engineering Categories</h3>
905
+ <p>The AI assistant can recommend from these 15 categories:</p>
906
+ <div class="category-list">
907
+ <div class="category-item">Basic Arithmetic & Mathematical Operations</div>
908
+ <div class="category-item">Logical & Conditional Operations</div>
909
+ <div class="category-item">Time Series: Change Detection & Value Comparison</div>
910
+ <div class="category-item">Time Series: Statistical Feature Engineering</div>
911
+ <div class="category-item">Time Series: Ranking, Scaling, and Normalization</div>
912
+ <div class="category-item">Time Series: Decay, Smoothing, and Turnover Control</div>
913
+ <div class="category-item">Time Series: Extremes & Position Identification</div>
914
+ <div class="category-item">Cross-Sectional: Ranking, Scaling, and Normalization</div>
915
+ <div class="category-item">Cross-Sectional: Regression & Neutralization</div>
916
+ <div class="category-item">Cross-Sectional: Distributional Transformation & Truncation</div>
917
+ <div class="category-item">Transformational & Filtering Operations</div>
918
+ <div class="category-item">Group Aggregation & Statistical Summary</div>
919
+ <div class="category-item">Group Ranking, Scaling, and Normalization</div>
920
+ <div class="category-item">Group Regression & Neutralization</div>
921
+ <div class="category-item">Group Imputation & Backfilling</div>
922
+ </div>
923
+ </div>
924
+ </div>
925
+
926
+ <!-- BRAIN Login Modal -->
927
+ <div id="brainLoginModal" class="modal" style="display: none; position: fixed; z-index: 2000; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5);">
928
+ <div class="modal-content" style="background-color: white; margin: 5% auto; padding: 0; border-radius: 8px; width: 90%; max-width: 500px; box-shadow: 0 4px 20px rgba(0,0,0,0.3);">
929
+ <div class="modal-header" style="background: #3498db; color: white; padding: 15px 20px; border-radius: 8px 8px 0 0; display: flex; justify-content: space-between; align-items: center;">
930
+ <h3>Connect to WorldQuant BRAIN</h3>
931
+ <span class="close" onclick="closeBrainLoginModal()" style="cursor: pointer; font-size: 24px;">&times;</span>
932
+ </div>
933
+ <div class="modal-body" style="padding: 20px;">
934
+ <form id="brainLoginForm" onsubmit="event.preventDefault(); authenticateBrain();">
935
+ <div class="form-group">
936
+ <label for="brainUsername">Username:</label>
937
+ <input type="email" id="brainUsername" class="form-input" placeholder="your.email@domain.com" required>
938
+ </div>
939
+ <div class="form-group">
940
+ <label for="brainPassword">Password:</label>
941
+ <input type="password" id="brainPassword" class="form-input" placeholder="Your password" required>
942
+ </div>
943
+ <div id="brainLoginStatus" class="login-status"></div>
944
+ <div id="loginSpinner" class="login-spinner" style="display: none;">
945
+ <div class="spinner" style="width: 20px; height: 20px; border: 2px solid #f3f3f3; border-top: 2px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; display: inline-block;"></div>
946
+ </div>
947
+ </form>
948
+ </div>
949
+ <div class="modal-footer" style="padding: 15px 20px; border-top: 1px solid #eee; display: flex; justify-content: flex-end; gap: 10px;">
950
+ <button onclick="closeBrainLoginModal()" class="btn btn-outline" id="cancelBtn">Cancel</button>
951
+ <button onclick="authenticateBrain()" class="btn btn-primary" id="loginBtn">Connect</button>
952
+ </div>
953
+ </div>
954
+ </div>
955
+
956
+ <script src="{{ url_for('static', filename='brain.js') }}"></script>
957
+ <script src="{{ url_for('static', filename='feature_engineering.js') }}"></script>
958
+ <script src="{{ url_for('static', filename='usage_widget.js') }}"></script>
959
+ </body>
960
+ </html>