dfm-python 0.5.3__tar.gz → 0.5.52__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 (422) hide show
  1. {dfm_python-0.5.3 → dfm_python-0.5.52}/MANIFEST.in +4 -4
  2. {dfm_python-0.5.3 → dfm_python-0.5.52}/PKG-INFO +97 -3
  3. {dfm_python-0.5.3 → dfm_python-0.5.52}/README.md +96 -1
  4. {dfm_python-0.5.3 → dfm_python-0.5.52}/pyproject.toml +11 -1
  5. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/__init__.py +11 -8
  6. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/config/adapter.py +34 -56
  7. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/config/schema.py +222 -379
  8. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/data/utils.py +10 -12
  9. dfm_python-0.5.52/src/dfm_python/decoder/__init__.py +14 -0
  10. dfm_python-0.5.52/src/dfm_python/decoder/linear.py +68 -0
  11. dfm_python-0.5.52/src/dfm_python/decoder/mlp.py +130 -0
  12. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/encoder/__init__.py +7 -6
  13. dfm_python-0.5.3/src/dfm_python/encoder/vae.py → dfm_python-0.5.52/src/dfm_python/encoder/autoencoder.py +32 -182
  14. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/lightning/__init__.py +6 -6
  15. dfm_python-0.5.52/src/dfm_python/lightning/ddfm_dm.py +417 -0
  16. dfm_python-0.5.52/src/dfm_python/lightning/dfm_dm.py +379 -0
  17. dfm_python-0.5.52/src/dfm_python/lightning/utils.py +516 -0
  18. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/models/__init__.py +3 -4
  19. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/models/base.py +73 -8
  20. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/models/ddfm.py +391 -231
  21. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/models/dfm.py +77 -29
  22. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/trainer/__init__.py +2 -0
  23. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/trainer/ddfm.py +2 -2
  24. dfm_python-0.5.3/src/dfm_python/models/mcmc.py → dfm_python-0.5.52/src/dfm_python/trainer/denoising.py +50 -52
  25. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/utils/__init__.py +3 -3
  26. dfm_python-0.5.52/src/test/test_datamodule.py +554 -0
  27. dfm_python-0.5.52/src/test/test_decoder.py +372 -0
  28. dfm_python-0.5.52/src/test/test_encoder.py +461 -0
  29. {dfm_python-0.5.3 → dfm_python-0.5.52}/tutorial/tutorial_finance_ddfm.py +41 -34
  30. {dfm_python-0.5.3 → dfm_python-0.5.52}/tutorial/tutorial_finance_dfm.py +10 -4
  31. {dfm_python-0.5.3 → dfm_python-0.5.52}/tutorial/tutorial_macro_ddfm.py +92 -101
  32. {dfm_python-0.5.3 → dfm_python-0.5.52}/tutorial/tutorial_macro_dfm.py +49 -31
  33. {dfm_python-0.5.3 → dfm_python-0.5.52}/uv.lock +15 -7
  34. dfm_python-0.5.3/lightning_logs/ddfm/version_0/checkpoints/ddfm-epoch=00-train_loss=0.7892.ckpt +0 -0
  35. dfm_python-0.5.3/lightning_logs/ddfm/version_0/metrics.csv +0 -2
  36. dfm_python-0.5.3/lightning_logs/ddfm/version_1/checkpoints/ddfm-epoch=00-train_loss=0.6617.ckpt +0 -0
  37. dfm_python-0.5.3/lightning_logs/ddfm/version_1/metrics.csv +0 -2
  38. dfm_python-0.5.3/lightning_logs/ddfm/version_10/checkpoints/ddfm-epoch=00-train_loss=0.7841.ckpt +0 -0
  39. dfm_python-0.5.3/lightning_logs/ddfm/version_10/metrics.csv +0 -2
  40. dfm_python-0.5.3/lightning_logs/ddfm/version_11/checkpoints/ddfm-epoch=00-train_loss=0.8447.ckpt +0 -0
  41. dfm_python-0.5.3/lightning_logs/ddfm/version_11/metrics.csv +0 -2
  42. dfm_python-0.5.3/lightning_logs/ddfm/version_12/checkpoints/ddfm-epoch=00-train_loss=0.8701.ckpt +0 -0
  43. dfm_python-0.5.3/lightning_logs/ddfm/version_12/metrics.csv +0 -2
  44. dfm_python-0.5.3/lightning_logs/ddfm/version_2/checkpoints/ddfm-epoch=00-train_loss=0.7447.ckpt +0 -0
  45. dfm_python-0.5.3/lightning_logs/ddfm/version_2/metrics.csv +0 -2
  46. dfm_python-0.5.3/lightning_logs/ddfm/version_3/checkpoints/ddfm-epoch=00-train_loss=0.7343.ckpt +0 -0
  47. dfm_python-0.5.3/lightning_logs/ddfm/version_3/metrics.csv +0 -2
  48. dfm_python-0.5.3/lightning_logs/ddfm/version_4/checkpoints/ddfm-epoch=00-train_loss=0.9361.ckpt +0 -0
  49. dfm_python-0.5.3/lightning_logs/ddfm/version_4/metrics.csv +0 -2
  50. dfm_python-0.5.3/lightning_logs/ddfm/version_5/checkpoints/ddfm-epoch=00-train_loss=0.6573.ckpt +0 -0
  51. dfm_python-0.5.3/lightning_logs/ddfm/version_5/metrics.csv +0 -2
  52. dfm_python-0.5.3/lightning_logs/ddfm/version_6/checkpoints/ddfm-epoch=00-train_loss=0.8632.ckpt +0 -0
  53. dfm_python-0.5.3/lightning_logs/ddfm/version_6/metrics.csv +0 -2
  54. dfm_python-0.5.3/lightning_logs/ddfm/version_7/checkpoints/ddfm-epoch=00-train_loss=0.9101.ckpt +0 -0
  55. dfm_python-0.5.3/lightning_logs/ddfm/version_7/metrics.csv +0 -2
  56. dfm_python-0.5.3/lightning_logs/ddfm/version_8/checkpoints/ddfm-epoch=00-train_loss=0.6250.ckpt +0 -0
  57. dfm_python-0.5.3/lightning_logs/ddfm/version_8/metrics.csv +0 -2
  58. dfm_python-0.5.3/lightning_logs/ddfm/version_9/checkpoints/ddfm-epoch=00-train_loss=0.6293.ckpt +0 -0
  59. dfm_python-0.5.3/lightning_logs/ddfm/version_9/metrics.csv +0 -2
  60. dfm_python-0.5.3/lightning_logs/dfm/version_0/metrics.csv +0 -12
  61. dfm_python-0.5.3/lightning_logs/dfm/version_1/metrics.csv +0 -12
  62. dfm_python-0.5.3/lightning_logs/dfm/version_10/metrics.csv +0 -12
  63. dfm_python-0.5.3/lightning_logs/dfm/version_100/metrics.csv +0 -12
  64. dfm_python-0.5.3/lightning_logs/dfm/version_101/metrics.csv +0 -12
  65. dfm_python-0.5.3/lightning_logs/dfm/version_102/metrics.csv +0 -12
  66. dfm_python-0.5.3/lightning_logs/dfm/version_103/metrics.csv +0 -12
  67. dfm_python-0.5.3/lightning_logs/dfm/version_104/metrics.csv +0 -12
  68. dfm_python-0.5.3/lightning_logs/dfm/version_106/metrics.csv +0 -12
  69. dfm_python-0.5.3/lightning_logs/dfm/version_107/metrics.csv +0 -12
  70. dfm_python-0.5.3/lightning_logs/dfm/version_108/metrics.csv +0 -12
  71. dfm_python-0.5.3/lightning_logs/dfm/version_109/metrics.csv +0 -12
  72. dfm_python-0.5.3/lightning_logs/dfm/version_11/metrics.csv +0 -12
  73. dfm_python-0.5.3/lightning_logs/dfm/version_110/metrics.csv +0 -12
  74. dfm_python-0.5.3/lightning_logs/dfm/version_111/metrics.csv +0 -12
  75. dfm_python-0.5.3/lightning_logs/dfm/version_112/metrics.csv +0 -12
  76. dfm_python-0.5.3/lightning_logs/dfm/version_113/metrics.csv +0 -12
  77. dfm_python-0.5.3/lightning_logs/dfm/version_114/metrics.csv +0 -12
  78. dfm_python-0.5.3/lightning_logs/dfm/version_115/metrics.csv +0 -12
  79. dfm_python-0.5.3/lightning_logs/dfm/version_116/metrics.csv +0 -12
  80. dfm_python-0.5.3/lightning_logs/dfm/version_118/metrics.csv +0 -12
  81. dfm_python-0.5.3/lightning_logs/dfm/version_119/metrics.csv +0 -12
  82. dfm_python-0.5.3/lightning_logs/dfm/version_12/metrics.csv +0 -12
  83. dfm_python-0.5.3/lightning_logs/dfm/version_120/metrics.csv +0 -12
  84. dfm_python-0.5.3/lightning_logs/dfm/version_121/metrics.csv +0 -12
  85. dfm_python-0.5.3/lightning_logs/dfm/version_122/metrics.csv +0 -12
  86. dfm_python-0.5.3/lightning_logs/dfm/version_123/metrics.csv +0 -12
  87. dfm_python-0.5.3/lightning_logs/dfm/version_124/metrics.csv +0 -12
  88. dfm_python-0.5.3/lightning_logs/dfm/version_125/metrics.csv +0 -12
  89. dfm_python-0.5.3/lightning_logs/dfm/version_126/metrics.csv +0 -12
  90. dfm_python-0.5.3/lightning_logs/dfm/version_127/metrics.csv +0 -12
  91. dfm_python-0.5.3/lightning_logs/dfm/version_128/metrics.csv +0 -12
  92. dfm_python-0.5.3/lightning_logs/dfm/version_13/metrics.csv +0 -12
  93. dfm_python-0.5.3/lightning_logs/dfm/version_130/metrics.csv +0 -12
  94. dfm_python-0.5.3/lightning_logs/dfm/version_131/metrics.csv +0 -12
  95. dfm_python-0.5.3/lightning_logs/dfm/version_132/metrics.csv +0 -12
  96. dfm_python-0.5.3/lightning_logs/dfm/version_133/metrics.csv +0 -12
  97. dfm_python-0.5.3/lightning_logs/dfm/version_134/metrics.csv +0 -12
  98. dfm_python-0.5.3/lightning_logs/dfm/version_135/metrics.csv +0 -12
  99. dfm_python-0.5.3/lightning_logs/dfm/version_136/metrics.csv +0 -12
  100. dfm_python-0.5.3/lightning_logs/dfm/version_137/metrics.csv +0 -12
  101. dfm_python-0.5.3/lightning_logs/dfm/version_138/metrics.csv +0 -12
  102. dfm_python-0.5.3/lightning_logs/dfm/version_139/metrics.csv +0 -2
  103. dfm_python-0.5.3/lightning_logs/dfm/version_14/metrics.csv +0 -12
  104. dfm_python-0.5.3/lightning_logs/dfm/version_140/metrics.csv +0 -12
  105. dfm_python-0.5.3/lightning_logs/dfm/version_141/metrics.csv +0 -12
  106. dfm_python-0.5.3/lightning_logs/dfm/version_142/metrics.csv +0 -12
  107. dfm_python-0.5.3/lightning_logs/dfm/version_143/metrics.csv +0 -12
  108. dfm_python-0.5.3/lightning_logs/dfm/version_144/metrics.csv +0 -12
  109. dfm_python-0.5.3/lightning_logs/dfm/version_146/metrics.csv +0 -12
  110. dfm_python-0.5.3/lightning_logs/dfm/version_147/metrics.csv +0 -12
  111. dfm_python-0.5.3/lightning_logs/dfm/version_148/metrics.csv +0 -12
  112. dfm_python-0.5.3/lightning_logs/dfm/version_149/metrics.csv +0 -12
  113. dfm_python-0.5.3/lightning_logs/dfm/version_15/metrics.csv +0 -12
  114. dfm_python-0.5.3/lightning_logs/dfm/version_150/metrics.csv +0 -12
  115. dfm_python-0.5.3/lightning_logs/dfm/version_151/metrics.csv +0 -12
  116. dfm_python-0.5.3/lightning_logs/dfm/version_152/metrics.csv +0 -2
  117. dfm_python-0.5.3/lightning_logs/dfm/version_153/metrics.csv +0 -2
  118. dfm_python-0.5.3/lightning_logs/dfm/version_154/metrics.csv +0 -2
  119. dfm_python-0.5.3/lightning_logs/dfm/version_155/metrics.csv +0 -2
  120. dfm_python-0.5.3/lightning_logs/dfm/version_156/metrics.csv +0 -12
  121. dfm_python-0.5.3/lightning_logs/dfm/version_157/metrics.csv +0 -12
  122. dfm_python-0.5.3/lightning_logs/dfm/version_158/metrics.csv +0 -12
  123. dfm_python-0.5.3/lightning_logs/dfm/version_159/metrics.csv +0 -12
  124. dfm_python-0.5.3/lightning_logs/dfm/version_16/metrics.csv +0 -12
  125. dfm_python-0.5.3/lightning_logs/dfm/version_160/metrics.csv +0 -12
  126. dfm_python-0.5.3/lightning_logs/dfm/version_162/metrics.csv +0 -12
  127. dfm_python-0.5.3/lightning_logs/dfm/version_163/metrics.csv +0 -12
  128. dfm_python-0.5.3/lightning_logs/dfm/version_164/metrics.csv +0 -12
  129. dfm_python-0.5.3/lightning_logs/dfm/version_165/metrics.csv +0 -12
  130. dfm_python-0.5.3/lightning_logs/dfm/version_166/metrics.csv +0 -12
  131. dfm_python-0.5.3/lightning_logs/dfm/version_167/metrics.csv +0 -12
  132. dfm_python-0.5.3/lightning_logs/dfm/version_168/metrics.csv +0 -12
  133. dfm_python-0.5.3/lightning_logs/dfm/version_169/metrics.csv +0 -12
  134. dfm_python-0.5.3/lightning_logs/dfm/version_17/metrics.csv +0 -12
  135. dfm_python-0.5.3/lightning_logs/dfm/version_170/metrics.csv +0 -12
  136. dfm_python-0.5.3/lightning_logs/dfm/version_171/metrics.csv +0 -12
  137. dfm_python-0.5.3/lightning_logs/dfm/version_172/metrics.csv +0 -12
  138. dfm_python-0.5.3/lightning_logs/dfm/version_174/metrics.csv +0 -12
  139. dfm_python-0.5.3/lightning_logs/dfm/version_175/metrics.csv +0 -12
  140. dfm_python-0.5.3/lightning_logs/dfm/version_176/metrics.csv +0 -12
  141. dfm_python-0.5.3/lightning_logs/dfm/version_177/metrics.csv +0 -12
  142. dfm_python-0.5.3/lightning_logs/dfm/version_178/metrics.csv +0 -12
  143. dfm_python-0.5.3/lightning_logs/dfm/version_179/metrics.csv +0 -12
  144. dfm_python-0.5.3/lightning_logs/dfm/version_180/metrics.csv +0 -12
  145. dfm_python-0.5.3/lightning_logs/dfm/version_181/metrics.csv +0 -12
  146. dfm_python-0.5.3/lightning_logs/dfm/version_182/metrics.csv +0 -12
  147. dfm_python-0.5.3/lightning_logs/dfm/version_183/metrics.csv +0 -12
  148. dfm_python-0.5.3/lightning_logs/dfm/version_184/metrics.csv +0 -12
  149. dfm_python-0.5.3/lightning_logs/dfm/version_186/metrics.csv +0 -12
  150. dfm_python-0.5.3/lightning_logs/dfm/version_187/metrics.csv +0 -12
  151. dfm_python-0.5.3/lightning_logs/dfm/version_188/metrics.csv +0 -12
  152. dfm_python-0.5.3/lightning_logs/dfm/version_189/metrics.csv +0 -12
  153. dfm_python-0.5.3/lightning_logs/dfm/version_19/metrics.csv +0 -12
  154. dfm_python-0.5.3/lightning_logs/dfm/version_190/metrics.csv +0 -12
  155. dfm_python-0.5.3/lightning_logs/dfm/version_191/metrics.csv +0 -12
  156. dfm_python-0.5.3/lightning_logs/dfm/version_192/metrics.csv +0 -12
  157. dfm_python-0.5.3/lightning_logs/dfm/version_193/metrics.csv +0 -12
  158. dfm_python-0.5.3/lightning_logs/dfm/version_194/metrics.csv +0 -12
  159. dfm_python-0.5.3/lightning_logs/dfm/version_195/metrics.csv +0 -12
  160. dfm_python-0.5.3/lightning_logs/dfm/version_196/metrics.csv +0 -12
  161. dfm_python-0.5.3/lightning_logs/dfm/version_197/metrics.csv +0 -12
  162. dfm_python-0.5.3/lightning_logs/dfm/version_198/metrics.csv +0 -12
  163. dfm_python-0.5.3/lightning_logs/dfm/version_199/metrics.csv +0 -12
  164. dfm_python-0.5.3/lightning_logs/dfm/version_2/metrics.csv +0 -12
  165. dfm_python-0.5.3/lightning_logs/dfm/version_20/metrics.csv +0 -12
  166. dfm_python-0.5.3/lightning_logs/dfm/version_200/metrics.csv +0 -12
  167. dfm_python-0.5.3/lightning_logs/dfm/version_201/metrics.csv +0 -12
  168. dfm_python-0.5.3/lightning_logs/dfm/version_202/metrics.csv +0 -12
  169. dfm_python-0.5.3/lightning_logs/dfm/version_204/metrics.csv +0 -12
  170. dfm_python-0.5.3/lightning_logs/dfm/version_205/metrics.csv +0 -12
  171. dfm_python-0.5.3/lightning_logs/dfm/version_206/metrics.csv +0 -12
  172. dfm_python-0.5.3/lightning_logs/dfm/version_207/metrics.csv +0 -12
  173. dfm_python-0.5.3/lightning_logs/dfm/version_208/metrics.csv +0 -12
  174. dfm_python-0.5.3/lightning_logs/dfm/version_209/metrics.csv +0 -12
  175. dfm_python-0.5.3/lightning_logs/dfm/version_21/metrics.csv +0 -12
  176. dfm_python-0.5.3/lightning_logs/dfm/version_210/metrics.csv +0 -6
  177. dfm_python-0.5.3/lightning_logs/dfm/version_211/metrics.csv +0 -6
  178. dfm_python-0.5.3/lightning_logs/dfm/version_212/metrics.csv +0 -6
  179. dfm_python-0.5.3/lightning_logs/dfm/version_213/metrics.csv +0 -6
  180. dfm_python-0.5.3/lightning_logs/dfm/version_214/metrics.csv +0 -2
  181. dfm_python-0.5.3/lightning_logs/dfm/version_215/metrics.csv +0 -2
  182. dfm_python-0.5.3/lightning_logs/dfm/version_216/metrics.csv +0 -6
  183. dfm_python-0.5.3/lightning_logs/dfm/version_217/metrics.csv +0 -6
  184. dfm_python-0.5.3/lightning_logs/dfm/version_218/metrics.csv +0 -6
  185. dfm_python-0.5.3/lightning_logs/dfm/version_219/metrics.csv +0 -6
  186. dfm_python-0.5.3/lightning_logs/dfm/version_22/metrics.csv +0 -12
  187. dfm_python-0.5.3/lightning_logs/dfm/version_220/metrics.csv +0 -2
  188. dfm_python-0.5.3/lightning_logs/dfm/version_221/metrics.csv +0 -6
  189. dfm_python-0.5.3/lightning_logs/dfm/version_222/metrics.csv +0 -6
  190. dfm_python-0.5.3/lightning_logs/dfm/version_223/metrics.csv +0 -2
  191. dfm_python-0.5.3/lightning_logs/dfm/version_224/metrics.csv +0 -2
  192. dfm_python-0.5.3/lightning_logs/dfm/version_225/metrics.csv +0 -6
  193. dfm_python-0.5.3/lightning_logs/dfm/version_226/metrics.csv +0 -6
  194. dfm_python-0.5.3/lightning_logs/dfm/version_227/metrics.csv +0 -2
  195. dfm_python-0.5.3/lightning_logs/dfm/version_228/metrics.csv +0 -6
  196. dfm_python-0.5.3/lightning_logs/dfm/version_229/metrics.csv +0 -6
  197. dfm_python-0.5.3/lightning_logs/dfm/version_23/metrics.csv +0 -12
  198. dfm_python-0.5.3/lightning_logs/dfm/version_24/metrics.csv +0 -12
  199. dfm_python-0.5.3/lightning_logs/dfm/version_25/metrics.csv +0 -12
  200. dfm_python-0.5.3/lightning_logs/dfm/version_26/metrics.csv +0 -12
  201. dfm_python-0.5.3/lightning_logs/dfm/version_27/metrics.csv +0 -12
  202. dfm_python-0.5.3/lightning_logs/dfm/version_28/metrics.csv +0 -12
  203. dfm_python-0.5.3/lightning_logs/dfm/version_29/metrics.csv +0 -12
  204. dfm_python-0.5.3/lightning_logs/dfm/version_3/metrics.csv +0 -12
  205. dfm_python-0.5.3/lightning_logs/dfm/version_30/metrics.csv +0 -12
  206. dfm_python-0.5.3/lightning_logs/dfm/version_32/metrics.csv +0 -12
  207. dfm_python-0.5.3/lightning_logs/dfm/version_33/metrics.csv +0 -12
  208. dfm_python-0.5.3/lightning_logs/dfm/version_34/metrics.csv +0 -12
  209. dfm_python-0.5.3/lightning_logs/dfm/version_35/metrics.csv +0 -12
  210. dfm_python-0.5.3/lightning_logs/dfm/version_36/metrics.csv +0 -12
  211. dfm_python-0.5.3/lightning_logs/dfm/version_37/metrics.csv +0 -12
  212. dfm_python-0.5.3/lightning_logs/dfm/version_38/metrics.csv +0 -12
  213. dfm_python-0.5.3/lightning_logs/dfm/version_39/metrics.csv +0 -12
  214. dfm_python-0.5.3/lightning_logs/dfm/version_4/metrics.csv +0 -12
  215. dfm_python-0.5.3/lightning_logs/dfm/version_40/metrics.csv +0 -12
  216. dfm_python-0.5.3/lightning_logs/dfm/version_41/metrics.csv +0 -12
  217. dfm_python-0.5.3/lightning_logs/dfm/version_42/metrics.csv +0 -12
  218. dfm_python-0.5.3/lightning_logs/dfm/version_44/metrics.csv +0 -12
  219. dfm_python-0.5.3/lightning_logs/dfm/version_45/metrics.csv +0 -12
  220. dfm_python-0.5.3/lightning_logs/dfm/version_46/metrics.csv +0 -12
  221. dfm_python-0.5.3/lightning_logs/dfm/version_47/metrics.csv +0 -12
  222. dfm_python-0.5.3/lightning_logs/dfm/version_48/metrics.csv +0 -12
  223. dfm_python-0.5.3/lightning_logs/dfm/version_49/metrics.csv +0 -12
  224. dfm_python-0.5.3/lightning_logs/dfm/version_50/metrics.csv +0 -12
  225. dfm_python-0.5.3/lightning_logs/dfm/version_51/metrics.csv +0 -12
  226. dfm_python-0.5.3/lightning_logs/dfm/version_52/metrics.csv +0 -12
  227. dfm_python-0.5.3/lightning_logs/dfm/version_53/metrics.csv +0 -12
  228. dfm_python-0.5.3/lightning_logs/dfm/version_54/metrics.csv +0 -12
  229. dfm_python-0.5.3/lightning_logs/dfm/version_55/metrics.csv +0 -12
  230. dfm_python-0.5.3/lightning_logs/dfm/version_57/metrics.csv +0 -12
  231. dfm_python-0.5.3/lightning_logs/dfm/version_58/metrics.csv +0 -12
  232. dfm_python-0.5.3/lightning_logs/dfm/version_59/metrics.csv +0 -12
  233. dfm_python-0.5.3/lightning_logs/dfm/version_6/metrics.csv +0 -12
  234. dfm_python-0.5.3/lightning_logs/dfm/version_60/metrics.csv +0 -12
  235. dfm_python-0.5.3/lightning_logs/dfm/version_61/metrics.csv +0 -12
  236. dfm_python-0.5.3/lightning_logs/dfm/version_62/metrics.csv +0 -12
  237. dfm_python-0.5.3/lightning_logs/dfm/version_63/metrics.csv +0 -12
  238. dfm_python-0.5.3/lightning_logs/dfm/version_64/metrics.csv +0 -12
  239. dfm_python-0.5.3/lightning_logs/dfm/version_65/metrics.csv +0 -12
  240. dfm_python-0.5.3/lightning_logs/dfm/version_66/metrics.csv +0 -12
  241. dfm_python-0.5.3/lightning_logs/dfm/version_67/metrics.csv +0 -12
  242. dfm_python-0.5.3/lightning_logs/dfm/version_69/metrics.csv +0 -12
  243. dfm_python-0.5.3/lightning_logs/dfm/version_7/metrics.csv +0 -12
  244. dfm_python-0.5.3/lightning_logs/dfm/version_70/metrics.csv +0 -12
  245. dfm_python-0.5.3/lightning_logs/dfm/version_71/metrics.csv +0 -12
  246. dfm_python-0.5.3/lightning_logs/dfm/version_72/metrics.csv +0 -12
  247. dfm_python-0.5.3/lightning_logs/dfm/version_73/metrics.csv +0 -12
  248. dfm_python-0.5.3/lightning_logs/dfm/version_74/metrics.csv +0 -12
  249. dfm_python-0.5.3/lightning_logs/dfm/version_75/metrics.csv +0 -2
  250. dfm_python-0.5.3/lightning_logs/dfm/version_76/metrics.csv +0 -12
  251. dfm_python-0.5.3/lightning_logs/dfm/version_77/metrics.csv +0 -12
  252. dfm_python-0.5.3/lightning_logs/dfm/version_78/metrics.csv +0 -12
  253. dfm_python-0.5.3/lightning_logs/dfm/version_79/metrics.csv +0 -12
  254. dfm_python-0.5.3/lightning_logs/dfm/version_8/metrics.csv +0 -12
  255. dfm_python-0.5.3/lightning_logs/dfm/version_80/metrics.csv +0 -12
  256. dfm_python-0.5.3/lightning_logs/dfm/version_82/metrics.csv +0 -12
  257. dfm_python-0.5.3/lightning_logs/dfm/version_83/metrics.csv +0 -12
  258. dfm_python-0.5.3/lightning_logs/dfm/version_84/metrics.csv +0 -12
  259. dfm_python-0.5.3/lightning_logs/dfm/version_85/metrics.csv +0 -12
  260. dfm_python-0.5.3/lightning_logs/dfm/version_86/metrics.csv +0 -12
  261. dfm_python-0.5.3/lightning_logs/dfm/version_87/metrics.csv +0 -12
  262. dfm_python-0.5.3/lightning_logs/dfm/version_88/metrics.csv +0 -12
  263. dfm_python-0.5.3/lightning_logs/dfm/version_89/metrics.csv +0 -12
  264. dfm_python-0.5.3/lightning_logs/dfm/version_9/metrics.csv +0 -12
  265. dfm_python-0.5.3/lightning_logs/dfm/version_90/metrics.csv +0 -12
  266. dfm_python-0.5.3/lightning_logs/dfm/version_91/metrics.csv +0 -12
  267. dfm_python-0.5.3/lightning_logs/dfm/version_92/metrics.csv +0 -12
  268. dfm_python-0.5.3/lightning_logs/dfm/version_94/metrics.csv +0 -12
  269. dfm_python-0.5.3/lightning_logs/dfm/version_95/metrics.csv +0 -12
  270. dfm_python-0.5.3/lightning_logs/dfm/version_96/metrics.csv +0 -12
  271. dfm_python-0.5.3/lightning_logs/dfm/version_97/metrics.csv +0 -12
  272. dfm_python-0.5.3/lightning_logs/dfm/version_98/metrics.csv +0 -12
  273. dfm_python-0.5.3/lightning_logs/dfm/version_99/metrics.csv +0 -12
  274. dfm_python-0.5.3/src/dfm_python/lightning/data_module.py +0 -771
  275. dfm_python-0.5.3/src/dfm_python/lightning/scaling.py +0 -444
  276. dfm_python-0.5.3/src/test/test_nowcast.py +0 -572
  277. dfm_python-0.5.3/src/test/test_nowcast_implementation.py +0 -354
  278. {dfm_python-0.5.3 → dfm_python-0.5.52}/.git +0 -0
  279. {dfm_python-0.5.3 → dfm_python-0.5.52}/.gitignore +0 -0
  280. {dfm_python-0.5.3 → dfm_python-0.5.52}/.python-version +0 -0
  281. {dfm_python-0.5.3 → dfm_python-0.5.52}/LICENSE +0 -0
  282. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/experiment/test_finance.yaml +0 -0
  283. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/experiment/test_macro.yaml +0 -0
  284. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/model/ddfm.yaml +0 -0
  285. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/model/dfm.yaml +0 -0
  286. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KO3YEARC.yaml +0 -0
  287. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBFDSAAF.yaml +0 -0
  288. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBFINAAF.yaml +0 -0
  289. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBFXSAAF.yaml +0 -0
  290. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSESI_R.yaml +0 -0
  291. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSIBCEQ.yaml +0 -0
  292. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSIBCOQ.yaml +0 -0
  293. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSIBNER.yaml +0 -0
  294. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSIBNMR.yaml +0 -0
  295. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSIEMAR.yaml +0 -0
  296. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSIHAPR.yaml +0 -0
  297. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSIIMER.yaml +0 -0
  298. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSIIMPR.yaml +0 -0
  299. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBSIXMER.yaml +0 -0
  300. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOBUSINVR.yaml +0 -0
  301. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCALL_.yaml +0 -0
  302. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCNFBUSR.yaml +0 -0
  303. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCNFCONR.yaml +0 -0
  304. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCNGOV_D.yaml +0 -0
  305. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCNPER_D.yaml +0 -0
  306. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCOBUSIR.yaml +0 -0
  307. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCONPMTH.yaml +0 -0
  308. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCONPRCF.yaml +0 -0
  309. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCONSTRP.yaml +0 -0
  310. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCPCOREF.yaml +0 -0
  311. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCPEXFEF.yaml +0 -0
  312. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCREU__A.yaml +0 -0
  313. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSECDMR.yaml +0 -0
  314. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSECEMR.yaml +0 -0
  315. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSEMEMR.yaml +0 -0
  316. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSEOHDR.yaml +0 -0
  317. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSEOHSR.yaml +0 -0
  318. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSHHEMR.yaml +0 -0
  319. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSHHLMR.yaml +0 -0
  320. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSMTTOA.yaml +0 -0
  321. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSPHIMR.yaml +0 -0
  322. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCSPSPMR.yaml +0 -0
  323. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOCYLEADR.yaml +0 -0
  324. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KODBLNEQA.yaml +0 -0
  325. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KODBLNHSA.yaml +0 -0
  326. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEMPCONF.yaml +0 -0
  327. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEMPMANF.yaml +0 -0
  328. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEMPTOTO.yaml +0 -0
  329. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEMPWREP.yaml +0 -0
  330. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEQUIMAE.yaml +0 -0
  331. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEQUIPTE.yaml +0 -0
  332. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEQUITTE.yaml +0 -0
  333. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEXCHINA.yaml +0 -0
  334. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEXNGS_D.yaml +0 -0
  335. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEXPGDSA.yaml +0 -0
  336. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOEXPPRCF.yaml +0 -0
  337. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOGCFCNSD.yaml +0 -0
  338. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOGCFFNVD.yaml +0 -0
  339. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOGDP___D.yaml +0 -0
  340. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOGFCF__D.yaml +0 -0
  341. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOHWRWEMP.yaml +0 -0
  342. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOIMNGS_D.yaml +0 -0
  343. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOIMPCONA.yaml +0 -0
  344. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOIMPGDDA.yaml +0 -0
  345. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOIMPGDSA.yaml +0 -0
  346. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOIMPPRCF.yaml +0 -0
  347. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOIPALL_G.yaml +0 -0
  348. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOIPMIMAG.yaml +0 -0
  349. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOLRLTCO.yaml +0 -0
  350. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOLRLTHH.yaml +0 -0
  351. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOMPCAPGG.yaml +0 -0
  352. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOMPCONDG.yaml +0 -0
  353. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOMPCONGG.yaml +0 -0
  354. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOMPCONNG.yaml +0 -0
  355. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOMPRI30G.yaml +0 -0
  356. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOMSCAPGG.yaml +0 -0
  357. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOMSCONGG.yaml +0 -0
  358. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KONETTRDF.yaml +0 -0
  359. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KONEWCONA.yaml +0 -0
  360. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOPICAPGG.yaml +0 -0
  361. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOPICONGG.yaml +0 -0
  362. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOPIMANUG.yaml +0 -0
  363. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOPOPACTE.yaml +0 -0
  364. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOPPSRM_F.yaml +0 -0
  365. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOPROPRCF.yaml +0 -0
  366. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOPSMANUG.yaml +0 -0
  367. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KORCNST.yaml +0 -0
  368. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KORELEC.yaml +0 -0
  369. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KORFBEV.yaml +0 -0
  370. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KORMACH.yaml +0 -0
  371. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KORMCMP.yaml +0 -0
  372. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOROCOINF.yaml +0 -0
  373. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KORWHLS.yaml +0 -0
  374. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOSHRPRCF.yaml +0 -0
  375. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOSIAHOTE.yaml +0 -0
  376. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOSIAI__E.yaml +0 -0
  377. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOSIARRLE.yaml +0 -0
  378. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOSIAWRTE.yaml +0 -0
  379. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOSSBFMBE.yaml +0 -0
  380. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOUN_TOTQ.yaml +0 -0
  381. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOUS____.yaml +0 -0
  382. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOVALCONA.yaml +0 -0
  383. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOWRCCNSE.yaml +0 -0
  384. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOWRCDURE.yaml +0 -0
  385. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOWRCNODE.yaml +0 -0
  386. {dfm_python-0.5.3 → dfm_python-0.5.52}/config/series/KOWRCSEME.yaml +0 -0
  387. {dfm_python-0.5.3 → dfm_python-0.5.52}/data/finance.csv +0 -0
  388. {dfm_python-0.5.3 → dfm_python-0.5.52}/data/macro.csv +0 -0
  389. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/config/__init__.py +0 -0
  390. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/config/results.py +0 -0
  391. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/config/utils.py +0 -0
  392. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/data/__init__.py +0 -0
  393. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/data/dataloader.py +0 -0
  394. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/data/dataset.py +0 -0
  395. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/encoder/base.py +0 -0
  396. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/encoder/pca.py +0 -0
  397. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/logger/__init__.py +0 -0
  398. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/logger/inference_logger.py +0 -0
  399. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/logger/logger.py +0 -0
  400. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/logger/train_logger.py +0 -0
  401. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/models/utils.py +0 -0
  402. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/ssm/__init__.py +0 -0
  403. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/ssm/em.py +0 -0
  404. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/ssm/kalman.py +0 -0
  405. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/ssm/utils.py +0 -0
  406. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/trainer/dfm.py +0 -0
  407. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/utils/data.py +0 -0
  408. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/utils/diagnostics.py +0 -0
  409. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/utils/helpers.py +0 -0
  410. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/utils/statespace.py +0 -0
  411. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/dfm_python/utils/time.py +0 -0
  412. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_config.py +0 -0
  413. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_helpers.py +0 -0
  414. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_logger.py +0 -0
  415. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_mixed_frequency.py +0 -0
  416. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_models.py +0 -0
  417. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_predict.py +0 -0
  418. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_sktime_integration.py +0 -0
  419. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_ssm.py +0 -0
  420. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_trainer.py +0 -0
  421. {dfm_python-0.5.3 → dfm_python-0.5.52}/src/test/test_utils.py +0 -0
  422. {dfm_python-0.5.3 → dfm_python-0.5.52}/test_update_manual.py +0 -0
