From 2738683b614952a74dcdbfd1cbbafc3aac294795 Mon Sep 17 00:00:00 2001 From: Ben Williams Date: Mon, 21 Aug 2023 04:40:57 +0000 Subject: [PATCH] git ignore more stuff --- .gitignore | 1 + code/simclr-pytorch-reefs/myexman/__init__.py | 10 - .../__pycache__/__init__.cpython-38.pyc | Bin 346 -> 0 bytes .../myexman/__pycache__/index.cpython-38.pyc | Bin 3764 -> 0 bytes .../myexman/__pycache__/parser.cpython-38.pyc | Bin 7789 -> 0 bytes code/simclr-pytorch-reefs/myexman/index.py | 91 ------- code/simclr-pytorch-reefs/myexman/parser.py | 232 ------------------ 7 files changed, 1 insertion(+), 333 deletions(-) delete mode 100644 code/simclr-pytorch-reefs/myexman/__init__.py delete mode 100644 code/simclr-pytorch-reefs/myexman/__pycache__/__init__.cpython-38.pyc delete mode 100644 code/simclr-pytorch-reefs/myexman/__pycache__/index.cpython-38.pyc delete mode 100644 code/simclr-pytorch-reefs/myexman/__pycache__/parser.cpython-38.pyc delete mode 100644 code/simclr-pytorch-reefs/myexman/index.py delete mode 100644 code/simclr-pytorch-reefs/myexman/parser.py diff --git a/.gitignore b/.gitignore index 1ed5a1d..1f92441 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ data/full_dataset logs/ code/simclr-pytorch-reefs/models/__pycache__/ +code/simclr-pytorch-reefs/myexman/ diff --git a/code/simclr-pytorch-reefs/myexman/__init__.py b/code/simclr-pytorch-reefs/myexman/__init__.py deleted file mode 100644 index 9bd5df0..0000000 --- a/code/simclr-pytorch-reefs/myexman/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -from .parser import ( - ExParser, - simpleroot -) -from .index import ( - Index -) -from . import index -from . import parser -__version__ = '0.0.2' diff --git a/code/simclr-pytorch-reefs/myexman/__pycache__/__init__.cpython-38.pyc b/code/simclr-pytorch-reefs/myexman/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index e4a906457e077050c9e34b08646f90c248429efc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmYk1J5B>J5J2tyC4@xc09;^;jU(y^(NNGJBt+xJTH*<@0Y7Nh63 zbh*q&FUXl>NYd9n^e^Pa0-CMa@ zu9jE#^#m&#foUhq6Uu~wFtFiVsaL>gf>-L3;aPf0_?2Q89EfM|0s*#7yVoW(2pvKM z-?u%rG!|O)#=nS7&>(29jm4%r_5n9Ls)cP7?g$6hdZCo@rdMj&9f#@K1--X$o&FZ5 Mgo|RH&-t960Fzi)761SM diff --git a/code/simclr-pytorch-reefs/myexman/__pycache__/index.cpython-38.pyc b/code/simclr-pytorch-reefs/myexman/__pycache__/index.cpython-38.pyc deleted file mode 100644 index 71dfbe2db7f2764e0df7f219c9ea3ac022646c03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3764 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 AEC2ui diff --git a/code/simclr-pytorch-reefs/myexman/__pycache__/parser.cpython-38.pyc b/code/simclr-pytorch-reefs/myexman/__pycache__/parser.cpython-38.pyc deleted file mode 100644 index f8ebf4e100f0101d466e7236c1b22845e037fa28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7789 zcmb7JTXP#ncAh&1AP8PXN)#=@-pDpm0kxZKl8T}z=33-RiAZZn+L93`BM3bp0pddS z3@j2JH_0Xssx2@Nsd8TPQ}Q-dsXX|}`3Xv8lke*Rz>8!%3)b}XboWf3 zK7IN--#L7Dd_1G!x7hzr@#Q5=`;reQe-<9z!WH}%3ZV(Tp_P)mUeeXGQ8LusESc(V zl`M6)2Y09BsOMBErS5LY#ocJ6o0(EZ*MupoZKE_M>{3=ZrE!re<%C4!NS?>CxqEm{& zk97mr+qi-(iU`{=uZ7yY27!(BSYLv;=F0so+^kl)>3^Zgag2L@|LRV=>0f>5x2{Ux zuNKQ4QEL~azbE~`Z-wQs)@~IWep$9^t?jFow(zfFft7|V?j3|}S=qr@zZzU^9w>RQ zLVRdpY40FTb3I-a8hV9NQ9MnT6DVI0J%vUkI?N10_w~@In|(`_cBCEY{0p6nSj-pt zdLb1hx(DRsmV!n6fDVs@z_X- zu!^ybp+@mAKI-v;P!`PC3j9VjwnRBB$9C98;~CN7$>Ueb0pGfUDTX?|jQSV4r1C1b z)Q=WHnO$5z#1;G+ib%hy{pmu_po$}d>J2Sg%4fzAj=>`wPGv1JkFfh3~S|vqyz<1Nq_|$?D;{gZ=GGkob|?kHrTA6!3caTbqh~}~UpvB*b{%=us&I2!NYlMnz4%^zsY&OhxUNhs_B+)8CjIL4EcL#8Ernh z`BPfOJqS_w8c`XD4DAW?nemARbhL#1BvUedOE@C+1R4VFSi%))Rd-O&h%r@9p$?=~ zbywuX1Q0VVCdCx)8HKVMka|{}!*li%OkEm>mgnN!U4;nuYT?cXFme4W2eK3l02`iS zy9>>ex6v>edWv`(e{(?`1?3GuvVCkLNN90wRdBy0q;|oj_shcM|1PMTB{a% zUYvQa+~_2BCa0i8IgKJ7s|DV0%Ggm~3FLKl{{g$*;R%f`+L|(|cy?oDb7kYbm7Ctp z+Z!uyZ@sf|du20DZToNzp^WY3E|x91bMkjtyoI9R$VJwVKW*V41hKRGSl!bjO?{!q zY0s-P%0Vy$WQD~)!0R_~1^kX?6!Si~aif*n989e6wffQ}p9kSsvZa*H6dZKRGeo^qJ{Eb52c09OD)#A8-p5 z`T*s`G`e7T0j+NFeq`YIz77XxM@HT0r-*b%0E!DZusstHqVHOAF*1Alqs53^&RUl= zjpustE8YukoUXwqCGO3x?38OQwe@j|%`|k%9-FmRD9N*M@b((D5I&zq6Q`QxeGhC- zuBlP1o!(ipw|&pw_t3A18ex1V?6Ml2*Y z8$S4B1IVG4Am792mswlvKu*lFjs5|pctMh6#0!$})GJ96&PfMM-kBUK8gN0E+~}81 zn`-&{A?B^0n0M}sB@BkVFtItDIH6(yas3E;OpjkTjz&r_6G)=A6~et#jVg=I|id1$FS%X;f!KY3I)< zpAzx`-xwbNV#RMXhM=g-Xr1E}JYGYMkR2?b01QqUdd56?xvp!vrsTK^u2VlACH{i@ zD2{0Xf;1c#Qi5$wIL~ZF5K_VgL9j$xWZ>9shFi~c)q|i5JtA*(?fCymhO%wpQHS91Wvfe0MJi zx)`yX>f>jYmX=0yC>$J(_~uEL__h3-!9lZ8YwZ?B-$=0g)JLwf?Z&8yQhoEc&wiF~ z41V9V91c0TB-VkoYT{wvw`grJ%S*L3>^n8ZaI1bF#(lTZk{?*#HLPkUxig{R! z6XQja0}oc=1%61QV3dHNo{Hq$awlw4Q!4JDF^ph=e31u>eoyhne?^56S|70vN)x5k zw@H1E01v_poya%@QXLsRSB*$T?vWncfKzc<0~1Vx|A8Ry8uCG83;Tjr&w%k|2K6z# zmjy2!kDSOwcwvUQ`h;*IJDjXfiPW=Hl=??Q@l`}v-t^#WHoo>RfT$T#Y?1kl$p@n4 z*m^0ma(``k-MhQIb*t+vU2U|tgDw~vasWk1BvpQDtB^Y8RFZ&QIzLbm6$m{s`cCLn z>2htm)t0{3Y3;V!k6S}ss)4)yK_F{*Kb}Z}5Qb%ng>~&>k!glZ03z#q43H2rJLL*9 z0fkvPLs^Kru~l!wJI=A1@>?I)Bw{BMv@pTk6}G$0GEx;a8ORU#IH^(s$zfA_nk;4+ zeF;|PlEuIb)JjUT?=P?2d0W}QD%N*bEl+-*-+Eri5_#<6WRT-BkPK8igl`gZv}DGr{d%Vbl{OvGRlp zY>;cHb$t&Og@ZuGm3*PY8bwSv8FN2$4RK2P4OY&OFd1QJAD8l;nr;{jEM~EX8GRD< zoS8*%F{yXYAMYT;s^i%igk^9!tMc=9O4OjQsD%8CJ~{s4WsXAzped9+rZw2z%a}*MY5!8Lm6NJ)0l7ONdLg@ zIlWZR?WKE}2y=Sbh^RLiIiG6YEXK@+=PptvGo0(s6U8DoJa=UEC<~>}K>GFnr}XKs zkv;S6l4G{>;f2UOLyOdLwNSWkog`JG5xw^^2bya!!pig1K<6 zJ|8aDU+G^OF&X3m>KAW9D@XcMtvAlqq2+Qk4iAxwa`ilT4${j?!+0AB4|iJ+Uya7= zuN~^M+AoZ!nn*)4F65bra=h0UBEB;<*p;!Q6*5gwrlIZ&GwbpZ%q7+zuOb+p773hr zRS+Ri&4Y&jd@RG$b1nbIN4+-?o)WvBn>BImxv{jQ&P=SAyR&bTNckc^ARPIsY&W|` z@y5tF@tR5!6L@|LSMVB&hzUU?N*G2!BqUc3%|pFvya!--WThJ`dG@n$YNs49MUkl20ts)CwToJX z2@TUfc9mZ{JxtPQXa&Ugf~yUlU^J!OhZH$t@P|^4)Q6oyUN)43;bjCX%R_I8hr5 z4THjDf`5O(_L1j`nP&M=F0rx4;?G$yI7`+-j4aIp6}_{bI8F`ZDNPS)mh#Xf+tyi&VrOw{yhqqvhq}FQ`9*b9Txcu^#2F0fJA`#Z)%`BK3XrQtehkbJWiuE z3Oq#mF=bF|1AzVHCWr&q1{cndPB{!mSp5`M3%U>jq~S13VJm2IgcB-P0@!8S%k&`s z5_2W%m4~RxCoKLNMPXe2l=Yvnc**h;<(xiF^5+~pI!1%+Nn*xIjW5wvJl)wN+Zec9 z^)H++@tGilLK~RQg5JG2Qr?T>3mIAF%nw;qP{b+VLA!z=`v+_yFOaliwK1~Kn$O~R z+t&G*V_~A;dIOSSSGUe36wvse$qVkx^sl>4;gXabNV=Lpz=y2SFiMIEFP-?eO2Vs& z$O;HbE@?WGyDGCvIm;>;(B%lFzJ1olSo{- z#Q(|0?je+IKMweiqTV2bwvR2N{nQnIa`~L^hB_E^! diff --git a/code/simclr-pytorch-reefs/myexman/index.py b/code/simclr-pytorch-reefs/myexman/index.py deleted file mode 100644 index 16658d5..0000000 --- a/code/simclr-pytorch-reefs/myexman/index.py +++ /dev/null @@ -1,91 +0,0 @@ -import configargparse -import pandas as pd -import pathlib -import strconv -import json -import functools -import datetime -from . import parser -import yaml -from argparse import Namespace -__all__ = [ - 'Index' -] - - -def only_value_error(conv): - @functools.wraps(conv) - def new_conv(value): - try: - return conv(value) - except Exception as e: - raise ValueError from e - return new_conv - - -def none2none(none): - if none is None: - return None - else: - raise ValueError - - -converter = strconv.Strconv(converters=[ - ('int', strconv.convert_int), - ('float', strconv.convert_float), - ('bool', only_value_error(parser.str2bool)), - ('time', strconv.convert_time), - ('datetime', strconv.convert_datetime), - ('datetime1', lambda time: datetime.datetime.strptime(time, parser.TIME_FORMAT)), - ('date', strconv.convert_date), - ('json', only_value_error(json.loads)), -]) - - -def get_args(path): - with open(path, 'rb') as f: - return Namespace(**yaml.load(f)) - - -class Index(object): - def __init__(self, root): - self.root = pathlib.Path(root) - - @property - def index(self): - return self.root / 'index' - - @property - def marked(self): - return self.root / 'marked' - - def info(self, source=None, nlast=None): - if source is None: - source = self.index - files = source.iterdir() - if nlast is not None: - files = sorted(list(files))[-nlast:] - else: - source = self.marked / source - files = source.glob('**/*/'+parser.PARAMS_FILE) - - def get_dict(cfg): - return configargparse.YAMLConfigFileParser().parse(cfg.open('r')) - - def convert_column(col): - if any(isinstance(v, str) for v in converter.convert_series(col)): - return col - else: - return pd.Series(converter.convert_series(col), name=col.name, index=col.index) - try: - df = (pd.DataFrame - .from_records((get_dict(c) for c in files)) - .apply(lambda s: convert_column(s)) - .sort_values('id') - .assign(root=lambda _: _.root.apply(self.root.__truediv__)) - .reset_index(drop=True)) - cols = df.columns.tolist() - cols.insert(0, cols.pop(cols.index('id'))) - return df.reindex(columns=cols) - except FileNotFoundError as e: - raise KeyError(source.name) from e diff --git a/code/simclr-pytorch-reefs/myexman/parser.py b/code/simclr-pytorch-reefs/myexman/parser.py deleted file mode 100644 index b65ed07..0000000 --- a/code/simclr-pytorch-reefs/myexman/parser.py +++ /dev/null @@ -1,232 +0,0 @@ -import configargparse -import argparse -import pathlib -import datetime -import yaml -import yaml.representer -import os -import functools -import itertools -from filelock import FileLock -__all__ = [ - 'ExParser', - 'simpleroot', -] - - -TIME_FORMAT_DIR = '%Y-%m-%d-%H-%M-%S' -TIME_FORMAT = '%Y-%m-%dT%H:%M:%S' -DIR_FORMAT = '{num}' -EXT = 'yaml' -PARAMS_FILE = 'params.'+EXT -FOLDER_DEFAULT = 'exman' -RESERVED_DIRECTORIES = { - 'runs', 'index', - 'tmp', 'marked' -} - - -def yaml_file(name): - return name + '.' + EXT - - -def simpleroot(__file__): - return pathlib.Path(os.path.dirname(os.path.abspath(__file__)))/FOLDER_DEFAULT - - -def represent_as_str(self, data, tostr=str): - return yaml.representer.Representer.represent_str(self, tostr(data)) - - -def register_str_converter(*types, tostr=str): - for T in types: - yaml.add_representer(T, functools.partial(represent_as_str, tostr=tostr)) - - -register_str_converter(pathlib.PosixPath, pathlib.WindowsPath) - - -def str2bool(s): - true = ('true', 't', 'yes', 'y', 'on', '1') - false = ('false', 'f', 'no', 'n', 'off', '0') - - if s.lower() in true: - return True - elif s.lower() in false: - return False - else: - raise argparse.ArgumentTypeError(s, 'bool argument should be one of {}'.format(str(true + false))) - - -class ParserWithRoot(configargparse.ArgumentParser): - def __init__(self, *args, root=None, zfill=6, - **kwargs): - super().__init__(*args, **kwargs) - if root is None: - raise ValueError('Root directory is not specified') - root = pathlib.Path(root) - if not root.is_absolute(): - raise ValueError(root, 'Root directory is not absolute path') - if not root.exists(): - raise ValueError(root, 'Root directory does not exist') - self.root = pathlib.Path(root) - self.zfill = zfill - self.register('type', bool, str2bool) - for directory in RESERVED_DIRECTORIES: - getattr(self, directory).mkdir(exist_ok=True) - self.lock = FileLock(str(self.root/'lock')) - - @property - def runs(self): - return self.root / 'runs' - - @property - def marked(self): - return self.root / 'marked' - - @property - def index(self): - return self.root / 'index' - - @property - def tmp(self): - return self.root / 'tmp' - - def max_ex(self): - max_num = 0 - for directory in itertools.chain(self.runs.iterdir(), self.tmp.iterdir()): - num = int(directory.name.split('-', 1)[0]) - if num > max_num: - max_num = num - return max_num - - def num_ex(self): - return len(list(self.runs.iterdir())) - - def next_ex(self): - return self.max_ex() + 1 - - def next_ex_str(self): - return str(self.next_ex()).zfill(self.zfill) - - -class ExParser(ParserWithRoot): - """ - Parser responsible for creating the following structure of experiments - ``` - root - |-- runs - | `-- xxxxxx-YYYY-mm-dd-HH-MM-SS - | |-- params.yaml - | `-- ... - |-- index - | `-- xxxxxx-YYYY-mm-dd-HH-MM-SS.yaml (symlink) - |-- marked - | `-- - | `-- xxxxxx-YYYY-mm-dd-HH-MM-SS (symlink) - | |-- params.yaml - | `-- ... - `-- tmp - `-- xxxxxx-YYYY-mm-dd-HH-MM-SS - |-- params.yaml - `-- ... - ``` - """ - def __init__(self, *args, zfill=6, file=None, - args_for_setting_config_path=('--config', ), - automark=(), - parents=[], - **kwargs): - - root = os.path.join(os.path.abspath(os.environ.get('EXMAN_PATH', './logs')), ('exman-' + str(file))) - if not os.path.exists(root): - os.makedirs(root) - - if len(parents) == 1: - self.yaml_params_path = parents[0].yaml_params_path - root = parents[0].root - - super().__init__(*args, root=root, zfill=zfill, - args_for_setting_config_path=args_for_setting_config_path, - config_file_parser_class=configargparse.YAMLConfigFileParser, - ignore_unknown_config_file_keys=True, - parents=parents, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - **kwargs) - self.automark = automark - if len(parents) == 0: - self.add_argument('--tmp', action='store_true') - - def _initialize_dir(self, tmp): - try: - # with self.lock: # different processes can make it same time, this is needed to avoid collision - time = datetime.datetime.now() - num = self.next_ex_str() - name = DIR_FORMAT.format(num=num, time=time.strftime(TIME_FORMAT_DIR)) - if tmp: - absroot = self.tmp / name - relroot = pathlib.Path('tmp') / name - else: - absroot = self.runs / name - relroot = pathlib.Path('runs') / name - # this process now safely owns root directory - # raises FileExistsError on fail - absroot.mkdir() - except FileExistsError: # shit still happens - return self._initialize_dir(tmp) - return absroot, relroot, name, time, num - - def parse_known_args(self, *args, log_params=True, **kwargs): - args, argv = super().parse_known_args(*args, **kwargs) - if not log_params: - return args, argv - - if hasattr(self, 'yaml_params_path'): - with self.yaml_params_path.open('w') as f: - self.dumpd = args.__dict__.copy() - yaml.dump(self.dumpd, f, default_flow_style=False) - print("\ntime: '{}'".format(self.time.strftime(TIME_FORMAT)), file=f) - print("id:", int(self.num), file=f) - print(self.yaml_params_path.read_text()) - return args, argv - - absroot, relroot, name, time, num = self._initialize_dir(args.tmp) - self.time = time - self.num = num - args.root = absroot - self.yaml_params_path = args.root / PARAMS_FILE - rel_yaml_params_path = pathlib.Path('..', 'runs', name, PARAMS_FILE) - with self.yaml_params_path.open('a') as f: - self.dumpd = args.__dict__.copy() - # dumpd['root'] = relroot - yaml.dump(self.dumpd, f, default_flow_style=False) - print("\ntime: '{}'".format(time.strftime(TIME_FORMAT)), file=f) - print("id:", int(num), file=f) - print(self.yaml_params_path.read_text()) - symlink = self.index / yaml_file(name) - if not args.tmp: - symlink.symlink_to(rel_yaml_params_path) - print('Created symlink from', symlink, '->', rel_yaml_params_path) - if self.automark and not args.tmp: - automark_path_part = pathlib.Path(*itertools.chain.from_iterable( - (mark, str(getattr(args, mark, ''))) - for mark in self.automark)) - markpath = pathlib.Path(self.marked, automark_path_part) - markpath.mkdir(exist_ok=True, parents=True) - relpathmark = pathlib.Path('..', *(['..']*len(automark_path_part.parts))) / 'runs' / name - (markpath / name).symlink_to(relpathmark, target_is_directory=True) - print('Created symlink from', markpath / name, '->', relpathmark) - return args, argv - - def done(self): - print('Success.') - self.dumpd['status'] = 'done' - with self.yaml_params_path.open('a') as f: - yaml.dump(self.dumpd, f, default_flow_style=False) - - def update_params_file(self, args): - dumpd = args.__dict__.copy() - with self.yaml_params_path.open('w') as f: - yaml.dump(dumpd, f, default_flow_style=False) - print("\ntime: '{}'".format(self.time.strftime(TIME_FORMAT)), file=f) - print("id:", int(self.num), file=f)