foreblocks 0.1.0__tar.gz

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 (376) hide show
  1. foreblocks-0.1.0/PKG-INFO +484 -0
  2. foreblocks-0.1.0/README.md +458 -0
  3. foreblocks-0.1.0/examples/rodrigo.py +351 -0
  4. foreblocks-0.1.0/flash-attention/benchmarks/benchmark_alibi.py +275 -0
  5. foreblocks-0.1.0/flash-attention/benchmarks/benchmark_causal.py +225 -0
  6. foreblocks-0.1.0/flash-attention/benchmarks/benchmark_flash_attention.py +180 -0
  7. foreblocks-0.1.0/flash-attention/benchmarks/benchmark_gemm.py +47 -0
  8. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/docs/conf.py +50 -0
  9. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/01_fmha/codegen/__init__.py +0 -0
  10. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/01_fmha/codegen/cmake_config.py +5 -0
  11. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/01_fmha/codegen/cpp_symbol_map.py +128 -0
  12. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/01_fmha/codegen/ops/__init__.py +0 -0
  13. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/01_fmha/codegen/ops/fmha_bwd.py +902 -0
  14. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/01_fmha/codegen/ops/fmha_fwd.py +574 -0
  15. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/01_fmha/codegen/ops/fmha_fwd_appendkv.py +359 -0
  16. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/01_fmha/codegen/ops/fmha_fwd_splitkv.py +855 -0
  17. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/01_fmha/generate.py +136 -0
  18. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/02_layernorm2d/generate.py +730 -0
  19. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/10_rmsnorm2d/generate.py +715 -0
  20. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/example/ck_tile/remod.py +21 -0
  21. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/include/ck_tile/remod.py +93 -0
  22. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/python/ck4inductor/__init__.py +0 -0
  23. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/python/ck4inductor/batched_universal_gemm/gen_instances.py +149 -0
  24. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/python/ck4inductor/batched_universal_gemm/op.py +99 -0
  25. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/python/ck4inductor/grouped_conv_fwd/gen_instances.py +165 -0
  26. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/python/ck4inductor/grouped_conv_fwd/op.py +93 -0
  27. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/python/ck4inductor/universal_gemm/gen_instances.py +572 -0
  28. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/python/ck4inductor/universal_gemm/op.py +99 -0
  29. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/python/ck4inductor/util.py +10 -0
  30. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/python/test/test_gen_instances.py +46 -0
  31. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/script/convert_miopen_driver_to_profiler.py +413 -0
  32. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/script/process_perf_data.py +382 -0
  33. foreblocks-0.1.0/flash-attention/csrc/composable_kernel/tile_engine/ops/gemm/gemm_instance_builder.py +654 -0
  34. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/40_cutlass_py/conv2d.py +177 -0
  35. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/40_cutlass_py/customizable/conv2d.py +331 -0
  36. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/40_cutlass_py/customizable/gemm.py +331 -0
  37. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/40_cutlass_py/customizable/gemm_grouped.py +298 -0
  38. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/40_cutlass_py/gemm.py +153 -0
  39. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/40_cutlass_py/gemm_grouped.py +172 -0
  40. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/41_fused_multi_head_attention/fmha_backward_test.py +232 -0
  41. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/41_fused_multi_head_attention/piped_subprocess.py +144 -0
  42. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_all_code.py +129 -0
  43. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_cmake.py +131 -0
  44. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_customized_epilogue.py +120 -0
  45. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_device.py +469 -0
  46. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_ir.py +249 -0
  47. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_kernel.py +476 -0
  48. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_sample.py +232 -0
  49. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_threadblock.py +1013 -0
  50. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_turing_and_volta.py +456 -0
  51. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/gen_verify.py +92 -0
  52. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/helper.py +135 -0
  53. foreblocks-0.1.0/flash-attention/csrc/cutlass/examples/44_multi_gemm_ir_and_codegen/ir_gen/replace_fix_impl_header.py +67 -0
  54. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/__init__.py +190 -0
  55. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/__init__.py +48 -0
  56. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/arguments.py +133 -0
  57. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/c_types.py +622 -0
  58. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/compiler.py +459 -0
  59. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/conv2d_operation.py +698 -0
  60. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/epilogue.py +541 -0
  61. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/__init__.py +34 -0
  62. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/backend/__init__.py +36 -0
  63. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/backend/emitter_base.py +158 -0
  64. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/backend/sm80_emitter.py +47 -0
  65. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/backend/sm80_nodes.py +258 -0
  66. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/backend/sm90_emitter.py +98 -0
  67. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/backend/sm90_nodes.py +329 -0
  68. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/epilogue.py +167 -0
  69. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/frontend/__init__.py +33 -0
  70. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/frontend/frontend_base.py +262 -0
  71. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/frontend/python_ast.py +187 -0
  72. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/ir/__init__.py +53 -0
  73. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/ir/compute_nodes.py +91 -0
  74. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/ir/dag_ir.py +236 -0
  75. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/ir/layout_algorithm.py +324 -0
  76. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/ir/layout_nodes.py +336 -0
  77. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/ir/load_nodes.py +294 -0
  78. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/ir/node.py +293 -0
  79. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/ir/store_nodes.py +277 -0
  80. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/ir/tensor.py +130 -0
  81. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/__init__.py +42 -0
  82. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/graph_drawer.py +142 -0
  83. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/pass_argument_type.py +116 -0
  84. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/pass_dag_2_tree.py +147 -0
  85. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/pass_fix_element_d.py +64 -0
  86. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/pass_get_impl.py +90 -0
  87. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/pass_layout_elimination.py +217 -0
  88. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/pass_manager.py +164 -0
  89. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/pass_no_op_elimination.py +53 -0
  90. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/pass_preprocess_red.py +97 -0
  91. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/pass_shape_type_propagation.py +59 -0
  92. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/smem_size_calculator.py +204 -0
  93. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/evt/passes/util.py +43 -0
  94. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/frontend.py +107 -0
  95. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/gemm_operation.py +2138 -0
  96. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/library.py +488 -0
  97. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/memory_manager.py +120 -0
  98. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/operation.py +133 -0
  99. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/reduction_operation.py +452 -0
  100. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/type_hint.py +35 -0
  101. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/utils/__init__.py +33 -0
  102. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/backend/utils/device.py +123 -0
  103. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/emit/__init__.py +33 -0
  104. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/emit/common.py +267 -0
  105. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/emit/pytorch.py +936 -0
  106. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/epilogue/__init__.py +55 -0
  107. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/epilogue/epilogue.py +158 -0
  108. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/epilogue/evt_ops.py +92 -0
  109. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/library_defaults.py +580 -0
  110. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/op/__init__.py +36 -0
  111. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/op/conv.py +983 -0
  112. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/op/gemm.py +715 -0
  113. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/op/gemm_grouped.py +264 -0
  114. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/op/op.py +430 -0
  115. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/shape.py +184 -0
  116. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/swizzle.py +65 -0
  117. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/utils/__init__.py +41 -0
  118. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/utils/check.py +269 -0
  119. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/utils/datatypes.py +362 -0
  120. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass/utils/profiler.py +185 -0
  121. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/__init__.py +63 -0
  122. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/conv2d_operation.py +621 -0
  123. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/conv3d_operation.py +482 -0
  124. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/conv3x_emitter.py +250 -0
  125. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/emit_kernel_listing.py +880 -0
  126. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/gemm_operation.py +1520 -0
  127. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/generator.py +10851 -0
  128. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/library.py +1317 -0
  129. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/manifest.py +870 -0
  130. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/rank_2k_operation.py +438 -0
  131. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/rank_k_operation.py +427 -0
  132. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/sm90_shapes.py +212 -0
  133. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/sm90_utils.py +703 -0
  134. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/symm_operation.py +440 -0
  135. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/cutlass_library/trmm_operation.py +447 -0
  136. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/docs_src/source/conf.py +132 -0
  137. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/pycute/__init__.py +36 -0
  138. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/pycute/int_tuple.py +225 -0
  139. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/pycute/layout.py +367 -0
  140. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/pycute/swizzle.py +129 -0
  141. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/pycute/typing.py +42 -0
  142. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/setup_cutlass.py +74 -0
  143. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/setup_library.py +46 -0
  144. foreblocks-0.1.0/flash-attention/csrc/cutlass/python/setup_pycute.py +46 -0
  145. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/conv2d/conv2d_problem_sizes.py +661 -0
  146. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/conv2d/conv2d_sm80.py +146 -0
  147. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/conv2d/conv2d_test_utils.py +428 -0
  148. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/conv2d/run_all_tests.py +44 -0
  149. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/emit/pytorch.py +309 -0
  150. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/evt/evt_compute_sm80_90.py +122 -0
  151. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/evt/evt_layout_sm80_90.py +173 -0
  152. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/evt/evt_load_sm80_90.py +142 -0
  153. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/evt/evt_mixed_sm80_90.py +274 -0
  154. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/evt/evt_store_sm80_90.py +155 -0
  155. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/evt/run_all_tests.py +44 -0
  156. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/evt/utils/evt_testbed.py +230 -0
  157. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_batched.py +134 -0
  158. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_f16_sm80.py +128 -0
  159. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_f16_sm90.py +146 -0
  160. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_f32_sm80.py +104 -0
  161. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_f64_sm80.py +103 -0
  162. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_f64_sm90.py +71 -0
  163. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_f8_sm90.py +112 -0
  164. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_mixed_sm80.py +75 -0
  165. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_s8_sm80.py +103 -0
  166. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_s8_sm90.py +98 -0
  167. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/gemm_testbed.py +423 -0
  168. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/run_all_tests.py +44 -0
  169. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/gemm/utils.py +260 -0
  170. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/installation.py +57 -0
  171. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/interface/conv2d_interface.py +284 -0
  172. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/interface/evt_interface.py +254 -0
  173. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/interface/gemm_interface.py +351 -0
  174. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/cutlass/interface/utils.py +69 -0
  175. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/pycute/run_all_tests.py +75 -0
  176. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/pycute/test_coalesce.py +95 -0
  177. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/pycute/test_complement.py +92 -0
  178. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/pycute/test_composition.py +213 -0
  179. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/pycute/test_int_tuple.py +80 -0
  180. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/pycute/test_left_inverse.py +87 -0
  181. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/pycute/test_right_inverse.py +96 -0
  182. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/python/pycute/test_typing.py +59 -0
  183. foreblocks-0.1.0/flash-attention/csrc/cutlass/test/unit/gemm/device/simt_sm50.py +341 -0
  184. foreblocks-0.1.0/flash-attention/csrc/flash_attn/src/generate_kernels.py +110 -0
  185. foreblocks-0.1.0/flash-attention/csrc/ft_attention/setup.py +153 -0
  186. foreblocks-0.1.0/flash-attention/csrc/fused_dense_lib/setup.py +42 -0
  187. foreblocks-0.1.0/flash-attention/csrc/fused_softmax/setup.py +50 -0
  188. foreblocks-0.1.0/flash-attention/csrc/layer_norm/setup.py +205 -0
  189. foreblocks-0.1.0/flash-attention/csrc/rotary/setup.py +126 -0
  190. foreblocks-0.1.0/flash-attention/csrc/xentropy/setup.py +139 -0
  191. foreblocks-0.1.0/flash-attention/flash_attn/__init__.py +11 -0
  192. foreblocks-0.1.0/flash-attention/flash_attn/bert_padding.py +218 -0
  193. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_interface.py +1606 -0
  194. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton.py +1160 -0
  195. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/__init__.py +0 -0
  196. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/bench.py +1223 -0
  197. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/bwd_prefill.py +814 -0
  198. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/bwd_prefill_fused.py +3266 -0
  199. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/bwd_prefill_onekernel.py +1091 -0
  200. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/bwd_prefill_split.py +1354 -0
  201. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/bwd_ref.py +478 -0
  202. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/fp8.py +716 -0
  203. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/fwd_decode.py +814 -0
  204. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/fwd_prefill.py +648 -0
  205. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/fwd_ref.py +387 -0
  206. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/interface_fa.py +798 -0
  207. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/test.py +932 -0
  208. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/train.py +403 -0
  209. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_amd/utils.py +776 -0
  210. foreblocks-0.1.0/flash-attention/flash_attn/flash_attn_triton_og.py +365 -0
  211. foreblocks-0.1.0/flash-attention/flash_attn/flash_blocksparse_attention.py +197 -0
  212. foreblocks-0.1.0/flash-attention/flash_attn/flash_blocksparse_attn_interface.py +200 -0
  213. foreblocks-0.1.0/flash-attention/flash_attn/fused_softmax.py +201 -0
  214. foreblocks-0.1.0/flash-attention/flash_attn/layers/__init__.py +0 -0
  215. foreblocks-0.1.0/flash-attention/flash_attn/layers/patch_embed.py +67 -0
  216. foreblocks-0.1.0/flash-attention/flash_attn/layers/rotary.py +482 -0
  217. foreblocks-0.1.0/flash-attention/flash_attn/losses/__init__.py +0 -0
  218. foreblocks-0.1.0/flash-attention/flash_attn/losses/cross_entropy.py +85 -0
  219. foreblocks-0.1.0/flash-attention/flash_attn/models/__init__.py +0 -0
  220. foreblocks-0.1.0/flash-attention/flash_attn/models/baichuan.py +151 -0
  221. foreblocks-0.1.0/flash-attention/flash_attn/models/bert.py +764 -0
  222. foreblocks-0.1.0/flash-attention/flash_attn/models/bigcode.py +233 -0
  223. foreblocks-0.1.0/flash-attention/flash_attn/models/btlm.py +102 -0
  224. foreblocks-0.1.0/flash-attention/flash_attn/models/falcon.py +143 -0
  225. foreblocks-0.1.0/flash-attention/flash_attn/models/gpt.py +1080 -0
  226. foreblocks-0.1.0/flash-attention/flash_attn/models/gpt_neox.py +124 -0
  227. foreblocks-0.1.0/flash-attention/flash_attn/models/gptj.py +109 -0
  228. foreblocks-0.1.0/flash-attention/flash_attn/models/llama.py +422 -0
  229. foreblocks-0.1.0/flash-attention/flash_attn/models/opt.py +116 -0
  230. foreblocks-0.1.0/flash-attention/flash_attn/models/vit.py +373 -0
  231. foreblocks-0.1.0/flash-attention/flash_attn/modules/__init__.py +0 -0
  232. foreblocks-0.1.0/flash-attention/flash_attn/modules/block.py +397 -0
  233. foreblocks-0.1.0/flash-attention/flash_attn/modules/embedding.py +216 -0
  234. foreblocks-0.1.0/flash-attention/flash_attn/modules/mha.py +993 -0
  235. foreblocks-0.1.0/flash-attention/flash_attn/modules/mlp.py +191 -0
  236. foreblocks-0.1.0/flash-attention/flash_attn/ops/__init__.py +0 -0
  237. foreblocks-0.1.0/flash-attention/flash_attn/ops/activations.py +135 -0
  238. foreblocks-0.1.0/flash-attention/flash_attn/ops/fused_dense.py +688 -0
  239. foreblocks-0.1.0/flash-attention/flash_attn/ops/layer_norm.py +800 -0
  240. foreblocks-0.1.0/flash-attention/flash_attn/ops/rms_norm.py +174 -0
  241. foreblocks-0.1.0/flash-attention/flash_attn/ops/triton/__init__.py +1 -0
  242. foreblocks-0.1.0/flash-attention/flash_attn/ops/triton/cross_entropy.py +330 -0
  243. foreblocks-0.1.0/flash-attention/flash_attn/ops/triton/k_activations.py +162 -0
  244. foreblocks-0.1.0/flash-attention/flash_attn/ops/triton/layer_norm.py +1252 -0
  245. foreblocks-0.1.0/flash-attention/flash_attn/ops/triton/linear.py +594 -0
  246. foreblocks-0.1.0/flash-attention/flash_attn/ops/triton/mlp.py +149 -0
  247. foreblocks-0.1.0/flash-attention/flash_attn/ops/triton/rotary.py +185 -0
  248. foreblocks-0.1.0/flash-attention/flash_attn/utils/__init__.py +0 -0
  249. foreblocks-0.1.0/flash-attention/flash_attn/utils/benchmark.py +268 -0
  250. foreblocks-0.1.0/flash-attention/flash_attn/utils/distributed.py +144 -0
  251. foreblocks-0.1.0/flash-attention/flash_attn/utils/generation.py +740 -0
  252. foreblocks-0.1.0/flash-attention/flash_attn/utils/library.py +66 -0
  253. foreblocks-0.1.0/flash-attention/flash_attn/utils/pretrained.py +79 -0
  254. foreblocks-0.1.0/flash-attention/flash_attn/utils/torch.py +21 -0
  255. foreblocks-0.1.0/flash-attention/hopper/__init__.py +1 -0
  256. foreblocks-0.1.0/flash-attention/hopper/benchmark_attn.py +411 -0
  257. foreblocks-0.1.0/flash-attention/hopper/benchmark_flash_attention_fp8.py +353 -0
  258. foreblocks-0.1.0/flash-attention/hopper/benchmark_mla_decode.py +129 -0
  259. foreblocks-0.1.0/flash-attention/hopper/benchmark_split_kv.py +331 -0
  260. foreblocks-0.1.0/flash-attention/hopper/flash_attn_interface.py +834 -0
  261. foreblocks-0.1.0/flash-attention/hopper/generate_kernels.py +222 -0
  262. foreblocks-0.1.0/flash-attention/hopper/padding.py +53 -0
  263. foreblocks-0.1.0/flash-attention/hopper/setup.py +659 -0
  264. foreblocks-0.1.0/flash-attention/hopper/test_attn_kvcache.py +486 -0
  265. foreblocks-0.1.0/flash-attention/hopper/test_flash_attn.py +1130 -0
  266. foreblocks-0.1.0/flash-attention/hopper/test_kvcache.py +234 -0
  267. foreblocks-0.1.0/flash-attention/hopper/test_util.py +348 -0
  268. foreblocks-0.1.0/flash-attention/setup.py +561 -0
  269. foreblocks-0.1.0/flash-attention/tests/layers/test_rotary.py +134 -0
  270. foreblocks-0.1.0/flash-attention/tests/losses/test_cross_entropy.py +83 -0
  271. foreblocks-0.1.0/flash-attention/tests/losses/test_cross_entropy_parallel.py +104 -0
  272. foreblocks-0.1.0/flash-attention/tests/models/test_baichuan.py +460 -0
  273. foreblocks-0.1.0/flash-attention/tests/models/test_bert.py +324 -0
  274. foreblocks-0.1.0/flash-attention/tests/models/test_bigcode.py +204 -0
  275. foreblocks-0.1.0/flash-attention/tests/models/test_btlm.py +245 -0
  276. foreblocks-0.1.0/flash-attention/tests/models/test_falcon.py +408 -0
  277. foreblocks-0.1.0/flash-attention/tests/models/test_gpt.py +478 -0
  278. foreblocks-0.1.0/flash-attention/tests/models/test_gpt_generation_parallel.py +172 -0
  279. foreblocks-0.1.0/flash-attention/tests/models/test_gpt_neox.py +104 -0
  280. foreblocks-0.1.0/flash-attention/tests/models/test_gpt_parallel.py +236 -0
  281. foreblocks-0.1.0/flash-attention/tests/models/test_gptj.py +184 -0
  282. foreblocks-0.1.0/flash-attention/tests/models/test_llama.py +633 -0
  283. foreblocks-0.1.0/flash-attention/tests/models/test_opt.py +237 -0
  284. foreblocks-0.1.0/flash-attention/tests/models/test_vit.py +48 -0
  285. foreblocks-0.1.0/flash-attention/tests/modules/test_block_parallel.py +273 -0
  286. foreblocks-0.1.0/flash-attention/tests/modules/test_embedding_parallel.py +106 -0
  287. foreblocks-0.1.0/flash-attention/tests/modules/test_mha_parallel.py +160 -0
  288. foreblocks-0.1.0/flash-attention/tests/modules/test_mlp_parallel.py +143 -0
  289. foreblocks-0.1.0/flash-attention/tests/ops/test_dropout_layer_norm.py +1189 -0
  290. foreblocks-0.1.0/flash-attention/tests/ops/test_fused_dense.py +172 -0
  291. foreblocks-0.1.0/flash-attention/tests/ops/test_fused_dense_parallel.py +237 -0
  292. foreblocks-0.1.0/flash-attention/tests/ops/triton/test_layer_norm.py +374 -0
  293. foreblocks-0.1.0/flash-attention/tests/test_flash_attn.py +2525 -0
  294. foreblocks-0.1.0/flash-attention/tests/test_flash_attn_ck.py +1618 -0
  295. foreblocks-0.1.0/flash-attention/tests/test_flash_attn_triton_amd.py +2547 -0
  296. foreblocks-0.1.0/flash-attention/tests/test_rotary.py +321 -0
  297. foreblocks-0.1.0/flash-attention/tests/test_util.py +274 -0
  298. foreblocks-0.1.0/flash-attention/training/run.py +68 -0
  299. foreblocks-0.1.0/flash-attention/training/src/callbacks/__init__.py +0 -0
  300. foreblocks-0.1.0/flash-attention/training/src/callbacks/causality_monitor.py +61 -0
  301. foreblocks-0.1.0/flash-attention/training/src/callbacks/ema.py +82 -0
  302. foreblocks-0.1.0/flash-attention/training/src/callbacks/flop_count.py +43 -0
  303. foreblocks-0.1.0/flash-attention/training/src/callbacks/gpu_affinity.py +40 -0
  304. foreblocks-0.1.0/flash-attention/training/src/callbacks/loss_scale_monitor.py +32 -0
  305. foreblocks-0.1.0/flash-attention/training/src/callbacks/model_checkpoint.py +36 -0
  306. foreblocks-0.1.0/flash-attention/training/src/callbacks/norm_monitor.py +79 -0
  307. foreblocks-0.1.0/flash-attention/training/src/callbacks/params_log.py +34 -0
  308. foreblocks-0.1.0/flash-attention/training/src/callbacks/speed_monitor.py +95 -0
  309. foreblocks-0.1.0/flash-attention/training/src/callbacks/wandb_callbacks.py +289 -0
  310. foreblocks-0.1.0/flash-attention/training/src/datamodules/datasets/detokenizer.py +53 -0
  311. foreblocks-0.1.0/flash-attention/training/src/datamodules/datasets/lm_dataset.py +32 -0
  312. foreblocks-0.1.0/flash-attention/training/src/datamodules/fault_tolerant_sampler.py +123 -0
  313. foreblocks-0.1.0/flash-attention/training/src/datamodules/imagenet.py +283 -0
  314. foreblocks-0.1.0/flash-attention/training/src/datamodules/language_modeling_hf.py +299 -0
  315. foreblocks-0.1.0/flash-attention/training/src/datamodules/timm_mixup.py +20 -0
  316. foreblocks-0.1.0/flash-attention/training/src/distributed/ddp_comm_hooks.py +43 -0
  317. foreblocks-0.1.0/flash-attention/training/src/eval.py +129 -0
  318. foreblocks-0.1.0/flash-attention/training/src/metrics/accuracy.py +11 -0
  319. foreblocks-0.1.0/flash-attention/training/src/metrics/num_tokens.py +45 -0
  320. foreblocks-0.1.0/flash-attention/training/src/metrics/perplexity.py +70 -0
  321. foreblocks-0.1.0/flash-attention/training/src/models/modules/seq_common.py +342 -0
  322. foreblocks-0.1.0/flash-attention/training/src/optim/param_grouping.py +114 -0
  323. foreblocks-0.1.0/flash-attention/training/src/optim/timm_lr_scheduler.py +30 -0
  324. foreblocks-0.1.0/flash-attention/training/src/tasks/seq.py +192 -0
  325. foreblocks-0.1.0/flash-attention/training/src/train.py +136 -0
  326. foreblocks-0.1.0/flash-attention/training/src/utils/checkpoint.py +76 -0
  327. foreblocks-0.1.0/flash-attention/training/src/utils/ddp_zero1.py +106 -0
  328. foreblocks-0.1.0/flash-attention/training/src/utils/ddp_zero2.py +146 -0
  329. foreblocks-0.1.0/flash-attention/training/src/utils/distributed.py +111 -0
  330. foreblocks-0.1.0/flash-attention/training/src/utils/ema.py +280 -0
  331. foreblocks-0.1.0/flash-attention/training/src/utils/flops.py +45 -0
  332. foreblocks-0.1.0/flash-attention/training/src/utils/gpu_affinity.py +142 -0
  333. foreblocks-0.1.0/flash-attention/training/src/utils/utils.py +146 -0
  334. foreblocks-0.1.0/flash-attention/training/tests/datamodules/test_language_modeling_hf.py +218 -0
  335. foreblocks-0.1.0/foreblocks/__init__.py +42 -0
  336. foreblocks-0.1.0/foreblocks/att.py +299 -0
  337. foreblocks-0.1.0/foreblocks/aux.py +45 -0
  338. foreblocks-0.1.0/foreblocks/blocks/__init__.py +64 -0
  339. foreblocks-0.1.0/foreblocks/blocks/attention.py +287 -0
  340. foreblocks-0.1.0/foreblocks/blocks/famous.py +529 -0
  341. foreblocks-0.1.0/foreblocks/blocks/fourier.py +464 -0
  342. foreblocks-0.1.0/foreblocks/blocks/graph.py +1466 -0
  343. foreblocks-0.1.0/foreblocks/blocks/mamba.py +119 -0
  344. foreblocks-0.1.0/foreblocks/blocks/multiscale.py +124 -0
  345. foreblocks-0.1.0/foreblocks/blocks/nha.py +476 -0
  346. foreblocks-0.1.0/foreblocks/blocks/ode.py +184 -0
  347. foreblocks-0.1.0/foreblocks/blocks/simple.py +204 -0
  348. foreblocks-0.1.0/foreblocks/blocks/wavelets.py +439 -0
  349. foreblocks-0.1.0/foreblocks/blocks.py +0 -0
  350. foreblocks-0.1.0/foreblocks/core.py +698 -0
  351. foreblocks-0.1.0/foreblocks/darts/darts.py +557 -0
  352. foreblocks-0.1.0/foreblocks/darts/darts_run.py +2386 -0
  353. foreblocks-0.1.0/foreblocks/enc_dec.py +218 -0
  354. foreblocks-0.1.0/foreblocks/pipeline.py +389 -0
  355. foreblocks-0.1.0/foreblocks/pre/__init__.py +0 -0
  356. foreblocks-0.1.0/foreblocks/pre/ewt.py +104 -0
  357. foreblocks-0.1.0/foreblocks/pre/filters.py +147 -0
  358. foreblocks-0.1.0/foreblocks/pre/impute.py +428 -0
  359. foreblocks-0.1.0/foreblocks/pre/outlier.py +399 -0
  360. foreblocks-0.1.0/foreblocks/preprocessing.py +978 -0
  361. foreblocks-0.1.0/foreblocks/tf/embeddings.py +395 -0
  362. foreblocks-0.1.0/foreblocks/tf/fed.py +322 -0
  363. foreblocks-0.1.0/foreblocks/tf/transformer.py +690 -0
  364. foreblocks-0.1.0/foreblocks/tf/transformer_att.py +535 -0
  365. foreblocks-0.1.0/foreblocks/tf/transformer_aux.py +230 -0
  366. foreblocks-0.1.0/foreblocks/tf/transformer_moe.py +1137 -0
  367. foreblocks-0.1.0/foreblocks/third_party/flash_softpick_attn.py +796 -0
  368. foreblocks-0.1.0/foreblocks/third_party/vsgd.py +212 -0
  369. foreblocks-0.1.0/foreblocks/utils.py +576 -0
  370. foreblocks-0.1.0/foreblocks.egg-info/PKG-INFO +484 -0
  371. foreblocks-0.1.0/foreblocks.egg-info/SOURCES.txt +374 -0
  372. foreblocks-0.1.0/foreblocks.egg-info/dependency_links.txt +1 -0
  373. foreblocks-0.1.0/foreblocks.egg-info/requires.txt +9 -0
  374. foreblocks-0.1.0/foreblocks.egg-info/top_level.txt +5 -0
  375. foreblocks-0.1.0/pyproject.toml +42 -0
  376. foreblocks-0.1.0/setup.cfg +4 -0