@@ -1,12 +1,11 @@
1
- # Include only the DFM module (src/nowcasting)
1
+ # Include only the DFM module (src/dfm_python)
2
2
  # Exclude all application-specific code (adapters, database, scripts, config, etc.)
3
3
 
4
4
  include README.md
5
- include LICENSE
6
5
  include pyproject.toml
7
6
 
8
- # Include only the nowcasting package
9
- recursive-include src/nowcasting *.py
7
+ # Include only the dfm_python package
8
+ recursive-include src/dfm_python *.py
10
9
 
11
10
  # Exclude application-specific directories
12
11
  prune adapters
@@ -29,4 +28,5 @@ exclude *.sql
29
28
  exclude *.lock
30
29
  exclude .gitignore
31
30
  exclude .env*
31
+ exclude LICENSE
32
32
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dfm-python
3
- Version: 0.5.3
3
+ Version: 0.5.52
4
4
  Summary: Dynamic Factor Model (DFM) estimation and nowcasting in Python
5
5
  Project-URL: Homepage, https://github.com/yourusername/dfm-python
6
6
  Project-URL: Documentation, https://github.com/yourusername/dfm-python#readme
@@ -8,7 +8,6 @@ Project-URL: Repository, https://github.com/yourusername/dfm-python
8
8
  Project-URL: Issues, https://github.com/yourusername/dfm-python/issues
