ó
    ½ÓGj…<  ã                  ó0  • S SK Jr  S SKrS SKrS SKJr  S SKrS SKrS SK	J
r
  S SKr/ SQr\SS / SQ-   r\SS / SQ-   r/ SQr\\\\\\\S	.rS
 r\
 " S S5      5       rS r      SS jr\R,                  S 5       rS rS r\R,                  S 5       rg)é    )ÚannotationsN)Ú	dataclass)ÚpelvisÚleft_hipÚ	right_hipÚspine1Ú	left_kneeÚ
right_kneeÚspine2Ú
left_ankleÚright_ankleÚspine3Ú	left_footÚ
right_footÚneckÚleft_collarÚright_collarÚheadÚleft_shoulderÚright_shoulderÚ
left_elbowÚright_elbowÚ
left_wristÚright_wristÚ	left_handÚ
right_handé   )Úleft_index1Úleft_index2Úleft_index3Úleft_middle1Úleft_middle2Úleft_middle3Úleft_pinky1Úleft_pinky2Úleft_pinky3Ú
left_ring1Ú
left_ring2Ú
left_ring3Úleft_thumb1Úleft_thumb2Úleft_thumb3Úright_index1Úright_index2Úright_index3Úright_middle1Úright_middle2Úright_middle3Úright_pinky1Úright_pinky2Úright_pinky3Úright_ring1Úright_ring2Úright_ring3Úright_thumb1Úright_thumb2Úright_thumb3)!ÚjawÚleft_eye_smplhfÚright_eye_smplhfr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   )ÚwristÚindex1Úindex2Úindex3Úmiddle1Úmiddle2Úmiddle3Úpinky1Úpinky2Úpinky3Úring1Úring2Úring3Úthumb1Úthumb2Úthumb3©ÚsmplÚsmplxÚsmplxlhÚ	smplxmoyoÚsmplhÚsmplh16Úmanoc                ó”   • U HB  nUR                  U5      nUc  M  [        U5      (       d  M+  UR                  Ul        Xl        MD     g)a¼  Override __module__ on exported objects so Sphinx resolves package-level names.

sphinx-codeautolink uses __module__ to find the docs page for a name. Without this,
e.g. ``BodyModel`` imported from ``smplfitter.pt.bodymodel`` would not link to
``smplfitter.pt.BodyModel``. The original __module__ is saved as ``_module_original_``
so that ``inspect.getsourcefile`` can still find the real source file (see
``module_restored`` in docs/conf.py).
N)ÚgetÚcallableÚ
__module__Ú_module_original_)Úmodule_nameÚmodule_globalsÚ	all_namesÚnameÚobjs        ÚŸC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\smplfitter/common.pyÚ_set_module_for_docsrb   Œ   s<   € ó ˆØ× Ñ  Ó&ˆØ‹?œx¨Ÿ}›}Ø$'§N¡NˆCÔ!Ø(ŽNò	 ó    c                  óÌ   • \ rS rSr% SrS\S'    S\S'    S\S'    S\S'    S\S'    S\S	'    S\S
'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'   Srg)Ú	ModelDataéœ   zºData loaded from a SMPL-family body model file.

