nntool 1.3.0__cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

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.

Potentially problematic release.


This version of nntool might be problematic. Click here for more details.

Files changed (76) hide show
  1. nntool/__init__.py +2 -0
  2. nntool/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  3. nntool/__pycache__/__init__.cpython-312.pyc +0 -0
  4. nntool/experiment/__init__.py +6 -0
  5. nntool/experiment/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  6. nntool/experiment/__pycache__/__init__.cpython-312.pyc +0 -0
  7. nntool/experiment/__pycache__/config.cpython-312.opt-1.pyc +0 -0
  8. nntool/experiment/__pycache__/config.cpython-312.pyc +0 -0
  9. nntool/experiment/__pycache__/utils.cpython-312.opt-1.pyc +0 -0
  10. nntool/experiment/__pycache__/utils.cpython-312.pyc +0 -0
  11. nntool/experiment/config.py +112 -0
  12. nntool/experiment/utils.py +63 -0
  13. nntool/parser/__init__.py +1 -0
  14. nntool/parser/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  15. nntool/parser/__pycache__/__init__.cpython-312.pyc +0 -0
  16. nntool/parser/__pycache__/parse.cpython-312.opt-1.pyc +0 -0
  17. nntool/parser/__pycache__/parse.cpython-312.pyc +0 -0
  18. nntool/parser/parse.py +22 -0
  19. nntool/plot/__init__.py +6 -0
  20. nntool/plot/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  21. nntool/plot/__pycache__/__init__.cpython-312.pyc +0 -0
  22. nntool/plot/__pycache__/context.cpython-312.opt-1.pyc +0 -0
  23. nntool/plot/__pycache__/context.cpython-312.pyc +0 -0
  24. nntool/plot/context.py +48 -0
  25. nntool/plot/csrc/__compile__.cpython-312-x86_64-linux-gnu.so +0 -0
  26. nntool/plot/csrc/__init__.py +3 -0
  27. nntool/plot/csrc/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  28. nntool/plot/csrc/__pycache__/__init__.cpython-312.pyc +0 -0
  29. nntool/slurm/__init__.py +9 -0
  30. nntool/slurm/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  31. nntool/slurm/__pycache__/__init__.cpython-312.pyc +0 -0
  32. nntool/slurm/__pycache__/config.cpython-312.opt-1.pyc +0 -0
  33. nntool/slurm/__pycache__/config.cpython-312.pyc +0 -0
  34. nntool/slurm/__pycache__/function.cpython-312.opt-1.pyc +0 -0
  35. nntool/slurm/__pycache__/function.cpython-312.pyc +0 -0
  36. nntool/slurm/__pycache__/task.cpython-312.opt-1.pyc +0 -0
  37. nntool/slurm/__pycache__/task.cpython-312.pyc +0 -0
  38. nntool/slurm/__pycache__/wrap.cpython-312.opt-1.pyc +0 -0
  39. nntool/slurm/__pycache__/wrap.cpython-312.pyc +0 -0
  40. nntool/slurm/accelerator/__init__.py +0 -0
  41. nntool/slurm/accelerator/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  42. nntool/slurm/accelerator/__pycache__/__init__.cpython-312.pyc +0 -0
  43. nntool/slurm/accelerator/__pycache__/utils.cpython-312.opt-1.pyc +0 -0
  44. nntool/slurm/accelerator/__pycache__/utils.cpython-312.pyc +0 -0
  45. nntool/slurm/accelerator/utils.py +39 -0
  46. nntool/slurm/config.py +182 -0
  47. nntool/slurm/csrc/__compile__.cpython-312-x86_64-linux-gnu.so +0 -0
  48. nntool/slurm/csrc/__init__.py +5 -0
  49. nntool/slurm/csrc/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  50. nntool/slurm/csrc/__pycache__/__init__.cpython-312.pyc +0 -0
  51. nntool/slurm/function.py +173 -0
  52. nntool/slurm/task.py +231 -0
  53. nntool/slurm/wrap.py +210 -0
  54. nntool/train/__init__.py +25 -0
  55. nntool/train/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  56. nntool/train/__pycache__/__init__.cpython-312.pyc +0 -0
  57. nntool/train/__pycache__/trainer.cpython-312.opt-1.pyc +0 -0
  58. nntool/train/__pycache__/trainer.cpython-312.pyc +0 -0
  59. nntool/train/trainer.py +92 -0
  60. nntool/utils/__init__.py +6 -0
  61. nntool/utils/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  62. nntool/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  63. nntool/wandb/__init__.py +1 -0
  64. nntool/wandb/__pycache__/__init__.cpython-312.opt-1.pyc +0 -0
  65. nntool/wandb/__pycache__/__init__.cpython-312.pyc +0 -0
  66. nntool/wandb/__pycache__/config.cpython-312.opt-1.pyc +0 -0
  67. nntool/wandb/__pycache__/config.cpython-312.pyc +0 -0
  68. nntool/wandb/config.py +118 -0
  69. nntool-1.3.0.dist-info/._SOURCES.txt +0 -0
  70. nntool-1.3.0.dist-info/._dependency_links.txt +0 -0
  71. nntool-1.3.0.dist-info/._requires.txt +0 -0
  72. nntool-1.3.0.dist-info/._top_level.txt +0 -0
  73. nntool-1.3.0.dist-info/METADATA +25 -0
  74. nntool-1.3.0.dist-info/RECORD +76 -0
  75. nntool-1.3.0.dist-info/WHEEL +6 -0
  76. nntool-1.3.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,92 @@