9
9
  Author: Minkey Chang
10
10
  License: MIT
11
- License-File: LICENSE
12
11
  Keywords: dfm,dynamic-factor-model,econometrics,forecasting,nowcasting,time-series
13
12
  Classifier: Development Status :: 4 - Beta
14
13
  Classifier: Intended Audience :: Science/Research
@@ -330,6 +329,95 @@ result.confidence_interval # Confidence interval
330
329
  result.factors_at_view # Factor state at view date
331
330
  ```
332
331
 
332
+ ## Mixed-Frequency Data Handling
333
+
334
+ ### Clock Frequency and Target Series
335
+
336
+ The package supports mixed-frequency data where the **clock frequency** (the frequency at which factors evolve) can differ from the **target series frequency**. The clock must always be the **minimum frequency** among all series (i.e., the fastest frequency).
337
+
338
+ ### Supported Frequency Combinations
339
+
340
+ | Frequencies | Clock | Target | Status | Description |
341
+ |------------|-------|--------|--------|-------------|
342
+ | `[d]` | `d` | `d` | ✅ | All daily series |
343
+ | `[d, w]` | `d` | `d` | ✅ | Daily clock, weekly series (7-day uniform average) |
344
+ | `[w, m]` | `w` | `m` | ✅ | Weekly clock, monthly series (4-week uniform average) |
345
+ | `[m]` | `m` | `m` | ✅ | All monthly series |
346
+ | `[m, q]` | `m` | `q` | ✅ | Monthly clock, quarterly series (5-month tent kernel) |
347
+
348
+ ### Weekly Clock with Monthly Series
349
+
350
+ When `clock='w'` and target series is `frequency='m'`:
351
+
352
+ **Data Structure:**
353
+ - All data is organized at weekly frequency (T × N, where T is weekly time points)
354
+ - Weekly series: Full weekly observations (week-over-week changes)
355
+ - Monthly series: 3-4 NaN values per month, 1 observation per month (week-over-week changes)
356
+
357
+ **Model Interpretation:**
358
+ - **Weekly data**: Week-over-week changes (전월비 증감)
359
+ - **Monthly data**: 4-week uniform average of weekly changes (주간 전월비 증감의 4주 평균)
360
+ - **DFM factors**: Weekly frequency, week-over-week changes
361
+ - **Monthly observation**: Connected to 4 weekly state variables via uniform weights `[1, 1, 1, 1]`
362
+
363
+ **Tent Kernel:**
364
+ ```python
365
+ ('m', 'w'): np.array([1, 1, 1, 1]) # 4-week uniform average
366
+ # Normalized: [0.25, 0.25, 0.25, 0.25]
367
+ ```
368
+
369
+ **Prediction:**
370
+ - `predict(horizon=4)` returns 4 weekly forecasts (clock frequency)
371
+ - Monthly series predictions are also at weekly frequency
372
+ - **To get monthly forecast**: Average the 4 weekly predictions for that month
373
+ - The monthly prediction equals the average of 4 weekly factors (due to uniform average constraint)
374
+
375
+ **Mathematical Relationship:**
376
+ ```
377
+ Monthly observation = c × (f_t + f_{t-1} + f_{t-2} + f_{t-3})
378
+ = c × 4 × mean(f_t, f_{t-1}, f_{t-2}, f_{t-3})
379
+ = mean(f_t, f_{t-1}, f_{t-2}, f_{t-3}) (when c = 0.25)
380
+ ```
381
+
382
+ Where:
383
+ - `f_t` is the weekly factor at time t
384
+ - `c` is the loading coefficient (constrained to be uniform via R_mat)
385
+ - The constraint `R_mat @ Cc = q` ensures `Cc[0] = Cc[1] = Cc[2] = Cc[3]` (uniform average)
386
+
387
+ ### Monthly Clock with Quarterly Series
388
+
389
+ When `clock='m'` and target series is `frequency='q'`:
390
+
391
+ **Tent Kernel:**
392
+ ```python
393
+ ('q', 'm'): np.array([1, 2, 3, 2, 1]) # 5-month tent kernel
394
+ # Normalized: [0.111, 0.222, 0.333, 0.222, 0.111]
395
+ ```
396
+
397
+ **Model Interpretation:**
398
+ - Quarterly observation = weighted average of 5 monthly factors (tent shape, peaking at middle month)
399
+ - This is the traditional DFM case (quarterly → monthly)
400
+
401
+ ### Prediction Behavior
402
+
403
+ **Important Notes:**
404
+ 1. **Predictions are always at clock frequency**: `predict(horizon=4)` with `clock='w'` returns 4 weekly forecasts
405
+ 2. **No NaN in predictions**: All series (including slower-frequency ones) get predictions at clock frequency
406
+ 3. **Aggregation for target frequency**: To get target-frequency forecasts, aggregate clock-frequency predictions:
407
+ - Monthly target with weekly clock: Average 4 weekly predictions per month
408
+ - Quarterly target with monthly clock: Apply tent kernel `[1, 2, 3, 2, 1]` to 5 monthly predictions
409
+
410
+ **Example:**
411
+ ```python
412
+ # clock='w', target='m', predict(horizon=4)
413
+ X_forecast = model.predict(horizon=4) # Returns (4 × N) weekly forecasts
414
+
415
+ # Get monthly forecast for target series
416
+ monthly_idx = 2 # Index of monthly target series
417
+ weekly_forecasts = X_forecast[:, monthly_idx] # 4 weekly values
418
+ monthly_forecast = np.mean(weekly_forecasts) # Average to get monthly value
419
+ ```
420
+
333
421
  ## Architecture
334
422
 
335
423
  ### Core Modules
@@ -390,10 +478,16 @@ pytest src/test/test_trainer.py -v
390
478
 
391
479
  ## Project Status
392
480
 
393
- **Version**: 0.5.1
481
+ **Version**: 0.5.4
394
482
  **Status**: Stable
395
483
  **Python**: 3.10+
396
484
 
485
+ ### What's New in 0.5.4
486
+
487
+ - **Version consistency**: Unified version numbers across all files
488
+ - **Documentation updates**: Updated README and package documentation
489
+ - **Stability improvements**: Enhanced numerical stability and error handling
490
+
397
491
  ### What's New in 0.5.1
398
492
 
399
493
  - **New `update()` method**: Replaces legacy `nowcast()` with flexible `update().predict()` pattern
@@ -274,6 +274,95 @@ result.confidence_interval # Confidence interval
274
274
  result.factors_at_view # Factor state at view date
275
275
  ```
