Files
MiPi_TEST/__pycache__/analyze_captures.cpython-312.pyc

132 lines
13 KiB
Plaintext
Raw Normal View History

2026-04-08 14:19:31 +01:00
<EFBFBD>
2026-04-08 15:42:51 +01:00
+h<>i<EFBFBD>)<00><00><><00>dZddlZddlZddlZddlmZddlmZddlZddlm Z e ee
<EFBFBD>jdz <00>ddl m Z mZmZmZmZee
<EFBFBD>jdz Zee
<EFBFBD>jd z Zd
Zd Z dd ed edeeefdedeeeeff
d<11>Zdeedefd<13>Zdedededefd<17>Zddeddfd<19>Zdd<1A>Z e!dk(re <20>yy)a<>
2026-04-08 14:19:31 +01:00
analyze_captures.py
Groups MIPI oscilloscope CSV files by capture, runs csv_preprocessor on each,
then sends the compact summaries to the Claude API for trend analysis.
Usage:
python analyze_captures.py # all captures in ./data
python analyze_captures.py --last N # most recent N captures only
python analyze_captures.py --capture 0001 # single capture by number
2026-04-08 15:42:51 +01:00
<EFBFBD>N)<01>datetime)<01>Path)<01> load_dotenvz.env)<05> analyze_file<6C>analyze_lp_file<6C>group_captures<65>ChannelMetrics<63> LPMetrics<63>data<74>reportszclaude-opus-4-6a<36>You are an expert in MIPI D-PHY signal integrity analysis. You will be given compact pre-processed summaries of oscilloscope captures from a MIPI CLK and DAT0 differential pair. Each capture has three passes: sig (high-res HS quality), proto (long-window HS stats), and lp (single-ended, shows LP-11/LP-00/HS burst structure including the SoT sequence). Analyse the data for trends, degradation, anomalies, or consistent spec concerns across captures. Be concise and actionable.<2E>ts<74>num<75>files<65>verbose<73>returnc<00><><00>d|d<02>d|<00>d<04>g}g}dD]<5D>}||vr|jd|<06>d<07><03><00> |jd<08>rt||<00>}nt||<00>}|j|j <00><00>|j|<07>|rt |j <00><00><00><>d j|<04>|fS#t $r!}|jd|<06>d |<08><00><04>Yd
2026-04-08 14:19:31 +01:00
}~<08><>d
}~wwxYw) z<>
Run the pre-processor on all CSV files for one capture.
Returns (text_summary, list_of_metrics).
Missing files produce a one-line note instead of crashing.
z === Capture <20>04d<34> z ===)<06> proto_clk<6C> proto_dat<61>sig_clk<6C>sig_dat<61>lp_clk<6C>lp_datz [z ] MISSING<4E>lp_z ] ERROR: N<>
)<08>append<6E>
2026-04-08 15:42:51 +01:00
startswithrr<00>summary<72>print<6E> Exception<6F>join) r rrr<00>lines<65> metrics_list<73>key<65>m<>excs <20>5/home/david-rice/Python/MiPi_Test/analyze_captures.py<70>process_capturer)-s<><00><00><1C>C<EFBFBD><03>9<EFBFBD>B<EFBFBD>r<EFBFBD>d<EFBFBD>$<24> /<2F> 0<>E<EFBFBD>57<35>L<EFBFBD>S<>4<><03> <0E>e<EFBFBD> <1B> <11>L<EFBFBD>L<EFBFBD>3<EFBFBD>s<EFBFBD>e<EFBFBD>9<EFBFBD>-<2D> .<2E> <14>
2026-04-08 14:19:31 +01:00
4<><12>~<7E>~<7E>e<EFBFBD>$<24>#<23>E<EFBFBD>#<23>J<EFBFBD>/<2F><01> <20><15>s<EFBFBD><1A>,<2C><01> <11>L<EFBFBD>L<EFBFBD><11><19><19><1B> %<25> <18> <1F> <1F><01> "<22><16><15>a<EFBFBD>i<EFBFBD>i<EFBFBD>k<EFBFBD>"<22><>4<> <10>9<EFBFBD>9<EFBFBD>U<EFBFBD> <1B>\<5C> )<29>)<29><><19> 4<> <11>L<EFBFBD>L<EFBFBD>3<EFBFBD>s<EFBFBD>e<EFBFBD>9<EFBFBD>S<EFBFBD>E<EFBFBD>2<> 3<> 3<><33> 4<>s<00>A9B<<02>< C&<05>C!<05>!C&<05> all_summariesc<00>0<00>dj|<00>}d|<01>d<03>S)Nz
uDBelow are pre-processed summaries of MIPI D-PHY captures. Each capture has three passes per lane (CLK and DAT0):
sig — high-res HS differential (rise/fall times)
proto — long-window HS differential (jitter, clock freq, amplitude)
lp — single-ended LP state capture (LP-11 voltage, SoT sequence, HS bursts)
u@
Please:
1. Identify any consistent spec concerns (HS voltage, LP-11 voltage, LP-low timing).
2. Highlight any trends over captures (amplitude drift, jitter, LP-11 voltage, etc.).
3. Flag anomalies — missing LP transitions, short LP-low, unexpected burst counts.
2026-04-08 15:42:51 +01:00
4. Summarise overall signal health in 23 sentences.)r")r*<00>bodys r(<00> build_promptr-Ns.<00><00> <11>;<3B>;<3B>}<7D> %<25>D<EFBFBD> a<01>
2026-04-08 14:19:31 +01:00
<10>&<26>A<01>
2026-04-08 15:42:51 +01:00
A<01> <06><00>analysis<69>
token_line<EFBFBD>keysc<00><><00>tjd<01><02>tj<00>}|j d<03>}t|z }t |<02>dk(r d|ddd<07><04>nd|ddd<07>d |d
dd<07><04>}|j d <0B>}d t d t fd<0E>}||<00>} d|<06>d|<07>d|<06>dt<00>d| <09>dtj|<01><00>d<15> }
|j|
d<16><17>|S)z:Write a timestamped HTML report to the reports/ directory.T)<01>exist_okz%Y%m%d_%H%M%S_analysis.html<6D><00>Capture rrz Captures u<><E28093><EFBFBD><EFBFBD><EFBFBD>z%Y-%m-%d %H:%M:%S<>textrc
<00><<00>tj|<00>}ddl}|jdd|<01>}|j d|<01>}g}|D]<5D>}|j <00>j <00>}|s<01>$|dj<00>jd<05>r\djd<07>|D<00><00>}|dj<00>dj<00>rdnd }|jd
|<08>d |<07>d |<08>d <0B><07><00><>|jd dj|<06>zdz<00><00><>dj|<04>S)Nrz \*\*(.+?)\*\*z<strong>\1</strong>z\n{2,})z1.z2.z3.<2E>-<2D>*<2A>c3<00>hK<00>|]*}|j<00>s<01>d|jd<01><00>d<02><03><01><00>,y<03>w)z<li>z0123456789.-* z</li>N)<02>strip<69>lstrip)<02>.0<EFBFBD>ls r(<00> <genexpr>z9save_html_report.<locals>.text_to_html.<locals>.<genexpr>|s0<00><00><><00>e<>Q<EFBFBD>[\<5C>[b<>[b<>[d<>$<24>q<EFBFBD>x<EFBFBD>x<EFBFBD>0@<40>'A<>&B<>%<25> H<>e<>s<00>2<01>2<01>ol<6F>ul<75><<3C>>z</z<p>z<br>z</p>r) <0C>html<6D>escape<70>re<72>sub<75>splitr=<00>
splitlinesr>rr"<00>isdigitr) r7<00>escapedrH<00>
paragraphs<EFBFBD>parts<74>parar#<00>items<6D>tags r(<00> text_to_htmlz&save_html_report.<locals>.text_to_htmlns <00><00><16>+<2B>+<2B>d<EFBFBD>#<23><07><11><14>&<26>&<26>)<29>+A<>7<EFBFBD>K<><07><17>X<EFBFBD>X<EFBFBD>i<EFBFBD><17>1<>
<EFBFBD><12><05><1E>
B<01>D<EFBFBD><18>J<EFBFBD>J<EFBFBD>L<EFBFBD>+<2B>+<2B>-<2D>E<EFBFBD><18><18><14>Q<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD> <20>+<2B>+<2B>,H<>I<><1A><07><07>e<>RW<52>e<>e<><05>#<23>A<EFBFBD>h<EFBFBD>o<EFBFBD>o<EFBFBD>/<2F><01>2<>:<3A>:<3A><<3C>d<EFBFBD>$<24><03><15> <0C> <0C>q<EFBFBD><13><05>Q<EFBFBD>u<EFBFBD>g<EFBFBD>R<EFBFBD><03>u<EFBFBD>A<EFBFBD>6<>7<><15> <0C> <0C>U<EFBFBD>V<EFBFBD>[<5B>[<5B><15>%7<>7<>&<26>@<40>A<>
B<01><14>y<EFBFBD>y<EFBFBD><15><1F>r.uX<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MIPI Analysis — a<></title>
<style>
body { font-family: Arial, sans-serif; max-width: 900px; margin: 40px auto; padding: 0 20px; color: #222; }
h1 { color: #1a3a5c; border-bottom: 2px solid #1a3a5c; padding-bottom: 8px; }
.meta { color: #555; font-size: 0.95em; margin-top: -8px; margin-bottom: 24px; }
p { line-height: 1.6; }
ol, ul { line-height: 1.8; padding-left: 24px; }
li { margin: 4px 0; }
.tokens { color: #888; font-size: 0.8em; margin-top: 32px; border-top: 1px solid #ddd; padding-top: 8px; }
@media print { body { margin: 20px; } }
</style>
</head>
<body>
<h1>MIPI D-PHY Analysis Report</h1>
<p class="meta">
<strong>Generated:</strong> z) &nbsp;|&nbsp;
<strong>Scope:</strong> z) &nbsp;|&nbsp;
<strong>Model:</strong> z
</p>
z
<p class="tokens">z</p>
</body>
</html>
zutf-8)<01>encoding) <0B> REPORTS_DIR<49>mkdirr<00>now<6F>strftime<6D>len<65>str<74> CLAUDE_MODELrFrG<00>
write_text) r/r0r1rW<00>filename<6D>path<74> cap_range<67>date_strrS<00> body_html<6D> html_contents r(<00>save_html_reportrc_s#<00><00><0F><15><15>t<EFBFBD><15>$<24>
<12>,<2C>,<2C>.<2E>C<EFBFBD><12>|<7C>|<7C>9<>:<3A>H<EFBFBD> <16><18> !<21>D<EFBFBD> <0F>t<EFBFBD>9<EFBFBD><01>><3E> <13>4<EFBFBD><01>7<EFBFBD>1<EFBFBD>:<3A>c<EFBFBD>"<22>#<23><18><14>a<EFBFBD><17><11><1A>C<EFBFBD>(<28><03>D<EFBFBD><12>H<EFBFBD>Q<EFBFBD>K<EFBFBD><03>+<<3C> =<3D><0E>
<13>|<7C>|<7C>/<2F>0<>H<EFBFBD> <20>3<EFBFBD> <20>3<EFBFBD> <20>*<1D>X<EFBFBD>&<26>I<EFBFBD><1A>$<24><1B>%<1F> (<28>j<EFBFBD>)<1B>$<24>+<2B>&<1B>'<27>.<2E>)<01>
<EFBFBD> <0B> <13><17>;<3B>;<3B>z<EFBFBD>*<2A>+<2B>,<01>1<04>L<EFBFBD>8 <09>O<EFBFBD>O<EFBFBD>L<EFBFBD>7<EFBFBD>O<EFBFBD>3<> <0F>Kr.<00>lastc<00>F<00>tt<00>}|s td<01>yt|j <00><00>| d}tdt |<02><00>d<04><03>g}|D]+\}}t |||||f<00>\}}|j|<06><00>-t|<03>}tdt |<08>d<06>dt<00>d<08><05>tj<00>} | jjtd td
2026-04-08 14:19:31 +01:00
|d <0B>g<01> <0C>}
|
jd j } d|
j"j$<00>d|
2026-04-08 15:42:51 +01:00
j"j&<00>d<10>} d} td| <0A><00><02>td<13>t| <0A>t| <0B>td| <0C>d<15><03>t| dz<00>t)| | |<02>}td|<0E><00><02>y)z<>
2026-04-08 14:19:31 +01:00
Called by mgmt_worker after each file transfer.
Analyses the most recent `last` captures and prints the Claude report.
z[ANALYSIS] No captures found.Nz
[ANALYSIS] Processing z most-recent capture(s)...z[ANALYSIS] Sending <20>,z
chars to z...<2E><00>user<65><02>role<6C>content<6E><04>model<65>
2026-04-08 15:42:51 +01:00
max_tokens<EFBFBD>system<65>messagesr<00>Tokens: <20> in / <20> out<75><============================================================rzCLAUDE ANALYSIS<49>(<28>)zNALYSIS] Report saved to )r<00>DATA_DIRr <00>sortedr1rYr)rr-r[<00> anthropic<69> Anthropicrp<00>create<74> SYSTEM_PROMPTrkr7<00>usage<67> input_tokens<6E> output_tokensrc)rd<00>groupsr1r*r r<00> summary_text<78>_<>prompt<70>client<6E>messager/r0<00> separator<6F> report_paths r(<00> run_analysisr<73><00>s<><00><00>
2026-04-08 14:19:31 +01:00
<1C>H<EFBFBD> %<25>F<EFBFBD> <11> <0A>-<2D>.<2E><0E> <11>&<26>+<2B>+<2B>-<2D> <20>$<24><15><16> (<28>D<EFBFBD> <09> $<24>S<EFBFBD><14>Y<EFBFBD>K<EFBFBD>/I<>
J<EFBFBD>K<>!<21>M<EFBFBD><17>+<2B><07><02>C<EFBFBD>)<29>"<22>c<EFBFBD>6<EFBFBD>2<EFBFBD>s<EFBFBD>)<29>3D<33>E<><0F> <0C>a<EFBFBD><15><1C><1C>\<5C>*<2A>+<2B><1A>-<2D> (<28>F<EFBFBD> <09> <1F><03>F<EFBFBD> <0B>A<EFBFBD><EFBFBD>j<EFBFBD><1C><0E>c<EFBFBD>
2026-04-08 15:42:51 +01:00
J<EFBFBD>K<><17>!<21>!<21>#<23>F<EFBFBD><14>o<EFBFBD>o<EFBFBD>$<24>$<24>!<21><19>"<22>%<25>&<26>9<>:<3A> %<25><06>G<EFBFBD> <19><1F><1F><11>#<23>(<28>(<28>H<EFBFBD><1B>G<EFBFBD>M<EFBFBD>M<EFBFBD>6<>6<>7<>v<EFBFBD>g<EFBFBD>m<EFBFBD>m<EFBFBD>>Y<>>Y<>=Z<>Z^<5E>_<>J<EFBFBD><19>I<EFBFBD> <09>B<EFBFBD>y<EFBFBD>k<EFBFBD>
2026-04-08 14:19:31 +01:00
<1A><1B> <09>
<1B><1C> <09>)<29><14> <09>(<28>O<EFBFBD> <09>A<EFBFBD>j<EFBFBD>\<5C><11>
<1B><1C> <09>)<29>d<EFBFBD>
2026-04-08 15:42:51 +01:00
<1A><1B>#<23>8<EFBFBD>Z<EFBFBD><14>><3E>K<EFBFBD> <09> '<27> <0B>}<7D>
5<EFBFBD>6r.c<00>J<00>tjd<01><02>}|jdtddd<05><06>|jdtddd <09><06>|jd
2026-04-08 14:19:31 +01:00
d d <0C> <0A>|jdd d<0F> <0A>|j <00>}t t<00>}|s7tdt<00><00>tj<00><11>tjd<12>t|j<00><00>}|j<00>mt|j<00>}|D<00>cgc] }|d|k(s<01> |<05><02>}}|s>td|j<00>d<14>tj<00><11>tjd<12>|j<00>||j d}tdt!|<03><00>dt<00>d<17><05>g}|D]V\}}t#|||||f|j$<00><18>\} }
2026-04-08 15:42:51 +01:00
|j'| <09>|j$r<01>Etd|d<1A>d|<07><00><04><00>Xt)|<06>} |j*rtd<1C>t| <0B>ytdt!| <0B>d<1E>dt,<00>d <20><05>t/j0<00>} | j2j5t,d!t6d"| d#<23>g<01>$<24>} | j8d%j:}d&| j<j><00>d'| j<j@<00>d(<28>}d)}td|<10>d*|<10><00><04>t|<0E>td+|<0F>d,<2C><03>t|<10>tC|||<03>}td-|<11><00><02>ycc}w).Nz%Analyse MIPI CSV captures with Claude)<01> descriptionz--last<73>Nz'Process only the N most recent captures)<04>type<70>default<6C>metavar<61>helpz --capture<72>NUMz+Process a single capture number (e.g. 0001)z --verbose<73>
store_truez"Print per-file summaries to stdout)<02>actionr<6E>z --dry-runz5Print summaries and prompt but do not call Claude APIzNo CSV files found in )<01>filer4r5z not found.z Processing z capture(s) from r)rz Processed capture rrz,
2026-04-08 14:19:31 +01:00
--- Prompt that would be sent to Claude ---z
2026-04-08 15:42:51 +01:00
Sending rfz characters to z...
rgrhrirlrrqrrrsrtz
2026-04-08 14:19:31 +01:00
CLAUDE ANALYSIS
2026-04-08 15:42:51 +01:00
rurvz
Report saved to )"<22>argparse<73>ArgumentParser<65> add_argument<6E>intrZ<00>
parse_argsrrwr <00>sys<79>stderr<72>exitrxr1<00>capturerdrYr)rrr-<00>dry_runr[ryrzrpr{r|rkr7r}r~rrc)<12>parser<65>argsr<73>r1<00>
target_num<EFBFBD>kr*r rr<>r<>r<>r<>r<>r/r0r<>r<>s r(<00>mainr<6E><00>s<><00><00> <15> $<24> $<24>1X<31> Y<>F<EFBFBD>
2026-04-08 14:19:31 +01:00
<EFBFBD><17><17><08>#<23><04>c<EFBFBD>F<><18>H<01>
<EFBFBD><17><17> <0B>#<23><04>e<EFBFBD>J<><18>L<01>
<EFBFBD><17><17> <0B>L<EFBFBD>A<><18>C<01>
<EFBFBD><17><17> <0B>L<EFBFBD>T<><18>V<01> <11> <1C> <1C> <1E>D<EFBFBD><1C>H<EFBFBD> %<25>F<EFBFBD> <11> <0A>&<26>x<EFBFBD>j<EFBFBD>1<><03>
<EFBFBD>
<EFBFBD>C<> <0B><08><08><11> <0B> <11>&<26>+<2B>+<2B>-<2D> <20>D<EFBFBD> <0B>|<7C>|<7C><1F><18><14><1C><1C>&<26>
<EFBFBD><1F>6<>a<EFBFBD>1<EFBFBD>Q<EFBFBD>4<EFBFBD>:<3A>#5<><01>6<><04>6<><13> <11>H<EFBFBD>T<EFBFBD>\<5C>\<5C>N<EFBFBD>+<2B>6<>S<EFBFBD>Z<EFBFBD>Z<EFBFBD> H<> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD> <0B>y<EFBFBD>y<EFBFBD><1C><13>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>J<EFBFBD>K<EFBFBD> <20><04> <09>K<EFBFBD><03>D<EFBFBD> <09>{<7B>"3<>H<EFBFBD>:<3A>R<EFBFBD>
@<40>A<> "<22>M<EFBFBD><17>:<3A><07><02>C<EFBFBD>)<29>"<22>c<EFBFBD>6<EFBFBD>2<EFBFBD>s<EFBFBD>)<29>3D<33>d<EFBFBD>l<EFBFBD>l<EFBFBD>[<5B><0F> <0C>a<EFBFBD><15><1C><1C>\<5C>*<2A><13>|<7C>|<7C> <11>(<28><13>S<EFBFBD> <09><12>B<EFBFBD>4<EFBFBD>8<> 9<> :<3A><1A>-<2D> (<28>F<EFBFBD> <0B>|<7C>|<7C> <0A>=<3D>><3E> <0A>f<EFBFBD> <0A><0E>
<EFBFBD>J<EFBFBD>s<EFBFBD>6<EFBFBD>{<7B>1<EFBFBD>o<EFBFBD>_<EFBFBD>\<5C>N<EFBFBD>%<25>
2026-04-08 15:42:51 +01:00
H<EFBFBD>I<><18>"<22>"<22>$<24>F<EFBFBD><15><EFBFBD><EFBFBD>%<25>%<25>!<21><19>"<22>%<25>&<26>9<>:<3A> &<26><06>G<EFBFBD> <19><1F><1F><11>#<23>(<28>(<28>H<EFBFBD><1B>G<EFBFBD>M<EFBFBD>M<EFBFBD>6<>6<>7<>v<EFBFBD>g<EFBFBD>m<EFBFBD>m<EFBFBD>>Y<>>Y<>=Z<>Z^<5E>_<>J<EFBFBD><19>I<EFBFBD>
2026-04-08 14:19:31 +01:00
<EFBFBD>B<EFBFBD>y<EFBFBD>k<EFBFBD>,<2C>Y<EFBFBD>K<EFBFBD>
8<EFBFBD>9<> <09>(<28>O<EFBFBD> <09>A<EFBFBD>j<EFBFBD>\<5C><11>
2026-04-08 15:42:51 +01:00
<1B><1C> <09>)<29><14>#<23>8<EFBFBD>Z<EFBFBD><14>><3E>K<EFBFBD> <09> <1E>{<7B>m<EFBFBD>
,<2C>-<2D><>_7s <00> L <04>L <04>__main__)F)<01>
)rN)"<22>__doc__r<5F>rFr<>r<00>pathlibrry<00>dotenvr<00>__file__<5F>parent<6E>csv_preprocessorrrrr r
rwrUr[r|rZr<><00>dict<63>bool<6F>tuple<6C>listr)r-rcr<>r<><00>__name__<5F>r.r(<00><module>r<>s2<00><01>
<04><10> <0B>
<EFBFBD><1D><18><10><1E> <0B>D<EFBFBD><18>N<EFBFBD> !<21> !<21>F<EFBFBD> *<2A>+<2B>e<>e<><12>8<EFBFBD>n<EFBFBD>#<23>#<23>f<EFBFBD>,<2C><08><12>8<EFBFBD>n<EFBFBD>#<23>#<23>i<EFBFBD>/<2F> <0B>"<22> <0C>2<><0E>&<1A> *<2A> <0B>*<2A> <0C>*<2A> <10><03>T<EFBFBD> <09>?<3F>*<2A><12> *<2A>
 <0B>3<EFBFBD><04>^<5E>$<24> $<24>%<25> *<2A>B<06><04>S<EFBFBD> <09><06>c<EFBFBD><06>"C<10>s<EFBFBD>C<10><03>C<10>4<EFBFBD>C<10>D<EFBFBD>C<10>T*7<>s<EFBFBD>*7<>D<EFBFBD>*7<>ZE.<2E>P <0C>z<EFBFBD><19><08>F<EFBFBD>r.