@@ -0,0 +1,484 @@
1
+ Metadata-Version: 2.4
2
+ Name: foreblocks
3
+ Version: 0.1.0
4
+ Summary: Modular Time Series Forecasting Library
5
+ Author-email: Laio Seman <you@example.com>
6
+ Project-URL: Homepage, https://github.com/lseman/foreblocks
7
+ Project-URL: Repository, https://github.com/lseman/foreblocks
8
+ Keywords: time series,forecasting,deep learning,transformer,lstm,pytorch
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
15
+ Requires-Python: >=3.8
16
+ Description-Content-Type: text/markdown
17
+ Requires-Dist: torch>=1.12
18
+ Requires-Dist: numpy
19
+ Requires-Dist: pandas
20
+ Requires-Dist: scikit-learn
21
+ Requires-Dist: matplotlib
22
+ Requires-Dist: PyWavelets
23
+ Requires-Dist: pytorch_wavelets
24
+ Requires-Dist: wandb
25
+ Requires-Dist: darts>=0.24.0
26
+
27
+ # ForeBlocks: Modular Time Series Forecasting Library
28
+
29
+ ![Data Flow Diagram](logo.svg)
30
+
31
+ **ForeBlocks** is a flexible, modular deep learning framework for time series forecasting built on PyTorch. It provides various neural network architectures and forecasting strategies to tackle complex time series prediction problems with an intuitive, research-friendly API.
32
+
33
+ 🔗 **[GitHub Repository](https://github.com/lseman/foreblocks)**
34
+
35
+ ---
36
+
37
+ ## 🚀 Quick Start
38
+
39
+ ```bash
40
+ # Installation
41
+ git clone https://github.com/lseman/foreblocks
42
+ cd foreblocks
43
+ pip install -e .
44
+ ```
45
+
46
+ ```python
47
+ from foreblocks import TimeSeriesSeq2Seq, ModelConfig, TrainingConfig
48
+ import torch
49
+ import pandas as pd
50
+
51
+ # Load and prepare data
52
+ data = pd.read_csv('your_data.csv')
53
+ X = data.values
54
+
55
+ # Configure model
56
+ model_config = ModelConfig(
57
+ model_type="lstm",
58
+ input_size=X.shape[1],
59
+ output_size=1,
60
+ hidden_size=64,
61
+ target_len=24, # Forecast 24 steps ahead
62
+ teacher_forcing_ratio=0.5
63
+ )
64
+
65
+ # Initialize and train
66
+ model = TimeSeriesSeq2Seq(model_config=model_config)
67
+ X_train, y_train, _ = model.preprocess(X, self_tune=True)
68
+
69
+ # Create DataLoader and train
70
+ from torch.utils.data import TensorDataset, DataLoader
71
+ train_dataset = TensorDataset(
72
+ torch.tensor(X_train, dtype=torch.float32),
73
+ torch.tensor(y_train, dtype=torch.float32)
74
+ )
75
+ train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
76
+
77
+ history = model.train_model(train_loader)
78
+ predictions = model.predict(X_test)
79
+ ```
80
+
81
+ ---
82
+
83
+ ## ✨ Key Features
84
+
85
+ | Feature | Description |
86
+ |---------|-------------|
87
+ | **🔧 Multiple Strategies** | Seq2Seq, Autoregressive, and Direct forecasting approaches |
88
+ | **🧩 Modular Design** | Easily customize and extend components |
89
+ | **🤖 Advanced Models** | LSTM, GRU, Transformer, and VAE-based architectures |
90
+ | **⚡ Smart Preprocessing** | Adaptive data preprocessing with automatic configuration |
91
+ | **🎯 Attention Mechanisms** | Various attention modules for improved performance |
92
+ | **📊 Multi-Feature Support** | Specialized architectures for multivariate time series |
93
+ | **📈 Training Utilities** | Built-in trainer with callbacks, metrics, and visualizations |
94
+ | **🔍 Transparent API** | Intuitive interface with extensive documentation |
95
+
96
+ ---
97
+
98
+
99
+ ## 📖 Documentation
100
+
101
+ - 📘 [Preprocessing Guide](docs/preprocessor.md)
102
+ - 🛠️ [Custom Blocks Guide](docs/custom_blocks.md)
103
+ - [Transformer Blocks](docs/transformer.md)
104
+ - [Fourier Blocks](docs/fourier.md)
105
+ - [Wavelet Blocks](docs/wavelet.md)
106
+
107
+ ---
108
+
109
+ ## 🏗️ Architecture Overview
110
+
111
+ ForeBlocks follows a clean, modular design:
112
+
113
+ ```
114
+ ┌─────────────────────┐
115
+ │ TimeSeriesSeq2Seq │ ← High-level Interface
116
+ ├─────────────────────┤
117
+ │ ForecastingModel │ ← Core Model Class
118
+ ├─────────────────────┤
119
+ │ Encoders & Decoders │ ← Neural Network Modules
120
+ ├─────────────────────┤
121
+ │ Preprocessing │ ← Data Pipeline
122
+ ├─────────────────────┤
123
+ │ Training Utils │ ← Trainer & Metrics
124
+ └─────────────────────┘
125
+ ```
126
+
127
+ ### Core Components
128
+
129
+ - **`TimeSeriesSeq2Seq`**: High-level interface for building and training models
130
+ - **`ForecastingModel`**: Main model class integrating encoders, decoders, and strategies
131
+ - **`TimeSeriesPreprocessor`**: Advanced data preparation with automatic feature detection
132
+ - **`Trainer`**: Manages training, evaluation, and visualization
133
+
134
+ ---
135
+
136
+ ## 🎯 Forecasting Models
137
+
138
+ ### 1. Sequence-to-Sequence (Default)
139
+ *Best for: Most time series problems*
140
+
141
+ ```python
142
+ model_config = ModelConfig(
143
+ model_type="lstm",
144
+ strategy="seq2seq",
145
+ input_size=3,
146
+ output_size=1,
147
+ hidden_size=64,
148
+ num_encoder_layers=2,
149
+ num_decoder_layers=2,
150
+ target_len=24
151
+ )
152
+ ```
153
+
154
+ ### 2. Autoregressive
155
+ *Best for: When each prediction depends on previous predictions*
156
+
157
+ ```python
158
+ model_config = ModelConfig(
159
+ model_type="lstm",
160
+ strategy="autoregressive",
161
+ input_size=1,
162
+ output_size=1,
163
+ hidden_size=64,
164
+ target_len=12
165
+ )
166
+ ```
167
+
168
+ ### 3. Direct Multi-Step
169
+ *Best for: Independent multi-step predictions*
170
+
171
+ ```python
172
+ model_config = ModelConfig(
173
+ model_type="lstm",
174
+ strategy="direct",
175
+ input_size=5,
176
+ output_size=1,
177
+ hidden_size=128,
178
+ target_len=48
179
+ )
180
+ ```
181
+
182
+ ### 4. Transformer-based
183
+ *Best for: Long sequences with complex dependencies*
184
+
185
+ ```python
186
+ model_config = ModelConfig(
187
+ model_type="transformer",
188
+ strategy="transformer_seq2seq",
189
+ input_size=4,
190
+ output_size=4,
191
+ hidden_size=128,
192
+ dim_feedforward=512,
193
+ nheads=8,
194
+ num_encoder_layers=3,
195
+ num_decoder_layers=3,
196
+ target_len=96
197
+ )
198
+ ```
199
+
200
+ ---
201
+
202
+ ## 🔧 Advanced Features
203
+
204
+ ### Multi-Encoder-Decoder Architecture
205
+ Process different features with separate encoders:
206
+
207
+ ```python
208
+ model_config = ModelConfig(
209
+ multi_encoder_decoder=True,
210
+ input_size=5, # 5 different features
211
+ output_size=1,
212
+ hidden_size=64,
213
+ model_type="lstm",
214
+ target_len=24
215
+ )
216
+ ```
217
+
218
+ ### Attention Mechanisms
219
+ Improve performance with attention:
220
+
221
+ ```python
222
+ from foreblocks.attention import AttentionLayer
223
+
224
+ attention_module = AttentionLayer(
225
+ method="dot",
226
+ attention_backend="self",
227
+ encoder_hidden_size=64,
228
+ decoder_hidden_size=64
229
+ )
230
+
231
+ model = TimeSeriesSeq2Seq(
232
+ model_config=model_config,
233
+ attention_module=attention_module
234
+ )
235
+ ```
236
+
237
+ ### Custom Preprocessing Pipeline
238
+ Fine-tune data preparation:
239
+
240
+ ```python
241
+ X_train, y_train, processed_data = model.preprocess(
242
+ X,
243
+ normalize=True,
244
+ differencing=True,
245
+ detrend=True,
246
+ apply_ewt=True,
247
+ window_size=48,
248
+ horizon=24,
249
+ remove_outliers=True,
250
+ outlier_method="iqr",
251
+ self_tune=True
252
+ )
253
+ ```
254
+
255
+ ### Scheduled Sampling
256
+ Control teacher forcing dynamically:
257
+
258
+ ```python
259
+ def scheduled_sampling_fn(epoch):
260
+ return max(0.0, 1.0 - 0.1 * epoch) # Linear decay
261
+
262
+ model = TimeSeriesSeq2Seq(
263
+ model_config=model_config,
264
+ scheduled_sampling_fn=scheduled_sampling_fn
265
+ )
266
+ ```
267
+
268
+ ---
269
+
270
+ ## 📚 Examples
271
+
272
+ ### LSTM with Attention
273
+ ```python
274
+ from foreblocks import TimeSeriesSeq2Seq, ModelConfig, AttentionLayer
275
+ import torch.nn as nn
276
+
277
+ # Configure model with attention
278
+ model_config = ModelConfig(
279
+ model_type="lstm",
280
+ input_size=3,
281
+ output_size=1,
282
+ hidden_size=64,
283
+ num_encoder_layers=2,
284
+ num_decoder_layers=2,
285
+ target_len=24
286
+ )
287
+
288
+ attention = AttentionLayer(
289
+ method="dot",
290
+ encoder_hidden_size=64,
291
+ decoder_hidden_size=64
292
+ )
293
+
294
+ model = TimeSeriesSeq2Seq(
295
+ model_config=model_config,
296
+ attention_module=attention,
297
+ output_block=nn.Sequential(nn.Dropout(0.1), nn.ReLU())
298
+ )
299
+ ```
300
+
301
+ ### Transformer Model
302
+ ```python
303
+ from foreblocks import TimeSeriesSeq2Seq, ModelConfig, TrainingConfig
304
+
305
+ model_config = ModelConfig(
306
+ model_type="transformer",
307
+ input_size=4,
308
+ output_size=4,
309
+ hidden_size=128,
310
+ dim_feedforward=512,
311
+ nheads=8,
312
+ num_encoder_layers=3,
313
+ num_decoder_layers=3,
314
+ target_len=96
315
+ )
316
+
317
+ training_config = TrainingConfig(
318
+ num_epochs=100,
319
+ learning_rate=0.0001,
320
+ weight_decay=1e-5,
321
+ patience=15
322
+ )
323
+
324
+ model = TimeSeriesSeq2Seq(
325
+ model_config=model_config,
326
+ training_config=training_config
327
+ )
328
+ ```
329
+
330
+ ---
331
+
332
+ ## 🔧 Configuration Reference
333
+
334
+ ### ModelConfig Parameters
335
+
336
+ | Parameter | Type | Description | Default |
337
+ |-----------|------|-------------|---------|
338
+ | `model_type` | str | Model architecture ("lstm", "gru", "transformer") | "lstm" |
339
+ | `input_size` | int | Number of input features | Required |
340
+ | `output_size` | int | Number of output features | Required |
341
+ | `hidden_size` | int | Hidden layer dimensions | 64 |
342
+ | `target_len` | int | Forecast horizon length | Required |
343
+ | `num_encoder_layers` | int | Number of encoder layers | 1 |
344
+ | `num_decoder_layers` | int | Number of decoder layers | 1 |
345
+ | `teacher_forcing_ratio` | float | Teacher forcing probability | 0.5 |
346
+
347
+ ### TrainingConfig Parameters
348
+
349
+ | Parameter | Type | Description | Default |
350
+ |-----------|------|-------------|---------|
351
+ | `num_epochs` | int | Training epochs | 100 |
352
+ | `learning_rate` | float | Learning rate | 0.001 |
353
+ | `batch_size` | int | Batch size | 32 |
354
+ | `patience` | int | Early stopping patience | 10 |
355
+ | `weight_decay` | float | L2 regularization | 0.0 |
356
+
357
+ ---
358
+
359
+ ## 🚨 Troubleshooting
360
+
361
+ ### Common Issues & Solutions
362
+
363
+ <details>
364
+ <summary><strong>🔴 Dimensionality Mismatch</strong></summary>
365
+
366
+ **Problem**: Tensor dimension errors during training/inference
367
+
368
+ **Solution**:
369
+ - Check encoder/decoder `hidden_size` compatibility
370
+ - Verify `output_size` matches target dimensions
371
+ - Ensure input data shape matches `input_size`
372
+
373
+ ```python
374
+ # Debug dimensions
375
+ print(f"Input shape: {X.shape}")
376
+ print(f"Model expects: {model_config.input_size} features")
377
+ ```
378
+ </details>
379
+
380
+ <details>
381
+ <summary><strong>🟡 Memory Issues</strong></summary>
382
+
383
+ **Problem**: CUDA out of memory or system RAM exhaustion
384
+
385
+ **Solutions**:
386
+ - Reduce `batch_size` or sequence length
387
+ - Use gradient accumulation
388
+ - Consider model size reduction
389
+
390
+ ```python
391
+ # Gradient accumulation example
392
+ accumulation_steps = 4
393
+ for i, batch in enumerate(train_loader):
394
+ loss = model(batch) / accumulation_steps
395
+ loss.backward()
396
+ if (i + 1) % accumulation_steps == 0:
397
+ optimizer.step()
398
+ optimizer.zero_grad()
399
+ ```
400
+ </details>
401
+
402
+ <details>
403
+ <summary><strong>🟠 Poor Performance</strong></summary>
404
+
405
+ **Problem**: Model not learning or poor predictions
406
+
407
+ **Solutions**:
408
+ - Try different forecasting strategies
409
+ - Adjust `teacher_forcing_ratio`
410
+ - Add attention mechanisms
411
+ - Experiment with architectures (LSTM vs Transformer)
412
+ - Tune hyperparameters
413
+
414
+ ```python
415
+ # Performance tuning checklist
416
+ model_config = ModelConfig(
417
+ hidden_size=128, # Try larger hidden size
418
+ num_encoder_layers=3, # Add more layers
419
+ teacher_forcing_ratio=0.3, # Reduce teacher forcing
420
+ # Add dropout, attention, etc.
421
+ )
422
+ ```
423
+ </details>
424
+
425
+ <details>
426
+ <summary><strong>🔵 Training Issues</strong></summary>
427
+
428
+ **Problem**: Slow convergence or gradient problems
429
+
430
+ **Solutions**:
431
+ - Use gradient clipping
432
+ - Learning rate scheduling
433
+ - Proper weight initialization
434
+
435
+ ```python
436
+ # Gradient clipping
437
+ import torch.nn.utils as utils
438
+ utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
439
+
440
+ # Learning rate scheduling
441
+ scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(
442
+ optimizer, patience=5, factor=0.5
443
+ )
444
+ ```
445
+ </details>
446
+
447
+ ---
448
+
449
+ ## 💡 Best Practices
450
+
451
+ ### 🎯 Performance Tips
452
+ - **Always normalize** input data for better convergence
453
+ - **Use appropriate metrics** (MAE, RMSE, MAPE) for time series
454
+ - **Validate on multi-step** predictions, not just one-step
455
+ - **Consider model ensembling** for critical applications
456
+
457
+ ### 📊 Data Preparation
458
+ - Handle missing values before feeding to model
459
+ - Consider seasonal decomposition for seasonal data
460
+ - Use the built-in preprocessing with `self_tune=True`
461
+
462
+ ### 🔄 Training Strategy
463
+ - Start with simple models (LSTM) before trying complex ones (Transformer)
464
+ - Use validation sets for hyperparameter tuning
465
+ - Monitor both training and validation metrics
466
+
467
+ ---
468
+
469
+ ## 🤝 Contributing
470
+
471
+ We welcome contributions! Please see our [GitHub repository](https://github.com/lseman/foreblocks) for:
472
+ - 🐛 Bug reports
473
+ - 💡 Feature requests
474
+ - 📝 Documentation improvements
475
+ - 🔧 Code contributions
476
+
477
+ ---
478
+
479
+ ## 📄 License
480
+
481
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
482
+
483
+ ---
484
+