276
276
 
277
+ ## Mixed-Frequency Data Handling
278
+
279
+ ### Clock Frequency and Target Series
280
+
281
+ The package supports mixed-frequency data where the **clock frequency** (the frequency at which factors evolve) can differ from the **target series frequency**. The clock must always be the **minimum frequency** among all series (i.e., the fastest frequency).
282
+
283
+ ### Supported Frequency Combinations
284
+
285
+ | Frequencies | Clock | Target | Status | Description |
286
+ |------------|-------|--------|--------|-------------|
287
+ | `[d]` | `d` | `d` | ✅ | All daily series |
288
+ | `[d, w]` | `d` | `d` | ✅ | Daily clock, weekly series (7-day uniform average) |
289
+ | `[w, m]` | `w` | `m` | ✅ | Weekly clock, monthly series (4-week uniform average) |
290
+ | `[m]` | `m` | `m` | ✅ | All monthly series |
291
+ | `[m, q]` | `m` | `q` | ✅ | Monthly clock, quarterly series (5-month tent kernel) |
292
+
293
+ ### Weekly Clock with Monthly Series
294
+
295
+ When `clock='w'` and target series is `frequency='m'`:
296
+
297
+ **Data Structure:**
298
+ - All data is organized at weekly frequency (T × N, where T is weekly time points)
299
+ - Weekly series: Full weekly observations (week-over-week changes)
300
+ - Monthly series: 3-4 NaN values per month, 1 observation per month (week-over-week changes)
301
+
302
+ **Model Interpretation:**
303
+ - **Weekly data**: Week-over-week changes (전월비 증감)
304
+ - **Monthly data**: 4-week uniform average of weekly changes (주간 전월비 증감의 4주 평균)
305
+ - **DFM factors**: Weekly frequency, week-over-week changes
306
+ - **Monthly observation**: Connected to 4 weekly state variables via uniform weights `[1, 1, 1, 1]`
307
+
308
+ **Tent Kernel:**
309
+ ```python
310
+ ('m', 'w'): np.array([1, 1, 1, 1]) # 4-week uniform average
311
+ # Normalized: [0.25, 0.25, 0.25, 0.25]
312
+ ```
313
+
314
+ **Prediction:**
315
+ - `predict(horizon=4)` returns 4 weekly forecasts (clock frequency)
316
+ - Monthly series predictions are also at weekly frequency
317
+ - **To get monthly forecast**: Average the 4 weekly predictions for that month
318
+ - The monthly prediction equals the average of 4 weekly factors (due to uniform average constraint)
319
+
320
+ **Mathematical Relationship:**
321
+ ```
322
+ Monthly observation = c × (f_t + f_{t-1} + f_{t-2} + f_{t-3})
323
+ = c × 4 × mean(f_t, f_{t-1}, f_{t-2}, f_{t-3})
324
+ = mean(f_t, f_{t-1}, f_{t-2}, f_{t-3}) (when c = 0.25)
325
+ ```
326
+
327
+ Where:
328
+ - `f_t` is the weekly factor at time t
329
+ - `c` is the loading coefficient (constrained to be uniform via R_mat)
330
+ - The constraint `R_mat @ Cc = q` ensures `Cc[0] = Cc[1] = Cc[2] = Cc[3]` (uniform average)
331
+
332
+ ### Monthly Clock with Quarterly Series
333
+
334
+ When `clock='m'` and target series is `frequency='q'`:
335
+
336
+ **Tent Kernel:**
337
+ ```python
338
+ ('q', 'm'): np.array([1, 2, 3, 2, 1]) # 5-month tent kernel
339
+ # Normalized: [0.111, 0.222, 0.333, 0.222, 0.111]
340
+ ```
341
+
342
+ **Model Interpretation:**
343
+ - Quarterly observation = weighted average of 5 monthly factors (tent shape, peaking at middle month)
344
+ - This is the traditional DFM case (quarterly → monthly)
345
+
346
+ ### Prediction Behavior
347
+
348
+ **Important Notes:**
349
+ 1. **Predictions are always at clock frequency**: `predict(horizon=4)` with `clock='w'` returns 4 weekly forecasts
350
+ 2. **No NaN in predictions**: All series (including slower-frequency ones) get predictions at clock frequency
351
+ 3. **Aggregation for target frequency**: To get target-frequency forecasts, aggregate clock-frequency predictions:
352
+ - Monthly target with weekly clock: Average 4 weekly predictions per month
353
+ - Quarterly target with monthly clock: Apply tent kernel `[1, 2, 3, 2, 1]` to 5 monthly predictions
354
+
355
+ **Example:**
356
+ ```python
357
+ # clock='w', target='m', predict(horizon=4)
358
+ X_forecast = model.predict(horizon=4) # Returns (4 × N) weekly forecasts
359
+
360
+ # Get monthly forecast for target series
361
+ monthly_idx = 2 # Index of monthly target series
362
+ weekly_forecasts = X_forecast[:, monthly_idx] # 4 weekly values
363
+ monthly_forecast = np.mean(weekly_forecasts) # Average to get monthly value
364
+ ```
365
+
277
366
  ## Architecture
