
    j                         d dl Zd dlmc mZ d dlZd dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZ dded	efd
Zd Zd Zd Zd Zd ZdS )    N)Path)build_asset_planwrite_asset_plans)build_mechanism_shot_plan)build_render_manifest)PILOT_IDEASbuild_mechanism_explainer&ai-004-stop-asking-ai-to-think-for-younamereturnc                 |    t          d          |  dz  }t          j        |                    d                    S )Nz(data/render_manifests/testbatch_002_top3.jsonutf-8encoding)r   jsonloads	read_text)r   paths     O/home/agent/jarvis_runtime/autoshortsbot/AutoShortsBot/tests/test_asset_plan.py	_manifestr   
   s9    :;;nnnLD:dnngn66777    c                  h   t                      } t          |           }|d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d         d	         }d
}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d         }t          |          }d}||k    }	|	st          j        d|	fd||f          dt          j	                    v st          j
        t                    rt          j        t                    ndt          j        |          t          j        |          t          j        |          dz  }
dd|
iz  }t          t          j        |                    d x}x}x}	}d |d         D             }d}||v }|st          j        d|fd||f          t          j        |          dt          j	                    v st          j
        |          rt          j        |          nddz  }dd|iz  }t          t          j        |                    d x}}d}||v }|st          j        d|fd||f          t          j        |          dt          j	                    v st          j
        |          rt          j        |          nddz  }dd|iz  }t          t          j        |                    d x}}d}||v }|st          j        d|fd||f          t          j        |          dt          j	                    v st          j
        |          rt          j        |          nddz  }dd|iz  }t          t          j        |                    d x}}d}||v}|st          j        d|fd||f          t          j        |          dt          j	                    v st          j
        |          rt          j        |          nddz  }dd|iz  }t          t          j        |                    d x}}d |d         D             }t          |          }|sd d!t          j	                    v st          j
        t                    rt          j        t                    nd!t          j        |          t          j        |          d"z  }t          t          j        |                    d x}}d# |d         D             }t          |          }|sd d!t          j	                    v st          j
        t                    rt          j        t                    nd!t          j        |          t          j        |          d"z  }t          t          j        |                    d x}}d S )$Nschema_versionasset_plan.v2==z%(py1)s == %(py4)spy1py4assert %(py6)spy6videoidzai-004scenes   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)slen)py0py2r!   py7assert %(py9)spy9c                     g | ]
}|d          S 
asset_mode .0scenes     r   
<listcomp>zWtest_build_asset_plan_replaces_static_cards_with_moving_asset_modes.<locals>.<listcomp>       ===UU< ===r   cinematic_ai_videoinz%(py1)s in %(py3)smodesr    py3assert %(py5)spy5screen_recording_simulationkinetic_text_overlaystatic_card)not in)z%(py1)s not in %(py3)sc              3   &   K   | ]}|d          V  dS )motion_directiveNr1   r2   s     r   	<genexpr>zVtest_build_asset_plan_replaces_static_cards_with_moving_asset_modes.<locals>.<genexpr>   s(      EEUu'(EEEEEEr   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}allr)   r*   r!   c              3   &   K   | ]}|d          V  dS )overlay_textNr1   r2   s     r   rF   zVtest_build_asset_plan_replaces_static_cards_with_moving_asset_modes.<locals>.<genexpr>   s'      AAu^$AAAAAAr   )r   r   
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationr(   @py_builtinslocals_should_repr_global_namerH   )manifestplan@py_assert0@py_assert3@py_assert2@py_format5@py_format7@py_assert1@py_assert6@py_assert5@py_format8@py_format10r;   @py_format4@py_format6s                  r   Ctest_build_asset_plan_replaces_static_cards_with_moving_asset_modesrb      s   {{HH%%D !4_4!_4444444444!_44444!4444_444444444444444444444444444=*(*(**********(*********(***************************H~#3~#!#!##########!############3#####3######~########!#############################==d8n===E(5((((((((((5((((((((((((((((5(((((5((((((((((((((((((((((((((((1(E1111111111(E11111(11111111111E11111E111111111111111111111111111!*!U**********!U*****!***********U*****U***************************%=%%%%%%%%%%=%%%%%=%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%EEd8nEEEE3EEEEEEEEEEEEEEEE3EEEEE3EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAA$x.AAAA3AAAAAAAAAAAAAAAA3AAAAA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr   c                     t                      } t          |           }d |d         D             }|sedddt          j                    v st	          j        |          rt	          j        |          ndiz  }t          t	          j        |                    |D ]p}|d         }|d         }d}||k    }|slt	          j	        d	|fd
||f          t	          j        |          t	          j        |          dz  }	dd|	iz  }
t          t	          j        |
                    d x}x}}|d         }d}||u }|slt	          j	        d|fd||f          t	          j        |          t	          j        |          dz  }	dd|	iz  }
