File size: 2,930 Bytes
24fe873 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | import struct, glob
from collections import defaultdict
base="/home/kenpeter/work/twoleg/training/logs/rsl_rl/velocity/2026-10-01_08-39-53_velocity/"
f=glob.glob(base+"events.out.tfevents.*")[0]
d=open(f,'rb').read()
off=0; n=len(d); recs=[]
while off+12<=n:
ln=struct.unpack('<Q', d[off:off+8])[0]
off+=12
if off+ln>n: break
recs.append(d[off:off+ln]); off+=ln+4
def varint(buf, i):
val=0; shift=0
while True:
b=buf[i]; i+=1; val|=(b&0x7f)<<shift; shift+=7
if not (b&0x80): break
return val, i
def parse_summary(sub):
vals=[]; i=0; L=len(sub)
while i<L:
key=sub[i]; i+=1; field=key>>3; wire=key&7
if wire==2:
ln,i=varint(sub,i)
s=sub[i:i+ln]; i+=ln
if field==1:
tag=None; simple=None; j=0; M=len(s)
while j<M:
k=s[j]; j+=1; f2=k>>3; w2=k&7
if w2==2:
l2,j=varint(s,j)
ss=s[j:j+l2]; j+=l2
if f2==1: tag=ss.decode('utf-8','replace')
elif w2==5:
if f2==2: simple=struct.unpack('<f', s[j:j+4])[0]
j+=4
elif w2==0:
l2,j=varint(s,j)
if f2==2: simple=l2
else: break
if tag is not None: vals.append((tag, simple))
else: break
return vals
# last value per tag, in file order (chronological)
last={}
alltags=set()
for rec in recs:
# find summary submessage: scan for field with wire 2 tag that contains a Value
# simpler: locate summary by searching for 0x0a (field1 wire2) string "..." then 0x15/0x09 simple
# Instead, find tag strings directly
import re
for m in re.finditer(rb'[ -~]{3,}', rec):
s=m.group()
if b'/' in s or b'_' in s:
# candidate tag, find its numeric value after
pass
# Use targeted parse: event may have summary at field 1,3,5. Try each top-level wire2
i=0; L=len(rec)
while i<L:
key=rec[i]; i+=1; field=key>>3; wire=key&7
if wire==2:
ln,i=varint(rec,i)
sub=rec[i:i+ln]; i+=ln
# detect if sub looks like a Summary.Value (contains a string tag)
if b'\x0a' in sub and (b'\x15' in sub or b'\t' in sub):
for tag,val in parse_summary(sub):
last[tag]=val
alltags.add(tag)
elif wire==1:
i+=8
elif wire==0:
_,i=varint(rec,i)
else:
break
print("ALL TAGS:", len(alltags))
kept=['reward','episode','track','mean_ep','command','error','lin_vel','ang_vel','torso','height','base','orient','upright','pose','dof','action']
for tag in sorted(alltags):
tl=tag.lower()
if any(k in tl for k in kept):
print(f"{tag} = {last[tag]}")
|