1
+ import wandb
2
+ import torch
3
+
4
+ from typing import Dict, Set
5
+ from pathlib import Path
6
+ from abc import abstractmethod
7
+
8
+
9
+ class BaseTrainer(object):
10
+ def __init__(self, output_folder: str, has_wandb_writer: bool = False) -> None:
11
+ self.output_folder = Path(output_folder)
12
+ self.output_folder.mkdir(exist_ok=True)
13
+
14
+ self.has_writer = has_wandb_writer
15
+ self._wandb_defined_metrics: Set[str] = set()
16
+ if self.has_writer:
17
+ self._init_wandb_metric()
18
+
19
+ def _get_wandb_step_name(self, wandb_section: str = "trainer_state") -> str:
20
+ return f"{wandb_section}/{self.__class__.__name__}_step"
21
+
22
+ def _init_wandb_metric(self):
23
+ wandb.define_metric(self._get_wandb_step_name())
24
+ self._wandb_defined_metrics.add(self._get_wandb_step_name())
25
+
26
+ def log(self, log_dict: dict, step: int = None, section: str = "train"):
27
+ if not self.has_writer:
28
+ return
29
+
30
+ # add section to each metric
31
+ log_dict = {f"{section}/{k}": v for k, v in log_dict.items()}
32
+
33
+ # define metrics against custom step name
34
+ for k in log_dict.keys():
35
+ if k not in self._wandb_defined_metrics:
36
+ wandb.define_metric(k, step_metric=self._get_wandb_step_name())
37
+ self._wandb_defined_metrics.add(k)
38
+
39
+ # add step metrics
40
+ if step is not None:
41
+ log_dict.update({self._get_wandb_step_name(): step})
42
+ else:
43
+ log_dict.update({self._get_wandb_step_name(): self.global_step})
44
+
45
+ wandb.log(log_dict)
46
+
47
+ def save(self, milestone: str):
48
+ state = self.get_state()
49
+ torch.save(state, str(self.output_folder / f"model-{milestone}.pt"))
50
+
51
+ def load(self, milestone: str):
52
+ state = torch.load(
53
+ str(self.output_folder / f"model-{milestone}.pt"),
54
+ map_location=self.device,
55
+ )
56
+ self.load_state(state)
57
+
58
+ @abstractmethod
59
+ def train(self):
60
+ raise NotImplementedError
61
+
62
+ @abstractmethod
63
+ def set_model_state(self, train: bool = True):
64
+ raise NotImplementedError
65
+
66
+ @torch.inference_mode()
67
+ @abstractmethod
68
+ def eval(self, dataloader: torch.utils.data.DataLoader) -> Dict[str, object]:
69
+ raise NotImplementedError
70
+
71
+ @torch.inference_mode()
72
+ @abstractmethod
73
+ def eval_during_training(self) -> Dict[str, object]:
74
+ raise NotImplementedError
75
+
76
+ @property
77
+ @abstractmethod
78
+ def device(self) -> torch.DeviceObjType:
79
+ raise NotImplementedError
80
+
81
+ @property
82
+ @abstractmethod
83
+ def global_step(self) -> int:
84
+ raise NotImplementedError
85
+
86
+ @abstractmethod
87
+ def get_state(self) -> Dict[str, object]:
88
+ raise NotImplementedError
89
+
90
+ @abstractmethod
91
+ def load_state(self, state: Dict[str, object]):
92
+ raise NotImplementedError
@@ -0,0 +1,6 @@
1
+ # this is for backward compatibility
2
+ from ..experiment.utils import (
3
+ get_current_time,
4
+ get_output_path,
5
+ read_toml_file,
6
+ )
@@ -0,0 +1 @@
1
+ from .config import WandbConfig, init_wandb
nntool/wandb/config.py ADDED
@@ -0,0 +1,118 @@
1
+ import os
2
+ import git
3
+ import wandb
4
+ import tomli
5
+ import warnings
6
+
7
+ from dataclasses import dataclass, field
8
+
9
+ from wandb.sdk.lib.disabled import RunDisabled
10
+ from wandb.sdk.wandb_run import Run
11
+
12
+
13
+ @dataclass
14
+ class WandbConfig:
15
+ """
16
+ Configuration class for Weights and Biases (wandb) integration.
17
+
18
+ :param api_key_config_file: The file path to the configuration file containing the wandb API key.
19
+ The file should be a toml file with a `[wandb]` section. Default is an empty string.
20
+
21
+ :param project: The name of the project in wandb. Default is an empty string.
22
+
23
+ :param entity: The wandb user or team name. Default is an empty string.
24
+
25
+ :param name: The name of the wandb run. Leave blank to use the default run name. Default is an empty string.
26
+
27
+ :param notes: Notes or comments for the wandb run. Default is an empty string.
28
+
29
+ :param log_git_hash: Whether to log the current Git hash. Default is True.
30
+
31
+ :param log_code: Whether to log the current codebase. Default is True.
32
+
33
+ :param code_root: The root directory of the codebase to be logged. Default is the current directory (`.`).
34
+
35
+ :param code_ext: A list of file extensions for the code files to be logged. Default includes `.py` and `.sh`.
36
+ """
37
+
38
+ # wandb api key (toml file with [wandb] key field)
39
+ api_key_config_file: str = ""
40
+
41
+ # project name in wandb
42
+ project: str = ""
43
+
44
+ # wandb user name
45
+ entity: str = ""
46
+
47
+ # wandb run name (leave blacnk to use default name)
48
+ name: str = ""
49
+
50
+ # wandb run notes
51
+ notes: str = ""
52
+
53
+ # log git hash
54
+ log_git_hash: bool = True
55
+
56
+ # log code
57
+ log_code: bool = True
58
+
59
+ # code root
60
+ code_root: str = "."
61
+
62
+ # code file extensions
63
+ code_ext: list[str] = field(default_factory=lambda: [".py", ".sh"])
64
+
65
+
66
+ def is_wandb_enabled():
67
+ return wandb.run is not None
68
+
69
+
70
+ def init_wandb(args: WandbConfig, run_config: dict) -> Run | RunDisabled | None:
71
+ """initialize wandb and log the configuration
72
+
73
+ :param args: WandbConfig object
74
+ :param run_config: configuration dictionary to be logged
75
+ :return: wandb run object
76
+ """
77
+ project, entity = args.project, args.entity
78
+ if "WANDB_API_KEY" in os.environ:
79
+ warnings.warn("WANDB_API_KEY is found in environment variables. Using it.")
80
+ wandb.login(key=os.environ["WANDB_API_KEY"])
81
+ elif args.api_key_config_file:
82
+ with open(args.api_key_config_file, "rb") as config_file:
83
+ config_data = tomli.load(config_file)
84
+ wandb.login(key=config_data["wandb"]["key"])
85
+ project = config_data["wandb"].get("project", args.project)
86
+ entity = config_data["wandb"].get("entity", args.entity)
87
+ else:
88
+ warnings.warn(
89
+ "WANDB_API_KEY is not found in environment variables or the local key file."
90
+ )
91
+ pass
92
+
93
+ if args.log_git_hash:
94
+ repo = git.Repo(search_parent_directories=True)
95
+ git_hash = repo.head.object.hexsha
96
+ args.notes = (
97
+ f"{args.notes + ', ' if args.notes else ''}" + f"git hash: {git_hash}"
98
+ )
99
+
100
+ wandb_run = wandb.init(
101
+ project=project,
102
+ entity=entity,
103
+ name=args.name if args.name else None,
104
+ notes=args.notes,
105
+ config=run_config,
106
+ )
107
+ if not is_wandb_enabled():
108
+ warnings.warn(
109
+ "wandb is not enabled after intialization. Please check `wandb enabled`."
110
+ )
111
+
112
+ wandb_run.log_code(
113
+ root=args.code_root,
114
+ include_fn=lambda path, root: any(
115
+ [path.endswith(ext) for ext in args.code_ext]
116
+ ),
117
+ )
118
+ return wandb_run
Binary file
Binary file
Binary file
@@ -0,0 +1,25 @@
1
+ Metadata-Version: 2.1
2
+ Name: nntool
3
+ Version: 1.3.0
4
+ Summary: neural network tool for research
5
+ Home-page: https://github.com/jhliu17/nntool
6
+ Author: Junhao Liu
7
+ Author-email: junhaoliu17@gmail.com
8
+ License: MIT
9
+ Keywords: deep learning,neural network,research
10
+ Requires-Python: >=3.9
11
+ Requires-Dist: setuptools >=68.0.0
12
+ Requires-Dist: submitit >=1.5.2
13
+ Requires-Dist: tyro >=0.8.12
14
+ Requires-Dist: matplotlib >=3.8.0
15
+ Requires-Dist: seaborn >=0.13.2
16
+ Requires-Dist: wandb >=0.15.0
17
+ Requires-Dist: tomli >=2.0.1
18
+ Requires-Dist: cythonpackage
19
+ Provides-Extra: dev
20
+ Requires-Dist: pytest >=8.0.2 ; extra == 'dev'
21
+ Requires-Dist: jax[cpu] >=0.4.0 ; extra == 'dev'
22
+ Requires-Dist: torch >=2.2.0 ; extra == 'dev'
23
+ Requires-Dist: mypy ; extra == 'dev'
24
+ Requires-Dist: accelerate ; extra == 'dev'
25
+
@@ -0,0 +1,76 @@
1
+ nntool/__init__.py,sha256=aLOwJwXql9j87YPh8ACPWuGMD4Z_R8JlJVh2P5ZdohY,75
2
+ nntool/slurm/config.py,sha256=UFleYQuXLxz5F4Hx5WuN832UnA0uTQ05M_YyTvsnFOs,6860
3
+ nntool/slurm/function.py,sha256=aSbAgNvYPZaWJoxgjHomVaIZMSRrRzV5XIz1w6Hnrqs,8163
4
+ nntool/slurm/wrap.py,sha256=dN2lzRfE32WRaqj4ohUp9K4n8EKkk657zOer6FbRGPU,9044
5
+ nntool/slurm/__init__.py,sha256=MHg76NOj0qEzr_sXiL0nTarVm6xIXymtbmVc0U9E4_o,228
6
+ nntool/slurm/task.py,sha256=djxm5Ggi2EvPhijDNPCvx-Ppk5_BKQpTy1BAKPZhVHI,7580
7
+ nntool/slurm/accelerator/utils.py,sha256=oZrpcvlHYH14j-uNVEiSye6KiuULG1E34zGLw_IczHc,1298
8
+ nntool/slurm/accelerator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ nntool/slurm/accelerator/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=q3NjQ7KgKaJSvVjECPyoPrzZMSAs11ixUQCq9i22F5s,133
10
+ nntool/slurm/accelerator/__pycache__/__init__.cpython-312.pyc,sha256=q3NjQ7KgKaJSvVjECPyoPrzZMSAs11ixUQCq9i22F5s,133
11
+ nntool/slurm/accelerator/__pycache__/utils.cpython-312.pyc,sha256=bfZeF_8nADjSjCRWWmjV9Wa-3p_u8097Wn6RXFR_5yI,2075
12
+ nntool/slurm/accelerator/__pycache__/utils.cpython-312.opt-1.pyc,sha256=bfZeF_8nADjSjCRWWmjV9Wa-3p_u8097Wn6RXFR_5yI,2075
13
+ nntool/slurm/csrc/__init__.py,sha256=ew8vy7OKCavl2vOb0ZCDKunHjNGYsfgqZvse7UyhjkE,104
14
+ nntool/slurm/csrc/__compile__.cpython-312-x86_64-linux-gnu.so,sha256=vTq0JVlf1sw9sEtAod0ueTdwgR5a_oNLzO5mlPxC4V0,2049056
15
+ nntool/slurm/csrc/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=r8nEkXwO350xgykDg3HU-g_wyS5N8IgUp20BlGPfGu8,288
16
+ nntool/slurm/csrc/__pycache__/__init__.cpython-312.pyc,sha256=r8nEkXwO350xgykDg3HU-g_wyS5N8IgUp20BlGPfGu8,288
17
+ nntool/slurm/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=MD9ftHFI70Elf66zViZZiHKHop57wTtcmUgkts68uV4,419
18
+ nntool/slurm/__pycache__/__init__.cpython-312.pyc,sha256=MD9ftHFI70Elf66zViZZiHKHop57wTtcmUgkts68uV4,419
19
+ nntool/slurm/__pycache__/function.cpython-312.pyc,sha256=sHtq5mgJiCL1t6cAYO_SQ_Bz9FNstPoiMLxHUiAUfSs,9435
20
+ nntool/slurm/__pycache__/function.cpython-312.opt-1.pyc,sha256=sHtq5mgJiCL1t6cAYO_SQ_Bz9FNstPoiMLxHUiAUfSs,9435
21
+ nntool/slurm/__pycache__/task.cpython-312.opt-1.pyc,sha256=F6PXFoWC0zHGFba3bFRcfYDu057bsz8Ym-T99q6ayXQ,12982
22
+ nntool/slurm/__pycache__/config.cpython-312.opt-1.pyc,sha256=aq86Gkal89sIxhwiwlo9cl70CqQex1zNCqUS3I0GXoo,6739
23
+ nntool/slurm/__pycache__/config.cpython-312.pyc,sha256=aq86Gkal89sIxhwiwlo9cl70CqQex1zNCqUS3I0GXoo,6739
24
+ nntool/slurm/__pycache__/wrap.cpython-312.opt-1.pyc,sha256=8KD80OwPVKmCEL3SknNfuLh4TIkinist3JL6hldhrwI,9737
25
+ nntool/slurm/__pycache__/wrap.cpython-312.pyc,sha256=8KD80OwPVKmCEL3SknNfuLh4TIkinist3JL6hldhrwI,9737
26
+ nntool/slurm/__pycache__/task.cpython-312.pyc,sha256=F6PXFoWC0zHGFba3bFRcfYDu057bsz8Ym-T99q6ayXQ,12982
27
+ nntool/train/trainer.py,sha256=f_cFFTdddT1EDX-7DN1_y-jQ3WWxO3ZoHXSF3rgBKqY,2808
28
+ nntool/train/__init__.py,sha256=LRc7-qwMItUFM4FvB0fipqIRJfE_UV0SDBmGBUnMTGQ,827
29
+ nntool/train/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=RanaqCgdJr1c1aNW9CxMSmoyMhqS-KF6HORHAF9KFLA,795
30
+ nntool/train/__pycache__/trainer.cpython-312.pyc,sha256=GRpOv7ygqd9mjvW_aaSJRkEpep4lXTezFbBEDRz62Ac,5399
31
+ nntool/train/__pycache__/__init__.cpython-312.pyc,sha256=RanaqCgdJr1c1aNW9CxMSmoyMhqS-KF6HORHAF9KFLA,795
32
+ nntool/train/__pycache__/trainer.cpython-312.opt-1.pyc,sha256=GRpOv7ygqd9mjvW_aaSJRkEpep4lXTezFbBEDRz62Ac,5399
33
+ nntool/utils/__init__.py,sha256=wo1H6JzA6F9VndjieS1UypPf78m2_9Io3eNqc336oxA,135
34
+ nntool/utils/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=otQrTKM72cOTZ4_2lZZeKcEd_hchaBJZgEOaLp6608s,239
35
+ nntool/utils/__pycache__/__init__.cpython-312.pyc,sha256=otQrTKM72cOTZ4_2lZZeKcEd_hchaBJZgEOaLp6608s,239
36
+ nntool/experiment/utils.py,sha256=ajrjYNltyNwNfmFciygCvbcRBtn8Gc7-dVR07Q8xbKo,2119
37
+ nntool/experiment/config.py,sha256=3PQx2B9bTVxdj0i2BQ_shHSzDdFn6nNfjUAfuVjVJoo,3861
38
+ nntool/experiment/__init__.py,sha256=vd7SV9-29tceUk0QiWSgxYJIJws0M2lSSd2pu5KSKwE,127
39
+ nntool/experiment/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=PAMfLRKpa40-i9KBDEkuiDsn8D_waIcA9noUg4IDL2g,285
40
+ nntool/experiment/__pycache__/__init__.cpython-312.pyc,sha256=PAMfLRKpa40-i9KBDEkuiDsn8D_waIcA9noUg4IDL2g,285
41
+ nntool/experiment/__pycache__/config.cpython-312.opt-1.pyc,sha256=AKiGDfWvUhiC7oHsSou-0DXGo31uJqeQGTgXxTKXRkQ,5283
42
+ nntool/experiment/__pycache__/config.cpython-312.pyc,sha256=AKiGDfWvUhiC7oHsSou-0DXGo31uJqeQGTgXxTKXRkQ,5283
43
+ nntool/experiment/__pycache__/utils.cpython-312.pyc,sha256=ae4d0NVCIgcG8t3gKNglzdcZVN4HVrSfaB7htHQAMIE,2688
44
+ nntool/experiment/__pycache__/utils.cpython-312.opt-1.pyc,sha256=ae4d0NVCIgcG8t3gKNglzdcZVN4HVrSfaB7htHQAMIE,2688
45
+ nntool/plot/__init__.py,sha256=M0qnyO48RzI_62v1EzhXNIszLZEJ7tsTS2YuzDoOoKE,133
46
+ nntool/plot/context.py,sha256=9aEFWZSwliKCX5n2GX1uWPPJR_7dbn8XSVNefipkGB8,1331
47
+ nntool/plot/csrc/__init__.py,sha256=fkzL5CkVtu6JFZ8xxMdLYjRt86bqWiHYfh3UI4iMi8s,51
48
+ nntool/plot/csrc/__compile__.cpython-312-x86_64-linux-gnu.so,sha256=2SP2MXiuYsajGK65ccGF0cNoNx5qKh1I8kVUtYLvgMU,963832
49
+ nntool/plot/csrc/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=orDr5-IshSJtRpeaHy4qey3j9tBdsDme8BwT3YyoMZA,221
50
+ nntool/plot/csrc/__pycache__/__init__.cpython-312.pyc,sha256=orDr5-IshSJtRpeaHy4qey3j9tBdsDme8BwT3YyoMZA,221
51
+ nntool/plot/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=ieZewauncybTnxkCxm1YwDZnzSR1BIOnoMO6eOIWw8k,329
52
+ nntool/plot/__pycache__/__init__.cpython-312.pyc,sha256=ieZewauncybTnxkCxm1YwDZnzSR1BIOnoMO6eOIWw8k,329
53
+ nntool/plot/__pycache__/context.cpython-312.pyc,sha256=VyyXd7y1s7Vb3NreoGM0-_Dggcffx_wSOyvbRrkr0a8,2414
54
+ nntool/plot/__pycache__/context.cpython-312.opt-1.pyc,sha256=VyyXd7y1s7Vb3NreoGM0-_Dggcffx_wSOyvbRrkr0a8,2414
55
+ nntool/parser/__init__.py,sha256=991hqyHOJjoaN5WDrIBhEduZs9rmvgV6ShUeZNDAiXo,34
56
+ nntool/parser/parse.py,sha256=IqlcqQfd7GoeTGJkMOrb2_-x0s49Zz_2fA3Fsk_6ysQ,552
57
+ nntool/parser/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=xBHUleFqh4cXtBb_6Lb0jRgu79DFszPDf-xMLkUMSD0,169
58
+ nntool/parser/__pycache__/__init__.cpython-312.pyc,sha256=xBHUleFqh4cXtBb_6Lb0jRgu79DFszPDf-xMLkUMSD0,169
59
+ nntool/parser/__pycache__/parse.cpython-312.pyc,sha256=B00bHyrPJxPxt1gMFvujG34LwIQI4ssGbBlls6W3rmw,782
60
+ nntool/parser/__pycache__/parse.cpython-312.opt-1.pyc,sha256=B00bHyrPJxPxt1gMFvujG34LwIQI4ssGbBlls6W3rmw,782
61
+ nntool/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=zFHghtpKEYgzZjqbu2XpP2XEo5qZPUkRTlahPqSQs5g,320
62
+ nntool/__pycache__/__init__.cpython-312.pyc,sha256=zFHghtpKEYgzZjqbu2XpP2XEo5qZPUkRTlahPqSQs5g,320
63
+ nntool/wandb/config.py,sha256=F395QOoByO1-f5ocAmNfEGa7UfZjAWghYxoQgNKV-Ks,3605
64
+ nntool/wandb/__init__.py,sha256=lvn7f3wMkVRz0oyYSjfasFQKjmJ5d6wkDpIDgf0DDKs,44
65
+ nntool/wandb/__pycache__/__init__.cpython-312.opt-1.pyc,sha256=7upnkW-1p6wAt02lGDuav27SjW4PaPZRVnoMsGlm5h0,190
66
+ nntool/wandb/__pycache__/__init__.cpython-312.pyc,sha256=7upnkW-1p6wAt02lGDuav27SjW4PaPZRVnoMsGlm5h0,190
67
+ nntool/wandb/__pycache__/config.cpython-312.opt-1.pyc,sha256=yduxm2GRHCwckEB1tq2S5cGF8ZouNCrmPs2n6bFCKi4,5124
68
+ nntool/wandb/__pycache__/config.cpython-312.pyc,sha256=yduxm2GRHCwckEB1tq2S5cGF8ZouNCrmPs2n6bFCKi4,5124
69
+ nntool-1.3.0.dist-info/METADATA,sha256=Rf-21UEryukOszH46JqHrcdg4C9cbwcljBIIHZFJXKk,769
70
+ nntool-1.3.0.dist-info/._requires.txt,sha256=yNlZBj9Qbibg_4etwM6NkI38o7TjR6UoE0tEoNdYPjY,267
71
+ nntool-1.3.0.dist-info/RECORD,,
72
+ nntool-1.3.0.dist-info/WHEEL,sha256=OvtvnbpcaxHa5TgXgfC48E6JA7zLr7svMspPP7Vk5o8,152
73
+ nntool-1.3.0.dist-info/top_level.txt,sha256=hXO7zSAI-o9plYeUkCiKbkDpQCfTDIfjivyoSEqT28Y,7
74
+ nntool-1.3.0.dist-info/._SOURCES.txt,sha256=yNlZBj9Qbibg_4etwM6NkI38o7TjR6UoE0tEoNdYPjY,267
75
+ nntool-1.3.0.dist-info/._top_level.txt,sha256=MTm3Nh1CVxvWnLnzanzf6CglfDcr-AzoerhtjweyVT4,366
76
+ nntool-1.3.0.dist-info/._dependency_links.txt,sha256=MTm3Nh1CVxvWnLnzanzf6CglfDcr-AzoerhtjweyVT4,366
@@ -0,0 +1,6 @@
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.43.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp312-cp312-manylinux_2_17_x86_64
5
+ Tag: cp312-cp312-manylinux2014_x86_64
6
+
@@ -0,0 +1 @@
1
+ nntool