t          t	          j        |
                    d x}x}}d}|j
        } |            }||v }|st	          j	        d|fd||f          t	          j        |          dt          j                    v st	          j        |          rt	          j        |          ndt	          j        |          t	          j        |          dz  }dd|iz  }t          t	          j        |                    d x}x}x}}d}|j
        } |            }||v }|st	          j	        d|fd||f          t	          j        |          dt          j                    v st	          j        |          rt	          j        |          ndt	          j        |          t	          j        |          dz  }dd|iz  }t          t	          j        |                    d x}x}x}}d}|j
        } |            }||v }|st	          j	        d|fd||f          t	          j        |          dt          j                    v st	          j        |          rt	          j        |          ndt	          j        |          t	          j        |          dz  }dd|iz  }t          t	          j        |                    d x}x}x}}d}|d         }|j
        } |            }||v }|st	          j	        d|fd||f          t	          j        |          t	          j        |          t	          j        |          t	          j        |          dz  }dd |iz  }t          t	          j        |                    d x}x}x}x}}|d!         }d"}||k    }|slt	          j	        d#|fd$||f          t	          j        |          t	          j        |          dz  }	dd|	iz  }
t          t	          j        |
                    d x}x}}|d!         }d%}||k    }|slt	          j	        d&|fd'||f          t	          j        |          t	          j        |          dz  }	dd|	iz  }
t          t	          j        |
                    d x}x}}rd S )(Nc                 *    g | ]}|d          dk    |S )r0   r7   r1   r2   s     r   r5   zatest_cinematic_ai_video_scenes_have_provider_ready_prompts_without_baked_text.<locals>.<listcomp>%   s(    bbb5eL6IMa6a6a6a6a6ar   r&   zassert %(py0)sr)   	cinematicgeneration_promptprovider_familylocal_free_rendererr   r   r   r"   r#   no_text_in_videoT)is)z%(py1)s is %(py4)szcinematic-lookingr8   )zD%(py1)s in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
}prompt)r    r=   r?   r+   r,   r-   zvertical 9:16zpaid ai-video creditszno readable textnegative_prompt)zD%(py1)s in %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.lower
}()
})r    r!   r#   py8zassert %(py10)spy10duration_seconds   )>=)z%(py1)s >= %(py4)s   <=)z%(py1)s <= %(py4)s)r   r   rQ   rR   rL   rS   rN   rO   rP   rM   lower)rT   rU   re   @py_format1r4   rk   rV   rW   rX   rY   rZ   @py_assert4r\   r^   r_   r]   @py_assert7@py_format9@py_format11s                      r   Mtest_cinematic_ai_video_scenes_have_provider_ready_prompts_without_baked_textr{       sU   {{HH%%DbbDNbbbI99 	. 	.*+&'@+@@'+@@@@@@@@@@@'+@@@@@@'@@@@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@'(0D0(D0000000000(D00000(0000D000000000000000000000000000"4fl4llnn4"n4444444444"n44444"44444444444f44444f444444l4444n444444444444444444444444444440&,0,,..0.0000000000.0000000000000000&00000&000000,0000.00000000000000000000000000000&8&,8,,..8&.8888888888&.88888&88888888888&88888&888888,8888.88888888888888888888888888888!EU+<%=E%=%CE%C%C%E%EE!%EEEEEEEEEEE!%EEEEEE!EEEE%=EEEE%CEEEE%EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE'(-A-(A----------(A-----(----A---------------------------'(-A-(A----------(A-----(----A----------------------------	. 	.r   c                  <   t          d          } t          |           }d |d         D             }d}||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j        |          rt          j        |          nddz  }d	d
|iz  }t          t          j	        |                    d x}}d}||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j        |          rt          j        |          nddz  }d	d
|iz  }t          t          j	        |                    d x}}d}||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j        |          rt          j        |          nddz  }d	d
|iz  }t          t          j	        |                    d x}}|j
        }d} ||          }	d}
|	|
k    }|st          j        d|fd|	|
f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |	          t          j        |
          dz  }dd|iz  }t          t          j	        |                    d x}x}x}	x}}
|d         d         }d}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}d S )N3attention-002-the-algorithm-does-not-need-you-happyc                     g | ]
}|d          S r/   r1   r2   s     r   r5   zgtest_attention_design_asset_plan_uses_broll_and_screen_recording_not_text_slideshow.<locals>.<listcomp>8   r6   r   r&   r7   r8   r:   r;   r<   r>   r?   r@   animated_cardrA      rs   )zK%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} <= %(py9)s)r)   r*   r!   r#   r-   zassert %(py11)spy11final_render_strategystatic_card_limitr   r   r   r   r"   r#   )r   r   rL   rM   rN   rQ   rR   rS   rO   rP   count)rT   rU   r;   rV   rX   r`   ra   r[   rW   r]   @py_assert8rx   r_   @py_format12rY   rZ   s                   r   Stest_attention_design_asset_plan_uses_broll_and_screen_recording_not_text_slideshowr   3   sU   NOOHH%%D==d8n===E(5((((((((((5((((((((((((((((5(((((5((((((((((((((((((((((((((((1(E1111111111(E11111(11111111111E11111E111111111111111111111111111#?e##########?e#####?###########e#####e###########################;3-3;;-..3!3.!3333333333.!3333333333335333335333333;3333-3333.3333!3333333333333333333333333333333'()<=BB=BBBBBBBBBB=BBBBB=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBr   c                 r   t                      t          d          g}t          ||           }t          |          }d}||k    }|st          j        d|fd||f          dt          j                    v st          j        t                    rt          j        t                    nddt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }dd	|iz  }t          t          j
        |                    d x}x}}d
 |D             }t          |          }	|	sddt          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |	          dz  }
