Files
Guido.Tech/ai_intelligence_layer/utils/__pycache__/validators.cpython-312.pyc

117 lines
12 KiB
Plaintext
Raw Normal View History

2025-10-19 02:00:56 -05:00
<EFBFBD>
`<60>h<EFBFBD>$<00><00><><00>dZddlmZmZddlZddlmZmZmZeje
<EFBFBD>Z Gd<05>d<06>Z Gd<07>d<08>Z y) z<
Validators for strategy validation and telemetry analysis.
<EFBFBD>)<02>List<73>TupleN)<03>Strategy<67> RaceContext<78>EnrichedTelemetryWebhookc <00>b<00>eZdZdZedededeee ffd<05><04>Z
ede edede efd<07><04>Z y) <09>StrategyValidatorz;Validates race strategies against F1 rules and constraints.<2E>strategy<67> race_context<78>returnc<00><><00>|jj}|jj}|jD]&}||kr dd|<04>d|<02>d<04>fcS||k\s<01>dd|<04>d|<03>d<04>fcSt |j<00>dkDr#|jt |j<00>k7ryt |j<00>|j k7r(dd|j <00>d t |j<00><00>d<04>fS|j dz}t |j<00>|k7rdd
t |j<00><00>d <0B>fSt|j<00>}t |<06>d kry y)z<>
Validate a single strategy.
Args:
strategy: Strategy to validate
race_context: Current race context
Returns:
Tuple of (is_valid, error_message)
FzPit lap z is in the past (current lap: <20>)z! is beyond race end (total laps: <20>)Fz#Pit laps must be in ascending orderz Stop count (z) doesn't match pit laps (zTire sequence length (z) doesn't match stops + 1<>)Fz6Must use at least 2 different tire compounds (F1 rule))T<>) <09> race_info<66> current_lap<61>
total_laps<EFBFBD>pit_laps<70>len<65>sorted<65>
stop_count<EFBFBD> tire_sequence<63>set)r
r rr<00>pit_lap<61>expected_tire_count<6E>unique_compoundss <20>O/Users/karandubey/projects/hpcsimsite/ai_intelligence_layer/utils/validators.py<70>validate_strategyz#StrategyValidator.validate_strategysw<00><00>#<23>,<2C>,<2C>8<>8<> <0B>!<21>+<2B>+<2B>6<>6<>
<EFBFBD> <20>(<28>(<28> a<01>G<EFBFBD><16>+<2B>%<25><1C><08><17> <09>1O<31>P[<5B>}<7D>\]<5D>^<5E>^<5E>^<5E><16>*<2A>$<24><1C><08><17> <09>1R<31>S]<5D>R^<5E>^_<>`<60>`<60>`<60>  a<01> <0F>x<EFBFBD> <20> <20> !<21>A<EFBFBD> %<25><17> <20> <20>F<EFBFBD>8<EFBFBD>+<<3C>+<<3C>$=<3D>=<3D>C<> <0F>x<EFBFBD> <20> <20> !<21>X<EFBFBD>%8<>%8<> 8<><18>L<EFBFBD><18>)<<3C>)<<3C>(=<3D>=W<>X[<5B>\d<>\m<>\m<>Xn<58>Wo<57>op<6F>q<>q<> q<>'<27>1<>1<>A<EFBFBD>5<><1B> <0E>x<EFBFBD>%<25>%<25> &<26>*=<3D> =<3D><18>2<>3<EFBFBD>x<EFBFBD>7M<37>7M<37>3N<33>2O<32>Oh<4F>i<>i<> i<><1F>x<EFBFBD>5<>5<>6<><18> <0E><1F> <20>1<EFBFBD> $<24>R<><17><00>
strategiesc<00><00>g}|D]T}tj||<01>\}}|r|j|<03><00>0tj d|j
<00>d|<05><00><04><00>Vtj dt|<02><00>dt|<00><00>d<05><05>|S)a
Validate all strategies and filter out invalid ones.
Args:
strategies: List of strategies to validate
race_context: Current race context
Returns:
List of valid strategies
z Strategy z
invalid: z
Validated <20>/z strategies)r r<00>append<6E>logger<65>warning<6E> strategy_id<69>infor)r!r <00>valid_strategiesr
<00>is_valid<69>errors r<00>validate_strategiesz%StrategyValidator.validate_strategies9s<><00><00><1E><18>"<22> T<01>H<EFBFBD>/<2F>A<>A<>(<28>L<EFBFBD>Y<>O<EFBFBD>H<EFBFBD>e<EFBFBD><17> <20>'<27>'<27><08>1<><16><0E><0E><19>8<EFBFBD>+?<3F>+?<3F>*@<40>
<EFBFBD>5<EFBFBD>'<27>R<>S<>  T<01> <0F> <0B> <0B>j<EFBFBD><13>%5<>!6<> 7<>q<EFBFBD><13>Z<EFBFBD><1F>8I<38><1B>U<>V<><1F>r N) <0A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F> staticmethodrrr<00>bool<6F>strrrr,<00>r rr r sm<00><00>E<><11>(<18>H<EFBFBD>(<18>K<EFBFBD>(<18>E<EFBFBD>RV<52>X[<5B>R[<5B>L\<5C>(<18><12>(<18>T<12> <20><04>X<EFBFBD><0E> <20>k<EFBFBD> <20>VZ<56>[c<>Vd<56> <20><12> r r c<00><><00>eZdZdZedeedefd<04><04>Zedeedefd<05><04>Z edeede
fd<06><04>Z edeede fd<07><04>Z edeede
fd<08><04>Zedeed edefd
<EFBFBD><04>Zedeede
fd <0B><04>Zy ) <0A>TelemetryAnalyzerz@Analyzes enriched telemetry data to extract trends and insights.<2E> telemetryr c<00><><00>t|<00>dkryt|d<03><00><04>}|d}|d}|j|jz
}|dk(ry|j|jz
}||z }t d|<06>S)z<>
Calculate tire degradation rate per lap.
Args:
telemetry: List of enriched telemetry records
Returns:
Rate of tire degradation per lap (0.0 to 1.0)
r<00>c<00><00>|jS<00>N<><01>lap<61><01>xs r<00><lambda>zCTelemetryAnalyzer.calculate_tire_degradation_rate.<locals>.<lambda>d<00>
<00><00>1<EFBFBD>5<EFBFBD>5<EFBFBD>r <00><01>keyr<00><><EFBFBD><EFBFBD><EFBFBD>)rrr=<00>tire_degradation_index<65>max)r7<00>sorted_telemetry<72>first<73>last<73>lap_diff<66>deg_diff<66>rates r<00>calculate_tire_degradation_ratez1TelemetryAnalyzer.calculate_tire_degradation_rateUs<><00><00> <0F>y<EFBFBD>><3E>A<EFBFBD> <1D><16>"<22>)<29><1F>A<><18>!<21><11>#<23><05><1F><02>#<23><04><17>8<EFBFBD>8<EFBFBD>e<EFBFBD>i<EFBFBD>i<EFBFBD>'<27><08> <13>q<EFBFBD>=<3D><16><17>.<2E>.<2E><15>1M<31>1M<31>M<><08><17>(<28>"<22><04><12>3<EFBFBD><04>~<7E>r c<00>H<00>|sytd<02>|D<00><00>}|t|<00>z S)z<>
Calculate average aero efficiency.
Args:
telemetry: List of enriched telemetry records
Returns:
Average aero efficiency (0.0 to 1.0)
r9c3<00>4K<00>|]}|j<00><01><00>y<00>wr;)<01>aero_efficiency<63><02>.0<EFBFBD>ts r<00> <genexpr>zBTelemetryAnalyzer.calculate_aero_efficiency_avg.<locals>.<genexpr><3E>s<00><00><><00>9<>!<21>A<EFBFBD>%<25>%<25>9<><39><00><01><02>sumr)r7<00>totals r<00>calculate_aero_efficiency_avgz/TelemetryAnalyzer.calculate_aero_efficiency_avgss)<00><00><19><16><13>9<>y<EFBFBD>9<>9<><05><14>s<EFBFBD>9<EFBFBD>~<7E>%<25>%r c<00>B<00>t|<00>dkryt|d<03><00><04>}t|<01>dk\r|ddn|}t|<02>dkryd}td t|<02><00>D]'}|||j||d z
jz
z }<03>)|t|<02>d z
z }|d
kDry |d kry y)z<>
Analyze ERS charge pattern.
Args:
telemetry: List of enriched telemetry records
Returns:
Pattern description: "charging", "stable", "depleting"
r<00>stablec<00><00>|jSr;r<r>s rr@z7TelemetryAnalyzer.analyze_ers_pattern.<locals>.<lambda><3E>rAr rB<00><00><><EFBFBD><EFBFBD><EFBFBD>Nr9rg<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>chargingg<67><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> depleting)rr<00>range<67>
ers_charge)r7rG<00>recent<6E> total_change<67>i<>
avg_changes r<00>analyze_ers_patternz%TelemetryAnalyzer.analyze_ers_pattern<72>s<><00><00> <0F>y<EFBFBD>><3E>A<EFBFBD> <1D><1B>"<22>)<29><1F>A<><18>+.<2E>.><3E>*?<3F>1<EFBFBD>*D<>!<21>"<22>#<23>&<26>JZ<4A><06> <0E>v<EFBFBD>;<3B><11>?<3F><1B><1B> <0C><16>q<EFBFBD>#<23>f<EFBFBD>+<2B>&<26> J<01>A<EFBFBD> <18>F<EFBFBD>1<EFBFBD>I<EFBFBD>0<>0<>6<EFBFBD>!<21>A<EFBFBD>#<23>;<3B>3I<33>3I<33>I<> I<>L<EFBFBD> J<01>"<22>S<EFBFBD><16>[<5B>1<EFBFBD>_<EFBFBD>5<>
<EFBFBD> <15><04> <1C><1D> <17>%<25> <1F><1E>r c<00>B<00>|syt|d<02><00><03>}|jdkS)z<>
Check if fuel situation is critical.
Args:
telemetry: List of enriched telemetry records
Returns:
True if fuel optimization score is below 0.7
Fc<00><00>|jSr;r<r>s rr@z4TelemetryAnalyzer.is_fuel_critical.<locals>.<lambda><3E><00>
<00><00>a<EFBFBD>e<EFBFBD>e<EFBFBD>r rBgffffff<66>?)rF<00>fuel_optimization_score)r7<00>latests r<00>is_fuel_criticalz"TelemetryAnalyzer.is_fuel_critical<61>s)<00><00><19><18><15>Y<EFBFBD>O<EFBFBD>4<><06><15>-<2D>-<2D><03>3<>3r c<00>^<00>|sytd<02>|D<00><00>t|<00>z }|dk\ry|dk\ryy)z<>
Assess driver consistency form.
Args:
telemetry: List of enriched telemetry records
Returns:
Form description: "excellent", "good", "inconsistent"
<20>goodc3<00>4K<00>|]}|j<00><01><00>y<00>wr;)<01>driver_consistencyrQs rrTz7TelemetryAnalyzer.assess_driver_form.<locals>.<genexpr><3E>s<00><00><><00>F<>q<EFBFBD>a<EFBFBD>2<>2<>F<>rU<00>333333<33>?<3F> excellentg<00>?<3F> inconsistentrV)r7<00>avg_consistencys r<00>assess_driver_formz$TelemetryAnalyzer.assess_driver_form<72>s><00><00><19><19><1E>F<>I<EFBFBD>F<>F<><13>Y<EFBFBD><1E>W<><0F> <1A>d<EFBFBD> "<22><1E> <1C><04> $<24><19>!r rc<00><><00>|s|dzSt|d<02><00><03>}|j}|dk\r|Stj|<00>}|dkr|dzSd|z
|z }|t |<05>z}|S)a)
Project when tire degradation will hit 0.85 (performance cliff).
Args:
telemetry: List of enriched telemetry records
current_lap: Current lap number
Returns:
Projected lap number when cliff will be reached
<20>c<00><00>|jSr;r<r>s rr@z6TelemetryAnalyzer.project_tire_cliff.<locals>.<lambda><3E>rjr rBrrr<00>2)rFrEr6rM<00>int)r7rrl<00> current_degrL<00>laps_until_cliff<66> projected_laps r<00>project_tire_cliffz$TelemetryAnalyzer.project_tire_cliff<66>s<><00><00><19><1E><12>#<23> #<23><15>Y<EFBFBD>O<EFBFBD>4<><06><1C>3<>3<> <0B> <16>$<24> <1E><1E> <1E>!<21>@<40>@<40><19>K<><04> <0F>1<EFBFBD>9<EFBFBD><1E><12>#<23> #<23>!<21>;<3B>.<2E>$<24>6<><18>#<23>c<EFBFBD>*:<3A>&;<3B>;<3B> <0A><1C>r c<00><><00>|sytj|<00>}tj|<00>}tj|<00>}tj |<00>}tj |<00>}t |d<02><00><03>}dt|<00><00>d|jd<06>d|d<08>d |d<06>d
|jd<06>d |<03>d |jd<06>d |rdnd<0F>d|<05>d|jd<06>d|j<00><00>}|S)z<>
Generate human-readable summary of telemetry trends.
Args:
telemetry: List of enriched telemetry records
Returns:
Summary string
zNo telemetry data available.c<00><00>|jSr;r<r>s rr@z>TelemetryAnalyzer.generate_telemetry_summary.<locals>.<lambda> rjr rBzTelemetry Analysis (Last z laps):
- Tire degradation: z.2fz index, increasing at z.3fz/lap
- Aero efficiency: z average
- ERS: z charge, z
- Fuel: z score, <20>CRITICAL<41>OKz
- Driver form: z (z consistency)
- Weather impact: ) r6rMrYrgrmrvrFrrErbrkrq<00>weather_impact)r7<00> tire_rate<74>aero_avg<76> ers_pattern<72> fuel_critical<61> driver_formrl<00>summarys r<00>generate_telemetry_summaryz,TelemetryAnalyzer.generate_telemetry_summary<72>s<00><00><19>1<>%<25>E<>E<>i<EFBFBD>P<> <09>$<24>B<>B<>9<EFBFBD>M<><08>'<27>;<3B>;<3B>I<EFBFBD>F<> <0B>)<29>:<3A>:<3A>9<EFBFBD>E<> <0A>'<27>:<3A>:<3A>9<EFBFBD>E<> <0B><14>Y<EFBFBD>O<EFBFBD>4<><06>/<2F><03>I<EFBFBD><0E>/?<3F>@<15><1B>2<>2<>3<EFBFBD>7<>7M<37>i<EFBFBD>X[<5B>_<EFBFBD>]<14><1C>S<EFBFBD>><3E>"<08><0E><19><19>#<23><1E>i<EFBFBD> <0B>}<7D>5 <09> <0F> '<27> '<27><03>,<2C>H<EFBFBD>=<3D>Z<EFBFBD>VZ<56>4[<5B>\<10><1B>}<7D>B<EFBFBD>v<EFBFBD>8<>8<><13>=<3D>><13><19>(<28>(<28>)<29> -<2D><07><17>r N)r-r.r/r0r1rr<00>floatrMrYr3rgr2rmrvr{rr<>r4r rr6r6Rs,<00><00>J<><11><1E>4<EFBFBD>8P<38>3Q<33><1E>V[<5B><1E><12><1E>:<12>&<26><14>6N<36>1O<31>&<26>TY<54>&<26><12>&<26> <12>"<1C>t<EFBFBD>,D<>'E<>"<1C>#<23>"<1C><12>"<1C>H<12>4<>D<EFBFBD>)A<>$B<>4<>t<EFBFBD>4<><12>4<>"<12>"<22>d<EFBFBD>+C<>&D<>"<22><13>"<22><12>"<22>.<12>"<1D><17>0<>1<>"<1D><18>"<1D>
<0A>"<1D><12>"<1D>H<12><17>d<EFBFBD>3K<33>.L<><17>QT<51><17><12>r r6)r0<00>typingrr<00>logging<6E>models.input_modelsrrr<00> getLoggerr-r%r r6r4r r<00><module>r<>sC<00><01><04><1F><0E>O<>O<> <1A><17> <1A> <1A>8<EFBFBD> $<24><06>D <20>D <20>ND<17>Dr