pytorch_optimizer 3.11.0__tar.gz → 4.0.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 (510) hide show
  1. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/ISSUE_TEMPLATE/bug_report.md +2 -2
  2. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/ci.yml +4 -4
  3. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/pr_automerge.yml +7 -3
  4. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/publish.yml +83 -66
  5. pytorch_optimizer-4.0.0/AGENTS.md +110 -0
  6. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/CHANGELOG.md +100 -0
  7. pytorch_optimizer-4.0.0/CONTRIBUTING.md +85 -0
  8. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/PKG-INFO +25 -12
  9. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/README.md +21 -3
  10. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/index.md +2 -0
  11. pytorch_optimizer-4.0.0/docs/changelogs/v3.11.0.md +67 -0
  12. pytorch_optimizer-4.0.0/docs/changelogs/v4.0.0.md +31 -0
  13. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/getting-started.md +17 -1
  14. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/optimizer.md +8 -0
  15. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/benchmark_foreach.py +9 -9
  16. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/huggingface_trainer_example.py +3 -3
  17. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/visualize_optimizers.py +39 -37
  18. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/justfile +1 -1
  19. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pyproject.toml +27 -26
  20. pytorch_optimizer-4.0.0/pytorch_optimizer/__init__.py +13 -0
  21. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/exception.py +10 -10
  22. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/optimizer.py +190 -129
  23. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/scheduler.py +17 -12
  24. pytorch_optimizer-4.0.0/pytorch_optimizer/base/type.py +24 -0
  25. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/__init__.py +32 -8
  26. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/bi_tempered.py +78 -48
  27. pytorch_optimizer-4.0.0/pytorch_optimizer/loss/cross_entropy.py +36 -0
  28. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/dice.py +33 -20
  29. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/f1.py +15 -5
  30. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/focal.py +64 -20
  31. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/jaccard.py +30 -19
  32. pytorch_optimizer-4.0.0/pytorch_optimizer/loss/ldam.py +50 -0
  33. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/lovasz.py +19 -9
  34. pytorch_optimizer-4.0.0/pytorch_optimizer/loss/tversky.py +42 -0
  35. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/__init__.py +44 -10
  36. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/chebyshev.py +25 -27
  37. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +25 -20
  38. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +8 -8
  39. pytorch_optimizer-4.0.0/pytorch_optimizer/lr_scheduler/linear_warmup.py +66 -0
  40. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/proportion.py +11 -10
  41. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/rex.py +10 -9
  42. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/wsd.py +21 -21
  43. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/__init__.py +271 -45
  44. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/a2grad.py +12 -12
  45. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adabelief.py +31 -26
  46. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adabound.py +14 -15
  47. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adadelta.py +9 -9
  48. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adafactor.py +47 -46
  49. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adagc.py +23 -21
  50. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adahessian.py +24 -22
  51. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adai.py +12 -12
  52. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adalite.py +13 -13
  53. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adam_mini.py +33 -22
  54. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamax.py +11 -15
  55. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamc.py +11 -11
  56. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamg.py +13 -13
  57. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamod.py +11 -12
  58. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamp.py +38 -38
  59. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adams.py +22 -16
  60. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamw.py +43 -33
  61. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adan.py +22 -24
  62. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adanorm.py +12 -12
  63. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adapnm.py +11 -11
  64. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adashift.py +17 -18
  65. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adasmooth.py +14 -14
  66. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ademamix.py +157 -34
  67. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adopt.py +19 -21
  68. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/agc.py +9 -6
  69. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/aggmo.py +8 -8
  70. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/aida.py +16 -16
  71. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/alig.py +15 -14
  72. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/amos.py +22 -24
  73. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ano.py +11 -11
  74. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/apollo.py +25 -24
  75. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/avagrad.py +10 -10
  76. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/bcos.py +19 -20
  77. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/came.py +29 -32
  78. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/conda.py +11 -11
  79. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/dadapt.py +77 -70
  80. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/demo.py +28 -28
  81. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/diffgrad.py +29 -24
  82. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/dual_adam.py +12 -12
  83. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/emonavi.py +49 -49
  84. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/exadam.py +10 -10
  85. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/experimental/ranger25.py +34 -32
  86. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fadam.py +15 -15
  87. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fira.py +14 -9
  88. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/flash_adamw.py +47 -43
  89. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/focus.py +9 -9
  90. pytorch_optimizer-4.0.0/pytorch_optimizer/optimizer/foreach_utils.py +102 -0
  91. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fp16.py +52 -58
  92. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fromage.py +7 -8
  93. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ftrl.py +8 -8
  94. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/galore.py +11 -8
  95. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/galore_utils.py +14 -14
  96. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/gradient_centralization.py +4 -4
  97. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/grams.py +10 -10
  98. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/gravity.py +7 -7
  99. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/grokfast.py +75 -66
  100. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/kate.py +9 -9
  101. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lamb.py +44 -44
  102. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/laprop.py +13 -12
  103. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lars.py +18 -19
  104. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lion.py +29 -29
  105. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lomo.py +66 -38
  106. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lookahead.py +20 -19
  107. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lora_rite.py +27 -27
  108. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/madgrad.py +29 -27
  109. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/magma.py +38 -35
  110. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/mars.py +25 -24
  111. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/msvag.py +7 -7
  112. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/muon.py +346 -115
  113. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/nero.py +12 -13
  114. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/novograd.py +11 -11
  115. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/orthograd.py +5 -7
  116. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/padam.py +11 -11
  117. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/pcgrad.py +22 -22
  118. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/pid.py +11 -11
  119. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/pnm.py +10 -10
  120. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/prodigy.py +19 -22
  121. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/psgd.py +67 -67
  122. pytorch_optimizer-4.0.0/pytorch_optimizer/optimizer/psgd_utils.py +108 -0
  123. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/qhadam.py +13 -17
  124. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/qhm.py +10 -10
  125. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/racs.py +48 -48
  126. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/radam.py +11 -11
  127. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ranger.py +16 -14
  128. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ranger21.py +45 -48
  129. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/rose.py +15 -20
  130. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/rotograd.py +40 -48
  131. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sam.py +238 -245
  132. pytorch_optimizer-4.0.0/pytorch_optimizer/optimizer/sara.py +211 -0
  133. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/schedulefree.py +76 -61
  134. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/scion.py +132 -129
  135. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sgd.py +105 -132
  136. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/shampoo.py +54 -50
  137. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/shampoo_utils.py +136 -138
  138. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sm3.py +17 -12
  139. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/snsm.py +26 -23
  140. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/soap.py +25 -26
  141. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sophia.py +26 -23
  142. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/spam.py +103 -64
  143. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/splus.py +34 -24
  144. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/srmm.py +10 -11
  145. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sso.py +52 -68
  146. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/swats.py +13 -13
  147. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/tam.py +26 -23
  148. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/tiger.py +13 -15
  149. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/trac.py +26 -24
  150. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/utils.py +91 -77
  151. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/yogi.py +11 -11
  152. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/scripts/update_docs.py +19 -19
  153. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/conftest.py +6 -8
  154. pytorch_optimizer-4.0.0/tests/fixtures.py +59 -0
  155. pytorch_optimizer-4.0.0/tests/optimizer_cases.py +96 -0
  156. pytorch_optimizer-4.0.0/tests/optimizers/__init__.py +1 -0
  157. pytorch_optimizer-4.0.0/tests/optimizers/test_a2grad.py +34 -0
  158. pytorch_optimizer-4.0.0/tests/optimizers/test_adabound.py +8 -0
  159. pytorch_optimizer-4.0.0/tests/optimizers/test_adafactor.py +22 -0
  160. pytorch_optimizer-4.0.0/tests/optimizers/test_adamwsn.py +12 -0
  161. pytorch_optimizer-4.0.0/tests/optimizers/test_amos.py +11 -0
  162. pytorch_optimizer-4.0.0/tests/optimizers/test_dadapt.py +34 -0
  163. pytorch_optimizer-4.0.0/tests/optimizers/test_emo.py +14 -0
  164. pytorch_optimizer-4.0.0/tests/optimizers/test_flash_adamw.py +203 -0
  165. pytorch_optimizer-4.0.0/tests/optimizers/test_fromage.py +7 -0
  166. pytorch_optimizer-4.0.0/tests/optimizers/test_galore.py +52 -0
  167. pytorch_optimizer-4.0.0/tests/optimizers/test_grokfast.py +29 -0
  168. pytorch_optimizer-4.0.0/tests/optimizers/test_hessian.py +22 -0
  169. pytorch_optimizer-4.0.0/tests/optimizers/test_kron.py +82 -0
  170. pytorch_optimizer-4.0.0/tests/optimizers/test_lomo.py +90 -0
  171. pytorch_optimizer-4.0.0/tests/optimizers/test_lora_rite.py +93 -0
  172. pytorch_optimizer-4.0.0/tests/optimizers/test_mars.py +10 -0
  173. pytorch_optimizer-4.0.0/tests/optimizers/test_muon.py +49 -0
  174. pytorch_optimizer-4.0.0/tests/optimizers/test_nero.py +39 -0
  175. pytorch_optimizer-4.0.0/tests/optimizers/test_racs.py +13 -0
  176. pytorch_optimizer-4.0.0/tests/optimizers/test_ranger21.py +35 -0
  177. pytorch_optimizer-4.0.0/tests/optimizers/test_rectified.py +20 -0
  178. pytorch_optimizer-4.0.0/tests/optimizers/test_rose.py +17 -0
  179. pytorch_optimizer-4.0.0/tests/optimizers/test_sara.py +16 -0
  180. pytorch_optimizer-4.0.0/tests/optimizers/test_schedulefree.py +13 -0
  181. pytorch_optimizer-4.0.0/tests/optimizers/test_scion.py +58 -0
  182. pytorch_optimizer-4.0.0/tests/optimizers/test_sgd.py +32 -0
  183. pytorch_optimizer-4.0.0/tests/optimizers/test_shampoo.py +147 -0
  184. pytorch_optimizer-4.0.0/tests/optimizers/test_sign_sgd.py +53 -0
  185. pytorch_optimizer-4.0.0/tests/optimizers/test_sm3.py +41 -0
  186. pytorch_optimizer-4.0.0/tests/optimizers/test_soap.py +44 -0
  187. pytorch_optimizer-4.0.0/tests/optimizers/test_spam.py +10 -0
  188. pytorch_optimizer-4.0.0/tests/optimizers/test_spectral_sphere.py +20 -0
  189. pytorch_optimizer-4.0.0/tests/optimizers/test_splus.py +10 -0
  190. pytorch_optimizer-4.0.0/tests/optimizers/test_stable_adamw.py +32 -0
  191. pytorch_optimizer-4.0.0/tests/optimizers/test_swats.py +15 -0
  192. pytorch_optimizer-4.0.0/tests/recipes.py +453 -0
  193. pytorch_optimizer-4.0.0/tests/test_create_optimizer.py +108 -0
  194. pytorch_optimizer-4.0.0/tests/test_docs.py +38 -0
  195. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_foreach_utils.py +1 -1
  196. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_general_optimizer_parameters.py +17 -25
  197. pytorch_optimizer-4.0.0/tests/test_gradients.py +118 -0
  198. pytorch_optimizer-4.0.0/tests/test_load_modules.py +96 -0
  199. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_loss_functions.py +41 -13
  200. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_lr_schedulers.py +167 -47
  201. pytorch_optimizer-4.0.0/tests/test_optimizer_parameters.py +71 -0
  202. pytorch_optimizer-4.0.0/tests/test_optimizer_variants.py +184 -0
  203. pytorch_optimizer-4.0.0/tests/test_optimizers.py +216 -0
  204. pytorch_optimizer-4.0.0/tests/test_test_helpers.py +102 -0
  205. pytorch_optimizer-4.0.0/tests/test_utils.py +203 -0
  206. pytorch_optimizer-4.0.0/tests/test_wrapper_optimizers.py +686 -0
  207. pytorch_optimizer-4.0.0/tests/utils.py +232 -0
  208. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/uv.lock +80 -908
  209. pytorch_optimizer-3.11.0/AGENTS.md +0 -77
  210. pytorch_optimizer-3.11.0/CONTRIBUTING.md +0 -123
  211. pytorch_optimizer-3.11.0/pytorch_optimizer/__init__.py +0 -201
  212. pytorch_optimizer-3.11.0/pytorch_optimizer/base/type.py +0 -35
  213. pytorch_optimizer-3.11.0/pytorch_optimizer/loss/cross_entropy.py +0 -26
  214. pytorch_optimizer-3.11.0/pytorch_optimizer/loss/ldam.py +0 -41
  215. pytorch_optimizer-3.11.0/pytorch_optimizer/loss/tversky.py +0 -33
  216. pytorch_optimizer-3.11.0/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -42
  217. pytorch_optimizer-3.11.0/pytorch_optimizer/optimizer/foreach_utils.py +0 -113
  218. pytorch_optimizer-3.11.0/pytorch_optimizer/optimizer/psgd_utils.py +0 -96
  219. pytorch_optimizer-3.11.0/tests/constants.py +0 -1129
  220. pytorch_optimizer-3.11.0/tests/test_create_optimizer.py +0 -68
  221. pytorch_optimizer-3.11.0/tests/test_gradients.py +0 -272
  222. pytorch_optimizer-3.11.0/tests/test_load_modules.py +0 -49
  223. pytorch_optimizer-3.11.0/tests/test_optimizer_parameters.py +0 -340
  224. pytorch_optimizer-3.11.0/tests/test_optimizer_variants.py +0 -105
  225. pytorch_optimizer-3.11.0/tests/test_optimizers.py +0 -980
  226. pytorch_optimizer-3.11.0/tests/test_utils.py +0 -435
  227. pytorch_optimizer-3.11.0/tests/test_wrapper_optimizers.py +0 -536
  228. pytorch_optimizer-3.11.0/tests/utils.py +0 -367
  229. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.gitattributes +0 -0
  230. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/CODEOWNERS +0 -0
  231. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  232. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/labeler.yml +0 -0
  233. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/labels.yml +0 -0
  234. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/pull_request_template.md +0 -0
  235. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/pr_codeql.yml +0 -0
  236. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/pr_labeler.yml +0 -0
  237. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/update_docs.yml +0 -0
  238. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.gitignore +0 -0
  239. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/CITATION.cff +0 -0
  240. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/CODE_OF_CONDUCT.md +0 -0
  241. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/LICENSE +0 -0
  242. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/SECURITY.md +0 -0
  243. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/.readthedocs.yaml +0 -0
  244. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/base.md +0 -0
  245. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/benchmark.md +0 -0
  246. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.10.0.md +0 -0
  247. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.10.1.md +0 -0
  248. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.11.0.md +0 -0
  249. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.11.1.md +0 -0
  250. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.11.2.md +0 -0
  251. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.12.0.md +0 -0
  252. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.7.0.md +0 -0
  253. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.8.0.md +0 -0
  254. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.9.0.md +0 -0
  255. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.9.1.md +0 -0
  256. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.0.0.md +0 -0
  257. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.0.1.md +0 -0
  258. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.0.2.md +0 -0
  259. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.1.0.md +0 -0
  260. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.1.1.md +0 -0
  261. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.1.2.md +0 -0
  262. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.10.0.md +0 -0
  263. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.10.1.md +0 -0
  264. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.2.0.md +0 -0
  265. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.0.md +0 -0
  266. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.1.md +0 -0
  267. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.2.md +0 -0
  268. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.3.md +0 -0
  269. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.4.md +0 -0
  270. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.4.0.md +0 -0
  271. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.4.1.md +0 -0
  272. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.4.2.md +0 -0
  273. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.5.0.md +0 -0
  274. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.5.1.md +0 -0
  275. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.6.0.md +0 -0
  276. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.6.1.md +0 -0
  277. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.7.0.md +0 -0
  278. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.7.1.md +0 -0
  279. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.8.0.md +0 -0
  280. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.8.1.md +0 -0
  281. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.8.2.md +0 -0
  282. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.9.0.md +0 -0
  283. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/index.md +0 -0
  284. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/javascripts/tables.js +0 -0
  285. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/loss.md +0 -0
  286. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/lr_scheduler.md +0 -0
  287. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/qa.md +0 -0
  288. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/requirements-docs.txt +0 -0
  289. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/util.md +0 -0
  290. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualization.md +0 -0
  291. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ADOPT.jpg +0 -0
  292. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_APOLLO.jpg +0 -0
  293. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ASGD.jpg +0 -0
  294. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AccSGD.jpg +0 -0
  295. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdEMAMix.jpg +0 -0
  296. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaBelief.jpg +0 -0
  297. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaBound.jpg +0 -0
  298. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaDelta.jpg +0 -0
  299. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaFactor.jpg +0 -0
  300. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaGC.jpg +0 -0
  301. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaHessian.jpg +0 -0
  302. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaMax.jpg +0 -0
  303. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaMod.jpg +0 -0
  304. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaNorm.jpg +0 -0
  305. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaPNM.jpg +0 -0
  306. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaShift.jpg +0 -0
  307. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaSmooth.jpg +0 -0
  308. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaTAM.jpg +0 -0
  309. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adai.jpg +0 -0
  310. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adalite.jpg +0 -0
  311. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adam.jpg +0 -0
  312. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamG.jpg +0 -0
  313. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamMini.jpg +0 -0
  314. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamP.jpg +0 -0
  315. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamS.jpg +0 -0
  316. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamW.jpg +0 -0
  317. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adan.jpg +0 -0
  318. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AggMo.jpg +0 -0
  319. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Aida.jpg +0 -0
  320. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AliG.jpg +0 -0
  321. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Amos.jpg +0 -0
  322. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ApolloDQN.jpg +0 -0
  323. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AvaGrad.jpg +0 -0
  324. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_BCOS.jpg +0 -0
  325. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_BSAM.jpg +0 -0
  326. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_CAME.jpg +0 -0
  327. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptAdaGrad.jpg +0 -0
  328. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptAdam.jpg +0 -0
  329. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptAdan.jpg +0 -0
  330. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptLion.jpg +0 -0
  331. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptSGD.jpg +0 -0
  332. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DiffGrad.jpg +0 -0
  333. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EXAdam.jpg +0 -0
  334. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EmoFact.jpg +0 -0
  335. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EmoLynx.jpg +0 -0
  336. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EmoNavi.jpg +0 -0
  337. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_FAdam.jpg +0 -0
  338. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_FOCUS.jpg +0 -0
  339. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_FTRL.jpg +0 -0
  340. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Fira.jpg +0 -0
  341. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Fromage.jpg +0 -0
  342. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_GaLore.jpg +0 -0
  343. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Grams.jpg +0 -0
  344. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Gravity.jpg +0 -0
  345. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_GrokFastAdamW.jpg +0 -0
  346. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Kate.jpg +0 -0
  347. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Kron.jpg +0 -0
  348. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_LARS.jpg +0 -0
  349. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_LaProp.jpg +0 -0
  350. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Lamb.jpg +0 -0
  351. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Lion.jpg +0 -0
  352. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_MADGRAD.jpg +0 -0
  353. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_MARS.jpg +0 -0
  354. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_MSVAG.jpg +0 -0
  355. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_NAdam.jpg +0 -0
  356. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Nero.jpg +0 -0
  357. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_NovoGrad.jpg +0 -0
  358. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_PAdam.jpg +0 -0
  359. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_PID.jpg +0 -0
  360. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_PNM.jpg +0 -0
  361. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Prodigy.jpg +0 -0
  362. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_QHAdam.jpg +0 -0
  363. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_QHM.jpg +0 -0
  364. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_RACS.jpg +0 -0
  365. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_RAdam.jpg +0 -0
  366. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_RMSprop.jpg +0 -0
  367. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Ranger.jpg +0 -0
  368. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Ranger21.jpg +0 -0
  369. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Ranger25.jpg +0 -0
  370. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SCION.jpg +0 -0
  371. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SCIONLight.jpg +0 -0
  372. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGD.jpg +0 -0
  373. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGDP.jpg +0 -0
  374. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGDSaI.jpg +0 -0
  375. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGDW.jpg +0 -0
  376. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SM3.jpg +0 -0
  377. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SOAP.jpg +0 -0
  378. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SPAM.jpg +0 -0
  379. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SRMM.jpg +0 -0
  380. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SWATS.jpg +0 -0
  381. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScalableShampoo.jpg +0 -0
  382. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScheduleFreeAdamW.jpg +0 -0
  383. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScheduleFreeRAdam.jpg +0 -0
  384. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScheduleFreeSGD.jpg +0 -0
  385. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Shampoo.jpg +0 -0
  386. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SignSGD.jpg +0 -0
  387. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SimplifiedAdEMAMix.jpg +0 -0
  388. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SophiaH.jpg +0 -0
  389. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_StableAdamW.jpg +0 -0
  390. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_StableSPAM.jpg +0 -0
  391. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_TAM.jpg +0 -0
  392. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Tiger.jpg +0 -0
  393. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_VSGD.jpg +0 -0
  394. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Yogi.jpg +0 -0
  395. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ADOPT.jpg +0 -0
  396. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_APOLLO.jpg +0 -0
  397. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ASGD.jpg +0 -0
  398. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AccSGD.jpg +0 -0
  399. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdEMAMix.jpg +0 -0
  400. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaBelief.jpg +0 -0
  401. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaBound.jpg +0 -0
  402. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaDelta.jpg +0 -0
  403. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaFactor.jpg +0 -0
  404. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaGC.jpg +0 -0
  405. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaHessian.jpg +0 -0
  406. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaMax.jpg +0 -0
  407. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaMod.jpg +0 -0
  408. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaNorm.jpg +0 -0
  409. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaPNM.jpg +0 -0
  410. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaShift.jpg +0 -0
  411. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaSmooth.jpg +0 -0
  412. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaTAM.jpg +0 -0
  413. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adai.jpg +0 -0
  414. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adalite.jpg +0 -0
  415. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adam.jpg +0 -0
  416. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamG.jpg +0 -0
  417. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamMini.jpg +0 -0
  418. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamP.jpg +0 -0
  419. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamS.jpg +0 -0
  420. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamW.jpg +0 -0
  421. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adan.jpg +0 -0
  422. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AggMo.jpg +0 -0
  423. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Aida.jpg +0 -0
  424. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AliG.jpg +0 -0
  425. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Amos.jpg +0 -0
  426. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ApolloDQN.jpg +0 -0
  427. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AvaGrad.jpg +0 -0
  428. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_BCOS.jpg +0 -0
  429. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_BSAM.jpg +0 -0
  430. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_CAME.jpg +0 -0
  431. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptAdaGrad.jpg +0 -0
  432. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptAdam.jpg +0 -0
  433. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptAdan.jpg +0 -0
  434. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptLion.jpg +0 -0
  435. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptSGD.jpg +0 -0
  436. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DiffGrad.jpg +0 -0
  437. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EXAdam.jpg +0 -0
  438. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EmoFact.jpg +0 -0
  439. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EmoLynx.jpg +0 -0
  440. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EmoNavi.jpg +0 -0
  441. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_FAdam.jpg +0 -0
  442. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_FOCUS.jpg +0 -0
  443. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_FTRL.jpg +0 -0
  444. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Fira.jpg +0 -0
  445. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Fromage.jpg +0 -0
  446. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_GaLore.jpg +0 -0
  447. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Grams.jpg +0 -0
  448. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Gravity.jpg +0 -0
  449. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_GrokFastAdamW.jpg +0 -0
  450. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Kate.jpg +0 -0
  451. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Kron.jpg +0 -0
  452. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_LARS.jpg +0 -0
  453. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_LaProp.jpg +0 -0
  454. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Lamb.jpg +0 -0
  455. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Lion.jpg +0 -0
  456. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_MADGRAD.jpg +0 -0
  457. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_MARS.jpg +0 -0
  458. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_MSVAG.jpg +0 -0
  459. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_NAdam.jpg +0 -0
  460. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Nero.jpg +0 -0
  461. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_NovoGrad.jpg +0 -0
  462. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_PAdam.jpg +0 -0
  463. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_PID.jpg +0 -0
  464. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_PNM.jpg +0 -0
  465. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Prodigy.jpg +0 -0
  466. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_QHAdam.jpg +0 -0
  467. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_QHM.jpg +0 -0
  468. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_RACS.jpg +0 -0
  469. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_RAdam.jpg +0 -0
  470. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_RMSprop.jpg +0 -0
  471. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Ranger.jpg +0 -0
  472. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Ranger21.jpg +0 -0
  473. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Ranger25.jpg +0 -0
  474. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SCION.jpg +0 -0
  475. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SCIONLight.jpg +0 -0
  476. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGD.jpg +0 -0
  477. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGDP.jpg +0 -0
  478. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGDSaI.jpg +0 -0
  479. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGDW.jpg +0 -0
  480. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SM3.jpg +0 -0
  481. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SOAP.jpg +0 -0
  482. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SPAM.jpg +0 -0
  483. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SRMM.jpg +0 -0
  484. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SWATS.jpg +0 -0
  485. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScalableShampoo.jpg +0 -0
  486. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScheduleFreeAdamW.jpg +0 -0
  487. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScheduleFreeRAdam.jpg +0 -0
  488. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScheduleFreeSGD.jpg +0 -0
  489. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Shampoo.jpg +0 -0
  490. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SignSGD.jpg +0 -0
  491. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SimplifiedAdEMAMix.jpg +0 -0
  492. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SophiaH.jpg +0 -0
  493. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_StableAdamW.jpg +0 -0
  494. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_StableSPAM.jpg +0 -0
  495. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_TAM.jpg +0 -0
  496. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Tiger.jpg +0 -0
  497. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_VSGD.jpg +0 -0
  498. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Yogi.jpg +0 -0
  499. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/__init__.py +0 -0
  500. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/pytorch_lightning_example.py +0 -0
  501. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/pytorch_lightning_manual_backward_example.py +0 -0
  502. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/hubconf.py +0 -0
  503. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/__init__.py +0 -0
  504. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
  505. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/experimental/__init__.py +0 -0
  506. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/py.typed +0 -0
  507. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/scripts/update_changelog.py +0 -0
  508. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/__init__.py +0 -0
  509. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_base.py +0 -0
  510. {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/zensical.toml +0 -0
@@ -14,8 +14,8 @@ A clear and concise description of what the bug is.
14
14
  ## To Reproduce
15
15
 
16
16
  * OS : (e.g. Linux, Windows, MacOS)
17
- * PyTorch version : (e.g. 2.0.1, 1.13, >=1.8, <1.10)
18
- * Python version : (e.g. 3.8, 3.11)
17
+ * PyTorch version : (e.g. 2.1.0, 2.13.0)
18
+ * Python version : (e.g. 3.10, 3.12)
19
19
  * pytorch-optimizer version : (e.g. 3.3.0)
20
20
  * reproducible codes : please share your reproducible codes, scripts, or links. If sharing the code is complicated, you can manually write minimal code to reproduce bugs!
21
21
 
@@ -5,6 +5,7 @@ on:
5
5
  branches: [ main ]
6
6
  pull_request:
7
7
  branches: [ main ]
8
+ workflow_dispatch:
8
9
  workflow_call:
9
10
  inputs:
10
11
  ref:
@@ -64,9 +65,8 @@ jobs:
64
65
  - name: Install dependencies
65
66
  run: uv sync --frozen --no-editable
66
67
 
67
- - uses: jakebailey/pyright-action@8ec14b5cfe41f26e5f41686a31eb6012758217ef # v3.0.2
68
- with:
69
- version: 1.1.414
68
+ - name: Run type check
69
+ run: uv run --frozen ty check
70
70
 
71
71
  docs:
72
72
  name: Documentation
@@ -89,7 +89,7 @@ jobs:
89
89
  runs-on: ubuntu-latest
90
90
  strategy:
91
91
  matrix:
92
- python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14', '3.15']
92
+ python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15']
93
93
 
94
94
  steps:
95
95
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -5,7 +5,9 @@ on:
5
5
  types:
6
6
  - opened
7
7
  - synchronize
8
- check_suite:
8
+ - labeled
9
+ workflow_run:
10
+ workflows: [CI]
9
11
  types:
10
12
  - completed
11
13
 
@@ -19,13 +21,15 @@ jobs:
19
21
 
20
22
  steps:
21
23
  - id: automerge
22
- if: ${{ contains(github.event.pull_request.labels.*.name, 'automerge') }}
24
+ if: >-
25
+ contains(github.event.pull_request.labels.*.name, 'automerge') ||
26
+ (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success')
23
27
  name: automerge
24
28
  uses: pascalgn/automerge-action@7961b8b5eec56cc088c140b56d864285eabd3f67 # v0.16.4
25
29
  env:
26
30
  MERGE_LABELS: "automerge"
27
31
  MERGE_METHOD_LABEL_REQUIRED: "false"
28
- GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
32
+ GITHUB_TOKEN: ${{ github.token }}
29
33
  MERGE_METHOD: "squash"
30
34
  MERGE_REQUIRED_APPROVALS: "0"
31
35
  MERGE_DELETE_BRANCH: "true"
@@ -42,21 +42,23 @@ jobs:
42
42
  skip_coverage_upload: true
43
43
 
44
44
  prepare:
45
- name: Prepare Version
45
+ name: Prepare Release
46
46
  needs: validate
47
47
  runs-on: ubuntu-latest
48
48
  permissions:
49
49
  contents: write
50
+ pull-requests: write
50
51
  outputs:
51
52
  tag: ${{ steps.version.outputs.tag }}
52
53
  ref: ${{ steps.commit.outputs.ref }}
54
+ notes: ${{ steps.notes.outputs.body }}
53
55
  steps:
54
56
  - name: Checkout release ref
55
57
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
56
58
  with:
57
59
  ref: ${{ github.sha }}
58
60
  fetch-depth: 0
59
- token: ${{ secrets.GH_TOKEN }}
61
+ token: ${{ github.token }}
60
62
 
61
63
  - name: Setup uv
62
64
  uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
@@ -78,6 +80,10 @@ jobs:
78
80
  if [[ "$GITHUB_EVENT_NAME" == 'workflow_dispatch' ]]; then
79
81
  version="$(uv version --bump "$BUMP" --no-sync --short)"
80
82
  tag="v$version"
83
+ if git rev-parse --verify --quiet "refs/tags/$tag"; then
84
+ echo "Tag $tag already exists" >&2
85
+ exit 1
86
+ fi
81
87
  else
82
88
  tag="$GITHUB_REF_NAME"
83
89
  if [[ "$tag" != "v$current" ]]; then
@@ -87,23 +93,81 @@ jobs:
87
93
  fi
88
94
  echo "tag=$tag" >> "$GITHUB_OUTPUT"
89
95
 
90
- - name: Commit and push version bump
91
- id: commit
96
+ - name: Generate release notes and update changelogs
97
+ id: notes
92
98
  env:
99
+ GH_TOKEN: ${{ github.token }}
100
+ GH_REPO: ${{ github.repository }}
93
101
  RELEASE_TAG: ${{ steps.version.outputs.tag }}
94
102
  run: |
95
- if [[ "$GITHUB_EVENT_NAME" == 'workflow_dispatch' ]]; then
96
- if git rev-parse --verify --quiet "refs/tags/$RELEASE_TAG"; then
97
- echo "Tag $RELEASE_TAG already exists" >&2
98
- exit 1
103
+ gh api --method POST "repos/$GH_REPO/releases/generate-notes" \
104
+ -f tag_name="$RELEASE_TAG" -f target_commitish="$GITHUB_SHA" \
105
+ --jq .body > "$RUNNER_TEMP/release-notes.md"
106
+ uv run --no-project python scripts/update_changelog.py "$RELEASE_TAG" "$RUNNER_TEMP/release-notes.md"
107
+
108
+ delimiter="release_notes_${RANDOM}_${RANDOM}_${RANDOM}"
109
+ {
110
+ echo "body<<$delimiter"
111
+ cat "$RUNNER_TEMP/release-notes.md"
112
+ echo "$delimiter"
113
+ } >> "$GITHUB_OUTPUT"
114
+
115
+ - name: Create release preparation pull request
116
+ id: release_pr
117
+ uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
118
+ with:
119
+ branch: release/prepare-${{ steps.version.outputs.tag }}
120
+ commit-message: 'build: prepare release ${{ steps.version.outputs.tag }}'
121
+ title: 'build: prepare release ${{ steps.version.outputs.tag }}'
122
+ body: >-
123
+ Prepare the package version, lockfile, and generated changelogs for ${{ steps.version.outputs.tag }}.
124
+ This pull request must merge before package publishing and GitHub release creation.
125
+ base: main
126
+ add-paths: |
127
+ pyproject.toml
128
+ uv.lock
129
+ CHANGELOG.md
130
+ docs/changelogs/${{ steps.version.outputs.tag }}.md
131
+ docs/changelogs/index.md
132
+ delete-branch: true
133
+ token: ${{ github.token }}
134
+
135
+ - name: Merge release preparation pull request and resolve release commit
136
+ id: commit
137
+ env:
138
+ GH_TOKEN: ${{ github.token }}
139
+ GH_REPO: ${{ github.repository }}
140
+ PR_NUMBER: ${{ steps.release_pr.outputs.pull-request-number }}
141
+ PR_HEAD_SHA: ${{ steps.release_pr.outputs.pull-request-head-sha }}
142
+ run: |
143
+ if [[ -z "$PR_NUMBER" || -z "$PR_HEAD_SHA" ]]; then
144
+ echo 'No release preparation pull request was created' >&2
145
+ exit 1
146
+ fi
147
+ for attempt in {1..10}; do
148
+ mergeable="$(gh pr view "$PR_NUMBER" --json mergeable --jq .mergeable)"
149
+ if [[ "$mergeable" != 'UNKNOWN' ]]; then
150
+ break
99
151
  fi
100
- git config user.name 'github-actions[bot]'
101
- git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
102
- git add pyproject.toml uv.lock
103
- git commit -m "build: prepare version ${RELEASE_TAG#v} [skip ci]"
104
- git push origin HEAD:main
152
+ sleep 3
153
+ done
154
+ if [[ "$mergeable" == 'UNKNOWN' ]]; then
155
+ echo 'GitHub has not finished calculating PR mergeability' >&2
156
+ exit 1
105
157
  fi
106
- echo "ref=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
158
+ gh pr merge "$PR_NUMBER" --squash --delete-branch --match-head-commit "$PR_HEAD_SHA"
159
+ merged_ref="$(gh pr view "$PR_NUMBER" --json state,mergeCommit \
160
+ --jq 'if .state == "MERGED" then .mergeCommit.oid else empty end')"
161
+ if [[ -z "$merged_ref" ]]; then
162
+ echo 'The release preparation pull request must be merged before publishing' >&2
163
+ exit 1
164
+ fi
165
+ if [[ "$GITHUB_EVENT_NAME" == 'workflow_dispatch' ]]; then
166
+ ref="$merged_ref"
167
+ else
168
+ ref="$GITHUB_SHA"
169
+ fi
170
+ echo "ref=$ref" >> "$GITHUB_OUTPUT"
107
171
 
108
172
  deploy:
109
173
  name: Publish Package
@@ -111,6 +175,7 @@ jobs:
111
175
  runs-on: ubuntu-latest
112
176
  permissions:
113
177
  contents: write
178
+ id-token: write
114
179
  steps:
115
180
  - name: Checkout release commit
116
181
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -145,9 +210,7 @@ jobs:
145
210
  fi
146
211
 
147
212
  - name: Publish package to PyPI
148
- env:
149
- UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
150
- run: uv publish --check-url https://pypi.org/simple
213
+ run: uv publish --trusted-publishing always --check-url https://pypi.org/simple
151
214
 
152
215
  release:
153
216
  name: Create Release
@@ -156,59 +219,13 @@ jobs:
156
219
  permissions:
157
220
  contents: write
158
221
  steps:
159
- - name: Generate release notes and create release
222
+ - name: Create release with the prepared notes
160
223
  uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
161
224
  with:
162
- generate_release_notes: true
225
+ body: ${{ needs.prepare.outputs.notes }}
163
226
  draft: false
164
227
  prerelease: false
165
228
  name: pytorch-optimizer ${{ needs.prepare.outputs.tag }}
166
229
  tag_name: ${{ needs.prepare.outputs.tag }}
167
230
  target_commitish: ${{ needs.prepare.outputs.ref }}
168
- token: ${{ secrets.GH_TOKEN }}
169
-
170
- changelog:
171
- name: Update Changelogs
172
- runs-on: ubuntu-latest
173
- needs: [prepare, release]
174
- permissions:
175
- contents: write
176
- pull-requests: write
177
- steps:
178
- - name: Checkout main
179
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
180
- with:
181
- ref: main
182
-
183
- - name: Set up Python
184
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
185
- with:
186
- python-version: '3.12'
187
-
188
- - name: Update changelogs from the published release
189
- env:
190
- GH_TOKEN: ${{ github.token }}
191
- GH_REPO: ${{ github.repository }}
192
- RELEASE_TAG: ${{ needs.prepare.outputs.tag }}
193
- run: |
194
- gh release view "$RELEASE_TAG" --json body --jq .body > "$RUNNER_TEMP/release-notes.md"
195
- python scripts/update_changelog.py "$RELEASE_TAG" "$RUNNER_TEMP/release-notes.md"
196
-
197
- - name: Create changelog pull request
198
- uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
199
- with:
200
- branch: docs/changelog-update-${{ needs.prepare.outputs.tag }}
201
- commit-message: 'docs: update changelogs for ${{ needs.prepare.outputs.tag }}'
202
- title: 'docs: update changelogs for ${{ needs.prepare.outputs.tag }}'
203
- body: >-
204
- Sync the generated release notes from
205
- https://github.com/${{ github.repository }}/releases/tag/${{ needs.prepare.outputs.tag }}
206
- into CHANGELOG.md and the documentation.
207
- base: main
208
- add-paths: |
209
- CHANGELOG.md
210
- docs/changelogs/${{ needs.prepare.outputs.tag }}.md
211
- docs/changelogs/index.md
212
- delete-branch: true
213
- labels: automerge
214
- token: ${{ secrets.GH_TOKEN }}
231
+ token: ${{ github.token }}
@@ -0,0 +1,110 @@
1
+ # Agent Instructions
2
+
3
+ ## Development workflow
4
+
5
+ - Use `uv` for dependency resolution and execution. Prefer `uv run just <recipe>` to use the versions in `uv.lock`.
6
+ - The repository `justfile` is cross-platform and works on Windows, macOS, and Linux/WSL.
7
+ - Run the relevant checks after changes:
8
+ - `uv run just format`
9
+ - `uv run just check`
10
+ - `uv run just test`
11
+ - Cover new and changed implementation code at 100%. Check coverage with `uv run coverage report -m`.
12
+ - Use `uv run coverage report -m` to find uncovered lines, then add focused cases in the appropriate test module.
13
+ - Run focused optimizer tests with `uv run pytest tests/optimizers/test_muon.py -sv -vv`.
14
+ - Select a training recipe with `uv run pytest tests/test_optimizers.py::TestOptimizerTraining -k adammini -sv -vv`.
15
+ - Use `uv run just docs` to serve the Zensical documentation. Build it with strict validation using
16
+ `uv run just docs-build`.
17
+ - Run `uv run just update-docs` after changing public exports to regenerate the API reference.
18
+
19
+ ## Architecture
20
+
21
+ - `pytorch_optimizer/base/` contains `BaseOptimizer`, scheduler bases, shared types, and exceptions.
22
+ - `pytorch_optimizer/optimizer/` contains optimizers, wrappers, and shared gradient and update utilities.
23
+ - Put schedulers in `pytorch_optimizer/lr_scheduler/` and loss functions in `pytorch_optimizer/loss/`.
24
+ - Export public components from `pytorch_optimizer/__init__.py`. Use `load_optimizer()` to load a class by name and
25
+ `create_optimizer()` to configure an optimizer with common options and wrappers.
26
+ - Optional integrations include `bitsandbytes`, `q-galore-torch`, and `torchao`.
27
+ - `tests/test_optimizers.py` runs shared training and interface tests using `OPTIMIZER_RECIPES` from
28
+ `tests/recipes.py`. Focused optimizer and algorithm-helper cases live in `tests/optimizers/test_<module>.py`.
29
+ Parameter validation, variants, wrappers, losses, and schedulers have separate shared test modules.
30
+ - `tests/fixtures.py` owns the shared training model and parameter builders. `tests/utils.py` supplies optimizer
31
+ construction and training helpers; `tests/conftest.py` supplies pytest fixtures, including training data.
32
+ - `tests/optimizer_cases.py` derives constructor options and model-based APIs from signatures, and sparse/complex
33
+ support from cached CPU step probes. Explicit exclusions cover specialized protocols and numerical limitations.
34
+ - `zensical.toml` owns documentation navigation and theme settings. Keep the home page separate from `README.md`.
35
+
36
+ ## Code style
37
+
38
+ - Follow nearby repository code and tests before introducing new patterns.
39
+ - Add comments only when code is difficult to understand; avoid redundant, meaningless, or excessive comments.
40
+ - Use blank lines to separate logical steps and improve readability.
41
+ - Do not add introductory comments or docstrings to scripts.
42
+ - Use a maximum line length of 119 characters and single-quoted strings.
43
+ - Use the repository's existing typing style. Do not add `from __future__ import annotations` or `TYPE_CHECKING`
44
+ imports unless the surrounding code requires them.
45
+ - Optimizers inherit from `BaseOptimizer`, implement `init_group()` and `step()`, and reuse its validation and update
46
+ helpers where applicable.
47
+ - All optimizer implementations must follow the algorithms and update rules in their original papers.
48
+ - Follow Google-style docstrings. Reuse helpers such as `apply_weight_decay()`, `apply_cautious()`, `debias()`,
49
+ `validate_learning_rate()`, `validate_betas()`, and `validate_range()` before adding update or validation logic.
50
+ - Keep implementations focused; remove redundant compatibility layers and abstractions.
51
+
52
+ ## Testing
53
+
54
+ - For optimizer changes, add or update minimal recipes in `OPTIMIZER_RECIPES`, including affected variants. Each
55
+ recipe contains an optimizer name, options, and an iteration count. Use the shared runner for model-based
56
+ optimizers when their update protocol fits; avoid separate training or smoke tests that a recipe can replace.
57
+ - Add focused cases for behavior the training recipes do not verify, such as numerical updates, checkpoint
58
+ restoration, validation, wrappers, and edge cases. Follow nearby patterns and preserve 100% implementation coverage.
59
+ - Give focused cases an observable assertion. Compare numerical results with `torch.testing.assert_close()` and
60
+ check expected exceptions with `pytest.raises()`. Use stable inputs and a trusted reference for iterative algorithms.
61
+ - Reuse `TrainingModel`, `build_model()`, and parameter builders from `tests/fixtures.py`. Use a parameter when a test
62
+ only calls optimizer methods, and create additional shapes or model features only when the behavior requires them.
63
+ - Use `tests.utils.build_optimizer()` for ordinary optimizer setup. Use `load_optimizer()` for constructor
64
+ validation or APIs that accept an optimizer class, and `create_optimizer()` when testing that public factory.
65
+ - Use pytest classes to group related behavior where useful. Parametrize only applicable combinations and run
66
+ shared interface checks once per optimizer rather than once per recipe.
67
+ - Reuse capability detection from `tests/optimizer_cases.py` instead of maintaining optimizer name lists. Keep
68
+ protocol-specific exclusions explicit; probes must preserve random state and propagate unexpected failures.
69
+ - Keep variant, scheduler, and loss case data beside their tests. Copy recipe options before attaching callbacks or
70
+ parameter groups, and avoid retaining model instances or optimizer state in shared case data.
71
+ - Keep tensors and training iteration counts small while retaining meaningful assertions. Remove redundant cases
72
+ without losing behavior checks or coverage, and avoid session-wide performance overrides.
73
+
74
+ ## Adding an optimizer
75
+
76
+ - Add the implementation under `pytorch_optimizer/optimizer/`.
77
+ - Export it from the optimizer package and register it in `OPTIMIZER_LIST` so it is available through `OPTIMIZERS`
78
+ and `load_optimizer()`.
79
+ - Add a training recipe and focused cases following the testing guidance above.
80
+ - Update the relevant documentation and algorithm table in `README.md`.
81
+ - Write clear PR titles and descriptions; the release workflow generates notes from merged PRs and syncs them to
82
+ `CHANGELOG.md`, `docs/changelogs/<tag>.md`, and the changelog index through an automated PR.
83
+ - Register new loss functions and schedulers in their package exports and add them to the corresponding tests and
84
+ README tables.
85
+ - Leave the root `CHANGELOG.md` to the release automation.
86
+
87
+ ## Commits and pull requests
88
+
89
+ Start commit subjects with one of these prefixes:
90
+
91
+ | Prefix | Use for |
92
+ | --- | --- |
93
+ | `feat:` | Add a feature or public API. |
94
+ | `fix:` | Correct a bug or unintended behavior. |
95
+ | `perf:` | Improve execution speed or resource use. |
96
+ | `style:` | Change code formatting without changing behavior. |
97
+ | `refactor:` | Restructure code without changing public behavior. |
98
+ | `docs:` | Add, revise, or reorganize documentation. |
99
+ | `chore:` | Maintain development tools, automation, or repository housekeeping. |
100
+ | `build:` | Change build, packaging, or dependency configuration. |
101
+ | `update:` | Refresh project content or metadata when no more specific prefix applies. |
102
+
103
+ Keep the text after the prefix imperative, concise, and specific to the committed change.
104
+ Do not use commit prefixes outside this list.
105
+
106
+ - Write concise, specific PR titles that describe the actual change. Use a title tag only when it adds useful context
107
+ and accurately matches the work; do not derive it mechanically from the commit prefix.
108
+ - Feature PR titles follow the existing format, such as `[Feature] Implement Magma optimizer`.
109
+ - Keep commits focused and verify the branch and working tree before pushing. Use `--force-with-lease` when you need
110
+ to rewrite a pushed branch.
@@ -1,3 +1,103 @@
1
+ # v4.0.0
2
+
3
+ ## What's Changed
4
+ * docs: update changelogs for v3.11.0 by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/588
5
+ * [Fix] Trigger automerge when label is added by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/590
6
+ * [Fix] un-swap false positives and false negatives in SoftF1Loss by @plox-sumit in https://github.com/kozistr/pytorch_optimizer/pull/593
7
+ * [Feature] Implement NorMuon optimizer by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/589
8
+ * [Fix] Support strided inputs in Lovasz hinge loss by @AHMETHAKANBEZIR1 in https://github.com/kozistr/pytorch_optimizer/pull/597
9
+ * [Fix] Prevent Tversky overflow on large half-precision masks by @AHMETHAKANBEZIR1 in https://github.com/kozistr/pytorch_optimizer/pull/599
10
+ * [Feature] Support reduction modes in `FocalCosineLoss` by @AHMETHAKANBEZIR1 in https://github.com/kozistr/pytorch_optimizer/pull/595
11
+ * Track the GRAMS first moment and debias its denominator by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/537
12
+ * [Fix] put the Schedule-Free RAdam bias correction under the square root by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/545
13
+ * [Fix] Correct DiffGrad, AdaFactor, SPlus, and SOAP updates by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/601
14
+ * [Feature] Implement SaRA optimizer by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/602
15
+ * [Build] Require Python 3.10 / PyTorch 2.1 and use lerp for moving averages by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/603
16
+ * [Feature] Compile optimizer steps, batch AdEMAMix, and adopt Trusted Publishing by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/604
17
+ * [Refactor] Modernize type hints and centralize package exports by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/605
18
+ * Standardize and correct API docstrings by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/606
19
+ * Fix optimizer updates, checkpoint precision, and memory overhead by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/607
20
+ * Consolidate test fixtures and streamline optimizer tests by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/608
21
+ * Fix pytest xfails and warnings and replace Pyright with ty by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/609
22
+ * Fix optimizer updates, checkpoints, losses, and schedulers by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/610
23
+ * Show Python 3.10+ in the README badge by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/611
24
+ * Merge release changelog PRs using GITHUB_TOKEN by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/612
25
+ * Fix release version preparation on protected main by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/613
26
+ * Prepare versions and changelogs in one PR before publishing by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/614
27
+
28
+ ## New Contributors
29
+ * @plox-sumit made their first contribution in https://github.com/kozistr/pytorch_optimizer/pull/593
30
+
31
+ **Full Changelog**: https://github.com/kozistr/pytorch_optimizer/compare/v3.11.0...v4.0.0
32
+
33
+ # v3.11.0
34
+
35
+ ## What's Changed
36
+ * [Docs] Prepend changelog for v3.10.1 by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/509
37
+ * [Feature] Implement `Magma` optimizer by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/514
38
+ * [Fix] Keep `SignSGD` momentum buffer across steps by @11NOel11 in https://github.com/kozistr/pytorch_optimizer/pull/516
39
+ * [Fix] Apply weight decay in `SignSGD` by @11NOel11 in https://github.com/kozistr/pytorch_optimizer/pull/518
40
+ * [Fix] Match `foreach` and per-parameter rounding in `SignSGD` and `Tiger` by @11NOel11 in https://github.com/kozistr/pytorch_optimizer/pull/520
41
+ * Fix AdaSmooth NaN on zero-initialized parameters by @winklemad in https://github.com/kozistr/pytorch_optimizer/pull/522
42
+ * Fix AdaShift NaN on the first update with keep_num > 1 by @winklemad in https://github.com/kozistr/pytorch_optimizer/pull/523
43
+ * Fix A2Grad diverging to NaN from an inverted running-mean weight by @winklemad in https://github.com/kozistr/pytorch_optimizer/pull/524
44
+ * Fix M-SVAG NaN from debiasing moments by beta**step instead of 1 - beta**step by @winklemad in https://github.com/kozistr/pytorch_optimizer/pull/525
45
+ * [Fix] `rho` calculation for `M-SVAG` optimizer by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/529
46
+ * docs: migrate to Zensical and automate changelogs by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/532
47
+ * Raise Shampoo factors to -1/(2k) by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/530
48
+ * Do not start an AdamMini collective without a process group by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/534
49
+ * Keep MARS last_grad stable across the next backward by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/533
50
+ * Divide the DAdaptAdam distance estimate by sk_l1 by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/538
51
+ * Store the first PID gradient for the next derivative by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/539
52
+ * [Fix] scale StableAdamW after the second moment is updated by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/544
53
+ * [Fix] advance the Prodigy step counter once per update by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/546
54
+ * [Fix] keep LaProp's centered second moment out of the stored average by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/547
55
+ * [Fix] bias-correct only the fast AdEMAMix moment by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/549
56
+ * [Fix] lift Alice subspace vectors back to the parameter shape by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/550
57
+ * Keep ApolloDQN stable weight decay inside one parameter by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/535
58
+ * [Fix] lower DAdaptAdam test learning rate by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/552
59
+ * Fix MADGRAD adding eps to the learning rate by @winklemad in https://github.com/kozistr/pytorch_optimizer/pull/526
60
+ * Apply the documented `maximize` option in optimizers that ignored it by @winklemad in https://github.com/kozistr/pytorch_optimizer/pull/527
61
+ * Fix Adai ignoring `maximize` (gradient negated twice) by @winklemad in https://github.com/kozistr/pytorch_optimizer/pull/528
62
+ * [Fix] Match FAdam adaptive epsilon to the paper by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/557
63
+ * [Fix] Correct Schedule-Free wrapper state and AdamMini GQA updates by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/558
64
+ * [Fix] Apply MARS 1D weight decay by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/559
65
+ * [Fix] Respect FlashAdamW learning-rate decay mode by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/561
66
+ * [Fix] Handle mixed dtypes in StableAdamW foreach updates by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/560
67
+ * [Fix] Honor maximize in StableAdamW scalar updates by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/562
68
+ * [Fix] Honor maximize in LOMO updates by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/563
69
+ * [Fix] Initialize LARS momentum from zero by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/564
70
+ * [Fix] Include decay in the LARS trust ratio by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/565
71
+ * [Fix] Initialize GrokFast EMA for maximize by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/566
72
+ * [Fix] Use beta0 in Ranger21 positive-negative momentum by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/568
73
+ * [Fix] Reject invalid schedule-free momentum values by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/567
74
+ * [Fix] Preserve Ranger21 second-moment maximum by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/569
75
+ * Move docs requirements file under docs/ by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/570
76
+ * Honor Ranger21 gradient processing options by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/571
77
+ * Clarify pull request title guidance by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/572
78
+ * Apply coupled LAMB decay within the trust ratio by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/573
79
+ * Match NovoGrad's first update and step size to the paper by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/574
80
+ * [Fix] Correct Hessian sampling and optimizer edge cases by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/575
81
+ * [Fix] Preserve base optimizer state in SAM checkpoints by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/576
82
+ * [Fix] Remap TRAC references when loading checkpoints by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/579
83
+ * [Fix] Project OrthoGrad gradients after closure evaluation by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/583
84
+ * [Fix] Keep Lookahead slow momentum in separate storage by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/582
85
+ * [Fix] Honor zero weight decay in create_optimizer by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/580
86
+ * [Fix] Apply StableAdamW coupled decay before moment updates by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/581
87
+ * [Fix] Apply BCE focal class weights and elementwise reduction by @AHMETHAKANBEZIR1 in https://github.com/kozistr/pytorch_optimizer/pull/585
88
+ * [Fix] Stabilize OrthoGrad and FTRL GPU training by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/586
89
+ * [Build] Add manual release workflow by @kozistr in https://github.com/kozistr/pytorch_optimizer/pull/587
90
+ * Accumulate the AdaNorm norm average and guard zero gradients by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/536
91
+ * [Fix] take the Ano second-moment sign before the decay by @shaneraphel in https://github.com/kozistr/pytorch_optimizer/pull/553
92
+
93
+ ## New Contributors
94
+ * @11NOel11 made their first contribution in https://github.com/kozistr/pytorch_optimizer/pull/516
95
+ * @winklemad made their first contribution in https://github.com/kozistr/pytorch_optimizer/pull/522
96
+ * @shaneraphel made their first contribution in https://github.com/kozistr/pytorch_optimizer/pull/530
97
+ * @AHMETHAKANBEZIR1 made their first contribution in https://github.com/kozistr/pytorch_optimizer/pull/585
98
+
99
+ **Full Changelog**: https://github.com/kozistr/pytorch_optimizer/compare/v3.10.1...v3.11.0
100
+
1
101
  # v3.10.1
2
102
 
3
103
  ## Change Log
@@ -0,0 +1,85 @@
1
+ # Contributing
2
+
3
+ You can contribute code, tests, or documentation. Follow the existing implementations and keep your PR focused on
4
+ the problem you are solving.
5
+
6
+ ## Setup and checks
7
+
8
+ Install [uv](https://docs.astral.sh/uv/), clone the repository, and install its development dependencies:
9
+
10
+ ```shell
11
+ uv sync
12
+ ```
13
+
14
+ Before submitting a pull request, run:
15
+
16
+ ```shell
17
+ uv run just format
18
+ uv run just check
19
+ uv run just test
20
+ uv run coverage report -m
21
+ ```
22
+
23
+ Cover new and changed implementation code at **100%**. Run tests on CPU by default. For GPU testing, use
24
+ `python -m pytest --device=cuda` with a CUDA-enabled PyTorch interpreter.
25
+
26
+ ## Code
27
+
28
+ - Use single-quoted strings and a maximum line length of 119 characters. Separate logical steps with blank lines.
29
+ - Follow the original paper when implementing an optimizer and reuse existing `BaseOptimizer` helpers.
30
+ - Inherit from `BaseOptimizer` when adding an optimizer and register it in `OPTIMIZER_LIST`. Register new components
31
+ in the appropriate package exports and update their README tables.
32
+
33
+ ## Tests
34
+
35
+ Add `(optimizer_name, options, iterations)` to `OPTIMIZER_RECIPES` in [tests/recipes.py](tests/recipes.py)
36
+ for optimizer convergence tests. Add focused cases in `tests/optimizers/test_<module>.py` for numerical updates,
37
+ checkpoint restoration, or edge cases that the training recipes do not verify. Keep shared validation, variant,
38
+ wrapper, loss, and scheduler cases in their existing `tests/test_*.py` modules.
39
+
40
+ Reuse the model and parameter builders in [tests/fixtures.py](tests/fixtures.py) and helpers in
41
+ [tests/utils.py](tests/utils.py). Use a parameter for tests that call optimizer methods; use the shared model for
42
+ forward passes or model-based APIs. Group related cases in pytest classes where they share setup.
43
+
44
+ Use small, deterministic inputs and compare results with known values or a trusted reference. A focused update test
45
+ can use a parameter:
46
+
47
+ ```python
48
+ import torch
49
+
50
+ from tests.fixtures import make_parameter
51
+ from tests.utils import build_optimizer
52
+
53
+
54
+ def test_sgd_update():
55
+ param = make_parameter((2,), grad=1.0)
56
+ optimizer = build_optimizer('sgd', [param], lr=0.1)
57
+
58
+ optimizer.step()
59
+
60
+ torch.testing.assert_close(param, torch.tensor([-0.1, -0.1]))
61
+ ```
62
+
63
+ Use `load_optimizer()` for constructor validation and `create_optimizer()` to test its public API. Check expected
64
+ exceptions with `pytest.raises`, and parametrize the options each optimizer supports. Check existing cases before
65
+ adding a test to avoid duplicating their assertions.
66
+
67
+ ## Documentation
68
+
69
+ - Write API docstrings in Google style alongside the implementation.
70
+ - Write documentation pages in `docs/`, with usage examples in [docs/getting-started.md](docs/getting-started.md).
71
+ Update `README.md` when adding components or changing public usage.
72
+ - Run `uv run just docs-build` and resolve build errors and warnings before submitting changes to the site.
73
+
74
+ ## Pull requests
75
+
76
+ Describe the problem, the resulting behavior, and how you tested the change. Include the paper or reference
77
+ implementation for new optimizers and explain any algorithm differences. Report checks you could not run.
78
+
79
+ Start commit subjects with `feat:`, `fix:`, `perf:`, `style:`, `refactor:`, `docs:`, `chore:`, `build:`, or `update:`.
80
+ Use concise, specific commit subjects and PR titles.
81
+
82
+ If you use a coding agent or LLM, review its output and make sure you understand the implementation and tests.
83
+ You are responsible for the changes you submit.
84
+
85
+ For questions, open an issue or discussion, or ask in your pull request.