
    ni                     B    S SK rS SKrS SKJr  S SKJr   " S S\5      r	g)    N)Loggerc                       \ rS rSrSrSrSr " S S\5      rSS\	R                  4S	 jrS
 rS rS rS rS rS rS rS rS rS rS rSrg)
Normalizer   iP  r   c                       \ rS rSrS rSrg)Normalizer.Group   c                     Xl         X l        g Nidindices)selfr   r   s      f/home/james-whalen/.local/lib/python3.13/site-packages/pybullet_envs/deep_mimic/learning/normalizer.py__init__Normalizer.Group.__init__   s    gl    r   N)__name__
__module____qualname____firstlineno__r   __static_attributes__ r   r   Groupr	      s    r   r   Ng{Gz?c                    X0l         X@l        [        R                  " U5      U l        [        R                  " U5      U l        [        R                  " U5      U l        SU l        U R                  U5      U l
        SU l        [        R                  " U R                  5      U l        [        R                  " U R
                  5      U l        g Nr   )epsclipnpzerosmeanmean_sqonesstdcount_build_groupsgroups	new_count
zeros_likenew_sum
new_sum_sq)r   size
groups_idsr   r   s        r   r   Normalizer.__init__   s    HIDI88D>DLwwt}DHDJ$$Z0DKDN==+DLmmDLL1DO
r   c                 x   U R                  5       n[        U[        R                  5      nU(       d   US:X  d   e[        R                  " U//5      nUR
                  S   U:X  d7   [        R                  " SR                  X!R
                  S   5      5      5       e[        R                  " USU/5      nU =R                  UR
                  S   -  sl
        U =R                  [        R                  " USS9-  sl        U =R                  [        R                  " [        R                  " U5      SS9-  sl        g )N   r   z<Normalizer shape mismatch, expecting size {:d}, but got {:d}r   )axis)get_size
isinstancer    ndarrayarrayshaper   print2formatreshaper)   r+   sumr,   square)r   xr-   is_arrays       r   recordNormalizer.record#   s    ==?D!RZZ(Haii
((QC5/a772;$ pT[[\`bibijlbmnop


1r4j!ANNaggaj NLLBFF11%%LOOrvvbiil33O
r   c                    [         R                  " U R                  5      n[         R                  " U R                  5      n[         R                  " U R                  5      nU R
                  U-   nU R
                  U R                  -  X@R                  -  :w  a0  U R                  5       (       d   [        R                  " S5      5       eUS:  Ga   U R                  X!-  U R                  5      nU R                  X1-  U R                  5      n[        U R
                  5      U-  n[        U5      U-  nXpR                  -  X-  -   U l        XpR                  -  X-  -   U l        X@l        U R                  U R                  U R                  5      U l        SU l        U R                  R!                  S5        U R                  R!                  S5        g )Nz$Normalizer parameters desynchronizedr   )MPIUtil
reduce_sumr)   r+   r,   r&   CHECK_SYNC_COUNTcheck_syncedr   r8   _process_group_datar"   r#   floatcalc_stdr%   fill)	r   r)   r+   r,   	new_totalnew_meannew_mean_sqw_oldw_news	            r   updateNormalizer.update3   sd   ""4>>2I  .G##DOO4J

Y&I

d+++y<Q<Q/QQ  W&--0V"WW 1}))'*=tyyIh,,Z-CT\\RkDJJ)+eI*e))#e&66di\\)E,??dljtyy$,,7dhdn
ll
oo1
r   c                 .    U R                   R                  $ r   )r"   r-   )r   s    r   r3   Normalizer.get_sizeM   s    99>>r   c           
      :   U R                  5       n[        U[        R                  5      =(       a    [        U[        R                  5      nU(       d6  US:X  d   e[        R                  " U/5      n[        R                  " U/5      n[        U5      U:X  a  [        U5      U:X  d>   [        R                  " SR                  U[        U5      [        U5      5      5      5       eXl	        X l
        U R                  U R                  U R                  5      U l        g )Nr1   zENormalizer shape mismatch, expecting size {:d}, but got {:d} and {:d})r3   r4   r    r5   r6   lenr   r8   r9   r"   r%   calc_mean_sqr#   )r   r"   r%   r-   r>   s        r   set_mean_stdNormalizer.set_mean_stdP   s    ==?D$

+K
3

0KHaiiXXtfdHHcUOct9ST!1 A]ddeiknosktvyz}v~  	AA1 IH$$TYY9DL
r   c                     XR                   -
  U R                  -  n[        R                  " X R                  * U R                  5      nU$ r   )r"   r%   r    r   )r   r=   norm_xs      r   	normalizeNormalizer.normalizea   s5    ))mtxx'FWWViiZ3FMr   c                 <    XR                   -  U R                  -   nU$ r   )r%   r"   )r   rY   r=   s      r   unnormalizeNormalizer.unnormalizef   s    DII%AHr   c                     U[         R                  " U5      -
  n[         R                  " US5      n[         R                  " U5      n[         R                  " X@R                  5      nU$ r   )r    r<   maximumsqrtr   )r   r"   r#   varr%   s        r   rH   Normalizer.calc_stdj   sH    
BIIdO
#C
**S!
C
''#,C
**S((
#CJr   c                 p    [         R                  " U5      [         R                  " U R                  5      -   $ r   )r    r<   r"   )r   r"   r%   s      r   rU   Normalizer.calc_mean_sqr   s"    99S>BIIdii000r   c                    Sn[         R                  " 5       (       aD  [        R                  " U R                  U R
                  /5      n[         R                  " U5        U$ [        R                  " U R                  U R
                  /5      n[        R                  " U5      n[         R                  " U5        X4:H  R                  5       nU$ )NT)	rB   is_root_procr    concatenater"   r#   bcast
empty_likeall)r   syncedvars
vars_local	vars_roots        r   rE   Normalizer.check_syncedu   s    F^^TYY56dmmD M	 >>499dll";<j--
+immI',,.fMr   c                    / nUco  U R                   n[        R                  " U R                  5       5      R	                  [        R
                  5      nUR                  U R                  X45      5        U$ [        R                  " U5      nU H[  n[        R                  " X:H  5      S   R	                  [        R
                  5      nUR                  U R                  Xd5      5        M]     U$ r   )
NORM_GROUP_SINGLEr    aranger3   astypeint32appendr   uniquenonzero)r   r.   r(   curr_id	curr_listidsr   s          r   r'   Normalizer._build_groups   s    F&&g))DMMO,33BHH=immDJJw23 M IIj!c"JJz/03::288D	djj/0  Mr   c                 P   UR                  5       nU R                   H  nUR                  U R                  :X  a  X$R                     X4R                  '   M9  UR                  U R
                  :w  d  MU  [        R                  " XR                     5      nXSUR                  '   M     U$ r   )copyr(   r   NORM_GROUP_NONEr   rr   r    r"   )r   new_dataold_data	proc_datagroupavgs         r   rF   Normalizer._process_group_data   s{    I	T))	)#+MM#:	-- 88t---ggh}}-.#&%--   r   )
r   r&   r   r(   r"   r#   r)   r+   r,   r%   )r   r   r   r   rD   rr   r   objectr   r    infr   r?   rO   r3   rV   rZ   r]   rH   rU   rE   r'   rF   r   r   r   r   r   r      sj     /f  '+266  4"
1
r   r   )
numpyr    r~   pybullet_utils.mpi_utilmpi_utilrB   pybullet_utils.loggerr   r   r   r   r   r   <module>r      s      ) (P Pr   