Files
TBgen_App/autoline/__pycache__/energy_allocator.cpython-312.pyc

290 lines
32 KiB
Plaintext
Raw Normal View History

2026-03-30 16:46:48 +08:00
<EFBFBD>
<00><><EFBFBD>i9m<00><00>@<00>dZddlZddlmZmZmZmZmZddlm Z m
Z
ddl m Z eje<0E>ZGd<06>de <0C>Ze Gd<08>d <09><00>Ze Gd
<EFBFBD>d <0B><00>ZGd <0C>d <0A>ZGd<0E>d<0F>ZGd<10>d<11>ZGd<12>d<13>ZGd<14>d<15>Z ddeededefd<19>Zy)z<>
Description : Energy Allocation Layer (Layer 4)
- Adaptive Resource Scheduling
- Dynamic energy distribution based on function point importance
Author : CGA Enhancement Project
Time : 2026/03/11
<EFBFBD>N)<05>List<73>Dict<63>Optional<61>Any<6E>Tuple)<02> dataclass<73>field)<01>Enumc<00> <00>eZdZdZdZdZdZdZy)<07> EnergyStateu能量状态枚举<E69E9A>active<76>depleted<65> completed<65> suspendedN)<08>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>ACTIVE<56>DEPLETED<45> COMPLETED<45> SUSPENDED<45><00><00>?/home/zhang/CorrectBench/TBgen_App/autoline/energy_allocator.pyr r s<00><00><1C> <15>F<EFBFBD><19>H<EFBFBD><1B>I<EFBFBD><1B>Irr c<00><><00>eZdZUdZeed<eed<dZeed<dZeed<dZ eed<dZ
e ed <e jZe ed
<dZe ed <dZe ed <y )<0E>EnergyAllocationuG
能量分配记录
Attributes:
function_point: 功能点名称
importance: 重要性评分 (0.0 - 1.0)
allocated: 分配的总能量
consumed: 已消耗的能量
remaining: 剩余能量
consecutive_failures: 连续失败次数
state: 当前能量状态
<20>function_point<6E>
importance<EFBFBD><00> allocated<65>consumed<65> remainingr<00>consecutive_failures<65>state<74>total_attempts<74>successful_attemptsN)rrrr<00>str<74>__annotations__<5F>floatr!r"r#r$<00>intr rr%r&r'rrrrrsc<00><00> <08><18><17><15><15><1A>I<EFBFBD>u<EFBFBD><1A><19>H<EFBFBD>e<EFBFBD><19><1A>I<EFBFBD>u<EFBFBD><1A> !<21><18>#<23>!<21>$<24>+<2B>+<2B>E<EFBFBD>;<3B>+<2B><1B>N<EFBFBD>C<EFBFBD><1B> <20><17><13> rrc<00>^<00>eZdZUdZeed<eed<dZeed<dZ eed<dZ
eed <dZ eed
<y ) <0C>GenerationResultu
生成结果记录
Attributes:
function_point: 目标功能点
success: 是否成功覆盖
coverage_delta: 覆盖率变化
energy_cost: 消耗的能量
code_generated: 生成的代码
quality_score: 代码质量分数
r<00>successr <00>coverage_delta<74><00>?<3F> energy_cost<73><00>code_generated<65> quality_scoreN) rrrrr(r)<00>boolr/r*r1r3r4rrrr-r-6s<<00><00>
<08><18><17> <11>M<EFBFBD><1F>N<EFBFBD>E<EFBFBD><1F><1C>K<EFBFBD><15><1C><1C>N<EFBFBD>C<EFBFBD><1C><1E>M<EFBFBD>5<EFBFBD>rr-c <00>`<00>eZdZdZdZdZdZ ddededefd <09>Z dd
e e
d e d e
e e ffd <0A>Zy)<10>EnergyInitializeru}
能量初始化器
根据总能量预算和功能点重要性评分,初始化各功能点的能量分配
g$@r0g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?N<> total_energy<67>
min_energy<EFBFBD> buffer_ratioc<00><><00>|xs |j|_|xs |j|_|xs |j|_y)u<>
Args:
total_energy: 总能量预算(默认为 max_iter
min_energy: 每个功能点最小能量
buffer_ratio: 能量缓冲比例
N)<06>DEFAULT_TOTAL_ENERGYr8<00>MIN_ENERGY_PER_FPr9<00>ENERGY_BUFFER_RATIOr:)<04>selfr8r9r:s r<00>__init__zEnergyInitializer.__init__[s<<00><00>)<29>E<>D<EFBFBD>,E<>,E<><04><19>$<24>><3E><04>(><3E>(><3E><04><0F>(<28>D<>D<EFBFBD>,D<>,D<><04>r<00>function_points<74>max_iterations<6E>returnc <00><><00>|rt|<02>|_|D<00>cgc]}|jdd<02>r<01>|<03><02>}}|stj d<03>iSt d<04>|D<00><00>}|j|j z}|j|z
}i}|D]}}|jdd<06>} |jdd<08>}
|d kDr |
|z |z} n|t|<04>z } t|j| <0B>} t| |
| d
| d tjd d <09> <0B> || <<00>tj d |jd <0A>dt d<0F>|j<00>D<00><00>d <0A>d|d <0A>dt|<08><00><00><08>|Scc}w)uB
初始化能量分配
Args:
function_points: 功能点列表,每个元素包含 name, importance, covered 等
max_iterations: 最大迭代次数(用于设置总能量)
Returns:
功能点名称 -> 能量分配记录 的字典
<20>coveredFz=All function points are covered. No energy allocation needed.c3<00>@K<00>|]}|jdd<01><00><01><00>y<02>w)r<00><00>?N)<01>get)<02>.0<EFBFBD>fps r<00> <genexpr>z/EnergyInitializer.initialize.<locals>.<genexpr><3E>s<00><00><><00>Q<>R<EFBFBD>r<EFBFBD>v<EFBFBD>v<EFBFBD>l<EFBFBD>C<EFBFBD>8<>Q<>s<00><01>name<6D>unknownrrGrr ) rrr!r"r#r$r%r&r'zEnergy initialized: total=<3D>.1fz , allocated=c3<00>4K<00>|]}|j<00><01><00>y<00>w<01>N)r!<00>rI<00>as rrKz/EnergyInitializer.initialize.<locals>.<genexpr><3E>s<00><00><><00>#N<>A<EFBFBD>A<EFBFBD>K<EFBFBD>K<EFBFBD>#N<><4E><00>z , buffer=z
, targets=)r*r8rH<00>logger<65>info<66>sumr:<00>len<65>maxr9rr r<00>values) r?rArBrJ<00> uncovered_fps<70>total_importance<63> buffer_energy<67>available_energy<67> allocationsrLr<00>proportional_energyr!s r<00>
initializezEnergyInitializer.initializeis<><00><00> <1A> %<25>n<EFBFBD> 5<>D<EFBFBD> <1D>'6<>V<><02>R<EFBFBD>V<EFBFBD>V<EFBFBD>I<EFBFBD>u<EFBFBD>=U<><12>V<> <0A>V<><1C> <12>K<EFBFBD>K<EFBFBD>W<> X<><15>I<EFBFBD><1F>Q<>=<3D>Q<>Q<><18><1D>)<29>)<29>D<EFBFBD>,=<3D>,=<3D>=<3D> <0A><1F>,<2C>,<2C>}<7D><<3C><18><19> <0B><1F> <0E>B<EFBFBD><15>6<EFBFBD>6<EFBFBD>&<26>)<29>,<2C>D<EFBFBD><1B><16><16> <0C>c<EFBFBD>2<>J<EFBFBD> <20>!<21>#<23>'1<>4D<34>'D<>HX<48>&X<>#<23>&6<><13>]<5D>9K<39>&K<>#<23><1B>D<EFBFBD>O<EFBFBD>O<EFBFBD>-@<40>A<>I<EFBFBD> 0<>#<23>%<25>#<23><1C>#<23>%&<26>!<21>(<28>(<28> <20>$%<25>
!<0E>K<EFBFBD><04> <1D> <0E>2 <0F> <0B> <0B>0<><14>1B<31>1B<31>3<EFBFBD>0G<30>H <20> #<23>#N<><1B>9K<39>9K<39>9M<39>#N<> N<>s<EFBFBD>S<>T<1D>*<2A>3<EFBFBD>/<2F>0<1E>!<21>+<2B>.<2E>/<2F>1<> 2<>
<1B><1A><>]Ws
<00>E#<04>E#)NNNrP)rrrrr<r=r>r*r@rrr+r(rr`rrrr7r7Os~<00><00><08> <20><18><1B><15><1D><17>(,<2C>%)<29>'+<2B> E<01>$<24> E<01>"<22> E<01> %<25> E<01> *.<2E>@<1B>$(<28><14>J<EFBFBD>@<1B>#&<26>@<1B>26<32>s<EFBFBD><L<>7L<37>2M<32>@rr7c<00>`<00>eZdZdZdZdeeeffd<04>Zde efd<06>Z
de fd<07>Z d de de efd <09>Zy
) <0C>TargetSelectoru<72>
目标选择器
选择下一个需要生成测试的目标功能点
采用优先级策略:重要性 × (剩余能量/分配能量)
<20>r^c<00><00>||_y<01>uC
Args:
allocations: 能量分配字典
N<>r^<00>r?r^s rr@zTargetSelector.__init__<5F><00> <00><00>
'<27><04>rrCc <00><><00>|jj<00>D<00>cgc]0}|jtjk(r|j
dkDr|<01><02>2}}|st jd<02>ydtdtfd<06>}|j|d<07><08>|d}t jd |j<00>d
|jd <0B>d |j
d <0A>d|j<00>d<0F> <09>|Scc}w)u
选择下一个目标功能点
优先级计算importance × (remaining / allocated) × (1 / (1 + consecutive_failures))
Returns:
选中的能量分配记录,如果没有可用目标则返回 None
rz(No active targets with remaining energy.N<>allocrCc<00><><00>|j}|jdkDr|j|jz nd}dd|jdzzz }||z|z}|S<00>Nrr0rG<00>rr!r#r$)rj<00>importance_weight<68> energy_ratio<69>failure_penalty<74>prioritys r<00>calculate_priorityz=TargetSelector.select_next_target.<locals>.calculate_priority<74>se<00><00> %<25> 0<> 0<> <1D>AF<01><0F><0F>RS<52>@S<>5<EFBFBD>?<3F>?<3F>U<EFBFBD>_<EFBFBD>_<EFBFBD><<3C>YZ<59>L<EFBFBD>"<22>S<EFBFBD>5<EFBFBD>+E<>+E<><03>+K<>%K<>L<>O<EFBFBD>)<29><<3C>7<>/<2F>I<>H<EFBFBD><1B>OrT<><02>key<65>reversezSelected target: z (importance=<3D>.2fz , remaining=rNz , failures=<3D>))r^rYr%r rr#rTrUrr*<00>sort<72>debugrrr$)r?rj<00>
candidatesrr<00>selecteds r<00>select_next_targetz!TargetSelector.select_next_target<65>s<><00><00> $<24>/<2F>/<2F>6<>6<>8<>
<EFBFBD><1B><14>{<7B>{<7B>k<EFBFBD>0<>0<>0<><15><0F><0F>!<21>#<23> <12>
<EFBFBD>
<EFBFBD>
<EFBFBD> <1A> <12>K<EFBFBD>K<EFBFBD>B<> C<><17> <1C>&6<> <1C>5<EFBFBD> <1C> <13><0F><0F>.<2E><04><0F>=<3D><1D>a<EFBFBD>=<3D><08><0E> <0C> <0C>(<28><18>)@<40>)@<40>(A<>B#<23>#+<2B>#6<>#6<>s<EFBFBD>";<3B><!<21>!)<29>!3<>!3<>C<EFBFBD> 8<>9 <20> (<28> =<3D> =<3D>><3E>a<EFBFBD>A<01> B<01>
<18><0F><>C
s<00>5C"c<00><><00>t|jj<00>D<00>cgc]0}|jtj
k(r|j dkDr|<01><02>2c}<01>Scc}w)u获取候选目标数量r)rWr^rYr%r rr#)r?rRs r<00>get_candidates_countz#TargetSelector.get_candidates_count<6E>sX<00><00><12>t<EFBFBD>/<2F>/<2F>6<>6<>8<>I<01>!<21><17>g<EFBFBD>g<EFBFBD><1B>!3<>!3<>3<><01> <0B> <0B>a<EFBFBD><0F><16>I<01>J<01> J<01><>Is<00>5A<08>nc<00><00>|jj<00>D<00>cgc]0}|jtjk(r|j
dkDr|<02><02>2}}dt dtfd<04>}|j|d<05><06>|d|Scc}w)u*获取优先级最高的 N 个候选目标rrjrCc<00><><00>|j}|jdkDr|j|jz nd}dd|jdzzz }||z|zSrlrm)rjrnrorps rrrz=TargetSelector.get_top_candidates.<locals>.calculate_priority<74>sY<00><00> %<25> 0<> 0<> <1D>@E<><0F><0F>RS<52>@S<>5<EFBFBD>?<3F>?<3F>U<EFBFBD>_<EFBFBD>_<EFBFBD><<3C>YZ<59>L<EFBFBD>!<21>S<EFBFBD>5<EFBFBD>+E<>+E<><03>+K<>%K<>L<>O<EFBFBD>$<24>|<7C>3<>o<EFBFBD>E<> ErTrsN) r^rYr%r rr#rr*rx)r?rrjrzrrs r<00>get_top_candidatesz!TargetSelector.get_top_candidates<65>s<><00><00> $<24>/<2F>/<2F>6<>6<>8<>
<EFBFBD><1B><14>{<7B>{<7B>k<EFBFBD>0<>0<>0<>U<EFBFBD>_<EFBFBD>_<EFBFBD>q<EFBFBD>5H<35> <12>
<EFBFBD>
<EFBFBD>
<EFBFBD>
 F<01>&6<> F<01>5<EFBFBD> F<01> <13><0F><0F>.<2E><04><0F>=<3D><19>"<22>1<EFBFBD>~<7E><1D><>
s<00>5A<N)rc)rrrr<00>MAX_CONSECUTIVE_FAILURESrr(rr@rr|r+r~rr<>rrrrbrb<00>s`<00><00><08> !<21><1C>'<27>D<EFBFBD><13>.><3E>)><3E>$?<3F>'<27>+<18>H<EFBFBD>-=<3D>$><3E>+<18>ZJ<01>c<EFBFBD>J<01>
<1E>C<EFBFBD><1E><04>5E<35>0F<30>rrbc<00>Z<00>eZdZdZdZdeeeffd<04>Zde deee
ffd<07>Z deee
ffd<08>Z y )
<EFBFBD>EnergyConsumptionTrackeruk
能量消耗跟踪器
跟踪每次生成尝试的能量消耗,根据结果更新状态
gffffff<66>?r^c<00> <00>||_g|_yre)r^<00>historyrgs rr@z!EnergyConsumptionTracker.__init__s<00><00>
'<27><04><18>/1<><04> r<00>resultrCc <00> <00>|jj|<01>|j}||jvrtj d|<02><00><02>ddd<04>S|j|}|xj dz c_|j}|xj|z c_td|j|z
<00>|_
|jr<>d|_ |xjdz c_ tj|_tj#d|<02>d|j <00>d |jd
<EFBFBD>d <0B><07>d ||j |jd <0A>S|xjdz c_ |jdk\r<>|j}|xj|j$zc_
tj d|<02>d|j<00>d|d
<EFBFBD>d|jd
<EFBFBD><04><08>|jdkrHtj&|_tj d|<02><00><02>d||j|jd<16>S|jdkr=tj(|_tj d|<02><00><02>d||j d<19>Sd||j|jd<16>S)u<>
记录一次生成尝试
Args:
result: 生成结果
Returns:
更新后的状态信息
zUnknown function point: rMzUnknown function point<6E><02>status<75>message<67>rz[SUCCESS] Target covered: z (attempts=z, energy_used=rNrwr)r<>r<00>attempts<74> energy_usedrczConsecutive failures for z: z. Energy reduced: z -> rGz$Target suspended due to low energy: r)r<>rr$<00>remaining_energyzTarget depleted: r)r<>rr&<00>failed)r<><00>appendrr^rT<00>warningr&r1r"rXr#r.r$r'r rr%rU<00>ENERGY_DECAY_FACTORrr)r?r<><00>fp_namerjr1<00> old_remainings r<00>record_generationz*EnergyConsumptionTracker.record_generationsk<00><00> <0A> <0C> <0C><1B><1B>F<EFBFBD>#<23><18>'<27>'<27><07> <12>$<24>*<2A>*<2A> *<2A> <12>N<EFBFBD>N<EFBFBD>5<>g<EFBFBD>Y<EFBFBD>?<3F> @<40>'<27>4L<34>M<> M<><14> <20> <20><17>)<29><05> <0A><1C><1C><01>!<21><1C><1D>(<28>(<28> <0B> <0A><0E><0E>+<2B>%<25><0E><1D>a<EFBFBD><15><1F><1F>;<3B>!><3E>?<3F><05><0F> <11>><3E>><3E>)*<2A>E<EFBFBD> &<26> <11> %<25> %<25><11> *<2A> %<25>%<25>/<2F>/<2F>E<EFBFBD>K<EFBFBD> <12>K<EFBFBD>K<EFBFBD>4<>W<EFBFBD>I<EFBFBD>[<5B><15>I]<5D>I]<5D>H^<5E>_)<29>).<2E><1E><1E><03>(<<3C>A<EFBFBD>?<3F> @<01>&<26>")<29>!<21>0<>0<>$<24>~<7E>~<7E> <0E> <0E> <12> &<26> &<26>!<21> +<2B> &<26><15>)<29>)<29>Q<EFBFBD>.<2E> %<25><0F><0F> <0A><15><0F><0F>4<EFBFBD>#;<3B>#;<3B>;<3B><0F><16><0E><0E>!:<3A>7<EFBFBD>)<29>2<EFBFBD>e<EFBFBD>F`<60>F`<60>Ea<45>b1<>1><3E>s<EFBFBD>0C<30>4<EFBFBD><05><0F><0F>X[<5B>G\<5C> ^<01>_<01><19>?<3F>?<3F>S<EFBFBD>(<28>"-<2D>"7<>"7<>E<EFBFBD>K<EFBFBD><1A>N<EFBFBD>N<EFBFBD>%I<>'<27><19>#S<>T<>#.<2E>*1<>05<30>0J<30>0J<30>,1<>O<EFBFBD>O<EFBFBD> <16><16><15><EFBFBD><EFBFBD>!<21>#<23>)<29>2<>2<><05> <0B><16><0E><0E>!2<>7<EFBFBD>)<29><<3C>=<3D>)<29>&-<2D>&+<2B>&:<3A>&:<3A><12><12>#<23>")<29>(-<2D>(B<>(B<>$)<29>O<EFBFBD>O<EFBFBD> <0E> rc<00>b<00>t|j<00>}td<01>|jD<00><00>}i}|jD]Z}|j}||vr dddd<04>||<||dxx|jz cc<||dxxdz cc<|j
s<01>Sd||d <<00>\|||dkDr||z |d
<EFBFBD>Sd|d
<EFBFBD>S) u获取统计信息c3<00>:K<00>|]}|js<01>d<00><01><00>y<01>w<01>r<>N)r.)rI<00>rs rrKz:EnergyConsumptionTracker.get_statistics.<locals>.<genexpr>qs<00><00><><00>><3E>q<EFBFBD>A<EFBFBD>I<EFBFBD>I<EFBFBD><11>><3E>s<00><01>rF)r"r<>r.r"r<>r<>Tr.)r&r'<00> success_rate<74>energy_by_function_point)rWr<>rVrr1r.)r?<00>total<61>
successful<EFBFBD> energy_by_fpr<70>rJs r<00>get_statisticsz'EnergyConsumptionTracker.get_statisticsns<><00><00><13>D<EFBFBD>L<EFBFBD>L<EFBFBD>!<21><05><18>><3E>D<EFBFBD>L<EFBFBD>L<EFBFBD>><3E>><3E>
<EFBFBD><19> <0C><1A>l<EFBFBD>l<EFBFBD> 3<>F<EFBFBD><17>&<26>&<26>B<EFBFBD><11><1C>%<25>01<30>q<EFBFBD>U<EFBFBD>#S<> <0C>R<EFBFBD> <20> <18><12> <1C>Z<EFBFBD> (<28>F<EFBFBD>,><3E>,><3E> ><3E> (<28> <18><12> <1C>Z<EFBFBD> (<28>A<EFBFBD> -<2D> (<28><15>~<7E>~<7E>.2<EFBFBD> <0C>R<EFBFBD> <20><19>+<2B> 3<>$<24>#-<2D>27<32>!<21>)<29>J<EFBFBD><15>.<2E>(4<> 
<EFBFBD>
<EFBFBD>BC<01>(4<> 
<EFBFBD>
rN) rrrrr<>rr(rr@r-rr<>r<>rrrr<>r<> sZ<00><00><08><1E><17>2<>D<EFBFBD><13>.><3E>)><3E>$?<3F>2<>Q<0E>(8<>Q<0E>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>Q<0E>f
<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>
rr<>c<00>x<00>eZdZdZdeeeffd<03>Zdedeeeffd<06>Z deeeeefffd<07>Z
d dede efd <09>Z y
) <0C>EnergyRedistributoru<72>
能量重分配器
当某个功能点被覆盖后,将其剩余能量重新分配给其他未覆盖功能点
r^c<00><00>||_yrerfrgs rr@zEnergyRedistributor.__init__<5F>rhr<00> completed_fprCc
<00><><00>||jvriS|j|}|j}|dkrtjd|<01><00><02>iS|jj <00>D<00>cgc]0}|j
t jk(r|j|k7r|<04><02>2}}|stjd<03>iStd<04>|D<00><00>}i}|D]a}|dkDr|j|z |z}n|t|<05>z }|xj|z c_ |xj|z c_|||j<<00>cd|_tjd|d<06>d|<01>dt|<07><00>d <09><07>|Scc}w)
u<EFBFBD>
重分配已完成功能点的剩余能量
Args:
completed_fp: 已完成的功能点名称
Returns:
重分配详情 {target_fp: gained_energy}
rz$No remaining energy to recover from z,No active targets to redistribute energy to.c3<00>4K<00>|]}|j<00><01><00>y<00>wrP<00>rrQs rrKz3EnergyRedistributor.redistribute.<locals>.<genexpr><3E>s<00><00><><00>D<><01>q<EFBFBD>|<7C>|<7C>D<>rSzRedistributed rNz energy from z to z targets)r^r#rTryrYr%r rrrUrVrrWr!) r?r<><00>completed_alloc<6F>recovered_energyrj<00>active_targetsr[<00>redistribution<6F>gains r<00> redistributez EnergyRedistributor.redistribute<74>s<><00><00> <18>t<EFBFBD>/<2F>/<2F> /<2F><15>I<EFBFBD><1E>*<2A>*<2A><<3C>8<><0F>+<2B>4<>4<><18> <1B>q<EFBFBD> <20> <12>L<EFBFBD>L<EFBFBD>?<3F> <0C>~<7E>N<> O<><15>I<EFBFBD> $<24>/<2F>/<2F>6<>6<>8<>
<EFBFBD><1B><14>{<7B>{<7B>k<EFBFBD>0<>0<>0<>U<EFBFBD>5I<35>5I<35>\<5C>5Y<35> <12>
<EFBFBD><0E>
<EFBFBD>
<1E> <12>K<EFBFBD>K<EFBFBD>F<> H<><15>I<EFBFBD><1F>D<>^<5E>D<>D<><18><1B><0E>#<23> 8<>E<EFBFBD><1F>!<21>#<23><1D>(<28>(<28>+;<3B>;<3B>?O<>O<><04>'<27>#<23>n<EFBFBD>*=<3D>=<3D><04> <11>O<EFBFBD>O<EFBFBD>t<EFBFBD> #<23>O<EFBFBD> <11>O<EFBFBD>O<EFBFBD>t<EFBFBD> #<23>O<EFBFBD>37<33>N<EFBFBD>5<EFBFBD>/<2F>/<2F> 0<> 8<>%&<26><0F>!<21><0E> <0B> <0B>n<EFBFBD>%5<>c<EFBFBD>$:<3A>-<2D> <0C>~<7E>V<19><1C>^<5E>,<2C>-<2D>X<EFBFBD>7<> 8<><1E><1D><>;
s<00>'5E#c<00>$<00>i}|jj<00>D<00><02>cgc]B\}}|jtjtj
fvr|j dkDr|<02><02>D}}}|D]}|j|<05>}|s<01>|||<<00>|Scc}}w)u<>
重分配所有已完成/暂停目标的剩余能量
Returns:
完整的重分配详情
r)r^<00>itemsr%r rrr#r<>)r?<00>all_redistributionsrLrj<00> completed_fpsrJr<>s r<00>redistribute_allz$EnergyRedistributor.redistribute_all<6C>s<><00><00>!<21><1B>%)<29>$4<>$4<>$:<3A>$:<3A>$<<3C>
<EFBFBD> <20>T<EFBFBD>5<EFBFBD><14>{<7B>{<7B>{<7B>4<>4<>k<EFBFBD>6K<36>6K<36>L<>L<><15><0F><0F>!<21>#<23> <11>
<EFBFBD> <0A>
<EFBFBD>  <20> 9<>B<EFBFBD>!<21>.<2E>.<2E>r<EFBFBD>2<>N<EFBFBD><1D>*8<>#<23>B<EFBFBD>'<27> 9<>
#<23>"<22><>
s<00>AB r9c<00><><00>g}td<01>|jj<00>D<00><00>}|jj<00>D<00>cgc]!}|jtj
k(r|<04><02>#}}|D]<5D>}||k\s<01> tj |_||_|xj|z c_d|_ ||z}|j|j<00>tjd|j<00><00><02><00><>|Scc}w)u<>
尝试复活暂停的目标(如果有足够的回收能量)
Args:
min_energy: 复活所需的最小能量
Returns:
复活的目标列表
c3<00><>K<00>|]<}|jtjk(r|jdkDr|j<00><01><00>>y<01>w)rN)r%r rr#)rIrjs rrKz7EnergyRedistributor.revive_suspended.<locals>.<genexpr><3E>s9<00><00><><00>
<EFBFBD> %<25><14>{<7B>{<7B>k<EFBFBD>3<>3<>3<><05><0F><0F>!<21>8K<38> <12>O<EFBFBD>O<EFBFBD>
<EFBFBD>s<00>AArzRevived suspended target: )rVr^rYr%r rrr#r!r$r<>rrTrU)r?r9<00>revivedr]rjrs r<00>revive_suspendedz$EnergyRedistributor.revive_suspended<65>s<><00><00><15><07><1F>
<EFBFBD>)-<2D>)9<>)9<>)@<40>)@<40>)B<>
<EFBFBD>
<EFBFBD><18> $<24>/<2F>/<2F>6<>6<>8<>
<EFBFBD><1B><14>{<7B>{<7B>k<EFBFBD>3<>3<>3<> <12>
<EFBFBD> <09>
<EFBFBD>
<1F>
Q<01>E<EFBFBD><1F>:<3A>-<2D>)<29>0<>0<><05> <0B>",<2C><05><0F><15><0F><0F>:<3A>-<2D><0F>-.<2E><05>*<2A> <20>J<EFBFBD>.<2E> <20><17><0E><0E>u<EFBFBD>3<>3<>4<><16> <0B> <0B>8<><15>9M<39>9M<39>8N<38>O<>P<>
Q<01><17><0E><>#
s<00> &C:N)r0) rrrrrr(rr@r*r<>r<>rr<>rrrr<>r<><00>sq<00><00><08> '<27>D<EFBFBD><13>.><3E>)><3E>$?<3F>'<27>4<1E><13>4<1E><14>c<EFBFBD>5<EFBFBD>j<EFBFBD>1A<31>4<1E>l#<23>$<24>s<EFBFBD>D<EFBFBD><13>e<EFBFBD><1A>,<<3C>'<<3C>"=<3D>#<23>.$<17>5<EFBFBD>$<17>4<EFBFBD><03>9<EFBFBD>$rr<>c <00><><00>eZdZdZ ddedefd<05>Zdeedee e
ffd<08>Z de e fd <09>Z dd
ed ed ed edee e
ff
d<0E>Zdee e
ffd<0F>Zdde de fd<11>Zdee dee e ffd<13>Zde fd<14>Zy)<18>EnergyAllocatoruo
能量分配器 - 第4层主入口
整合所有子模块,提供统一的能量管理接口
NrBr8c<00><><00>||_|xs t|<01>|_t|j<00><01>|_i|_d|_d|_d|_d|_ d|_
y)u<>
Args:
max_iterations: 最大迭代次数
total_energy: 总能量预算(默认使用 max_iterations
)r8NF) rBr*r8r7<00> initializerr^<00>selector<6F>tracker<65> redistributor<6F> initialized<65>current_target)r?rBr8s rr@zEnergyAllocator.__init__sc<00><00>-<2D><04><1B>(<28>A<>E<EFBFBD>.<2E>,A<><04><19>-<2D>$<24>:K<>:K<>L<><04><18>8:<3A><04><18>26<32><04> <0A>;?<3F><04> <0C><@<40><04><1A>!<21><04><18>:><3E><04>rrArCc <00><00>|jj||j<00><01>|_t |j<00>|_t |j<00>|_t|j<00>|_ d|_
|jt|j<00>|jj<00>D<00><02>cic]4\}}||j|j|j j"d<03><03><02>6c}}d<04>Scc}}w)u<>
初始化能量分配
Args:
function_points: 功能点列表
Returns:
初始化结果摘要
<20>rBT)rr!r%)r8<00>targets<74>allocation_details)r<>r`rBr^rbr<>r<>r<>r<>r<>r<>r8rWr<>rr!r%<00>value)r?rArLrjs rr`zEnergyAllocator.initialize,s<><00><00> <20>+<2B>+<2B>6<>6<> <1B><1F>.<2E>.<2E>7<>
<EFBFBD><04><18>
'<27>t<EFBFBD>'7<>'7<>8<><04> <0A>/<2F><04>0@<40>0@<40>A<><04> <0C>0<><14>1A<31>1A<31>B<><04><1A><1F><04><18>!<21>-<2D>-<2D><1A>4<EFBFBD>+<2B>+<2B>,<2C>$(<28>#3<>#3<>#9<>#9<>#;<3B> #<0E>  <20>D<EFBFBD>%<25> <15>"'<27>"2<>"2<>!&<26><1F><1F>"<22>[<5B>[<5B>.<2E>.<2E><12><12>#<0E> 
<EFBFBD>
<EFBFBD><EFBFBD>#s<00>>9C=
c<00><><00>|jstjd<01>y|jj <00>|_|j
r|j
j SdS)u<>
选择下一个生成目标
Returns:
目标功能点名称,如果没有可用目标则返回 None
<20>!Energy allocator not initialized.N)r<>rTr<>r<>r|r<>r)r?s rr|z"EnergyAllocator.select_next_targetMsQ<00><00><14><1F><1F> <12>N<EFBFBD>N<EFBFBD>><3E> ?<3F><17>"<22>m<EFBFBD>m<EFBFBD>><3E>><3E>@<40><04><1B>59<35>5H<35>5H<35>t<EFBFBD>"<22>"<22>1<>1<>R<>d<EFBFBD>Rrr.r/r1r4c<00><00>|jsddd<03>St|jj||||<04><04>}|jj |<05>}|r/|j
j |jj<00>|S)u)
记录一次生成尝试
Args:
success: 是否成功覆盖目标
coverage_delta: 覆盖率变化
energy_cost: 消耗的能量
quality_score: 代码质量分数
Returns:
更新结果
<20>errorzNo current targetr<74>)rr.r/r1r4)r<>r-rr<>r<>r<>r<>)r?r.r/r1r4r<><00> update_results rr<>z!EnergyAllocator.record_generation[s<00><00>"<14>"<22>"<22>%<25>2E<32>F<> F<>!<21><1F>.<2E>.<2E>=<3D>=<3D><1B>)<29>#<23>'<27> 
<EFBFBD><06><1D> <0C> <0C>6<>6<>v<EFBFBD>><3E> <0A> <13> <10> <1E> <1E> +<2B> +<2B>D<EFBFBD>,?<3F>,?<3F>,N<>,N<> O<><1C>rc<00><><00>|jsddiStd<03>|jj<00>D<00><00>}td<04>|jj<00>D<00><00>}d|jt |j<00>|||j r|j jnd|jr|jj<00>d<07>Sdd<07>S)u获取当前状态r<E68081>Fc3<00>xK<00>|]2}|jtjk(r|jdkDrd<01><01><00>4y<02>w)rr<>N)r%r rr#rQs rrKz-EnergyAllocator.get_status.<locals>.<genexpr><3E>s5<00><00><><00>P<01><11><1E>W<EFBFBD>W<EFBFBD> <0B>(:<3A>(:<3A>:<3A>q<EFBFBD>{<7B>{<7B>Q<EFBFBD><EFBFBD><1D>P<01>s<00>8:c3<00>ZK<00>|]#}|jtjk(rd<00><01><00>%y<01>wr<><00>r%r rrQs rrKz-EnergyAllocator.get_status.<locals>.<genexpr><3E>s+<00><00><><00>B<01>A<EFBFBD> !<21><07><07>;<3B>+@<40>+@<40> @<40> <20>B<01><><00>)+TN)r<>r8<00> total_targetsr<73><00>completed_targetsr<73><00>
statistics)
r<EFBFBD>rVr^rYr8rWr<>rr<>r<>)r?<00> active_count<6E>completed_counts r<00>
get_statuszEnergyAllocator.get_statuss<><00><00><13><1F><1F>!<21>5<EFBFBD>)<29> )<29><1A>P<01>d<EFBFBD>&6<>&6<>&=<3D>&=<3D>&?<3F>P<01>P<01> <0C><1D>B<01><14>)9<>)9<>)@<40>)@<40>)B<>B<01>B<01><0F> <20> <20>-<2D>-<2D> <20><14>!1<>!1<>2<>*<2A>!0<>DH<44>DW<44>DW<44>d<EFBFBD>1<>1<>@<40>@<40>]a<>;?<3F><<3C><<3C>$<24>,<2C>,<2C>5<>5<>7<>
<EFBFBD>
<EFBFBD>NR<01>
<EFBFBD>
r<00> target_namec<00>,<00>|s"|jr|jj}|r||jvry|j|}g}|jd|<01>d<03><03>|jd|jd<05><04><02>|jd|j
d<07>d|j d<07><04><04>|jd |j<00><00><02>|jd
kDr0|jd |j<00>d <0C><03>|jd <0A>dj|<03>S)u<>
获取目标功能的上下文信息(用于 Prompt
Args:
target_name: 目标名称(默认使用当前目标)
Returns:
上下文字符串
r2z [TARGET: <20>]z Importance: rvzRemaining Energy: rN<00> / zPrevious Attempts: rz Warning: z consecutive failuresz)Consider a different approach or sequence<63>
)
r<EFBFBD>rr^r<>rr#r!r&r$<00>join)r?r<>rj<00>contexts r<00>get_target_contextz"EnergyAllocator.get_target_context<78>s<00><00><1B>t<EFBFBD>2<>2<><1E>-<2D>-<2D><<3C><<3C>K<EFBFBD><1A>k<EFBFBD><14>1A<31>1A<31>A<><15><14> <20> <20><1B>-<2D><05><14><07><0F><0E><0E><19>;<3B>-<2D>q<EFBFBD>1<>2<><0F><0E><0E><1C>e<EFBFBD>&6<>&6<>s<EFBFBD>%;<3B><<3C>=<3D><0F><0E><0E>+<2B>E<EFBFBD>O<EFBFBD>O<EFBFBD>C<EFBFBD>+@<40><03>E<EFBFBD>O<EFBFBD>O<EFBFBD>TW<54>CX<43>Y<>Z<><0F><0E><0E>,<2C>U<EFBFBD>-A<>-A<>,B<>C<>D<> <10> %<25> %<25><01> )<29> <13>N<EFBFBD>N<EFBFBD>Y<EFBFBD>u<EFBFBD>'A<>'A<>&B<>BW<42>X<> Y<> <13>N<EFBFBD>N<EFBFBD>F<> G<><13>y<EFBFBD>y<EFBFBD><17>!<21>!r<00>function_namesc<00><<00>|jsiSi}|D]<5D>}||jvr<01>|j|}|jtjk(rd||<<00>Dtj|_d|_d|_d||<|jj|<03><00><>|S)u<>
将已确认覆盖的功能点直接标记为完成。
这用于基线同步或一次迭代中命中多个功能点的情况,
避免仅依赖当前 target 的涨分信号来判断完成状态。
<20>already_completedrr r) r<>r^r%r rr$r#r<>r<>)r?r<><00>updatesrLrjs r<00>mark_targets_completedz&EnergyAllocator.mark_targets_completed<65>s<><00><00><14><1F><1F><15>I<EFBFBD><14><07>"<22> 2<>D<EFBFBD><13>4<EFBFBD>+<2B>+<2B>+<2B><18><18>$<24>$<24>T<EFBFBD>*<2A>E<EFBFBD><14>{<7B>{<7B>k<EFBFBD>3<>3<>3<> 3<><07><04> <0A><18>%<25>/<2F>/<2F>E<EFBFBD>K<EFBFBD>)*<2A>E<EFBFBD> &<26>!<21>E<EFBFBD>O<EFBFBD>'<27>G<EFBFBD>D<EFBFBD>M<EFBFBD> <10> <1E> <1E> +<2B> +<2B>D<EFBFBD> 1<> 2<><17>rc <00><><00>|jsyg}|jd<02>|jd<03>|jd<02>|jd|jd<05><04><02>|jd|j<00><00><02>|jd<07>|jd<08>|jd <09>t |j
j <00>d
<EFBFBD>d <0B> <0C>D<00>]\}}tjd tjdtjdtjdij|jd<11>}|jdkDr|j|jz dznd}|j|<04>d|<02><00><03>|jd|j d<16>d|j"d<05>d|j$d<05>d|d<1A>d<1B> <09>|jd|j<00>d|j&<00><00><04><00><01>|jd<07>|jd<1E>|jd <09>|j(j+<00>}|jd|d <00><00><02>|jd!|d"<00><00><02>|jd#|d$dzd<05>d<1B><03>t-d%<25>|j
j/<00>D<00><00>}|jd&|<07>d't1|j
<00><00><00><04>|jd<02>d(j3|<01>S))u生成能量分配报告r<E5918A>z<============================================================zENERGY ALLOCATION REPORTzTotal Energy: rNzMax Iterations: r2zFUNCTION POINT STATUS:z<------------------------------------------------------------c<00> <00>|djS)Nr<4E>r<>)<01>xs r<00><lambda>z1EnergyAllocator.generate_report.<locals>.<lambda><3E>s<00><00><01>!<21><04><0F><0F>rTrsu🔄u✅u❌uu❓r<00>d<00> z Importance: rvz | Energy: <20>/z | Efficiency: z.0f<EFBFBD>%z Attempts: z | Consecutive Failures: zSUMMARY:zTotal Attempts: r&z Successful: r'zSuccess Rate: r<>c3<00>ZK<00>|]#}|jtjk(rd<00><01><00>%y<01>wr<>r<>rQs rrKz2EnergyAllocator.generate_report.<locals>.<genexpr><3E>s)<00><00><><00><<3C>a<EFBFBD><1B>'<27>'<27>[<5B>%:<3A>%:<3A>:<3A><1A><<3C>r<EFBFBD>zTargets Covered: r<>r<>)r<>r<>r8rB<00>sortedr^r<>r rrrrrHr%r&r'rr#r!r$r<>r<>rVrYrWr<>)r?<00>linesrLrj<00> status_icon<6F>
efficiency<EFBFBD>statsrs r<00>generate_reportzEnergyAllocator.generate_report<72>s<><00><00><13><1F><1F>6<><12><05> <0A> <0C> <0C>X<EFBFBD><1E> <0A> <0C> <0C>/<2F>0<> <0A> <0C> <0C>X<EFBFBD><1E> <0A> <0C> <0C>~<7E>d<EFBFBD>&7<>&7<><03>%<<3C>=<3D>><3E> <0A> <0C> <0C>'<27><04>(;<3B>(;<3B>'<<3C>=<3D>><3E> <0A> <0C> <0C>R<EFBFBD><18> <0A> <0C> <0C>-<2D>.<2E> <0A> <0C> <0C>X<EFBFBD><1E>!<21>$<24>"2<>"2<>"8<>"8<>":<3A>&?<3F><14>O<01> O<01>K<EFBFBD>D<EFBFBD>%<25><1C>"<22>"<22>F<EFBFBD><1B>%<25>%<25>u<EFBFBD><1B>$<24>$<24>e<EFBFBD><1B>%<25>%<25>x<EFBFBD> <0E>
<12>c<EFBFBD>%<25>+<2B>+<2B>u<EFBFBD>%<25> <18>"<22>0<>0<>1<EFBFBD>4<> <20>3<>3<>e<EFBFBD>6J<36>6J<36>J<>S<EFBFBD>P<>:;<3B> <17> <12>L<EFBFBD>L<EFBFBD>K<EFBFBD>=<3D><01>$<24><16>0<> 1<> <11>L<EFBFBD>L<EFBFBD>?<3F>5<EFBFBD>+;<3B>+;<3B>C<EFBFBD>*@<40>A#<23>#(<28>?<3F>?<3F>3<EFBFBD>"7<>q<EFBFBD><15><1F><1F><13>8M<38>N'<27>'1<>#<23>&6<>a<EFBFBD>9<> :<3A> <12>L<EFBFBD>L<EFBFBD>=<3D><15>)=<3D>)=<3D>(><3E>?1<>16<31>1K<31>1K<31>0L<30>N<01> O<01>! O<01>& <0E> <0C> <0C>R<EFBFBD><18> <0A> <0C> <0C>Z<EFBFBD> <20> <0A> <0C> <0C>X<EFBFBD><1E><14> <0C> <0C>+<2B>+<2B>-<2D><05> <0A> <0C> <0C>'<27><05>.><3E>(?<3F>'@<40>A<>B<> <0A> <0C> <0C>|<7C>E<EFBFBD>*?<3F>$@<40>#A<>B<>C<> <0A> <0C> <0C>~<7E>e<EFBFBD>N<EFBFBD>&;<3B>C<EFBFBD>&?<3F><03>%D<>A<EFBFBD>F<>G<><17><<3C>4<EFBFBD>#3<>#3<>#:<3A>#:<3A>#<<3C><<3C><<3C> <09> <0A> <0C> <0C>(<28><19> <0B>3<EFBFBD>s<EFBFBD>4<EFBFBD>;K<>;K<>7L<37>6M<36>N<>O<> <0A> <0C> <0C>X<EFBFBD><1E><13>y<EFBFBD>y<EFBFBD><15><1F>r)<02>N)r r0r rP)rrrrr+r*r@rrr(rr`rr|r5r<>r<>r<>r<>r<>rrrr<>r<>s<><00><00><08>()<29>'+<2B>?<3F>!$<24>?<3F>$<24>?<3F>,
<EFBFBD>$<24>t<EFBFBD>*<2A>
<EFBFBD><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>
<EFBFBD>B S<01>H<EFBFBD>S<EFBFBD>M<EFBFBD> S<01> 36<33>/2<>14<31> "<1D>#'<27>"<1D>*/<2F>"<1D>(-<2D>"<1D>*/<2F> "<1D>:><3E>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E> "<1D>H
<EFBFBD>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD>
<EFBFBD>("<22>c<EFBFBD>"<22>S<EFBFBD>"<22><<17>T<EFBFBD>#<23>Y<EFBFBD><17>4<EFBFBD><03>S<EFBFBD><08>><3E><17>81 <20><13>1 rr<>rArBrCc<00>@<00>t|<01><01>}|j|<00>|S)u<>
便捷函数:创建并初始化能量分配器
Args:
function_points: 功能点列表
max_iterations: 最大迭代次数
Returns:
初始化完成的能量分配器
r<>)r<>r`)rArB<00> allocators r<00>create_energy_allocatorr<72>s"<00><00> <20>~<7E>><3E>I<EFBFBD> <0A><18><18><1F>)<29> <14>r)r<>)r<00>logging<6E>typingrrrrr<00> dataclassesrr <00>enumr
<00> getLoggerrrTr rr-r7rbr<>r<>r<>r+r<>rrr<00><module>r<>s<><00><01><04><0F>3<>3<>(<28><15> <1A><17> <1A> <1A>8<EFBFBD> $<24><06><1C>$<24><1C> <0B>!<21>!<21> <0B>!<21>0 <0B><1F><1F> <0B><1F>0Z<1B>Z<1B>BR<1E>R<1E>ry
<EFBFBD>y
<EFBFBD>@<17><17>Lo <20>o <20>n23<32><15>T<EFBFBD>$<24>Z<EFBFBD><15>+.<2E><15>7F<37>r