re: the seven chatter fields, read off sub_82213980
The one function referencing all seven field-name strings is the rule table's loader. Interval / IntervalFluctuation / EffectiveTime are SECONDS, emitted as *60 frame counts; Probability is a percentage and zero skips the record; Pattern is a 4-arm enum of which only Sound and Window ship; the Yes/No pair element is a u32 bitmask, which is why MessageCount is clamped to 32 (max on disc is 26). 40-byte object layout recorded. 13 dead records characterised. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -118,6 +118,43 @@ def main():
|
||||
print('MessageCount*2 == positional count: %d/%d (mismatches %d)' % (ok, ok + bad, bad))
|
||||
print('second-of-pair values : %s' % dict(flags))
|
||||
|
||||
# value census of the seven named fields, against sub_82213980's reader
|
||||
FIELDS = ['EffectiveTime', 'Interval', 'IntervalFluctuation', 'Priority',
|
||||
'Probability', 'Pattern', 'MessageCount']
|
||||
vals = {f: collections.Counter() for f in FIELDS}
|
||||
cross = collections.Counter()
|
||||
yes_bits = collections.Counter()
|
||||
over32 = 0
|
||||
for recs in rule.values():
|
||||
for r in recs:
|
||||
if r['squadron'] == 'Sperkers':
|
||||
continue
|
||||
d = U.named(r)
|
||||
for f in FIELDS:
|
||||
vals[f][d.get(f)] += 1
|
||||
n, pr = int(d['MessageCount']), int(d['Probability'])
|
||||
cross[(n == 0, pr == 0)] += 1
|
||||
if n > 32:
|
||||
over32 += 1
|
||||
pos = [v for _, nm, v in r['fields'] if nm is None]
|
||||
yes_bits[sum(1 for i, v in enumerate(pos) if i % 2 and v == 'Yes')] += 1
|
||||
print()
|
||||
print('value census of the seven named fields (all %d event records):' % sum(vals['Priority'].values()))
|
||||
for f in FIELDS:
|
||||
v = vals[f]
|
||||
try:
|
||||
order = sorted(v, key=lambda x: int(x))
|
||||
except (TypeError, ValueError):
|
||||
order = sorted(v, key=str)
|
||||
print(' %-20s %2d distinct %s' % (
|
||||
f, len(v), ' '.join('%s=%d' % (k, v[k]) for k in order)))
|
||||
print(' (MessageCount==0, Probability==0) cross-tab: %s' % {
|
||||
'both zero': cross[(True, True)], 'both set': cross[(False, False)],
|
||||
'no lines but Probability>0': cross[(True, False)],
|
||||
'lines but Probability==0 (dead)': cross[(False, True)]})
|
||||
print(' records with MessageCount > 32 (the reader clamps here): %d' % over32)
|
||||
print(' Yes-bits per record: %s' % dict(sorted(yes_bits.items())))
|
||||
|
||||
print()
|
||||
print('the 64 event records, and how many of the %d tables give each one lines:' % len(rule))
|
||||
for name in sorted(n for n in shape if n != 'Sperkers'):
|
||||
|
||||
Reference in New Issue
Block a user