Skip to main content

An HParams implementation with argparse.

Project description

Argparse HParams

A simple argument parser for hyper-parameters.

Installation

From PyPI:

pip install argparse-hparams

From Github:

pip install git+https://github.com/enhuiz/argparse-hparams.git

Example

from argparse_hparams import dataclass, HParams, Annotated, Flag
from dataclasses import dataclass, field


@dataclass
class HParamsTest(HParams):
    # This will call: parser.add_argument(type=int, default=0)
    x: int = 0

    # You may annotate custom data for parser.add_argument(...).
    # The annotated default will overwrite dataclass default
    # This will call: parser.add_argument(type=str.upper, default='bad')
    y: Annotated[str, dict(type=str.upper, default="bad")] = "good"

    # This will call: parser.add_argument(type=int, nargs=2, default=(2, 3))
    pair: Annotated[tuple[int, int], dict(type=int, nargs=2)] = (2, 3)

    # This will call: parser.add_argument(action="store_true", default=False)
    ok: Flag = False

    # When positional is set, the argument is a positional argument instead of an option
    # i.e., there will be no '--' added before the name when calling parser.add_argument
    pos: Annotated[str, dict(positional=True)] = ""

    # Dict is parsed using json.loads
    payload: dict = field(default_factory=dict)


if __name__ == "__main__":
    # Priority: dataclass default < annotated default < YAML default < manually specified value (sys.argv)
    test = HParamsTest()
    test.show(sort=True)
$ python example.py
usage: example.py [-h] [--x int] [--y upper] [--pair int int] [--ok] [--payload dict_parser] [--default Path] str
example.py: error: the following arguments are required: pos

$ python example.py 123
┌────────────┐
│  HParams   │
├────────────┤
│ok: False   │
│pair: (2, 3)│
│payload: {} │
│pos: 123    │
│x: 0        │
│y: BAD      │
└────────────┘

$ python example.py --default default.yml 123
┌────────────────────────────────────────────────┐
│                    HParams                     │
├────────────────────────────────────────────────┤
│ok: False                                       │
│pair: [4, 5]                                    │
│payload: {'some': 'payload', 'here': 'for test'}│
│pos: 123                                        │
│x: 0                                            │
│y: 1                                            │
└────────────────────────────────────────────────┘

$ python example.py --help
usage: example.py [-h] [--x int] [--y upper] [--pair int int] [--ok] [--payload dict_parser] [--default Path] str

positional arguments:
  str                   pos

optional arguments:
  -h, --help            show this help message and exit
  --x int               x (default: 0)
  --y upper             y (default: bad)
  --pair int int        pair (default: (2, 3))
  --ok                  ok (default: False)
  --payload dict_parser
                        payload (default: {})
  --default Path        A YAML configuration file that overrides the defaults (default: None)

$ python example.py --payload '{"oops": "it is overwriten."}' --default default.yml 123
┌──────────────────────────────────────┐
│               HParams                │
├──────────────────────────────────────┤
│ok: False                             │
│pair: [4, 5]                          │
│payload: {'oops': 'it is overwriten.'}│
│pos: 123                              │
│x: 0                                  │
│y: 1                                  │
└──────────────────────────────────────┘

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

File details

Details for the file argparse-hparams-0.0.1.dev20211220120013.tar.gz.

File metadata

  • Download URL: argparse-hparams-0.0.1.dev20211220120013.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for argparse-hparams-0.0.1.dev20211220120013.tar.gz
Algorithm Hash digest
SHA256 923f020602cc0ddc7aa9417e76714e4e7237d95714ae138cff3e3b5cde597715
MD5 315a6436c89a10f123fd9a4e4377a23a
BLAKE2b-256 3fcbf668d03371cae999288babb263cd45e16b3ab937fea707eb92a628c53350

See more details on using hashes here.

File details

Details for the file argparse_hparams-0.0.1.dev20211220120013-py3-none-any.whl.

File metadata

  • Download URL: argparse_hparams-0.0.1.dev20211220120013-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for argparse_hparams-0.0.1.dev20211220120013-py3-none-any.whl
Algorithm Hash digest
SHA256 29551ffaf258ddbbc7803f46841bf4cd4a2232708f43f502df8ed36f1e7a7b19
MD5 4a5528460ba973f784750b2beba3b9a2
BLAKE2b-256 b8ce4fa8dda32d40736c4e9f790e9a10493bab6f6c35d6b59b7b6ca915c89edb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page