pytorch_optimizer 3.10.1__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.10.1 → pytorch_optimizer-4.0.0}/.github/ISSUE_TEMPLATE/bug_report.md +2 -2
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.github/labeler.yml +4 -1
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.github/pull_request_template.md +3 -3
- pytorch_optimizer-4.0.0/.github/workflows/ci.yml +134 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.github/workflows/pr_automerge.yml +8 -4
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.github/workflows/pr_codeql.yml +3 -3
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.github/workflows/pr_labeler.yml +2 -2
- pytorch_optimizer-4.0.0/.github/workflows/publish.yml +231 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.github/workflows/update_docs.yml +3 -3
- pytorch_optimizer-4.0.0/AGENTS.md +110 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/CHANGELOG.md +119 -0
- pytorch_optimizer-4.0.0/CONTRIBUTING.md +85 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/PKG-INFO +30 -14
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/README.md +23 -3
- pytorch_optimizer-4.0.0/docs/.readthedocs.yaml +11 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/base.md +1 -1
- pytorch_optimizer-4.0.0/docs/changelogs/index.md +43 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.10.0.md +5 -5
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.10.1.md +1 -1
- pytorch_optimizer-4.0.0/docs/changelogs/v2.11.0.md +21 -0
- pytorch_optimizer-4.0.0/docs/changelogs/v2.11.1.md +16 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.11.2.md +2 -2
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.7.0.md +18 -18
- pytorch_optimizer-4.0.0/docs/changelogs/v2.8.0.md +37 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.9.0.md +7 -7
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.0.0.md +8 -8
- pytorch_optimizer-4.0.0/docs/changelogs/v3.0.1.md +21 -0
- pytorch_optimizer-4.0.0/docs/changelogs/v3.0.2.md +21 -0
- pytorch_optimizer-4.0.0/docs/changelogs/v3.10.0.md +37 -0
- pytorch_optimizer-4.0.0/docs/changelogs/v3.10.1.md +16 -0
- pytorch_optimizer-4.0.0/docs/changelogs/v3.11.0.md +67 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.4.0.md +1 -1
- pytorch_optimizer-4.0.0/docs/changelogs/v4.0.0.md +31 -0
- pytorch_optimizer-4.0.0/docs/getting-started.md +107 -0
- pytorch_optimizer-4.0.0/docs/index.md +41 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/javascripts/tables.js +1 -1
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/optimizer.md +12 -0
- pytorch_optimizer-4.0.0/docs/qa.md +21 -0
- pytorch_optimizer-4.0.0/docs/requirements-docs.txt +2 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/util.md +1 -1
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/examples/benchmark_foreach.py +9 -9
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/examples/huggingface_trainer_example.py +3 -3
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/examples/visualize_optimizers.py +39 -37
- pytorch_optimizer-4.0.0/justfile +34 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pyproject.toml +30 -32
- pytorch_optimizer-4.0.0/pytorch_optimizer/__init__.py +13 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/exception.py +10 -10
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/optimizer.py +223 -129
- {pytorch_optimizer-3.10.1 → 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.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/__init__.py +32 -8
- {pytorch_optimizer-3.10.1 → 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.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/dice.py +33 -20
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/loss/f1.py +15 -5
- pytorch_optimizer-4.0.0/pytorch_optimizer/loss/focal.py +176 -0
- {pytorch_optimizer-3.10.1 → 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.10.1 → 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.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/__init__.py +44 -10
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/chebyshev.py +25 -27
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +25 -20
- {pytorch_optimizer-3.10.1 → 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.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/proportion.py +11 -10
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/rex.py +10 -9
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/wsd.py +21 -21
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/__init__.py +280 -47
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/a2grad.py +13 -13
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adabelief.py +31 -26
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adabound.py +21 -17
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adadelta.py +9 -9
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adafactor.py +47 -46
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adagc.py +23 -21
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adahessian.py +24 -22
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adai.py +12 -14
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adalite.py +13 -13
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adam_mini.py +53 -38
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamax.py +11 -15
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamc.py +11 -11
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamg.py +13 -13
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamod.py +11 -12
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamp.py +38 -38
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adams.py +22 -16
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adamw.py +76 -52
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adan.py +22 -24
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adanorm.py +12 -12
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adapnm.py +11 -11
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adashift.py +18 -19
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adasmooth.py +14 -14
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ademamix.py +159 -37
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/adopt.py +19 -21
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/agc.py +9 -6
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/aggmo.py +8 -8
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/aida.py +16 -16
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/alig.py +15 -14
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/amos.py +22 -24
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ano.py +13 -12
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/apollo.py +28 -26
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/avagrad.py +10 -10
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/bcos.py +19 -20
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/came.py +29 -32
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/conda.py +11 -11
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/dadapt.py +78 -71
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/demo.py +30 -28
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/diffgrad.py +29 -24
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/dual_adam.py +12 -12
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/emonavi.py +49 -49
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/exadam.py +10 -10
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/experimental/ranger25.py +34 -47
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fadam.py +20 -14
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fira.py +14 -9
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/flash_adamw.py +48 -44
- {pytorch_optimizer-3.10.1 → 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.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fp16.py +52 -58
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/fromage.py +7 -8
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ftrl.py +9 -9
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/galore.py +11 -8
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/galore_utils.py +14 -14
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/gradient_centralization.py +4 -4
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/grams.py +10 -10
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/gravity.py +7 -7
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/grokfast.py +78 -67
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/kate.py +9 -9
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lamb.py +58 -51
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/laprop.py +16 -15
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lars.py +23 -22
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lion.py +29 -29
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lomo.py +70 -38
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lookahead.py +44 -27
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/lora_rite.py +27 -27
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/madgrad.py +30 -28
- pytorch_optimizer-4.0.0/pytorch_optimizer/optimizer/magma.py +242 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/mars.py +32 -26
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/msvag.py +10 -10
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/muon.py +346 -115
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/nero.py +12 -13
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/novograd.py +27 -34
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/orthograd.py +19 -22
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/padam.py +13 -11
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/pcgrad.py +25 -24
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/pid.py +13 -12
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/pnm.py +10 -10
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/prodigy.py +19 -24
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/psgd.py +69 -67
- pytorch_optimizer-4.0.0/pytorch_optimizer/optimizer/psgd_utils.py +108 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/qhadam.py +13 -17
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/qhm.py +10 -10
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/racs.py +55 -49
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/radam.py +11 -11
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ranger.py +16 -14
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/ranger21.py +61 -58
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/rose.py +17 -20
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/rotograd.py +40 -48
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sam.py +241 -248
- pytorch_optimizer-4.0.0/pytorch_optimizer/optimizer/sara.py +211 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/schedulefree.py +107 -66
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/scion.py +132 -129
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sgd.py +127 -134
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/shampoo.py +55 -51
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/shampoo_utils.py +136 -138
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sm3.py +17 -12
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/snsm.py +26 -23
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/soap.py +25 -26
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sophia.py +26 -23
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/spam.py +103 -64
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/splus.py +34 -24
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/srmm.py +10 -11
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/sso.py +52 -68
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/swats.py +13 -13
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/tam.py +26 -23
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/tiger.py +14 -16
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/trac.py +63 -25
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/utils.py +91 -77
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/yogi.py +11 -11
- pytorch_optimizer-4.0.0/scripts/update_changelog.py +43 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/scripts/update_docs.py +19 -19
- pytorch_optimizer-4.0.0/tests/conftest.py +51 -0
- 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-3.10.1 → pytorch_optimizer-4.0.0}/tests/test_base.py +16 -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.10.1 → pytorch_optimizer-4.0.0}/tests/test_foreach_utils.py +1 -1
- {pytorch_optimizer-3.10.1 → 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.10.1 → pytorch_optimizer-4.0.0}/tests/test_loss_functions.py +121 -16
- {pytorch_optimizer-3.10.1 → 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-4.0.0/uv.lock +877 -0
- pytorch_optimizer-4.0.0/zensical.toml +80 -0
- pytorch_optimizer-3.10.1/.github/workflows/ci.yml +0 -100
- pytorch_optimizer-3.10.1/.github/workflows/copy_readme.yml +0 -25
- pytorch_optimizer-3.10.1/.github/workflows/publish.yml +0 -110
- pytorch_optimizer-3.10.1/CLAUDE.md +0 -136
- pytorch_optimizer-3.10.1/CONTRIBUTING.md +0 -91
- pytorch_optimizer-3.10.1/Makefile +0 -34
- pytorch_optimizer-3.10.1/docs/.nav.yml +0 -22
- pytorch_optimizer-3.10.1/docs/.readthedocs.yaml +0 -14
- pytorch_optimizer-3.10.1/docs/changelogs/v2.11.0.md +0 -21
- pytorch_optimizer-3.10.1/docs/changelogs/v2.11.1.md +0 -16
- pytorch_optimizer-3.10.1/docs/changelogs/v2.8.0.md +0 -37
- pytorch_optimizer-3.10.1/docs/changelogs/v3.0.1.md +0 -21
- pytorch_optimizer-3.10.1/docs/changelogs/v3.0.2.md +0 -21
- pytorch_optimizer-3.10.1/docs/changelogs/v3.10.0.md +0 -37
- pytorch_optimizer-3.10.1/docs/changelogs/v3.10.1.md +0 -16
- pytorch_optimizer-3.10.1/docs/index.md +0 -366
- pytorch_optimizer-3.10.1/docs/qa.md +0 -13
- pytorch_optimizer-3.10.1/mkdocs.yml +0 -86
- pytorch_optimizer-3.10.1/pytorch_optimizer/__init__.py +0 -200
- pytorch_optimizer-3.10.1/pytorch_optimizer/base/type.py +0 -35
- pytorch_optimizer-3.10.1/pytorch_optimizer/loss/cross_entropy.py +0 -26
- pytorch_optimizer-3.10.1/pytorch_optimizer/loss/focal.py +0 -124
- pytorch_optimizer-3.10.1/pytorch_optimizer/loss/ldam.py +0 -41
- pytorch_optimizer-3.10.1/pytorch_optimizer/loss/tversky.py +0 -33
- pytorch_optimizer-3.10.1/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -42
- pytorch_optimizer-3.10.1/pytorch_optimizer/optimizer/foreach_utils.py +0 -113
- pytorch_optimizer-3.10.1/pytorch_optimizer/optimizer/psgd_utils.py +0 -96
- pytorch_optimizer-3.10.1/requirements-docs.txt +0 -12
- pytorch_optimizer-3.10.1/tests/conftest.py +0 -39
- pytorch_optimizer-3.10.1/tests/constants.py +0 -1026
- pytorch_optimizer-3.10.1/tests/test_create_optimizer.py +0 -65
- pytorch_optimizer-3.10.1/tests/test_gradients.py +0 -246
- pytorch_optimizer-3.10.1/tests/test_load_modules.py +0 -49
- pytorch_optimizer-3.10.1/tests/test_optimizer_parameters.py +0 -340
- pytorch_optimizer-3.10.1/tests/test_optimizer_variants.py +0 -82
- pytorch_optimizer-3.10.1/tests/test_optimizers.py +0 -894
- pytorch_optimizer-3.10.1/tests/test_utils.py +0 -435
- pytorch_optimizer-3.10.1/tests/test_wrapper_optimizers.py +0 -276
- pytorch_optimizer-3.10.1/tests/utils.py +0 -364
- pytorch_optimizer-3.10.1/uv.lock +0 -1911
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.gitattributes +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.github/CODEOWNERS +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.github/labels.yml +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/.gitignore +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/CITATION.cff +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/CODE_OF_CONDUCT.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/LICENSE +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/SECURITY.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/benchmark.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.12.0.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v2.9.1.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.1.0.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.1.1.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.1.2.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.2.0.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.0.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.1.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.2.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.3.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.3.4.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.4.1.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.4.2.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.5.0.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.5.1.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.6.0.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.6.1.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.7.0.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.7.1.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.8.0.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.8.1.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.8.2.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/changelogs/v3.9.0.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/loss.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/lr_scheduler.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualization.md +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ADOPT.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_APOLLO.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ASGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AccSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdEMAMix.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaBelief.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaBound.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaDelta.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaFactor.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaGC.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaHessian.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaMax.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaMod.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaNorm.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaPNM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaShift.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaSmooth.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdaTAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adai.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adalite.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamG.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamMini.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamP.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AdamW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Adan.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AggMo.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Aida.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AliG.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Amos.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ApolloDQN.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_AvaGrad.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_BCOS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_BSAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_CAME.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptAdaGrad.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptAdan.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptLion.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DAdaptSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_DiffGrad.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EXAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EmoFact.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EmoLynx.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_EmoNavi.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_FAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_FOCUS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_FTRL.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Fira.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Fromage.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_GaLore.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Grams.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Gravity.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_GrokFastAdamW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Kate.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Kron.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_LARS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_LaProp.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Lamb.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Lion.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_MADGRAD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_MARS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_MSVAG.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_NAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Nero.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_NovoGrad.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_PAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_PID.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_PNM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Prodigy.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_QHAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_QHM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_RACS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_RAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_RMSprop.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Ranger.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Ranger21.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Ranger25.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SCION.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SCIONLight.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGDP.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGDSaI.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SGDW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SM3.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SOAP.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SPAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SRMM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SWATS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScalableShampoo.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScheduleFreeAdamW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScheduleFreeRAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_ScheduleFreeSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Shampoo.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SignSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SimplifiedAdEMAMix.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_SophiaH.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_StableAdamW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_StableSPAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_TAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Tiger.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_VSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rastrigin_Yogi.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ADOPT.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_APOLLO.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ASGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AccSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdEMAMix.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaBelief.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaBound.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaDelta.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaFactor.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaGC.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaHessian.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaMax.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaMod.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaNorm.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaPNM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaShift.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaSmooth.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdaTAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adai.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adalite.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamG.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamMini.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamP.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AdamW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Adan.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AggMo.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Aida.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AliG.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Amos.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ApolloDQN.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_AvaGrad.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_BCOS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_BSAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_CAME.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptAdaGrad.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptAdan.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptLion.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DAdaptSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_DiffGrad.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EXAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EmoFact.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EmoLynx.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_EmoNavi.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_FAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_FOCUS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_FTRL.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Fira.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Fromage.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_GaLore.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Grams.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Gravity.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_GrokFastAdamW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Kate.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Kron.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_LARS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_LaProp.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Lamb.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Lion.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_MADGRAD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_MARS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_MSVAG.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_NAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Nero.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_NovoGrad.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_PAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_PID.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_PNM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Prodigy.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_QHAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_QHM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_RACS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_RAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_RMSprop.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Ranger.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Ranger21.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Ranger25.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SCION.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SCIONLight.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGDP.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGDSaI.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SGDW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SM3.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SOAP.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SPAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SRMM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SWATS.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScalableShampoo.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScheduleFreeAdamW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScheduleFreeRAdam.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_ScheduleFreeSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Shampoo.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SignSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SimplifiedAdEMAMix.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_SophiaH.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_StableAdamW.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_StableSPAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_TAM.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Tiger.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_VSGD.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/docs/visualizations/rosenbrock_Yogi.jpg +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/examples/__init__.py +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/examples/pytorch_lightning_example.py +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/examples/pytorch_lightning_manual_backward_example.py +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/hubconf.py +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/base/__init__.py +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/optimizer/experimental/__init__.py +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/pytorch_optimizer/py.typed +0 -0
- {pytorch_optimizer-3.10.1 → pytorch_optimizer-4.0.0}/tests/__init__.py +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
|
|
|
@@ -2,6 +2,8 @@ documentation:
|
|
|
2
2
|
- changed-files:
|
|
3
3
|
- any-glob-to-any-file:
|
|
4
4
|
- '**/*.md'
|
|
5
|
+
- zensical.toml
|
|
6
|
+
- docs/**
|
|
5
7
|
|
|
6
8
|
github_actions:
|
|
7
9
|
- changed-files:
|
|
@@ -14,7 +16,8 @@ dependencies:
|
|
|
14
16
|
- pyproject.toml
|
|
15
17
|
- requirements.txt
|
|
16
18
|
- requirements-dev.txt
|
|
17
|
-
- requirements-docs.txt
|
|
19
|
+
- docs/requirements-docs.txt
|
|
20
|
+
- uv.lock
|
|
18
21
|
|
|
19
22
|
optimizer:
|
|
20
23
|
- changed-files:
|
|
@@ -16,7 +16,7 @@ _Please note any questions, helps or contexts what maintainer(s) should know_
|
|
|
16
16
|
|
|
17
17
|
## Checklist
|
|
18
18
|
|
|
19
|
-
- [ ] Make sure to run `
|
|
20
|
-
- [ ] My code adheres to the style guidelines of this project (`
|
|
21
|
-
- [ ] Both new and existing unit tests pass successfully on my local environment by running `
|
|
19
|
+
- [ ] Make sure to run `just format` before commit
|
|
20
|
+
- [ ] My code adheres to the style guidelines of this project (`just check` shows no errors)
|
|
21
|
+
- [ ] Both new and existing unit tests pass successfully on my local environment by running `just test`
|
|
22
22
|
- [ ] I have made the necessary changes to the documentation
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
workflow_call:
|
|
10
|
+
inputs:
|
|
11
|
+
ref:
|
|
12
|
+
description: Commit to validate
|
|
13
|
+
type: string
|
|
14
|
+
required: false
|
|
15
|
+
default: ''
|
|
16
|
+
skip_coverage_upload:
|
|
17
|
+
description: Skip coverage uploads during release validation
|
|
18
|
+
type: boolean
|
|
19
|
+
required: false
|
|
20
|
+
default: false
|
|
21
|
+
|
|
22
|
+
env:
|
|
23
|
+
OMP_NUM_THREADS: 8
|
|
24
|
+
MKL_NUM_THREADS: 8
|
|
25
|
+
PYTHONDONTWRITEBYTECODE: 1
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
lint:
|
|
29
|
+
name: Lint
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
33
|
+
with:
|
|
34
|
+
ref: ${{ inputs.ref || github.sha }}
|
|
35
|
+
|
|
36
|
+
- name: Setup uv
|
|
37
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
38
|
+
with:
|
|
39
|
+
python-version: 3.12
|
|
40
|
+
enable-cache: true
|
|
41
|
+
prune-cache: false
|
|
42
|
+
|
|
43
|
+
- name: Install dependencies
|
|
44
|
+
run: uv sync --frozen --no-editable
|
|
45
|
+
|
|
46
|
+
- name: Run lint
|
|
47
|
+
run: |
|
|
48
|
+
uv run ruff check pytorch_optimizer examples tests scripts hubconf.py
|
|
49
|
+
|
|
50
|
+
type_check:
|
|
51
|
+
name: Static Type Check
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
55
|
+
with:
|
|
56
|
+
ref: ${{ inputs.ref || github.sha }}
|
|
57
|
+
|
|
58
|
+
- name: Setup uv
|
|
59
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
60
|
+
with:
|
|
61
|
+
python-version: 3.12
|
|
62
|
+
enable-cache: true
|
|
63
|
+
prune-cache: false
|
|
64
|
+
|
|
65
|
+
- name: Install dependencies
|
|
66
|
+
run: uv sync --frozen --no-editable
|
|
67
|
+
|
|
68
|
+
- name: Run type check
|
|
69
|
+
run: uv run --frozen ty check
|
|
70
|
+
|
|
71
|
+
docs:
|
|
72
|
+
name: Documentation
|
|
73
|
+
runs-on: ubuntu-latest
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
76
|
+
with:
|
|
77
|
+
ref: ${{ inputs.ref || github.sha }}
|
|
78
|
+
|
|
79
|
+
- name: Setup uv
|
|
80
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
81
|
+
with:
|
|
82
|
+
python-version: 3.12
|
|
83
|
+
enable-cache: true
|
|
84
|
+
|
|
85
|
+
- name: Build documentation
|
|
86
|
+
run: uv run --no-project --python 3.12 --with-requirements docs/requirements-docs.txt zensical build --strict
|
|
87
|
+
|
|
88
|
+
test:
|
|
89
|
+
runs-on: ubuntu-latest
|
|
90
|
+
strategy:
|
|
91
|
+
matrix:
|
|
92
|
+
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15']
|
|
93
|
+
|
|
94
|
+
steps:
|
|
95
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
96
|
+
with:
|
|
97
|
+
ref: ${{ inputs.ref || github.sha }}
|
|
98
|
+
|
|
99
|
+
- name: Setup uv
|
|
100
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
101
|
+
with:
|
|
102
|
+
python-version: ${{ matrix.python-version }}
|
|
103
|
+
enable-cache: true
|
|
104
|
+
prune-cache: false
|
|
105
|
+
|
|
106
|
+
- name: Install dependencies
|
|
107
|
+
run: uv sync --frozen --no-editable
|
|
108
|
+
|
|
109
|
+
- name: Check test
|
|
110
|
+
run: uv run --frozen pytest
|
|
111
|
+
|
|
112
|
+
- name: Upload coverage
|
|
113
|
+
if: success() && !inputs.skip_coverage_upload
|
|
114
|
+
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
|
|
115
|
+
with:
|
|
116
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
117
|
+
directory: ./
|
|
118
|
+
files: ./coverage.xml
|
|
119
|
+
env_vars: OS,PYTHON
|
|
120
|
+
flags: ${{ matrix.python-version }}
|
|
121
|
+
fail_ci_if_error: true
|
|
122
|
+
verbose: false
|
|
123
|
+
|
|
124
|
+
ci-summary:
|
|
125
|
+
if: always()
|
|
126
|
+
needs: [lint, type_check, docs, test]
|
|
127
|
+
runs-on: ubuntu-latest
|
|
128
|
+
steps:
|
|
129
|
+
- name: Check results
|
|
130
|
+
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
|
|
131
|
+
run: exit 1
|
|
132
|
+
|
|
133
|
+
- name: Report Summary
|
|
134
|
+
run: echo "✅ Lint, documentation, and tests completed for all targets"
|
|
@@ -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
|
-
uses: pascalgn/automerge-action@v0.16.4
|
|
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"
|
|
@@ -35,14 +35,14 @@ jobs:
|
|
|
35
35
|
|
|
36
36
|
steps:
|
|
37
37
|
- name: Checkout repository
|
|
38
|
-
uses: actions/checkout@
|
|
38
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
39
39
|
|
|
40
40
|
- name: Initialize CodeQL
|
|
41
|
-
uses: github/codeql-action/init@v4
|
|
41
|
+
uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
42
42
|
with:
|
|
43
43
|
languages: ${{ matrix.language }}
|
|
44
44
|
|
|
45
45
|
- name: Perform CodeQL Analysis
|
|
46
|
-
uses: github/codeql-action/analyze@v4
|
|
46
|
+
uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
47
47
|
with:
|
|
48
48
|
category: "/language:${{matrix.language}}"
|
|
@@ -17,9 +17,9 @@ jobs:
|
|
|
17
17
|
pull-requests: write
|
|
18
18
|
|
|
19
19
|
steps:
|
|
20
|
-
- uses: actions/checkout@
|
|
20
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
21
21
|
|
|
22
|
-
- uses: actions/labeler@
|
|
22
|
+
- uses: actions/labeler@bf12e9b00b37c5c0ca2b87b79b2daf7891dbda13 # v7.0.0
|
|
23
23
|
if: ${{ github.event.action != 'labeled' && github.event.action != 'unlabeled' && !contains(github.event.pull_request.labels.*.name, 'automerge') }}
|
|
24
24
|
with:
|
|
25
25
|
configuration-path: '.github/labeler.yml'
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
run-name: Release / ${{ github.ref_name }}
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
tags:
|
|
7
|
+
- 'v[0-9]+.[0-9]+.[0-9]+'
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
bump:
|
|
11
|
+
description: Version component to increment
|
|
12
|
+
required: true
|
|
13
|
+
type: choice
|
|
14
|
+
default: patch
|
|
15
|
+
options: [major, minor, patch]
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
concurrency:
|
|
21
|
+
group: publish
|
|
22
|
+
cancel-in-progress: false
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
guard:
|
|
26
|
+
name: Guard Release Ref
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- name: Require main for manual releases
|
|
30
|
+
run: |
|
|
31
|
+
if [[ "$GITHUB_EVENT_NAME" == 'workflow_dispatch' && "$GITHUB_REF" != 'refs/heads/main' ]]; then
|
|
32
|
+
echo "Run manual releases from main, not $GITHUB_REF" >&2
|
|
33
|
+
exit 1
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
validate:
|
|
37
|
+
name: Validate
|
|
38
|
+
needs: guard
|
|
39
|
+
uses: ./.github/workflows/ci.yml
|
|
40
|
+
with:
|
|
41
|
+
ref: ${{ github.sha }}
|
|
42
|
+
skip_coverage_upload: true
|
|
43
|
+
|
|
44
|
+
prepare:
|
|
45
|
+
name: Prepare Release
|
|
46
|
+
needs: validate
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
permissions:
|
|
49
|
+
contents: write
|
|
50
|
+
pull-requests: write
|
|
51
|
+
outputs:
|
|
52
|
+
tag: ${{ steps.version.outputs.tag }}
|
|
53
|
+
ref: ${{ steps.commit.outputs.ref }}
|
|
54
|
+
notes: ${{ steps.notes.outputs.body }}
|
|
55
|
+
steps:
|
|
56
|
+
- name: Checkout release ref
|
|
57
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
58
|
+
with:
|
|
59
|
+
ref: ${{ github.sha }}
|
|
60
|
+
fetch-depth: 0
|
|
61
|
+
token: ${{ github.token }}
|
|
62
|
+
|
|
63
|
+
- name: Setup uv
|
|
64
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
65
|
+
with:
|
|
66
|
+
python-version: '3.12'
|
|
67
|
+
|
|
68
|
+
- name: Validate and bump package version
|
|
69
|
+
id: version
|
|
70
|
+
env:
|
|
71
|
+
BUMP: ${{ inputs.bump }}
|
|
72
|
+
run: |
|
|
73
|
+
uv lock --check
|
|
74
|
+
current="$(uv version --short)"
|
|
75
|
+
if [[ ! "$current" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
76
|
+
echo 'Package version must have the form MAJOR.MINOR.PATCH' >&2
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
if [[ "$GITHUB_EVENT_NAME" == 'workflow_dispatch' ]]; then
|
|
81
|
+
version="$(uv version --bump "$BUMP" --no-sync --short)"
|
|
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
|
|
87
|
+
else
|
|
88
|
+
tag="$GITHUB_REF_NAME"
|
|
89
|
+
if [[ "$tag" != "v$current" ]]; then
|
|
90
|
+
echo "Tag $tag does not match package version $current" >&2
|
|
91
|
+
exit 1
|
|
92
|
+
fi
|
|
93
|
+
fi
|
|
94
|
+
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
|
95
|
+
|
|
96
|
+
- name: Generate release notes and update changelogs
|
|
97
|
+
id: notes
|
|
98
|
+
env:
|
|
99
|
+
GH_TOKEN: ${{ github.token }}
|
|
100
|
+
GH_REPO: ${{ github.repository }}
|
|
101
|
+
RELEASE_TAG: ${{ steps.version.outputs.tag }}
|
|
102
|
+
run: |
|
|
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
|
|
151
|
+
fi
|
|
152
|
+
sleep 3
|
|
153
|
+
done
|
|
154
|
+
if [[ "$mergeable" == 'UNKNOWN' ]]; then
|
|
155
|
+
echo 'GitHub has not finished calculating PR mergeability' >&2
|
|
156
|
+
exit 1
|
|
157
|
+
fi
|
|
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"
|
|
171
|
+
|
|
172
|
+
deploy:
|
|
173
|
+
name: Publish Package
|
|
174
|
+
needs: prepare
|
|
175
|
+
runs-on: ubuntu-latest
|
|
176
|
+
permissions:
|
|
177
|
+
contents: write
|
|
178
|
+
id-token: write
|
|
179
|
+
steps:
|
|
180
|
+
- name: Checkout release commit
|
|
181
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
182
|
+
with:
|
|
183
|
+
ref: ${{ needs.prepare.outputs.ref }}
|
|
184
|
+
fetch-depth: 0
|
|
185
|
+
|
|
186
|
+
- name: Setup uv
|
|
187
|
+
uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
188
|
+
with:
|
|
189
|
+
python-version: '3.12'
|
|
190
|
+
|
|
191
|
+
- name: Build package
|
|
192
|
+
run: uv build
|
|
193
|
+
|
|
194
|
+
- name: Create and push release tag
|
|
195
|
+
if: github.event_name == 'workflow_dispatch'
|
|
196
|
+
env:
|
|
197
|
+
RELEASE_TAG: ${{ needs.prepare.outputs.tag }}
|
|
198
|
+
RELEASE_REF: ${{ needs.prepare.outputs.ref }}
|
|
199
|
+
run: |
|
|
200
|
+
if git rev-parse --verify --quiet "refs/tags/$RELEASE_TAG"; then
|
|
201
|
+
if [[ "$(git rev-list -n 1 "$RELEASE_TAG")" != "$RELEASE_REF" ]]; then
|
|
202
|
+
echo "Tag $RELEASE_TAG points to a different commit" >&2
|
|
203
|
+
exit 1
|
|
204
|
+
fi
|
|
205
|
+
else
|
|
206
|
+
git config user.name 'github-actions[bot]'
|
|
207
|
+
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
|
|
208
|
+
git tag -a "$RELEASE_TAG" -m "pytorch-optimizer $RELEASE_TAG"
|
|
209
|
+
git push origin "refs/tags/$RELEASE_TAG"
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
- name: Publish package to PyPI
|
|
213
|
+
run: uv publish --trusted-publishing always --check-url https://pypi.org/simple
|
|
214
|
+
|
|
215
|
+
release:
|
|
216
|
+
name: Create Release
|
|
217
|
+
runs-on: ubuntu-latest
|
|
218
|
+
needs: [prepare, deploy]
|
|
219
|
+
permissions:
|
|
220
|
+
contents: write
|
|
221
|
+
steps:
|
|
222
|
+
- name: Create release with the prepared notes
|
|
223
|
+
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
|
|
224
|
+
with:
|
|
225
|
+
body: ${{ needs.prepare.outputs.notes }}
|
|
226
|
+
draft: false
|
|
227
|
+
prerelease: false
|
|
228
|
+
name: pytorch-optimizer ${{ needs.prepare.outputs.tag }}
|
|
229
|
+
tag_name: ${{ needs.prepare.outputs.tag }}
|
|
230
|
+
target_commitish: ${{ needs.prepare.outputs.ref }}
|
|
231
|
+
token: ${{ github.token }}
|
|
@@ -12,10 +12,10 @@ jobs:
|
|
|
12
12
|
update-docs:
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
steps:
|
|
15
|
-
- uses: actions/checkout@
|
|
15
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
16
16
|
|
|
17
17
|
- name: Set up Python 3.12
|
|
18
|
-
uses: actions/setup-python@
|
|
18
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
19
19
|
with:
|
|
20
20
|
python-version: 3.12
|
|
21
21
|
|
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
run: python scripts/update_docs.py
|
|
24
24
|
|
|
25
25
|
- name: Commit updated documentation
|
|
26
|
-
uses: stefanzweifel/git-auto-commit-action@
|
|
26
|
+
uses: stefanzweifel/git-auto-commit-action@4a55954c782fc1ea30b9056cd3e7a2b40ca8887d # v7.2.0
|
|
27
27
|
id: auto-commit-action
|
|
28
28
|
with:
|
|
29
29
|
commit_message: "docs: update documentation"
|
|
@@ -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.
|