o
    EjO                  
   @  s  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 dZdZdZd	d
ddiZdddZdddZddddiZddeedddZdddddddd Zddd!dd"ddddd#	Zdd$d%deedd&d'Zd(d)d*d+eedd,d'Zdddd-iZddeed.Zd%d,d/dd0Zd%d,d1d(d0Zdkd5d6Zdld<d=Zdmd@dAZdmdBdCZdmdDdEZdmdFdGZ dndJdKZ!dndLdMZ"dndNdOZ#dndPdQZ$dndRdSZ%dodVdWZ&dpdZd[Z'dqd^d_Z(drdddeZ)dsdhdiZ*djS )t    )annotations)sqrt)mean)Any)CELL_HEIGHT
CELL_WIDTHg      ?g333333?g333333?sleepg?g?)max_area_cvmax_area_ratiog|?5^?)idlewalk)皙?皙?)r   Q?r   gffffff?      ?)min_area_ratiomin_width_ratiogRQ?gffffff?r   gzG?)r   r   r	   max_area_max_min_ratiomax_width_max_min_ratiomax_height_max_min_ratiog
ףp=
?r   g?g?gGz?gHzG?)r   r   min_height_ratior	   r   r   r   g?gQ?)	r   r   max_width_ratior   max_height_ratior	   r   r   r   gffffff?gffffff?gQ?)r
   r   r   r   r	   r   r   r   g?g?gffffff?g=
ףp=?r   )width_max_min_ratioheight_max_min_ratio)r   r   r	   r   g
ףp=
?)r   r   r	   r   g)\(?frame_qadict[str, Any]returnc                 C  s  g }i }d}t  }| dg D ]}t|dd}dd |dg D }t||d}g }	d}
t|d	t}t|d
t}t||d}|d dkrZ|d |krZ|sZd}
|	d |	d |d dkrt|d |krt|std}
|	d |	d t
|}|r|d dkrt|dd}t|dd}|dkr|d |kr|sd}
|	d |	d |dkr|d |krt||dsd}
|	d |	d ||
|	d|}|| |||< |o|
}q|dpi }|d}|d}|d}t|ttfr|dkrt D ]\}\}}||}|sqt|dpdt| }||d < ||g|d!< t|ttfrG|dkrGt|dp?dt| |d"< t|ttfrd|dkrdt|dp\dt| |d#< ||k rst|||d$rsq||krt|||d$rq||k s||krd|d%< |d& d' |	d( d}q|t|i d)td*td+td,td-td.d/d0 t D d1td2td3td4td5td6td7t
d8td9td:t|d;S )<NTrowsaction c                 S  s   g | ]	}t |tr|qS  )
isinstancedict).0framer!   r!   G/opt/sixxie/releases/current/services/pet_builder/size_proportion_qa.py
<listcomp>s   s    z-evaluate_size_proportions.<locals>.<listcomp>frames)r   r(   r	   r
   r   metricsframe_count   area_cvFrow_area_cv_too_highrow_area_unstablearea_max_min_ratiorow_area_max_min_ratio_too_highr           r   r    row_width_max_min_ratio_too_highrow_dimension_unstable!row_height_max_min_ratio_too_high)r   okreasonssitavg_display_areaavg_display_widthavg_display_heightrelative_to_sit_arearelative_to_sit_allowed_rangerelative_to_sit_widthrelative_to_sit_heightr   rowratior6   r7   !relative_to_sit_area_out_of_range!relative_action_size_out_of_rangebase_runtime_scaleaction_display_scalesmax_row_area_cvmax_row_area_ratioaction_row_stability_limitssit_relative_area_rangesc                 S  s   i | ]\}\}}|||gqS r!   r!   )r$   r   lowerupperr!   r!   r&   
