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.
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/ISSUE_TEMPLATE/bug_report.md +2 -2
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/ci.yml +4 -4
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/pr_automerge.yml +7 -3
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/publish.yml +83 -66
- pytorch_optimizer-4.0.0/AGENTS.md +110 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/CHANGELOG.md +100 -0
- pytorch_optimizer-4.0.0/CONTRIBUTING.md +85 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/PKG-INFO +25 -12
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/README.md +21 -3
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/index.md +2 -0
- pytorch_optimizer-4.0.0/docs/changelogs/v3.11.0.md +67 -0
- pytorch_optimizer-4.0.0/docs/changelogs/v4.0.0.md +31 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/getting-started.md +17 -1
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/optimizer.md +8 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/benchmark_foreach.py +9 -9
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/huggingface_trainer_example.py +3 -3
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/visualize_optimizers.py +39 -37
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/justfile +1 -1
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pyproject.toml +27 -26
- pytorch_optimizer-4.0.0/pytorch_optimizer/__init__.py +13 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/exception.py +10 -10
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/optimizer.py +190 -129
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/scheduler.py +17 -12
- pytorch_optimizer-4.0.0/pytorch_optimizer/base/type.py +24 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/__init__.py +32 -8
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/bi_tempered.py +78 -48
- pytorch_optimizer-4.0.0/pytorch_optimizer/loss/cross_entropy.py +36 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/dice.py +33 -20
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/f1.py +15 -5
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/focal.py +64 -20
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/jaccard.py +30 -19
- pytorch_optimizer-4.0.0/pytorch_optimizer/loss/ldam.py +50 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/lovasz.py +19 -9
- pytorch_optimizer-4.0.0/pytorch_optimizer/loss/tversky.py +42 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/__init__.py +44 -10
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/chebyshev.py +25 -27
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +25 -20
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +8 -8
- pytorch_optimizer-4.0.0/pytorch_optimizer/lr_scheduler/linear_warmup.py +66 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/proportion.py +11 -10
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/rex.py +10 -9
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/wsd.py +21 -21
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/__init__.py +271 -45
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/a2grad.py +12 -12
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adabelief.py +31 -26
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adabound.py +14 -15
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adadelta.py +9 -9
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adafactor.py +47 -46
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adagc.py +23 -21
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adahessian.py +24 -22
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adai.py +12 -12
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adalite.py +13 -13
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adam_mini.py +33 -22
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamax.py +11 -15
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamc.py +11 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamg.py +13 -13
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamod.py +11 -12
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamp.py +38 -38
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adams.py +22 -16
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamw.py +43 -33
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adan.py +22 -24
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adanorm.py +12 -12
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adapnm.py +11 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adashift.py +17 -18
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adasmooth.py +14 -14
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ademamix.py +157 -34
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adopt.py +19 -21
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/agc.py +9 -6
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/aggmo.py +8 -8
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/aida.py +16 -16
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/alig.py +15 -14
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/amos.py +22 -24
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ano.py +11 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/apollo.py +25 -24
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/avagrad.py +10 -10
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/bcos.py +19 -20
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/came.py +29 -32
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/conda.py +11 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/dadapt.py +77 -70
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/demo.py +28 -28
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/diffgrad.py +29 -24
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/dual_adam.py +12 -12
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/emonavi.py +49 -49
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/exadam.py +10 -10
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/experimental/ranger25.py +34 -32
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fadam.py +15 -15
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fira.py +14 -9
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/flash_adamw.py +47 -43
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/focus.py +9 -9
- pytorch_optimizer-4.0.0/pytorch_optimizer/optimizer/foreach_utils.py +102 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fp16.py +52 -58
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fromage.py +7 -8
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ftrl.py +8 -8
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/galore.py +11 -8
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/galore_utils.py +14 -14
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/gradient_centralization.py +4 -4
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/grams.py +10 -10
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/gravity.py +7 -7
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/grokfast.py +75 -66
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/kate.py +9 -9
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lamb.py +44 -44
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/laprop.py +13 -12
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lars.py +18 -19
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lion.py +29 -29
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lomo.py +66 -38
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lookahead.py +20 -19
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lora_rite.py +27 -27
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/madgrad.py +29 -27
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/magma.py +38 -35
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/mars.py +25 -24
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/msvag.py +7 -7
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/muon.py +346 -115
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/nero.py +12 -13
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/novograd.py +11 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/orthograd.py +5 -7
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/padam.py +11 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/pcgrad.py +22 -22
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/pid.py +11 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/pnm.py +10 -10
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/prodigy.py +19 -22
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/psgd.py +67 -67
- pytorch_optimizer-4.0.0/pytorch_optimizer/optimizer/psgd_utils.py +108 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/qhadam.py +13 -17
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/qhm.py +10 -10
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/racs.py +48 -48
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/radam.py +11 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ranger.py +16 -14
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ranger21.py +45 -48
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/rose.py +15 -20
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/rotograd.py +40 -48
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sam.py +238 -245
- pytorch_optimizer-4.0.0/pytorch_optimizer/optimizer/sara.py +211 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/schedulefree.py +76 -61
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/scion.py +132 -129
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sgd.py +105 -132
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/shampoo.py +54 -50
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/shampoo_utils.py +136 -138
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sm3.py +17 -12
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/snsm.py +26 -23
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/soap.py +25 -26
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sophia.py +26 -23
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/spam.py +103 -64
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/splus.py +34 -24
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/srmm.py +10 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sso.py +52 -68
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/swats.py +13 -13
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/tam.py +26 -23
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/tiger.py +13 -15
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/trac.py +26 -24
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/utils.py +91 -77
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/yogi.py +11 -11
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/scripts/update_docs.py +19 -19
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/conftest.py +6 -8
- pytorch_optimizer-4.0.0/tests/fixtures.py +59 -0
- pytorch_optimizer-4.0.0/tests/optimizer_cases.py +96 -0
- pytorch_optimizer-4.0.0/tests/optimizers/__init__.py +1 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_a2grad.py +34 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_adabound.py +8 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_adafactor.py +22 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_adamwsn.py +12 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_amos.py +11 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_dadapt.py +34 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_emo.py +14 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_flash_adamw.py +203 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_fromage.py +7 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_galore.py +52 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_grokfast.py +29 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_hessian.py +22 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_kron.py +82 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_lomo.py +90 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_lora_rite.py +93 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_mars.py +10 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_muon.py +49 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_nero.py +39 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_racs.py +13 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_ranger21.py +35 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_rectified.py +20 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_rose.py +17 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_sara.py +16 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_schedulefree.py +13 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_scion.py +58 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_sgd.py +32 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_shampoo.py +147 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_sign_sgd.py +53 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_sm3.py +41 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_soap.py +44 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_spam.py +10 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_spectral_sphere.py +20 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_splus.py +10 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_stable_adamw.py +32 -0
- pytorch_optimizer-4.0.0/tests/optimizers/test_swats.py +15 -0
- pytorch_optimizer-4.0.0/tests/recipes.py +453 -0
- pytorch_optimizer-4.0.0/tests/test_create_optimizer.py +108 -0
- pytorch_optimizer-4.0.0/tests/test_docs.py +38 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_foreach_utils.py +1 -1
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_general_optimizer_parameters.py +17 -25
- pytorch_optimizer-4.0.0/tests/test_gradients.py +118 -0
- pytorch_optimizer-4.0.0/tests/test_load_modules.py +96 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_loss_functions.py +41 -13
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_lr_schedulers.py +167 -47
- pytorch_optimizer-4.0.0/tests/test_optimizer_parameters.py +71 -0
- pytorch_optimizer-4.0.0/tests/test_optimizer_variants.py +184 -0
- pytorch_optimizer-4.0.0/tests/test_optimizers.py +216 -0
- pytorch_optimizer-4.0.0/tests/test_test_helpers.py +102 -0
- pytorch_optimizer-4.0.0/tests/test_utils.py +203 -0
- pytorch_optimizer-4.0.0/tests/test_wrapper_optimizers.py +686 -0
- pytorch_optimizer-4.0.0/tests/utils.py +232 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/uv.lock +80 -908
- pytorch_optimizer-3.11.0/AGENTS.md +0 -77
- pytorch_optimizer-3.11.0/CONTRIBUTING.md +0 -123
- pytorch_optimizer-3.11.0/pytorch_optimizer/__init__.py +0 -201
- pytorch_optimizer-3.11.0/pytorch_optimizer/base/type.py +0 -35
- pytorch_optimizer-3.11.0/pytorch_optimizer/loss/cross_entropy.py +0 -26
- pytorch_optimizer-3.11.0/pytorch_optimizer/loss/ldam.py +0 -41
- pytorch_optimizer-3.11.0/pytorch_optimizer/loss/tversky.py +0 -33
- pytorch_optimizer-3.11.0/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -42
- pytorch_optimizer-3.11.0/pytorch_optimizer/optimizer/foreach_utils.py +0 -113
- pytorch_optimizer-3.11.0/pytorch_optimizer/optimizer/psgd_utils.py +0 -96
- pytorch_optimizer-3.11.0/tests/constants.py +0 -1129
- pytorch_optimizer-3.11.0/tests/test_create_optimizer.py +0 -68
- pytorch_optimizer-3.11.0/tests/test_gradients.py +0 -272
- pytorch_optimizer-3.11.0/tests/test_load_modules.py +0 -49
- pytorch_optimizer-3.11.0/tests/test_optimizer_parameters.py +0 -340
- pytorch_optimizer-3.11.0/tests/test_optimizer_variants.py +0 -105
- pytorch_optimizer-3.11.0/tests/test_optimizers.py +0 -980
- pytorch_optimizer-3.11.0/tests/test_utils.py +0 -435
- pytorch_optimizer-3.11.0/tests/test_wrapper_optimizers.py +0 -536
- pytorch_optimizer-3.11.0/tests/utils.py +0 -367
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.gitattributes +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/CODEOWNERS +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/labeler.yml +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/labels.yml +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/pull_request_template.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/pr_codeql.yml +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/pr_labeler.yml +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.github/workflows/update_docs.yml +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/.gitignore +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/CITATION.cff +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/CODE_OF_CONDUCT.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/LICENSE +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/SECURITY.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/.readthedocs.yaml +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/base.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/benchmark.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.10.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.10.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.11.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.11.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.11.2.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.12.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.7.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.8.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.9.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.9.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.0.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.0.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.0.2.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.1.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.1.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.1.2.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.10.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.10.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.2.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.2.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.3.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.4.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.4.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.4.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.4.2.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.5.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.5.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.6.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.6.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.7.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.7.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.8.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.8.1.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.8.2.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.9.0.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/index.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/javascripts/tables.js +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/loss.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/lr_scheduler.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/qa.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/requirements-docs.txt +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/util.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualization.md +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ADOPT.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_APOLLO.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ASGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AccSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdEMAMix.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaBelief.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaBound.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaDelta.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaFactor.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaGC.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaHessian.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaMax.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaMod.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaNorm.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaPNM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaShift.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaSmooth.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaTAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adai.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adalite.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamG.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamMini.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamP.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adan.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AggMo.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Aida.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AliG.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Amos.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ApolloDQN.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AvaGrad.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_BCOS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_BSAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_CAME.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptAdaGrad.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptAdan.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptLion.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DiffGrad.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EXAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EmoFact.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EmoLynx.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EmoNavi.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_FAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_FOCUS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_FTRL.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Fira.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Fromage.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_GaLore.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Grams.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Gravity.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_GrokFastAdamW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Kate.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Kron.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_LARS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_LaProp.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Lamb.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Lion.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_MADGRAD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_MARS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_MSVAG.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_NAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Nero.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_NovoGrad.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_PAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_PID.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_PNM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Prodigy.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_QHAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_QHM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_RACS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_RAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_RMSprop.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Ranger.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Ranger21.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Ranger25.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SCION.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SCIONLight.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGDP.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGDSaI.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGDW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SM3.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SOAP.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SPAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SRMM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SWATS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScalableShampoo.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScheduleFreeAdamW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScheduleFreeRAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScheduleFreeSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Shampoo.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SignSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SimplifiedAdEMAMix.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SophiaH.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_StableAdamW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_StableSPAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_TAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Tiger.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_VSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Yogi.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ADOPT.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_APOLLO.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ASGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AccSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdEMAMix.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaBelief.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaBound.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaDelta.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaFactor.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaGC.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaHessian.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaMax.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaMod.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaNorm.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaPNM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaShift.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaSmooth.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaTAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adai.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adalite.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamG.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamMini.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamP.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adan.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AggMo.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Aida.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AliG.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Amos.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ApolloDQN.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AvaGrad.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_BCOS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_BSAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_CAME.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptAdaGrad.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptAdan.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptLion.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DiffGrad.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EXAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EmoFact.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EmoLynx.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EmoNavi.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_FAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_FOCUS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_FTRL.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Fira.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Fromage.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_GaLore.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Grams.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Gravity.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_GrokFastAdamW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Kate.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Kron.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_LARS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_LaProp.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Lamb.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Lion.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_MADGRAD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_MARS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_MSVAG.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_NAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Nero.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_NovoGrad.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_PAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_PID.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_PNM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Prodigy.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_QHAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_QHM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_RACS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_RAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_RMSprop.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Ranger.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Ranger21.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Ranger25.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SCION.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SCIONLight.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGDP.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGDSaI.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGDW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SM3.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SOAP.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SPAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SRMM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SWATS.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScalableShampoo.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScheduleFreeAdamW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScheduleFreeRAdam.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScheduleFreeSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Shampoo.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SignSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SimplifiedAdEMAMix.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SophiaH.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_StableAdamW.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_StableSPAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_TAM.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Tiger.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_VSGD.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Yogi.jpg +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/__init__.py +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/pytorch_lightning_example.py +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/examples/pytorch_lightning_manual_backward_example.py +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/hubconf.py +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/__init__.py +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/experimental/__init__.py +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/pytorch_optimizer/py.typed +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/scripts/update_changelog.py +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/__init__.py +0 -0
- {pytorch_optimizer-3.11.0 → pytorch_optimizer-4.0.0}/tests/test_base.py +0 -0
- {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
|
|
18
|
-
* Python version : (e.g. 3.
|
|
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
|
-
-
|
|
68
|
-
|
|
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.
|
|
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
|
-
|
|
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:
|
|
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: ${{
|
|
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
|
|
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: ${{
|
|
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:
|
|
91
|
-
id:
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
222
|
+
- name: Create release with the prepared notes
|
|
160
223
|
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
|
|
161
224
|
with:
|
|
162
|
-
|
|
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: ${{
|
|
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.
|