Files
TBgen_App/__pycache__/loader_saver.cpython-312.pyc

216 lines
29 KiB
Plaintext
Raw Normal View History

2026-03-30 16:46:48 +08:00
<EFBFBD>
P<>YiIU<00><00><><00>dZddlZddlZddlZddlmZddlZddlmZddl Z ddl
Z
ddl m Z ddl mZddlmZmZmZej(<00>Zdefd <09>Zdefd
<EFBFBD>Zdefd <0B>Zdefd <0C>Zdefd <0A>Zdefd<0E>Zd<0F>Zd"d<10>Zd<11>ZGd<12>d<13>Z Gd<14>d<15>Z!d#d<16>Z"d<17>Z#d<18>Z$d<19>Z%d<1A>Z&d<1B>Z'd<1C>Z(d<1D>Z)d$d<1E>Z*d%d<1F>Z+d <20>Z,e <20>Z-e.d!k(ryy)&z<>
Description : This module contains all functions related to loading and saving (except config loading).
Author : Ruidi Qiu (ruidi.qiu@tum.de)
Time : 2023/11/28 14:03:56
LastEdited : 2024/8/23 12:37:25
<EFBFBD>N)<01>Dict)<01>Config)<01>StringIO)<01>logger)<03>
print_time<EFBFBD>Timer<65>str_list<73>pathc<00>t<00>t|d<01>5}tj|<01>}ddd<00>|S#1swYSxYw)N<>rb)<03>open<65>yaml<6D> safe_load)r
<00>f<> yaml_dicts <20>2/home/zhang/CorrectBench/TBgen_App/loader_saver.py<70>load_yaml_dictrs8<00><00> <0A>d<EFBFBD>D<EFBFBD> <19>&<26>Q<EFBFBD><18>N<EFBFBD>N<EFBFBD>1<EFBFBD>%<25> <09>&<26> <14><14>&<26> <14><14><><00>-<03>7c<00>t<00>t|d<01>5}tj|<01>}ddd<00>|S#1swYSxYw<01>N<>r)r <00>json<6F>load)r
r<00> json_dicts r<00>load_json_dictrs6<00><00> <0A>d<EFBFBD>C<EFBFBD><1F>!<21>A<EFBFBD><18>I<EFBFBD>I<EFBFBD>a<EFBFBD>L<EFBFBD> <09>!<21> <14><14>!<21> <14><14>rc<00>v<00>t|d<01>5}tj||d<02><03>ddd<00>y#1swYyxYw)N<>w<>)<01>indent)r r<00>dump)rr
rs r<00>save_dict_json_formr!"s2<00><00> <0A>d<EFBFBD>C<EFBFBD><1F>*<2A>A<EFBFBD> <0C> <09> <09>)<29>Q<EFBFBD>q<EFBFBD>)<29>*<2A>*<2A>*<2A>s<00>/<03>8c<00>j<00>t|d<01>5}|j<00>}ddd<00>|S#1swYSxYwr)r <00>read)r
r<00>txts r<00>load_txtr%&s2<00><00> <0A>d<EFBFBD>C<EFBFBD><1F><17>A<EFBFBD><0F>f<EFBFBD>f<EFBFBD>h<EFBFBD><03><17> <0E>J<EFBFBD><17> <0E>J<EFBFBD>s<00>(<03>2c<00><><00>t|d<01>5}|D<00>cgc]}tj|<02><00><02>}}ddd<00>|Scc}w#1swYSxYwr)r r<00>loads)r
r<00>line<6E>datas r<00>load_json_linesr*,sH<00><00> <0A>d<EFBFBD>C<EFBFBD><1F>0<>A<EFBFBD>-.<2E>/<2F>T<EFBFBD><04>
<EFBFBD>
<EFBFBD>4<EFBFBD> <20>/<2F><04>/<2F>0<> <0F>K<EFBFBD><4B>0<>0<> <0F>K<EFBFBD>s<00>?<03>:<06>?<03>?<03>A c<00><><00>t|d<01>5}|D])}tj||<02>|jd<02><00>+ ddd<00>y#1swYyxYw)Nr<00>
)r rr <00>write)r)r
rr(s r<00>save_json_linesr.1sJ<00><00> <0A>d<EFBFBD>C<EFBFBD><1F><1A>A<EFBFBD><18> <1A>D<EFBFBD> <10>I<EFBFBD>I<EFBFBD>d<EFBFBD>A<EFBFBD> <1E> <0A>G<EFBFBD>G<EFBFBD>D<EFBFBD>M<EFBFBD> <1A><1A><1A><1A>s <00>/A<03>Ac<00><><00>t|t<00>r|D]}|d|k(s<01> |cSyt|t<00>r|D]}|d|k(s<01> |cSyy)zA
quickly find the line in data by task_id or task_number
<20>task_id<69> task_numberN)<03>
isinstance<EFBFBD>str<74>int)<03> id_or_numberr)r(s r<00>find_line_jsonlr67s`<00><00><12>,<2C><03>$<24><18> <1C>D<EFBFBD><13>I<EFBFBD><EFBFBD>,<2C>.<2E><1B> <0B> <1C>
<14>L<EFBFBD>#<23> &<26><18> <1C>D<EFBFBD><13>M<EFBFBD>"<22>l<EFBFBD>2<><1B> <0B> <1C>
'<27>c<00>h<00>|jj|jj|jj|jjd<01>}||}|j
}|jj}||j <00>vrtd|z<00><00>|j<00>d|jz}n$t|j<00><00>d|j<00><01>}|dk7rd|z}||z}|jdvr0|jjd<08>s|jdz|_ n|j|_ |j<00>|j<00>|<07>d<08>} |d k(r| Stjj!| <09>d
k7rtj"| <09>d d d <0A>}
|dk(rd} n|
|} | |z| z} | S)z%support log/data/plot/postproc saving)<04>log<6F>message<67>tb<74>dirzno such saving type named "%s"z%s<>_<>z%s_)r>N<>/r<Tz.log<6F>.v)r9r;r:)<12>saver9r:<00>iverilog<6F>pub<75>run<75>keys<79> Exception<6F>prefix<69>timer3<00>subdir<69>endswithr<<00>osr
<00>exists<74>makedirs) <0A>config<69> save_type<70> custom_name<6D>SAVE_TYPE_DICT<43> type_configrDrC<00> unique_name<6D> file_name<6D>save_dir<69> suffix_dict<63>suffix<69> save_paths r<00>save_path_settingrYEsy<00><00><16>{<7B>{<7B><EFBFBD><EFBFBD><19>;<3B>;<3B>&<26>&<26><14>k<EFBFBD>k<EFBFBD>"<22>"<22><15>{<7B>{<7B><EFBFBD><EFBFBD> <06>N<EFBFBD> !<21><19>+<2B>K<EFBFBD>
<10>*<2A>*<2A>C<EFBFBD>
<10>+<2B>+<2B>/<2F>/<2F>C<EFBFBD> <14><0E>+<2B>+<2B>-<2D> -<2D><17>:<3A>i<EFBFBD>H<>I<>I<>
<EFBFBD>z<EFBFBD>z<EFBFBD><19><1A>C<EFBFBD>H<EFBFBD>H<EFBFBD>o<EFBFBD> <0B>"<22>3<EFBFBD>:<3A>:<3A><EFBFBD><03><08><08>9<> <0B><12>b<EFBFBD><18><1B>[<5B>)<29> <0B><1B>k<EFBFBD>)<29>I<EFBFBD> <0B>z<EFBFBD>z<EFBFBD><1A>#<23>C<EFBFBD>J<EFBFBD>J<EFBFBD>,?<3F>,?<3F><03>,D<><18>Z<EFBFBD>Z<EFBFBD><03>^<5E><03>
<EFBFBD><18>Z<EFBFBD>Z<EFBFBD><03>
<EFBFBD><1D>'<27>'<27>3<EFBFBD>:<3A>:<3A>{<7B>;<3B>H<EFBFBD><10>E<EFBFBD><19><17><0F> <09>w<EFBFBD>w<EFBFBD>~<7E>~<7E>h<EFBFBD><1F>4<EFBFBD>'<27>
<EFBFBD> <0B> <0B>H<EFBFBD><1D> <20><04>-<2D>K<EFBFBD><10>I<EFBFBD><1D><13><06><1C>Y<EFBFBD>'<27><06><18>9<EFBFBD>$<24>v<EFBFBD>-<2D>I<EFBFBD> <14>r7c<00><<00>t|d<01>|j_|S)zsave root; ends with '/'r<)rYrA<00>root)rNs r<00>add_save_root_tor\vs<00><00>(<28><16><15>7<>F<EFBFBD>K<EFBFBD>K<EFBFBD><14> <11>Mr7c<00>z<00><00>eZdZdZdZdZ<05>fd<04>Zd<05>Zdefd<07>Z d<08>Z
d <09>Z d)d
ee zd ed e fd <0A>Zd<0E>Zd<0F>Zd efd<10>Zdefd<12>Zd<13>Zd<14>Zd<15>Zdefd<16>Zed<17><00>Zdefd<18>Zdefd<19>Zdefd<1A>Zdefd<1B>Zdefd<1C>Zdefd<1D>Zdefd<1E>Zdefd<1F>Z defd <20>Z!defd!<21>Z"d"e#d#ed$edefd%<25>Z$d*d"e#ded efd&<26>Z%e&d+d e fd'<27><05>Z'd(<28>Z(<28>xZ)S),<2C>
AutoLoggerzHsingleton class, used as the logger in the project. supported by loguru.NFc<00>d<00><01>|j<00>tt|<00>|<00>|_|jS<00>N)<04> _instance<63>superr^<00>__new__)<04>cls<6C>args<67>kwargs<67> __class__s <20>rrczAutoLogger.__new__<5F>s*<00><><00> <0E>=<3D>=<3D> <20>!<21>*<2A>c<EFBFBD>:<3A>3<EFBFBD>?<3F>C<EFBFBD>M<EFBFBD><12>}<7D>}<7D>r7c<00><00>tjs<>tj<00><>dt_t<00>|_|jj
j j|_|jj
j j|_ t|_ t|jd<02>|_ |j<00>|j<00>|j!<00>d|_d|_d|_g|_yyy)NTr9)r^<00> _initializedrrarNrAr9<00>debug_en<65>level<65> log_level<65> loguruloggerrrY<00>running_log_path<74> _save_config<69> _init_levels<6C>_init_handlers<72>
log_stream<EFBFBD>running_log_id<69> temp_log_id<69>logline_prefix_list<73><01>selfs r<00>__init__zAutoLogger.__init__<5F>s<><00><00><19>&<26>&<26><15><1F><1F>+<2B>*.<2E>
<EFBFBD>'<27>$<24>h<EFBFBD><04> <0B> $<24> <0B> <0B> 0<> 0<> 4<> 4<> =<3D> =<3D><04> <0A>!%<25><1B><1B>!1<>!1<>!5<>!5<>!;<3B>!;<3B><04><0E>*<2A><04> <0B>):<3A>$<24>+<2B>+<2B>u<EFBFBD>(M<><04>%<25><14>!<21>!<21>#<23><14>!<21>!<21>#<23><14>#<23>#<23>%<25>"&<26><04><0F>&*<2A><04>#<23>#'<27><04> <20>57<35><04>(<28>,<2C>'r7<00>stringc<00>&<00>|j|<01>yr`)<01>info<66>rwrys r<00>__call__zAutoLogger.__call__<5F>s<00><00> <0C> <09> <09>&<26>r7c<00><><00>|jjddd<03><04>|jjddd<07><04>|jjdd d
<EFBFBD><04>y ) z$initialize the customized log levels<6C>POSITIVE<56>z<fg 194>)<02>no<6E>color<6F>NEGATIVE<56>z<fg 225><3E>FAILED<45>z<red>N)rrkrvs rrpzAutoLogger._init_levels<6C>sM<00><00> <0C> <0B> <0B><19><19>*<2A><12>:<3A><19>><3E> <0C> <0B> <0B><19><19>*<2A><12>:<3A><19>><3E> <0C> <0B> <0B><19><19>(<28>r<EFBFBD><17><19>9r7c<00>
<00>|jjd<01>|jsdnd}|jjtj
|d<04><05>|j |j|j<00><06>|_ y)zset the loggers for the projectr<00>INFO<46>DEBUGzT<green>{time:YYYY-MM-DD HH:mm:ss.S}</> | <level>{level: <8}</> | <level>{message}</>)rk<00>format<61>rkN)
r<00>removerj<00>add<64>sys<79>stdout<75> _set_handlerrnrlrs)rw<00> console_levels rrqzAutoLogger._init_handlers<72>se<00><00> <0C> <0B> <0B><1A><1A>1<EFBFBD><1D>&*<2A>m<EFBFBD>m<EFBFBD><06><17> <0A> <0C> <0B> <0B><0F><0F><03>
<EFBFBD>
<EFBFBD>-<2D>AW<02><0F> X<02>"<22>/<2F>/<2F><04>0E<30>0E<30>T<EFBFBD>^<5E>^<5E>/<2F>\<5C><04>r7r
rk<00>returnc<00><><00>|<04>d}||||d<02>}t|t<00>r
d|d<d|d<|jjdi|<05><01>}|S)ag
- set one handler for the logger (see loguru documentation to know what is a handler)
- input:
- level: the lowest level of the log that will be saved for this handler
- filter: the customized filter (func/dict/str) to match what to be saved
- format: the format of each record
z4{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message})<04>sinkr<6B>rk<00>filterz500 MB<4D>rotationzutf-8<>encoding<6E>)r2r3rr<>)rwr
rkr<>r<><00>paras<61>
handler_ids rr<>zAutoLogger._set_handler<65>s`<00><00> <12>><3E>K<>F<EFBFBD><19><1C><1A><1C> 
<EFBFBD><05> <16>d<EFBFBD>C<EFBFBD> <20> (<28>E<EFBFBD>*<2A> <1D> '<27>E<EFBFBD>*<2A> <1D>$<24>T<EFBFBD>[<5B>[<5B>_<EFBFBD>_<EFBFBD>-<2D>u<EFBFBD>-<2D>
<EFBFBD><19>r7c<00><><00>|j<00>|j<00>t<00>|_|j |j|j
<00><02>|_y)zDinitialize a temporary log stream, if already exists, reset it firstNr<4E>)rt<00>reset_temp_logrrrr<>rlrvs r<00> set_temp_logzAutoLogger.set_temp_log<6F>sC<00><00> <0F> <1B> <1B> '<27> <10> <1F> <1F> !<21>"<22>*<2A><04><0F><1F>,<2C>,<2C>T<EFBFBD>_<EFBFBD>_<EFBFBD>D<EFBFBD>N<EFBFBD>N<EFBFBD>,<2C>S<><04>r7c<00><00>|j<00>_|j<00>}|jj|j<00>|jj <00>d|_d|_|S|jj d<02>y)z/delete the temporary log and return the contentNz$logger warning: no temp log to resetr>)rt<00> get_temp_logrr<>rr<00>close<73>warning)rw<00> log_contents rr<>zAutoLogger.reset_temp_log<6F>so<00><00> <0F> <1B> <1B> '<27><1E>+<2B>+<2B>-<2D>K<EFBFBD> <10>K<EFBFBD>K<EFBFBD> <1E> <1E>t<EFBFBD>/<2F>/<2F> 0<> <10>O<EFBFBD>O<EFBFBD> !<21> !<21> #<23>"<22>D<EFBFBD>O<EFBFBD>#<23>D<EFBFBD> <1C><1E> <1E> <10>K<EFBFBD>K<EFBFBD> <1F> <1F> F<> G<>r7c<00>P<00>|j<00>|jj<00>Sy)z$get the content of the temporary logr>)rr<00>getvaluervs rr<>zAutoLogger.get_temp_log<6F>s"<00><00> <0F>?<3F>?<3F> &<26><17>?<3F>?<3F>+<2B>+<2B>-<2D> -<2D>r7rGc<00>:<00>|jj|<01>y)z<>
- set the prefix for the log line. the prefix will be stacked.
- for example, if you set prefix1, prefix2, prefix3, the log line will be like: [prefix1] (prefix2) (prefix3) log_content
N)ru<00>append<6E>rwrGs r<00>
set_prefixzAutoLogger.set_prefix<69>s<00><00>
<0A> <20> <20>'<27>'<27><06>/r7c<00><><00>t|j<00>dkDr|jj<00>y|jj d<02>y)z+pop the last prefix out of the prefix stackrz logger warning: no prefix to popN)<05>lenru<00>poprr<>rvs r<00>
pop_prefixzAutoLogger.pop_prefix<69>s:<00><00> <0E>t<EFBFBD>'<27>'<27> (<28>1<EFBFBD> ,<2C> <10> $<24> $<24> (<28> (<28> *<2A> <10>K<EFBFBD>K<EFBFBD> <1F> <1F> B<> Cr7c<00>8<00>|jj<00>y)zclear all the prefixesN)ru<00>clearrvs r<00> clear_prefixzAutoLogger.clear_prefix<69>s<00><00> <0C> <20> <20>&<26>&<26>(r7c<00>T<00>|jjd|j<00><00><02>y)zshow the current prefixeszcurrent prefixes: N<>rr{<00>logline_prefixrvs r<00> show_prefixzAutoLogger.show_prefix<69>s#<00><00> <0C> <0B> <0B><18><18>-<2D>d<EFBFBD>.A<>.A<>-B<>C<>Dr7c<00><00>||jvS)z*check if the prefix is in the prefix stack)rur<>s r<00> check_prefixzAutoLogger.check_prefix<69>s<00><00><15><14>1<>1<>1<>1r7c<00>@<00>d}d}t|j<00>dkDr}|d|jdz|dzdz}t|j<00>dkDr@dj|jddD<00>cgc]}|d|z|dz<00><02>c}<04>dz}||zSd}||zSycc}w)z<>
- the prefix will be like: "[prefix1] (prefix2) (prefix3)", there should be [ ]/( ) around each prefix
- if there is no prefix, return " "
z[]r<00><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Nr>)r<>ru<00>join)rw<00> first_bracker<65> other_bracker<65> prefix_firstrG<00> prefix_others rr<>zAutoLogger.logline_prefix<69>s<><00><00> <1D> <0A><1C> <0A> <0E>t<EFBFBD>'<27>'<27> (<28>1<EFBFBD> ,<2C>(<28><11>+<2B>d<EFBFBD>.F<>.F<>q<EFBFBD>.I<>I<>]<5D>[]<5D>M^<5E>^<5E>ad<61>d<>L<EFBFBD><12>4<EFBFBD>+<2B>+<2B>,<2C>q<EFBFBD>0<>"<22>x<EFBFBD>x<EFBFBD>gk<67>g<67>g<67>AB<02>AC<02>hD<02>)E<02>]c<>-<2D><01>*:<3A>V<EFBFBD>*C<>m<EFBFBD>TV<54>FW<46>*W<>)E<02> F<02>IL<02> L<02> <0C> <20>,<2C>.<2E> .<2E> "<22> <0C><1F>,<2C>.<2E> .<2E><15><> )Es<00>/Bc<00>T<00>|jj|j|z<00>y)z% the most trival info, level value: 5N)r<00>tracer<65>r|s rr<>zAutoLogger.trace s<00><00> <0C> <0B> <0B><19><19>$<24>-<2D>-<2D><06>6<>7r7c<00><><00>|dz|j<00>z}|jj|j|z<00>y)z2 debug level log, some point info; level value: 10<31> | N)<04>_get_caller_locationr<00>debugr<67>r|s rr<>zAutoLogger.debugs6<00><00><17>%<25><1E>$<24>";<3B>";<3B>"=<3D>=<3D><06> <0C> <0B> <0B><19><19>$<24>-<2D>-<2D><06>6<>7r7c<00>T<00>|jj|j|z<00>y)zinfo level log; level value: 20Nr<4E>r|s rr{zAutoLogger.infos<00><00> <0C> <0B> <0B><18><18><14>,<2C>,<2C>v<EFBFBD>5<>6r7c<00>V<00>|jjd|j|z<00>y)z#positive level log; level value: 22rN<>rr9r<>r|s r<00>positivezAutoLogger.positive<00><00><00> <0C> <0B> <0B><0F><0F>
<EFBFBD>D<EFBFBD>$7<>$7<>&<26>$@<40>Ar7c<00>V<00>|jjd|j|z<00>y)z#negative level log; level value: 23r<33>Nr<4E>r|s r<00>negativezAutoLogger.negativer<>r7c<00>T<00>|jj|j|z<00>y)z"success level log; level value: 25N)r<00>successr<73>r|s rr<>zAutoLogger.success!s<00><00> <0C> <0B> <0B><1B><1B>D<EFBFBD>/<2F>/<2F>&<26>8<>9r7c<00>V<00>|jjd|j|z<00>y)z!failed level log; level value: 26r<36>Nr<4E>r|s r<00>failedzAutoLogger.failed%s<00><00> <0C> <0B> <0B><0F><0F><08>$<24>"5<>"5<><06>"><3E>?r7c<00><><00>|dz|j<00>zdz|jd<03>z}|jj|j|z<00>y)z"warning level log; level value: 30r<30><00> | caller: <20>N)r<>rr<>r<>r|s rr<>zAutoLogger.warning)sM<00><00><17>%<25><1E>$<24>";<3B>";<3B>"=<3D>=<3D> <0A>M<>PT<50>Pi<50>Pi<50>jk<6A>Pl<50>l<><06> <0C> <0B> <0B><1B><1B>D<EFBFBD>/<2F>/<2F>&<26>8<>9r7c<00><><00>|dz|j<00>zdz|jd<03>z}|jj|j|z<00>y)z error level log; level value: 40r<30>r<>r<>N)r<>r<00>errorr<72>r|s rr<>zAutoLogger.error.sM<00><00><17>%<25><1E>$<24>";<3B>";<3B>"=<3D>=<3D> <0A>M<>PT<50>Pi<50>Pi<50>jk<6A>Pl<50>l<><06> <0C> <0B> <0B><19><19>$<24>-<2D>-<2D><06>6<>7r7c<00><><00>|dz|j<00>zdz|jd<03>z}|jj|j|z<00>y)z#critical level log; level value: 50r<30>r<>r<>N)r<>r<00>criticalr<6C>r|s rr<>zAutoLogger.critical3sM<00><00><17>%<25><1E>$<24>";<3B>";<3B>"=<3D>=<3D> <0A>M<>PT<50>Pi<50>Pi<50>jk<6A>Pl<50>l<><06> <0C> <0B> <0B><1C><1C>T<EFBFBD>0<>0<>6<EFBFBD>9<>:r7<00> condition<6F>yeslevel<65>nolevelc<00>R<00>|rt||<02>|<04>yt||<03>|<04>y)zIwill log the string with yeslevel if condition is True, else with nolevelN)<01>getattr)rwr<>r<>r<>rys r<00> match_levelzAutoLogger.match_level8s'<00><00> <14> #<23>G<EFBFBD>D<EFBFBD>(<28> #<23>F<EFBFBD> +<2B> "<22>G<EFBFBD>D<EFBFBD>'<27> "<22>6<EFBFBD> *r7c<00>B<00>|st||<03>|<02>t|<02><00>y)z<>
- similar to the assert statement, but will save the log before raising the AssertionError
- you can customize the level of the log, default: critical; you should use lower case
N)r<><00>AssertionError)rwr<>ryrks r<00>assert_zAutoLogger.assert_?s(<00><00>
<19> <20>G<EFBFBD>D<EFBFBD>%<25> <20><16> (<28> <20><16>(<28> (<28>r7c<00>&<00>tj<00>|j}tjj |t <00>}tj<00>|j}tj<00>|j}d|<01>d|<02>d|<03><00>S)Nz
location: z, func: z, line: ) <09>inspect<63>stack<63>filenamerKr
<00>relpath<74>ORIGINAL_RUN_PATH<54>function<6F>lineno)rk<00> caller_file<6C> caller_func<6E> caller_lines rr<>zAutoLogger._get_caller_locationHsr<00><00><1D>m<EFBFBD>m<EFBFBD>o<EFBFBD>e<EFBFBD>,<2C>5<>5<> <0B><18>g<EFBFBD>g<EFBFBD>o<EFBFBD>o<EFBFBD>k<EFBFBD>3D<33>E<> <0B><1D>m<EFBFBD>m<EFBFBD>o<EFBFBD>e<EFBFBD>,<2C>5<>5<> <0B><1D>m<EFBFBD>m<EFBFBD>o<EFBFBD>e<EFBFBD>,<2C>3<>3<> <0B><1B>K<EFBFBD>=<3D><08><1B> <0A>X<EFBFBD>k<EFBFBD>]<5D>S<>Sr7c<00>R<00>t|jd<01>5}|jjjj
<00><|j d|jjjj
z<00>t||j<00>ddd<00>y#1swYyxYw)N<>a<>%s
)r rnrNrAr9<00>notesr-<00> print_config)rw<00>files rrozAutoLogger._save_configPsz<00><00> <11>$<24>'<27>'<27><13> -<2D> ,<2C><14><17>;<3B>;<3B>#<23>#<23>'<27>'<27>-<2D>-<2D>5<><14>
<EFBFBD>
<EFBFBD>8<EFBFBD>t<EFBFBD>{<7B>{<7B>'7<>'7<>';<3B>';<3B>'A<>'A<>B<>C<> <18><14>t<EFBFBD>{<7B>{<7B> +<2B>  ,<2C> ,<2C> ,<2C>s <00>A=B<03>B&)NNN)r<>)<01>)*<2A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rarircrxr3r}rprqrr4r<>r<>r<>r<>r<>r<>r<>r<>r<><00>propertyr<79>r<>r<>r{r<>r<>r<>r<>r<>r<>r<><00>boolr<6C>r<><00> staticmethodr<64>ro<00> __classcell__)rgs@rr^r^|s<><00><><00>R<><14>I<EFBFBD><18>L<EFBFBD><1D>
8<>&<1A>c<EFBFBD><1A>:<3A> ]<01><1A><03>H<EFBFBD> <0C><1A>C<EFBFBD><1A>[^<5E><1A>2T<01> <16><16>C<EFBFBD><16>0<><03>0<>D<01>)<29>E<01>2<>#<23>2<><0E><16><0E><16>$8<>3<EFBFBD>8<>8<>3<EFBFBD>8<>
7<>#<23>7<>B<01>c<EFBFBD>B<01>B<01>c<EFBFBD>B<01>:<3A>S<EFBFBD>:<3A>@<01>C<EFBFBD>@<01>:<3A>S<EFBFBD>:<3A>
8<>3<EFBFBD>8<>
;<3B>c<EFBFBD>;<3B>
+<2B>D<EFBFBD>+<2B>3<EFBFBD>+<2B><03>+<2B>C<EFBFBD>+<2B>)<29><04>)<29>S<EFBFBD>)<29><03>)<29><12>T<01>3<EFBFBD>T<01><12>T<01>,<2C>r7r^c<00>.<00>eZdZdZdefd<03>Zd<04>Zd<05>Zd<06>Zy)<08>log_localprefixa<78>
usage as a context manager
::
with log_localprefix('prefix'):
# log content
logger.info('log content')
-> "[prefix] log content"
usage as a decorator
::
@log_localprefix('prefix')
def func():
logger.info('log content')
-> "[prefix] log content
rGc<00>0<00>||_t<00>|_yr`)rGr^rr<>s rrxzlog_localprefix.__init__<5F>s<00><00><1C><04> <0B> <20>l<EFBFBD><04> r7c<00>N<00>|jj|j<00>yr`)rr<>rGrvs r<00> __enter__zlog_localprefix.__enter__<5F>s<00><00> <0C> <0B> <0B><1E><1E>t<EFBFBD>{<7B>{<7B>+r7c<00>8<00>|jj<00>yr`)rr<>)rw<00>exc_type<70>exc_val<61>exc_tbs r<00>__exit__zlog_localprefix.__exit__<5F>s<00><00> <0C> <0B> <0B><1E><1E> r7c<00><00><00><01><00><01>fd<01>}|S)Nc<00>D<00><02><00>5<00>|i|<01><01>cddd<00>S#1swYyxYwr`r<>)rerf<00>funcrws <20><>r<00>wrapperz)log_localprefix.__call__.<locals>.wrapper<65>s(<00><><00><15> -<2D><1B>T<EFBFBD>,<2C>V<EFBFBD>,<2C> -<2D> -<2D> -<2D>s<00><03>r<>)rwrrs`` rr}zlog_localprefix.__call__<5F>s<00><><00> -<2D><17>r7N) r<>r<>r<>r<>r3rxr<>rr}r<>r7rr<>r<>js"<00><00><08>.#<23>c<EFBFBD>#<23>,<2C>!<21>r7r<>c<00>Z<00>t|t<00>st|t<00>r|j<00>}n t d<01><00>|D]j\}}t|t<00>s*t|t<00>s|j |<02>|<05>d|<06>d<03><05><00>@|j |<02>|<05>d<04><03>|<03>d|<02><01>}t ||||<03><00>ly)Nz8input type of func 'print_dict' is not Dict(obj) or dictz: r,z:
z )r2r<00>dict<63>items<6D> TypeErrorr-<00>
print_dict)r<><00>
input_dictr<00> ind_style<6C>
dict_items<EFBFBD>k<>v<> next_indents rr r <00>s<><00><00><11>*<2A>d<EFBFBD>#<23>z<EFBFBD>*<2A>d<EFBFBD>'C<><1F>%<25>%<25>'<27>
<EFBFBD><17>R<>S<>S<><1A>8<><04><01>1<EFBFBD><19>!<21>T<EFBFBD>"<22>:<3A>a<EFBFBD><14>+><3E> <10>J<EFBFBD>J<EFBFBD>v<EFBFBD>q<EFBFBD>!<21>4<> 5<> <10>J<EFBFBD>J<EFBFBD>V<EFBFBD>Q<EFBFBD>/<2F> 0<>%.<2E><06>7<>K<EFBFBD> <16>t<EFBFBD>Q<EFBFBD> <0B>Y<EFBFBD> 7<> 8r7c<00><><00>|jjj}d}|dk(r<>|jd<03>|jd|jj
z<00>|jd|jj z<00>|jd|jjz<00>|jd|jjz<00>|jd|jjz<00>|jd <09>|d
vrqtj|jj <00> <0B>\}}|jd <0C>|<04>|jd<0E>nt|||<03><0F>|jd <09>|dvr0|jd<11>t|||<03><0F>|jd <09>|d
vr1|jd<12>t||<03><0F>|jd <09>y y )z<>
split mode: `running info` + `custom` config + `default` config
iwantall mode: `custom` config + `merged` config + `default` config
merge mode: `merged` config
r<><00>splitz+---------------running info---------------
zlast version: %s
zcustom config file: %s
zstarting time: %s
zhost name: %s
zprocess ID: %s
z+------------------------------------------
)r<00>iwantall)<01>custom_config_pathz,
---------------custom config--------------
Nz
No customized configuration
)r)<02>mergerz+------config info (custom + default)------
z,
--------------default config--------------
) rAr9<00> cfg_pmoder-rD<00>version<6F> custom_pathrH<00>hostname<6D>pid<69>cfg<66>load_split_configr )r<>rN<00>mode<64> indent_style<6C>
custom_cfg<EFBFBD> default_cfgs rr<>r<><00>s<><00><00> <12>;<3B>;<3B>?<3F>?<3F> $<24> $<24>D<EFBFBD><16>L<EFBFBD> <0B>w<EFBFBD><EFBFBD> <0C>
<EFBFBD>
<EFBFBD>A<>B<> <0C>
<EFBFBD>
<EFBFBD>'<27>6<EFBFBD>:<3A>:<3A>+=<3D>+=<3D>><3E>?<3F> <0C>
<EFBFBD>
<EFBFBD>-<2D><16><1A><1A>1G<31>1G<31>H<>I<> <0C>
<EFBFBD>
<EFBFBD>(<28>F<EFBFBD>J<EFBFBD>J<EFBFBD>O<EFBFBD>O<EFBFBD><<3C>=<3D> <0C>
<EFBFBD>
<EFBFBD>$<24><06>
<EFBFBD>
<EFBFBD>(;<3B>(;<3B><<3C>=<3D> <0C>
<EFBFBD>
<EFBFBD>%<25><16><1A><1A><1E><1E>8<>9<> <0C>
<EFBFBD>
<EFBFBD>A<>B<> <0B>$<24>$<24>"%<25>"7<>"7<>6<EFBFBD>:<3A>:<3A>Ka<4B>Ka<4B>"b<><1F>
<EFBFBD>K<EFBFBD> <0C>
<EFBFBD>
<EFBFBD>C<>D<> <15> <1D> <10>J<EFBFBD>J<EFBFBD>8<> 9<> <16>t<EFBFBD>Z<EFBFBD>\<5C> B<> <0C>
<EFBFBD>
<EFBFBD>A<>B<> <0B>$<24>$<24> <0C>
<EFBFBD>
<EFBFBD>A<>B<><12>4<EFBFBD><16>\<5C>:<3A> <0C>
<EFBFBD>
<EFBFBD>A<>B<> <0B>$<24>$<24> <0C>
<EFBFBD>
<EFBFBD>C<>D<><12>4<EFBFBD><1B>,<2C>?<3F> <0C>
<EFBFBD>
<EFBFBD>A<>B<> %r7c<00>.<00>t<00>}t|d<01>}t|d<02>5}|jjj
<00>2|j d|jjj
z<00>t||<00>ddd<00>y#1swYyxYw)Nr9r<>r<>)rrYr rAr9r<>r-r<>)rNrXr<>s r<00> save_configr$<00>ss<00><00> <13>X<EFBFBD>F<EFBFBD>!<21>&<26>%<25>0<>I<EFBFBD> <0A>i<EFBFBD><13> <1D>#<23><14> <11>;<3B>;<3B>?<3F>?<3F> <20> <20> ,<2C> <10>J<EFBFBD>J<EFBFBD>x<EFBFBD>6<EFBFBD>;<3B>;<3B>?<3F>?<3F>#8<>#8<>9<> :<3A><14>T<EFBFBD>6<EFBFBD>"<22> #<23>#<23>#<23>s <00>AB <03> Bc<00>:<00>t<00>}|j|<00>yr`<00>r^r{<00>r(rN<00>
autologgers r<00> save_log_liner)<00>s<00><00>
<1C><1C>J<EFBFBD><0E>O<EFBFBD>O<EFBFBD>D<EFBFBD>r7c<00>:<00>t<00>}|j|<00>yr`r&r's r<00>print_and_saver+<00>s<00><00><1C><1C>J<EFBFBD><0E>O<EFBFBD>O<EFBFBD>D<EFBFBD>r7c <00><><00>tjtjj|<01>d<01><02>t |d<03>5}|D]W}d|j <00>vr%|j d|d<00>d|d<00>d|d <00>d
<EFBFBD><07><00>:|j d|d<00>d |d <00>d
<EFBFBD><05><00>Y|j d <0C>ddd<00>y#1swYyxYw) NT<4E><01>exist_okr<6B>rH<00> ########## <20>role<6C> (<28>s used) ##########
<EFBFBD>contentz
<EFBFBD> ##########
r,)rKrMr
<00>dirnamer rEr-)<04>messagesrXr<>r:s r<00>save_messages_to_txtr7<00>s<><00><00><06>K<EFBFBD>K<EFBFBD><02><07><07><0F><0F> <09>*<2A>T<EFBFBD>:<3A> <0A>i<EFBFBD><13> <1D><19><14><1F> g<01>G<EFBFBD><15><17><1C><1C><1E>'<27><14>
<EFBFBD>
<EFBFBD>G<EFBFBD>TZ<EFBFBD>O<EFBFBD>]d<>ek<65>]l<>nu<6E>v<76>oA<02>B<02>C<02><14>
<EFBFBD>
<EFBFBD><17><16><1F>RY<52>Zc<5A>Rd<52>e<>f<>  g<01>
<0A>
<EFBFBD>
<EFBFBD>4<EFBFBD><18> <19><19><19>s <00>A.B8<03>8Cc
<00><><00>|D]K}d|j<00>vrtd|d<00>d|d<00>d|d<00>d<07><07><00>4td|d<00>d|d<00>d<07><05><00>My) NrHr/r0r1r2r3r,r4)rE<00>print)r6r:s r<00>print_messagesr:<00>sX<00><00><1B>\<01><07> <11>W<EFBFBD>\<5C>\<5C>^<5E> #<23> <11><17><16><1F>RY<52>Z`<60>Ra<52>cj<63>kt<6B>cu<63>v<> w<> <11>g<EFBFBD>f<EFBFBD>o<EFBFBD>w<EFBFBD>y<EFBFBD>GY<47>Z<> [<5B> \r7c<00>4<00>t|d<01>}t||<02>y)Nr9)rYr7)r6rNrXs r<00>save_messages_to_logr<<00>s<00><00>!<21>&<26>%<25>0<>I<EFBFBD><18><18>9<EFBFBD>-r7c<00><00>t|d<01>}|<02>-|jd<02>}|dz|z|d<dj|<05>}|dk(r t||<05>n|dk(r t ||<05>|s*t d<07>|<02>t d|z<00>t d |z<00>yy)
Nr:r?<00>.r<>r$rr,z(file name: %s)zCyour conversation with ChatGPT has been successfully saved to "%s"
)rYrr<>r7r!r9)r6rNrT<00> file_format<61>silentrXs r<00>gpt_message_individual_saverA<00>s<><00><00>!<21>&<26>)<29>4<>I<EFBFBD><10><1C><1D>O<EFBFBD>O<EFBFBD>C<EFBFBD>(<28> <09>!<21>C<EFBFBD><0F>+<2B>5<> <09>"<22> <0A><17>H<EFBFBD>H<EFBFBD>Y<EFBFBD>'<27> <09><12>e<EFBFBD><1B><1C>X<EFBFBD>y<EFBFBD>1<> <14><06> <1E><1B>H<EFBFBD>i<EFBFBD>0<> <11> <0A>d<EFBFBD> <0B> <14> <20> <11>#<23>Y<EFBFBD>/<2F> 0<> <0A>T<>Xa<58>b<>c<> r7c<00>f<00>|dvsJd<02><00>ddd<01>}|<04>P|jjj}t|d<06>}|j d<07>}|j d|<07>n,|j d<07>s|dz }|d z} | j d<07>}|||z}
|
|d<dj|dd<00>dz} dj|<08>}tj| d
<EFBFBD> <0B>t|d <0C>5} | j|<00>ddd<05>|std <0A>td|<02>d|<08>d<10><05>|
| ||d<11>S#1swY<00>/xYw)aW
save the verilog TB/DUT code to a .v file. This func is for iverilog call.
#### input:
- code_txt: the verilog code in string format
- task_id: the task id of the problem
- code_type: 'TB' or 'DUT'
- config: the config object
- iverilog_dir: the directory to save the code. If None, use the default directory.
)<02>TB<54>DUTz!code_type should be 'TB' or 'DUT'z_tb.vr@Nr;r?r<>zname.vTr-r<>r,zyour z& code has been successfully saved to "z"
)<04>namer<r
<00> code_type) rArBrIrYr<00>insertrJr<>rKrMr r-r9) <0A>code_txtr0rFrN<00> iverilog_dirr@rV<00>iverilog_subdirrX<00> iverilog_path<74> code_namerUr<>s r<00> save_code_ivrMs;<00><00> <15> <0A> %<25>J<>'J<>J<> %<25> <20><14>.<2E>K<EFBFBD><13><1B> <20>+<2B>+<2B>.<2E>.<2E>5<>5<><0F>%<25>f<EFBFBD>d<EFBFBD>3<> <09><1D>O<EFBFBD>O<EFBFBD>C<EFBFBD>(<28> <09><11><18><18><12>_<EFBFBD>-<2D><1B>$<24>$<24>S<EFBFBD>)<29> <18>C<EFBFBD> <1F>L<EFBFBD>$<24><08>0<> <0A>!<21>'<27>'<27><03>,<2C> <09><17>+<2B>i<EFBFBD>0<>0<>I<EFBFBD><1D>I<EFBFBD>b<EFBFBD>M<EFBFBD><12>x<EFBFBD>x<EFBFBD> <09>#<23>2<EFBFBD><0E>'<27>#<23>-<2D>H<EFBFBD><13><08><08><19>#<23>I<EFBFBD><06>K<EFBFBD>K<EFBFBD><08>4<EFBFBD>(<28> <0A>i<EFBFBD><13> <1D><1D><14> <0C>
<EFBFBD>
<EFBFBD>8<EFBFBD><1C><1D> <11> <0A>d<EFBFBD> <0B> <0A>i<EFBFBD>QZ<51>[<5B>\<5C><1D>h<EFBFBD> <09>PY<50> Z<>Z<> <1D><1D>s <00>'D'<03>'D0c<00><><00>tjtjj|<01>d<01><02>t |d<03>5}|j |<00>ddd<00>y#1swYyxYw)NTr-r)rKrMr
r5r r-)<03>coder
r<>s r<00> save_coderP?sI<00><00><06>K<EFBFBD>K<EFBFBD><02><07><07><0F><0F><04>%<25><04>5<> <0A>d<EFBFBD>C<EFBFBD><1F><19>D<EFBFBD> <0C>
<EFBFBD>
<EFBFBD>4<EFBFBD><18><19><19><19>s <00>A<03>A%<07>__main__)r>)r>r<>)NrF)NF)/r<>rKr<>r<><00> config.configrrNrrrr<00>ior<00>logururrm<00> utils.utilsrrr <00>getcwdr<64>r3rrr!r%r*r.r6rYr\r^r<>r r<>r$r)r+r7r:r<rArMrPr(r<>r<>r7r<00><module>rWs<00><01><04>
<EFBFBD>
<EFBFBD><0E><1E><14><19> <0B> <0B><17>)<29>3<>3<><1D>B<EFBFBD>I<EFBFBD>I<EFBFBD>K<EFBFBD><11><15><13><15>
<15><13><15>
*<2A><13>*<2A><0F>3<EFBFBD><0F> <10>#<23><10>
<1A><03><1A> <1C>/<15>b<12> l<08>l<08>\&<17>&<17>P 8<>#C<01>J#<23><1A><1A><19>\<01>.<2E>d<01>N![<01>F<19>
<18>\<5C>
<EFBFBD> <0C>z<EFBFBD><19><08>r7