<dictcomp>   s    
z-evaluate_size_proportions.<locals>.<dictcomp>relative_area_pose_exceptionsidle_near_sit_width_exceptionidle_front_sit_narrow_exception idle_standing_sit_area_exception idle_compact_sit_upper_exception walk_compact_sit_upper_exception!action_dimension_stability_ranges$idle_pose_height_variation_exception#idle_tail_width_variation_exception"tail_wag_width_variation_exception)r6   failure_reasonspolicyr   ) setgetstr_row_size_metrics_action_stability_limitMAX_ROW_AREA_CVMAX_ROW_AREA_RATIO'_tail_width_variation_exception_appliesappendadd!ACTION_DIMENSION_STABILITY_RANGESfloat-_idle_pose_height_variation_exception_appliesr"   intSIT_RELATIVE_AREA_RANGESitems%_relative_area_pose_exception_applies&_relative_area_upper_exception_appliessortedBASE_RUNTIME_SCALEACTION_DISPLAY_SCALESACTION_ROW_STABILITY_LIMITSRELATIVE_AREA_POSE_EXCEPTIONSIDLE_NEAR_SIT_WIDTH_EXCEPTIONIDLE_FRONT_SIT_NARROW_EXCEPTION IDLE_STANDING_SIT_AREA_EXCEPTION IDLE_COMPACT_SIT_UPPER_EXCEPTION WALK_COMPACT_SIT_UPPER_EXCEPTION$IDLE_POSE_HEIGHT_VARIATION_EXCEPTION#IDLE_TAIL_WIDTH_VARIATION_EXCEPTION"TAIL_WAG_WIDTH_VARIATION_EXCEPTION)r   r   row_by_actionr6   rX   
source_rowr   r(   r*   r7   row_okr	   r
   tail_width_exceptiondimension_limitsr   r   rA   sit_rowsit_area	sit_width
sit_heightrK   rL   rB   r!   r!   r&   evaluate_size_proportionsk   s   














  

r   r   r\   keyfallbackre   c                 C  s    t | i }|||}t|S )N)ro   r[   re   )r   r   r   action_limitsvaluer!   r!   r&   r^      s   r^   r*   boolc                 C  \   | dkrdS |d t td ko-|d t td ko-|d t td ko-|d	 t td
 kS )Nr   Fr   r   r   r   r-   r	   r0   r   )re   rv   r)   r!   r!   r&   rf         rf   c                 C  r   )Nr   Fr   r   r   r   r-   r	   r0   r   )re   rw   r)   r!   r!   r&   ,_idle_tail_width_variation_exception_applies   r   r   c                 C  r   )Ntail_wagFr   r   r   r   r-   r	   r0   r   )re   rx   r)   r!   r!   r&   +_tail_wag_width_variation_exception_applies   r   r   c                 C  s   t | |dpt| |dS )Nr)   )r   r   r)   r!   r!   r&   ra      s   
ra   rA   rB   c                 C  s   t | }|r/t|dd}t|dd}|d}||kr/t|ttfr/t||kr/dS t| ||dpCt| ||dpCt| ||dS )Nr   r2   r   r>   Tr@   )rp   r[   re   r"   rg   &_idle_near_sit_width_exception_applies(_idle_front_sit_narrow_exception_applies)_idle_standing_sit_area_exception_applies)r   rA   rB   	exceptionr   r   width_ratior!   r!   r&   rj      s   

rj   c                 C  s   | dkrdS | d}|ttd ko_t|ttfo_t|ttd ko_t| dp+dttd ko_t| d	p:dttd
 ko_t| dpIdttd ko_t| dpXdttd kS )Nr   Fr>   r   r   r-   r2   r	   r0   r   r   r   r   r   )r[   re   rq   r"   rg   )r   rA   rB   r   r!   r!   r&   r     s,   



r   c                 C  s   | dkrdS | d}| d}|ttd kout|ttfout|ttd kout|ttfout|ttd kout| dpAd	ttd
 kout| dpPd	ttd kout| dp_d	ttd kout| dpnd	ttd kS )Nr   Fr>   r?   r   r   r   r-   r2   r	   r0   r   r   r   r   r   )r[   re   rr   r"   rg   r   rA   rB   r   height_ratior!   r!   r&   r   %  s6   





r   c                 C  s  | dkrdS | d}| d}|ttd kot|ttfot|ttd kot|ttd kot|ttfot|ttd kot|ttd	 kot| d
pUdttd kot| dpddttd kot| dpsdttd kot| dpdttd kS )Nr   Fr>   r?   r   r   r   r   r   r-   r2   r	   r0   r   r   r   r   r   )r[   re   rs   r"   rg   r   r!   r!   r&   r   :  s>   





r   c                 C  s0   | dkrt ||tdS | dkrt ||tdS dS )Nr   )rA   rB   r   r   F)$_compact_sit_upper_exception_appliesrt   ru   r@   r!   r!   r&   rk   Q  s   rk   r   dict[str, float]c                 C  s   |  d}|  d}|t|d koyt|ttfoyt|t|d koyt|t|d koyt|ttfoyt|t|d koyt|  dpEdt|d	 koyt|  d
pTdt|d koyt|  dpcdt|d koyt|  dprdt|d kS )Nr>   r?   r
   r   r   r   r-   r2   r	   r0   r   r   r   r   r   )r[   re   r"   rg   )rA   rB   r   r   r   r!   r!   r&   r   a  s*   

	r   r(   list[dict[str, Any]]c                 C  s  g }|D ]J}t |\}}}|dks|dkrq|dkr#t||d\}}n	t|t|}}ttt| d }	||	 }