This dataclass holds all arrays and metadata needed to instantiate a body model
in any backend (NumPy, PyTorch, TensorFlow, JAX, Numba).
z
np.ndarrayÚ
v_templateÚ	shapedirsÚposedirsÚJ_regressor_post_lbsÚ
J_templateÚJ_shapedirsÚkid_shapedirÚkid_J_shapedirÚweightsz	list[int]Úkintree_parentsÚfacesÚintÚ
num_jointsÚnum_verticesÚvertex_subsetz	list[str]Újoint_names© N)Ú__name__rZ   Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Ú__static_attributes__rw   rc   ra   re   re   œ   s‘   ‡ ñð ÓØ=àÓØAàÓØGà$Ó$ØYàÓØ:àÓØCàÓØFàÓØBàÓØ=ð ÓØ2àÓØ-àƒOØ-àÓØ4àÓØ8àÓÚ0rc   re   c                 óV   • SSK n [        R                  " U R                  S5      S5      $ )z>Return the platform-appropriate default body_models directory.r   NÚ
smplfitterÚbody_models)ÚplatformdirsÚospÚjoinÚuser_data_dir)r�   s    ra   Ú_default_body_models_dirr…   Ô   s!   € ãä�8Š8�L×.Ñ.¨|Ó<¸mÓLÐLrc   c                óV  • Ucg  [         R                  " S5      nUcG  [         R                  " S5      n	U	b  U	 S3nO([        R                  " S5      (       a  SnO
[	        5       nU SU  3n[        5          [        SSSS	9[        S
SSS	9[        S
SSS	9[        S
SSS	9[        SSS9[        SSSS	90 S.n
X
;  a  [        SU  35      eX    nU S:w  a`  US   R                  5       nXË;  aD  U Vs/ s H  nSSSS	.U   PM     nn[        SU SU  SSR                  S U 5       5       S35      eX¼   nU S:X  a  SW S3nO@U S;   a  SW S3nO3U S :X  a  S!W S"3nO&U S#:X  a  [        R                  " WS$5      nOU S:X  a  S%n[        R                  " UW5      n UR                  S5      (       a  [        R                  " U5      nO=[        US&5       n[        5          [        R                  " US'S(9nS S S 5        S S S 5        S S S 5        0 n[        R"                  " WS.   [        R$                  S/9US.'   [        R"                  " US0   [        R$                  S/9US0'   [        R"                  " US1   [        R$                  S/9US1'   ['        US2   [        R(                  5      (       d8  [        R"                  " US2   R+                  5       [        R$                  S/9US2'   O%US2   R-                  [        R$                  5      US2'   [        R"                  " US3   5      US3'   [        R"                  " US   R-                  [        R.                  5      5      US4'   [        R"                  " US5   S   [        R.                  S/9R1                  5       US6'   [3        US6   5      US7'   [3        US1   5      US8'   U R                  5       R5                  S5      (       a„  [         R6                  R                  US95      n [        R                  " U5      R-                  [        R$                  5      nU[        R8                  " USS<9-
  US1   -
  US='   US2   US=   -  US>'   O:[        R:                  " US1   5      US='   [        R<                  " US7   S?45      US>'   S@U;   a*  [        R"                  " US@   [        R$                  S/9US@'   O![        R>                  " SAUS2   US.   5      US@'   SBU;   a*  [        R"                  " USB   [        R$                  S/9USB'   OUS2   US1   -  USB'   US1   [        R>                  " SCUS0   [        R@                  " [        RB                  " [        RD                  " S?[        R$                  S/9US7   SD-
  SD/5      SE/5      5      -
  US1'   Ub¸  U SFU S3n[        RF                  " U5      (       d/  SDSGK$J%n  U" US1   US4   U5      u  nn[        RL                  " UUUSH9  [        R                  " U5      nUSI   nUS4   nU SJU SK3n[        RF                  " U5      (       a  [        R                  " U5      nOUS2   S S 2U4   nUc'  [        RN                  " US8   [        RP                  S/9nO#[        R"                  " U[        RP                  S/9nUc  US4   nUc  US2   n[S        US1   U   US.   US S 2S U24   US0   U   UUSB   US@   S S 2S S 2S U24   US=   U   US>   US3   U   US6   UUS7   [3        U5      U[T        RW                  U / 5      SL9$ s  snf ! , (       d  f       GNF= f! , (       d  f       GNP= f! [          a    [!        S)U S*U  S+U S,U  S-3	5      S ef = f! , (       d  f       GN�= f! [          a    [!        S:U S;35      S ef = f)MNÚSMPLFITTER_BODY_MODELSÚ	DATA_ROOTz/body_modelsr€   Ú/ÚfÚmÚneutral)rŠ   r‹   ÚnÚFEMALEÚMALEÚNEUTRALÚfemaleÚmale)rŠ   r‹   rO   zUnknown model name: rV   r   zGender 'z' is not available for model 'z'. Available: z, c              3  ó8   #   • U  H  n[        U5      v •  M     g 7f©N)Úrepr)Ú.0Úgs     ra   Ú	<genexpr>Úinitialize.<locals>.<genexpr>  s   é € Ð+GºY¸¬D°¯G¨GºYùs   ‚Ú.rP   Úbasicmodel_z_lbs_10_207_0_v1.1.0.pkl)rQ   rR   rS   ÚSMPLX_z.npzrT   ÚSMPLH_z.pklrU   z	model.npzzMANO_RIGHT.pklÚrbÚlatin1)ÚencodingzBody model file not found: z<

Set the body model location using one of:
  1. BodyModel('z', 'z&', model_root='/your/path/body_models/a‘  ')
  2. export SMPLFITTER_BODY_MODELS=/your/path/body_models
  3. export DATA_ROOT=/your/path   (looks for $DATA_ROOT/body_models/)

Download models: python -m smplfitter.download
Register first at the relevant site(s):
  https://smpl.is.tue.mpg.de/     (SMPL)
  https://smpl-x.is.tue.mpg.de/   (SMPL-X)
  https://mano.is.tue.mpg.de/     (MANO/SMPL+H)
  https://agora.is.tue.mpg.de/    (kid templates)rh   ©Údtyperi   rg   ÚJ_regressorro   rq   Úkintree_tablerp   rs   rt   zkid_template.npyzKid template not found: z+
Download it: python -m smplfitter.download)Úaxisrm   rn   é   rl   zjv,vcs->jcsrk   z	vcx,x->vcé   éÿÿÿÿz/vertex_subset_)Údecimate)Úi_vertsrq   rª   z#/vertex_subset_joint_regr_post_lbs_z.npy)rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rs   rt   ru   rv   ),ÚosÚgetenvr‚   Úisdirr…   Ú_chumpy_stub_modulesÚdictÚ
ValueErrorÚlowerrƒ   ÚendswithÚnpÚloadÚopenÚscipy_sparse_forward_compatÚpickleÚFileNotFoundErrorÚarrayÚfloat64Ú
isinstanceÚndarrayÚtoarrayÚastypeÚint32ÚtolistÚlenÚ
startswithÚpathÚmeanÚ
zeros_likeÚzerosÚeinsumÚreshapeÚtileÚeyeÚexistsÚdecimation.decimate_body_modelsr©   ÚsavezÚarangeÚint64re   Ú_JOINT_NAMES_BY_MODELrX   )Ú
model_nameÚgenderÚ
model_rootÚ	num_betasÚvertex_subset_sizeru   rq   Újoint_regressor_post_lbsÚbody_models_dirÚ	data_rootÚgender_mapsÚgmapÚkeyÚkÚ	availableÚ
gender_strÚfilenameÚfilepathÚ	smpl_datarŠ   ÚresÚkid_pathÚv_template_smilÚsubset_pathr©   rª   Ú	dec_facesÚvertex_subset_dictÚregressor_paths                                ra   Ú
initializeré   Û   s³  € ð ÑÜŸ)š)Ð$<Ó=ˆØÑ"ÜŸ	š	 +Ó.ˆIØÑ$Ø%. K¨|Ð"<‘Ü—’˜=×)Ñ)Ø"/‘ä":Ó"<�Ø'Ð(¨¨*¨Ð6ˆ
ä	Õ	ä˜3 #¨Ñ3Ü˜H¨°)Ñ<Ü˜h¨&°IÑ>Ü ¨F°iÑ@Ü˜H¨Ñ/Ü˜h¨&°IÑ>Øñ
ˆð Ó(ÜÐ3°J°<Ð@ÓAÐAàÑ&ˆØ˜ÓØ˜‘)—/‘/Ó#ˆCØ‹ÙVZÓ[ÒVZÐQR 8°&¸yÑIÈ!ÔLÑVZ�	Ð[Ü Ø˜v˜hÐ&DÀZÀLð Q"Ø"&§)¡)Ñ+G¹YÓ+GÓ"GÐ!HÈðKóð ð ™ˆJà˜ÓØ$ Z LÐ0HÐI‰HØÐ<Ó<Ø 
˜|¨4Ð0‰HØ˜7Ó"Ø 
˜|¨4Ð0‰HØ˜9Ó$Ü—x’x 
¨KÓ8‰HØ˜6Ó!Ø'ˆHä—8’8˜J¨Ó1ˆð	Ø× Ñ  ×(Ñ(ÜŸGšG HÓ-‘	ä˜( DÔ)¨QÔ0KÕ0MÜ &§¢¨A¸Ñ A�I÷ 1N×)÷S 
 ðx €CÜ—x’x 	¨+Ñ 6¼b¿j¹jÑI€CˆÑÜ—h’h˜y¨Ñ4¼B¿J¹JÑG€Cˆ
�OÜŸš ¨<Ñ!8ÄÇ
Á
ÑK€CˆÑä�i Ñ.´·
±
×;Ñ;ÜŸXšX i°Ñ&>×&FÑ&FÓ&HÔPR×PZÑPZÑ[ˆˆMÒà& }Ñ5×<Ñ<¼R¿Z¹ZÓHˆˆMÑä—X’X˜i¨	Ñ2Ó3€Cˆ	�NÜ—8’8˜I c™N×1Ñ1´"·(±(Ó;Ó<€Cˆ�LÜŸXšX i°Ñ&@ÀÑ&CÌ2Ï8É8ÑT×[Ñ[Ó]€CÐÑÜ˜CÐ 1Ñ2Ó3€CˆÑÜ˜c ,Ñ/Ó0€CˆÑð ×ÑÓ×$Ñ$ V×,Ñ,Ü—7‘7—<‘< 
Ð,>Ó?ˆð	Ü Ÿgšg hÓ/×6Ñ6´r·z±zÓBˆOð œbŸgšg o¸AÑ>Ñ>ÀÀ\ÑARÑRð 	ˆNÑð !$ MÑ 2°S¸Ñ5HÑ HˆÐÒä Ÿmšm¨C°Ñ,=Ó>ˆˆNÑÜ "§¢¨#¨lÑ*;¸QÐ)?Ó @ˆÐÑà˜	Ó!ÜŸXšX i°Ñ&>ÄbÇjÁjÑQˆˆMÒäŸYšY }°c¸-Ñ6HÈ#ÈkÑJZÓ[ˆˆMÑà�yÓ ÜŸHšH Y¨|Ñ%<ÄBÇJÁJÑOˆˆLÒà Ñ.°°\Ñ1BÑBˆˆLÑà˜LÑ)¬B¯IªIØØˆJ‰Ü
�
Š
”2—7’7œ2Ÿ6š6 !¬2¯:©:Ñ6¸¸\Ñ9JÈQÑ9NÐPQÐ8RÓSÐVXÐUYÓZó-ñ €CˆÑð Ñ%Ø#˜ OÐ4FÐ3GÀtÐLˆÜ�zŠz˜+×&Ñ&ÝAá!)¨#¨lÑ*;¸SÀ¹\ÐK]Ó!^ÑˆG�YÜ�HŠH�[¨'¸ÒCÜŸWšW [Ó1ÐØ*¨9Ñ5ˆØ" 7Ñ+ˆØ&˜<Ð'JÐK]ÐJ^Ð^bÐcˆÜ�:Š:�n×%Ñ%Ü')§w¢w¨~Ó'>Ñ$à'*¨=Ñ'9º!¸]Ð:JÑ'KÐ$àÑÜŸ	š	 # nÑ"5¼R¿X¹XÑF‰äŸš ´b·h±hÑ?ˆà�}Ø�G‘ˆàÑ'Ø#& }Ñ#5Ð äØ�|Ñ$ ]Ñ3Ø�kÑ" =²!°Z°i°ZÐ#?Ñ@Ø�Z‘ Ñ/Ø5Ø�|Ñ$Ø˜Ñ&¢qª!¨Z¨i¨ZÐ'7Ñ8Ø˜Ñ(¨Ñ7ØÐ+Ñ,Ø�I‘˜}Ñ-ØÐ-Ñ.ØØ�|Ñ$Ü˜Ó'Ø#Ü)×-Ñ-¨j¸"Ó=ñð ùòq \÷. 1NÖ0Mú×)Ö)ûä ó 	Ü#Ø-¨h¨Zð 8#à#- ,¨d°6°(ð ;6Ø6@°\ð 	BDðEóð ðð	ú÷W 
 Ö	ûôd !ó 	Ü#Ø*¨8¨*ð 5=ð >óð ðð	ús†   Á5A9];Ã.\+ÄB];Æ,]Ç];Ç]Ç]Ç\0Ç1]Ç9]Ï;3^ Ü+];Ü0
\?Ü:]Ý
]	Ý]Ý];Ý]Ý$]8Ý8];Ý;
^
Þ^(c               #  ó  #   • SSK n 0 nS HF  nSU 3n[        R                  R                  U5      X'   U R                  [        R                  U'   MH      Sv •  UR                  5        H=  u  p4Uc"  [        R                  R                  US5        M*  U[        R                  U'   M?     g! UR                  5        H=  u  p4Uc"  [        R                  R                  US5        M*  U[        R                  U'   M?     f = f7f)z©Patch sys.modules so pickles saved with old scipy.sparse submodule paths
(e.g. scipy.sparse.coo.coo_matrix) can still be loaded after SciPy 2.0
removes those submodules.r   N)ÚcooÚcsrÚcsczscipy.sparse.)Úscipy.sparseÚsysÚmodulesrX   ÚsparseÚitemsÚpop)ÚscipyÚsavedr_   Úmod_pathÚold_vals        ra   r¶   r¶   Ž  sÃ   é € ó
 à€EÛ%ˆØ" 4 &Ð)ˆÜŸ+™+Ÿ/™/¨(Ó3ˆ‰Ø %§¡Œ�‰�HÓñ &ð0Ûà!&§¡¦ÑˆHØ‰Ü—‘—‘ ¨$Ö/à(/”—‘˜HÓ%ò	 "/ø §¡¦ÑˆHØ‰Ü—‘—‘ ¨$Ö/à(/”—‘˜HÓ%ò	 "/üs    ‚ADÁB, ÁADÂ,AC?Ã?Dc                ó|   • [        U S5       n[        R                  " U5      sS S S 5        $ ! , (       d  f       g = f)Nrž   )rµ   r·   r´   )rÃ   rŠ   s     ra   Úload_picklerù   ¤  s%   € Ü	ˆd�DÔ	˜QÜ�{Š{˜1‹~÷ 
×	×	ús   �-­
;c                óò   • [        5          [        U 5      S   R                  5       R                  [        R
                  5      nSSS5        WSS2SUR                  S   S-  24   $ ! , (       d  f       N)= f)z9Load a vertex converter sparse matrix from a pickle file.ÚmtxNr§   é   )r¶   rù   Útocsrr¾   r³   Úfloat32Úshape)Úvertex_converter_pathÚ	scipy_csrs     ra   Úload_vertex_converter_csrr  ©  sb   € ä	$Õ	&ÜÐ 5Ó6°uÑ=×CÑCÓE×LÑLÌRÏZÉZÓXˆ	÷ 
'à’QÐ1˜)Ÿ/™/¨!Ñ,°Ñ1Ð1Ð1Ñ2Ð2÷ 
'Õ	&ús   ‹:A(Á(
A6c               #  óÄ  #   • SSK n  " S S5      n " S S5      nU R                  S5      U R                  S5      U R                  S	5      S
.nXS   l        X#S	   l        U Vs0 s H"  oD[        R
                  R                  U5      _M$     nn[        R
                  R                  U5         Sv •  UR                  5        H=  u  pFUc"  [        R
                  R                  US5        M*  U[        R
                  U'   M?     gs  snf ! UR                  5        H=  u  pFUc"  [        R
                  R                  US5        M*  U[        R
                  U'   M?     f = f7f)aI  Register lightweight chumpy stub classes in sys.modules so that pickle files
containing chumpy objects (Ch, Select) can be loaded without installing chumpy.

The official SMPL/SMPL+H/MANO .pkl files store shapedirs as chumpy objects.
These stubs implement just enough to unpickle them and convert to numpy arrays
via np.array().
r   Nc                  ó"   • \ rS rSrSrSS jrSrg)Ú%_chumpy_stub_modules.<locals>._ChStubi»  u3   Stub for chumpy.ch.Ch â€” wraps a numpy array in .xNc                ó@   • [         R                  " U R                  US9$ )Nr¡   )r³   r¹   Úx)Úselfr¢   s     ra   Ú	__array__Ú/_chumpy_stub_modules.<locals>._ChStub.__array__¾  s   € Ü—8’8˜DŸF™F¨%Ñ0Ð0rc   rw   r”   ©rx   rZ   ry   rz   r{   r	  r}   rw   rc   ra   Ú_ChStubr  »  s
   † ÙA÷	1rc   r  c                  ó"   • \ rS rSrSrSS jrSrg)Ú)_chumpy_stub_modules.<locals>._SelectStubiÁ  u@   Stub for chumpy.reordering.Select â€” flat-indexes .a with .idxsNc                óì   • [         R                  " U R                  US9R                  5       U R                     n[        U S5      (       a(  U R                  b  UR                  U R                  5      $ U$ )Nr¡   Úpreferred_shape)r³   r¹   ÚaÚravelÚidxsÚhasattrr  rÈ   )r  r¢   Úresults      ra   r	  Ú3_chumpy_stub_modules.<locals>._SelectStub.__array__Ä  s[   € Ü—X’X˜dŸf™f¨EÑ2×8Ñ8Ó:¸4¿9¹9ÑEˆFÜ�tÐ.×/Ñ/°D×4HÑ4HÑ4TØ—~‘~ d×&:Ñ&:Ó;Ð;ØˆMrc   rw   r”   r  rw   rc   ra   Ú_SelectStubr  Á  s
   † ÙN÷	rc   r  Úchumpyú	chumpy.chúchumpy.reordering)r  r  r  )
ÚtypesÚ
ModuleTypeÚChÚSelectrï   rð   rX   Úupdaterò   ró   )r  r  r  Ústub_modulesrö   rõ   r÷   s          ra   r®   r®   °  s"  é € ó ÷1ñ 1÷ñ ð ×"Ñ" 8Ó,Ø×%Ñ% kÓ2Ø"×-Ñ-Ð.AÓBñ€Lð
 $+�ÑÔ Ø/:Ð$Ñ%Ô,áAMÓNÂ°X”s—{‘{—‘ xÓ0Ò0Á€EÐNÜ‡K�K×Ñ�|Ô$ð0Ûà!&§¡¦ÑˆHØ‰Ü—‘—‘ ¨$Ö/à(/”—‘˜HÓ%ò	 "/ùò Oøð
 "'§¡¦ÑˆHØ‰Ü—‘—‘ ¨$Ö/à(/”—‘˜HÓ%ò	 "/üs,   ‚A"E Á$)DÂ!E Â/D
 Â3AE Ä
AEÅE )NNNNNN)Ú
__future__r   Ú
contextlibr«   Úos.pathrÃ   r‚   r·   rï   Údataclassesr   Únumpyr³   ÚSMPL_JOINT_NAMESÚSMPLH_JOINT_NAMESÚSMPLX_JOINT_NAMESÚMANO_JOINT_NAMESrÐ   rb   re   r…   ré   Úcontextmanagerr¶   rù   r  r®   rw   rc   ra   Ú<module>r+     sþ   ðÝ "ã Û 	Ý Û Û 
Ý !ã òÐ ð6 % S bÐ)ò -ñ Ð ðB % S bÐ)ò "-ñ "Ð òHÐ ð( ØØ Ø"ØØ ØñÐ ò)ð  ÷41ð 41ó ð41ònMð ØØØØ
Ø!ôpðf ×Ññ0ó ð0ò*ò
3ð ×Ññ*0ó ñ*0rc   