278
367
 
279
368
  ### Core Modules
@@ -334,10 +423,16 @@ pytest src/test/test_trainer.py -v
334
423
 
335
424
  ## Project Status
336
425
 
337
- **Version**: 0.5.1
426
+ **Version**: 0.5.4
338
427
  **Status**: Stable
339
428
  **Python**: 3.10+
340
429
 
430
+ ### What's New in 0.5.4
431
+
432
+ - **Version consistency**: Unified version numbers across all files
433
+ - **Documentation updates**: Updated README and package documentation
434
+ - **Stability improvements**: Enhanced numerical stability and error handling
435
+
341
436
  ### What's New in 0.5.1
342
437
 
343
438
  - **New `update()` method**: Replaces legacy `nowcast()` with flexible `update().predict()` pattern
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dfm-python"
3
- version = "0.5.3"
3
+ version = "0.5.52"
4
4
  description = "Dynamic Factor Model (DFM) estimation and nowcasting in Python"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -65,6 +65,11 @@ all = [
65
65
  requires = ["hatchling"]
66
66
  build-backend = "hatchling.build"
67
67
 
68
+ [tool.hatch.metadata]
69
+ # Prevent automatic license-file field addition
70
+ allow-direct-references = false
71
+ allow-license-file = false
72
+
68
73
  [tool.hatch.build.targets.wheel]
69
74
  # Include DFM module
70
75
  # All application-specific code (adapters, database, scripts, etc.) is automatically excluded
@@ -78,6 +83,11 @@ exclude = [
78
83
  "test_venv/**",
79
84
  ]
80
85
 
86
+ [dependency-groups]
87
+ dev = [
88
+ "pytest>=9.0.1",
89
+ ]
90
+
81
91
  [project.urls]
82
92
  Homepage = "https://github.com/yourusername/dfm-python"
83
93
  Documentation = "https://github.com/yourusername/dfm-python#readme"
@@ -65,7 +65,7 @@ Note: DFMConfig and SeriesConfig are internal implementation details.
65
65
  For detailed documentation, see the README.md file and the tutorial notebooks/scripts.
66
66
  """
67
67
 
68
- __version__ = "0.5.2"
68
+ __version__ = "0.5.5"
69
69
 
70
70
  # ============================================================================
71
71
  # PUBLIC API DEFINITION
@@ -85,8 +85,8 @@ __version__ = "0.5.2"
85
85
  # Configuration (from config/ subpackage)
86
86
  from .config import (
87
87
  DEFAULT_BLOCK_NAME,
88
- ConfigSource, YamlSource, DictSource, HydraSource,
89
- MergedConfigSource, make_config_source,
88
+ ConfigSource, YamlSource, HydraSource,
89
+ make_config_source,
90
90
  )
91
91
  # Internal imports (for backward compatibility, but not recommended)
92
92
  from .config import DFMConfig, SeriesConfig # Internal use only
@@ -102,7 +102,9 @@ from .utils.time import calculate_rmse
102
102
  # Users can import these directly from dfm_python
103
103
  from .lightning import (
104
104
  DFMDataModule,
105
+ DDFMDataModule, # DDFM-specific DataModule
105
106
  DFMDataset, # Dataset class (usually not needed directly)
107
+ DDFMDataset, # DDFM Dataset class (usually not needed directly)
106
108
  KalmanFilter, # Module class
107
109
  EMAlgorithm, # Module class
108
110
  )
@@ -111,8 +113,8 @@ from .lightning import (
111
113
  from .models.base import BaseFactorModel
112
114
  from .models.dfm import DFM
113
115
 
114
- # DDFM high-level API and low-level model (PyTorch is mandatory)
115
- from .models.ddfm import DDFM, DDFMModel
116
+ # DDFM high-level API (PyTorch is mandatory)
117
+ from .models.ddfm import DDFM
116
118
 
117
119
  __all__ = [
118
120
  # Core classes
@@ -122,8 +124,8 @@ __all__ = [
122
124
  # Constants
123
125
  'DEFAULT_BLOCK_NAME',
124
126
  # Config sources
125
- 'ConfigSource', 'YamlSource', 'DictSource', 'HydraSource',
126
- 'MergedConfigSource', 'make_config_source',
127
+ 'ConfigSource', 'YamlSource', 'HydraSource',
128
+ 'make_config_source',
127
129
  # Low-level API (functional interface - advanced usage)
128
130
  'BaseResult', 'DFMResult', 'DDFMResult', 'calculate_rmse', 'diagnose_series', 'print_series_diagnosis',
129
131
  ]
@@ -131,13 +133,14 @@ __all__ = [
131
133
  # DDFM high-level API (PyTorch is mandatory)
132
134
  __all__.extend([
133
135
  'DDFM', # High-level API class
134
- 'DDFMModel', # Low-level implementation (used internally)
135
136
  ])
136
137
 
137
138
  # Lightning modules (mandatory dependency)
138
139
  __all__.extend([
139
140
  'DFMDataModule',
141
+ 'DDFMDataModule', # DDFM-specific DataModule
140
142
  'DFMDataset', # Dataset class (usually not needed directly)
143
+ 'DDFMDataset', # DDFM Dataset class (usually not needed directly)
141
144
  'KalmanFilter', # Module class
142
145
  'EMAlgorithm', # Module class
143
146
  ])
@@ -208,13 +208,16 @@ class YamlSource:
208
208
  except (ValueError, TypeError):
209
209
  release_date = None
210
210
 
211
+ # Remove transformation and blocks if present (not in SeriesConfig)
212
+ series_data_clean = {k: v for k, v in series_data.items()
213
+ if k not in ['transformation', 'blocks']}
211
214
  series_list.append(SeriesConfig(
212
215
  series_id=series_id,
213
- series_name=series_data.get('series_name', series_id),
214
- frequency=series_data.get('frequency', 'm'),
215
- transformation=series_data.get('transformation', 'lin'),
216
- blocks=series_data.get('blocks', []),
217
- release_date=release_date
216
+ series_name=series_data_clean.get('series_name', series_id),
217
+ frequency=series_data_clean.get('frequency', 'm'),
218
+ # transformation removed - handled by preprocessing pipeline
219
+ # blocks removed - defined in DFMConfig
220
+ release_date=series_data_clean.get('release_date', release_date)
218
221
  ))
219
222
 
220
223
  # If no series loaded from separate files, try to get from main config
@@ -224,17 +227,23 @@ class YamlSource:
224
227
  for series_item in series_data:
225
228
  if isinstance(series_item, str):
226
229
  # Series is just a string ID - create minimal config
227
- series_list.append(SeriesConfig(series_id=series_item, frequency='m', transformation='lin', blocks=[1]))
230
+ series_list.append(SeriesConfig(series_id=series_item, frequency='m'))
228
231
  elif isinstance(series_item, dict):
229
- series_list.append(SeriesConfig(**series_item))
232
+ # Remove transformation and blocks if present (not in SeriesConfig)
233
+ series_item_clean = {k: v for k, v in series_item.items()
234
+ if k not in ['transformation', 'blocks']}
235
+ series_list.append(SeriesConfig(**series_item_clean))
230
236
  elif isinstance(series_data, dict):
231
237
  for series_id, series_item in series_data.items():
232
238
  if isinstance(series_item, dict):
233
239
  series_item['series_id'] = series_id
234
- series_list.append(SeriesConfig(**series_item))
240
+ # Remove transformation and blocks if present (not in SeriesConfig)
241
+ series_item_clean = {k: v for k, v in series_item.items()
242
+ if k not in ['transformation', 'blocks']}
243
+ series_list.append(SeriesConfig(**series_item_clean))
235
244
  elif isinstance(series_item, str):
236
245
  # Series value is just a string - create minimal config
237
- series_list.append(SeriesConfig(series_id=series_id, frequency='m', transformation='lin', blocks=[1]))
246
+ series_list.append(SeriesConfig(series_id=series_id, frequency='m'))
238
247
 
239
248
  # Load block properties from model config (factors, ar_lag, clock)
240
249
  # Model config defines all blocks and their properties
@@ -250,28 +259,8 @@ class YamlSource:
250
259
  if blocks_dict_raw is not None:
251
260
  blocks_properties_from_config.update(blocks_dict_raw)
252
261
 
253
- # Derive blocks from series configs (new pattern: blocks discovered from series)
254
- # Collect all unique block names from series
255
- block_names_from_series = set()
256
- for series in series_list:
257
- if hasattr(series, 'blocks') and series.blocks:
258
- # Handle both list of strings and list of ints
259
- if isinstance(series.blocks, list):
260
- for block in series.blocks:
261
- if isinstance(block, str):
262
- block_names_from_series.add(block)
263
-
264
- # If no blocks specified in series, use default single block
265
- # Use first block from model config if available, otherwise create default
266
- if not block_names_from_series:
267
- # Check if model config defines blocks
268
- if blocks_properties_from_config:
269
- # Use first block from model config
270
- first_block_name = list(blocks_properties_from_config.keys())[0]
271
- block_names_from_series.add(first_block_name)
272
- else:
273
- # Create default generic block
274
- block_names_from_series.add(DEFAULT_BLOCK_NAME)
262
+ # Note: SeriesConfig no longer contains blocks information.
263
+ # Blocks are defined in DFMConfig, not in SeriesConfig.
275
264
 
276
265
  # Create block dicts for each block
277
266
  # Priority: 1) Model config properties, 2) Defaults from main_settings
@@ -296,24 +285,13 @@ class YamlSource:
296
285
  'clock': default_clock
297
286
  }
298
287
 
299
- # Then, ensure all blocks referenced by series exist
300
- for block_name in block_names_from_series:
301
- if block_name not in blocks_dict:
302
- # Create block with defaults if not in model config
303
- blocks_dict[block_name] = {
304
- 'factors': 1,
305
- 'ar_lag': default_ar_lag,
306
- 'clock': default_clock
307
- }
308
-
309
- # Convert block names to list for from_dict() if series use integer block indices
310
- # Check if series use integer indices instead of block names
311
- block_names_list = None
312
- if series_list:
313
- first_series_blocks = series_list[0].blocks if hasattr(series_list[0], 'blocks') else []
314
- if first_series_blocks and isinstance(first_series_blocks[0], int):
315
- # Series use integer indices, need block_names for from_dict()
316
- block_names_list = list(blocks_dict.keys())
288
+ # If no blocks specified in config, use default single block
289
+ if not blocks_dict:
290
+ blocks_dict[DEFAULT_BLOCK_NAME] = {
291
+ 'factors': 1,
292
+ 'ar_lag': default_ar_lag,
293
+ 'clock': default_clock
294
+ }
317
295
 
318
296
  # Build dictionary for from_dict() which handles type detection
319
297
  # Include all main_settings (which may contain DDFM parameters from model config)
@@ -323,10 +301,6 @@ class YamlSource:
323
301
  **main_settings
324
302
  }
325
303
 
326
- # Add block_names if series use integer indices
327
- if block_names_list is not None:
328
- config_dict['block_names'] = block_names_list
329
-
330
304
  # Use from_dict() which now correctly detects DDFM configs
331
305
  # The detection bug has been fixed in schema.py
332
306
  return DFMConfig.from_dict(config_dict)
@@ -644,12 +618,16 @@ if HYDRA_AVAILABLE and ConfigStore is not None:
644
618
 
645
619
  @schema_dataclass
646
620
  class SeriesConfigSchema:
647
- """Schema for SeriesConfig validation in Hydra."""
621
+ """Schema for SeriesConfig validation in Hydra.
622
+
623
+ Note: transformation is handled by preprocessing pipeline, not in SeriesConfig.
624
+ Note: blocks are defined in DFMConfig, not in SeriesConfig.
625
+ """
648
626
  series_id: str
649
627
  series_name: str
650
628
  frequency: str
651
- transformation: str
652
- blocks: ListType[int]
629
+ # transformation removed - handled by preprocessing pipeline
630
+ # blocks removed - defined in DFMConfig
653
631
  units: Optional[str] = None # Optional, for display only
654
632
 
655
633
  @schema_dataclass