||	 }||d||
||
| d qdd |D }d	d |D }d
d |D }|rjt|nd}|rrt|nd}|rzt|nd}|rt|nd}t	|dd |D |rt
t|dnd|rt
t|dndt
|d|rt
|| dnd|rt
t|tt|d dnd|rt|rt
|t| dnd|rt|rt
|t| dnd|rt
t|tt|d dnd|rt
t|tt|d ddS ddS )Nr   source_bbox)widthheightr   r%   r%   metric_sourcedisplay_widthdisplay_heightdisplay_areac                 S     g | ]}t |d  qS )r   re   r$   itemr!   r!   r&   r'         z%_row_size_metrics.<locals>.<listcomp>c                 S  r   )r   r   r   r!   r!   r&   r'     r   c                 S  r   )r   r   r   r!   r!   r&   r'     r   r2   c              
   S  sN   g | ]#}|d  |d t t|d dt t|d dt t|d ddqS )r%   r   r      r   r   r   )roundre   r   r!   r!   r&   r'     s    r      )r+   display_framesr:   r;   r9   r-   r0   width_cv	height_cvr   r   )_frame_metric_size_fit_source_bbox_size_to_cellre   rm   rn   r[   rb   r   _population_stdlenr   maxmin)r   r(   display_sizesr%   r   r   r   fitted_widthfitted_heightruntime_scaler   r   areaswidthsheightsavg_areaarea_std	width_std
height_stdr!   r!   r&   r]   w  sT   	
"  " r]   r%   tuple[int, int, str]c                 C  s  |  d}t|tr3t|dkr3tdt|d t|d  d tdt|d t|d  d dfS |  d}|  d}t|ttfrZt|ttfrZtdt|tdt|d	fS |  d
}t|trt|dkrtdt|d t|d  d tdt|d t|d  d d
fS dS )Nfitted_bbox   r   r   r,      r   r   fitted_dimensionsr   )r   r   missing)r[   r"   listr   r   rg   re   )r%   r   r   r   bboxr!   r!   r&   r     s"   
  


  r   r   rg   r   tuple[float, float]c                 C  sH   t td }t td }t|t| d |t|d d}| | || fS )NgzG?r,   r   )rg   r   r   r   r   )r   r   	max_width
max_heightscaler!   r!   r&   r     s    r   valueslist[float]c                   s2   | sdS t |  tt fdd| D t|  S )Nr2   c                 3  s    | ]	}|  d  V  qdS )r   Nr!   )r$   r   avgr!   r&   	<genexpr>  s    z"_population_std.<locals>.<genexpr>)r   r   sumr   )r   r!   r   r&   r     s   "r   N)r   r   r   r   )r   r\   r   r\   r   re   r   re   )r   r\   r*   r   r   r   )r   r\   rA   r   rB   re   r   r   )rA   r   rB   re   r   r   r   r   )r   r\   r(   r   r   r   )r%   r   r   r   )r   rg   r   rg   r   r   )r   r   r   re   )+
__future__r   mathr   
statisticsr   typingr   !services.pet_builder.action_atlasr   r   rm   r_   r`   ro   rn   rh   rp   rq   rr   rs   rt   ru   rd   rv   rw   rx   r   r^   rf   r   r   ra   rj   r   r   r   rk   r   r]   r   r   r   r!   r!   r!   r&   <module>   s    	


g











5