t          t          j
        |
                    d x}}	t          j        |d                             d                    }|d         }d}	||	k    }|slt          j        d|fd||	f          t          j        |          t          j        |	          dz  }
dd|
iz  }t          t          j
        |                    d x}x}}	|d         d         d         }d}	||	k    }|slt          j        d|fd||	f          t          j        |          t          j        |	          dz  }
dd|
iz  }t          t          j
        |                    d x}x}}	d S )Nr}   r   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr(   paths)r)   r    r=   r#   zassert %(py8)srm   c              3   ,   K   | ]}|j         d k    V  dS )r   N)suffix)r3   r   s     r   rF   z<test_write_asset_plans_outputs_json_files.<locals>.<genexpr>F   s)      88$t{g%888888r   rG   rH   rI   r   r   r   r   r   r   r   r"   r#   r&   scene_idscene_01)r   r   r(   rL   rM   rQ   rR   rS   rN   rO   rP   rH   r   r   r   )tmp_path	manifestsr   rX   r]   rw   rZ   ry   r[   rW   rY   payloadrV   s                r   )test_write_asset_plans_outputs_json_filesr   @   s   i(]^^_Ii22Eu:::?:33uu:88%88883888888888888888838888838888888888888888888888888888888jq++W+==>>G#$77$7777777777$77777$77777777777777777777777777777778Q
+9z9+z9999999999+z99999+9999z99999999999999999999999999999r   c                     t          t          d                   } t          t          |                     }t	          |          }d |d         D             }g d}||k    }|st          j        d|fd||f          dt          j                    v st          j	        |          rt          j
        |          ndt          j
        |          dz  }d	d
|iz  }t          t          j        |                    d x}}|d         d         d         }d}	||	k    }|slt          j        d|fd||	f          t          j
        |          t          j
        |	          dz  }
dd|
iz  }t          t          j        |                    d x}x}}	|d         d         }|d         }d}	||	k    }|slt          j        d|fd||	f          t          j
        |          t          j
        |	          dz  }
dd|
iz  }t          t          j        |                    d x}x}}	g }d}|d         }||v }|}|sd}|d         }||v }|}|st          j        d|fd||f          t          j
        |          t          j
        |          dz  }dd|iz  }|                    |           |s`t          j        d|fd||f          t          j
        |          t          j
        |          dz  }dd |iz  }|                    |           t          j        |d!          i z  }d"d#|iz  }t          t          j        |                    d x}x}x}x}x}x}x}}d S )$Nr   c                     g | ]
}|d          S r/   r1   r2   s     r   r5   zUtest_asset_plan_maps_mechanism_manifest_to_motion_explainer_modes.<locals>.<listcomp>R   r6   r   r&   )r7   r7   mechanism_animationr   rA   r   )z%(py0)s == %(py3)sr;   )r)   r=   r>   r?   r   preferred_mixr   r   r   r   r"   r#   rg   rh   u   Röntgenrf   zx-rayr8   )z%(py3)s in %(py6)s)r=   r#   z%(py8)srm   )z%(py11)s in %(py14)s)r   py14z%(py16)spy16   zassert %(py19)spy19)r	   r   r   r   r   rL   rM   rQ   rR   rS   rN   rO   rP   append_format_boolop)	explainerrT   rU   r;   rX   r[   r`   ra   rV   rW   rY   rZ   mechanism_scener]   rw   @py_assert10@py_assert13@py_assert12ry   @py_format15@py_format17@py_format18@py_format20s                          r   Atest_asset_plan_maps_mechanism_manifest_to_motion_explainer_modesr   L   s   )+a.99I$%>y%I%IJJHH%%D==d8n===E   5         5                                             '(9:OPUTUUPTUUUUUUUUUUUPTUUUUUUPUUUUTUUUUUUUUUUUUUUUUUUUUUUUUUUUU8nQ'O,-F1FF-1FFFFFFFFFFF-1FFFFFF-FFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFpp:p)<=p:==ppppppO\oLppLpApppppppppppp:=ppppp:pppp=pppppppppppppppppppppppppppLppppppppppLppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppr   )r
   )builtinsrQ   _pytest.assertion.rewrite	assertionrewriterL   r   pathlibr   autoshorts.asset_planr   r   autoshorts.mechanism_pipeliner   autoshorts.render_manifestr   autoshorts.retention_studior   r	   strdictr   rb   r{   r   r   r   r1   r   r   <module>r      s                       E E E E E E E E C C C C C C < < < < < < N N N N N N N N8 8C 8t 8 8 8 8
B B B". . .&
C 
C 
C	: 	: 	:q q q q qr   