§
    ƒØj¿&  ã                   ó¨   — d dl Zd dlmc mZ d dlmZmZ d dlm	Z	m
Z
mZmZmZmZmZ dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zedk    r e¦   «         ZdS dS )é    N)ÚInputÚModel)ÚLayerNormalizationÚ
ActivationÚDropoutÚConv2DÚConv2DTransposeÚAddÚConcatenate©é   r   é   çš™™™™™Ù?c                 ó  — | } t          ¦   «          t          d¦  «        | ¦  «        ¦  «        }  t          |¦  «        | ¦  «        }  t          ||||d¬¦  «        | ¦  «        }  t          ¦   «          t          d¦  «        | ¦  «        ¦  «        }  t          |¦  «        | ¦  «        }  t          ||d|d¬¦  «        | ¦  «        } |dk    r t          |d|d¬¦  «        |¦  «        } t	          ¦   «         | |g¦  «        } | S )zÕConvolutional encoder block of U-net.

    The block is a fully convolutional block. The encoder block does not downsample the input feature,
    and thus the output will have the same dimension as the input.
    ÚreluÚsame)ÚstridesÚdilation_rateÚpadding©r   r   ©r   r   )r   r   r   r   r
   )Úinput_tensorÚchannelÚkernel_sizer   r   Údropout_rateÚskips          ú†/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/oemer/models/unet.pyÚ
conv_blockr      s8  € ð €Dà'Õ%Ñ'Ô'Ð(:­
°6Ñ(:Ô(:¸<Ñ(HÔ(HÑIÔI€LØ(•7˜<Ñ(Ô(¨Ñ6Ô6€Lð•6Ø� g¸]ÐTZðñ ô àñô €Lð (Õ%Ñ'Ô'Ð(:­
°6Ñ(:Ô(:¸<Ñ(HÔ(HÑIÔI€LØ(•7˜<Ñ(Ô(¨Ñ6Ô6€Lð•6Ø� f¸MÐSYðñ ô àñô €Lð �&ÒÐØG�v�g˜v¨wÀÐGÑGÔGÈÑMÔMˆØ•3‘5”5˜,¨Ð-Ñ.Ô.€LàÐó    c                 ó  — | } t          ¦   «          t          d¦  «        | ¦  «        ¦  «        }  t          |¦  «        | ¦  «        }  t          ||dd¬¦  «        | ¦  «        }  t          ¦   «          t          d¦  «        | ¦  «        ¦  «        }  t          |¦  «        | ¦  «        }  t	          |||d¬¦  «        | ¦  «        } |dk    r t	          |d|d¬¦  «        |¦  «        } t          ¦   «         | |g¦  «        } | S )Nr   r   r   r   )r   r   r   r   r	   r
   )r   r   r   r   r   r   s         r   Útranspose_conv_blockr!   *   s  € Ø€Dà'Õ%Ñ'Ô'Ð(:­
°6Ñ(:Ô(:¸<Ñ(HÔ(HÑIÔI€LØ(•7˜<Ñ(Ô(¨Ñ6Ô6€LØO•6˜' ;¸ÈÐOÑOÔOÐP\Ñ]Ô]€Là'Õ%Ñ'Ô'Ð(:­
°6Ñ(:Ô(:¸<Ñ(HÔ(HÑIÔI€LØ(•7˜<Ñ(Ô(¨Ñ6Ô6€LØY•? 7¨KÀÐRXÐYÑYÔYÐZfÑgÔg€Là�&ÒÐØP�˜w¨¸ÈÐPÑPÔPÐQUÑVÔVˆØ•3‘5”5˜,¨Ð-Ñ.Ô.€LàÐr   é   é   r   c                 ó‚  — t          | | dfd¬¦  «        } t          dddd¬¦  «        |¦  «        }t          |dd	d
¬¦  «        }t          |dd	d¬¦  «        }t          |dd	d
¬¦  «        }t          |dd	d¬¦  «        }t          |dd	d¬¦  «        }t          |dd	d
¬¦  «        }	t          |	dd	d¬¦  «        }	t          |	dd	d¬¦  «        }	t          |	dd	d¬¦  «        }	t          |	dd	d
¬¦  «        }
t          |
dd	d¬¦  «        }
t          |
dd	d¬¦  «        }
t          |
dd	d¬¦  «        }
t          |
dd	d¬¦  «        }
|
}t          |¦  «        D �]} t	          ¦   «          t          d¦  «        |¦  «        ¦  «        } t          |¦  «        |¦  «        } t	          ¦   «          t          ddddd¬¦  «        |¦  «        ¦  «        }|}t          |¦  «        D ]Q} t	          ¦   «          t          dd	dd|z  dd¬¦  «        |¦  «        ¦  «        } t          ¦   «         ||g¦  «        }ŒR t          |¦  «        |¦  «        } t          dddd¬¦  «        |¦  «        }�Œ t	          ¦   «          t          d¦  «        |¦  «        ¦  «        } t          dddd¬¦  «        |¦  «        } t          ¦   «         ||
g¦  «        }t          |dd	d
¬¦  «        }|} t	          ¦   «          t          d¦  «        |¦  «        ¦  «        } t          ¦   «         | t	          ¦   «          t          d¦  «        |	¦  «        ¦  «        g¦  «        } t          |¦  «        |¦  «        } t          dddd¬¦  «        |¦  «        } t          ¦   «         ||g¦  «        }t          |dd	d
¬¦  «        }|} t	          ¦   «          t          d¦  «        |¦  «        ¦  «        } t          ¦   «         | t	          ¦   «          t          d¦  «        |¦  «        ¦  «        g¦  «        } t          |¦  «        |¦  «        } t          dddd¬¦  «        |¦  «        } t          ¦   «         ||g¦  «        }t          |dd	d
¬¦  «        }|} t	          ¦   «          t          d¦  «        |¦  «        ¦  «        } t          ¦   «         | t	          ¦   «          t          d¦  «        |¦  «        ¦  «        g¦  «        } t          |¦  «        |¦  «        } t          dddd¬¦  «        |¦  «        } t          ¦   «         ||g¦  «        }t          |dd	d
¬¦  «        } t	          ¦   «          t          d¦  «        |¦  «        ¦  «        } t          |¦  «        |¦  «        } t          |ddddd¬¦  «        |¦  «        }t          ||¬¦  «        S )zFImproved U-net model with Atrous Spatial Pyramid Pooling (ASPP) block.é   Úinput_score_48)ÚshapeÚnameé€   )é   r*   r   r   r   ©r%   r%   r   ©r   r"   r   i   )r   r   Ú
activationr   )r   r   r   r-   ÚsoftmaxÚ
prediction)r   r-   r   r(   ©ÚinputsÚoutputs)r   r   r   Úranger   r   r   r   r
   r!   r   )Úwin_sizeÚmulti_grid_layer_nÚmulti_grid_nÚ	out_classÚdropoutÚinput_scoreÚenÚen_l1Úen_l2Úen_l3Úen_l4ÚfeatureÚ_ÚmÚ
multi_gridÚiiÚde_l1r   Úde_l2Úde_l3Úde_l4Úouts                         r   Úsemantic_segmentationrI   <   s  € å˜x¨°1Ð5Ð<LÐMÑMÔM€KØ	=���f f°fÐ	=Ñ	=Ô	=¸kÑ	JÔ	J€Bå�r˜4 °Ð8Ñ8Ô8€EÝ�u˜d F°FÐ;Ñ;Ô;€Eå�u˜d F°FÐ;Ñ;Ô;€EÝ�u˜d F°FÐ;Ñ;Ô;€EÝ�u˜d F°FÐ;Ñ;Ô;€Eå�u˜d F°FÐ;Ñ;Ô;€EÝ�u˜d F°FÐ;Ñ;Ô;€EÝ�u˜d F°FÐ;Ñ;Ô;€EÝ�u˜d F°FÐ;Ñ;Ô;€Eå�u˜d F°FÐ;Ñ;Ô;€EÝ�u˜d F°FÐ;Ñ;Ô;€EÝ�u˜d F°FÐ;Ñ;Ô;€EÝ�u˜d F°FÐ;Ñ;Ô;€EÝ�u˜d F°FÐ;Ñ;Ô;€Eà€GÝÐ%Ñ&Ô&ð Sñ SˆØ&Õ$Ñ&Ô&Ð'9¥z°&Ñ'9Ô'9¸'Ñ'BÔ'BÑCÔCˆØ"•'˜'Ñ"Ô" 7Ñ+Ô+ˆØ ÕÑ Ô Ð!h¥¨¨f¸fÈfÐagÐ!hÑ!hÔ!hÐipÑ!qÔ!qÑrÔrˆØˆ
Ý˜Ñ%Ô%ð 	8ð 	8ˆBØ$Õ"Ñ$Ô$Øl•�t˜V¨VÀ1ÀbÁ5ÐRXÐekÐlÑlÔlÐmtÑuÔuñô ˆAð '�™œ¨
°A Ñ7Ô7ˆJˆJØ%•W˜WÑ%Ô% jÑ1Ô1ˆ
ØF•&˜˜v¨v¸vÐFÑFÔFÀzÑRÔRˆ‰à"Õ Ñ"Ô"Ð#5¥:¨fÑ#5Ô#5°gÑ#>Ô#>Ñ?Ô?€GàB�f�T˜6¨6¸6ÐBÑBÔBÀ7ÑKÔK€GØ�c‰eŒe�W˜eÐ$Ñ%Ô%€GÝ  ¨$°ÀÐGÑGÔG€Eà€DØ ÕÑ Ô Ð!3¥¨FÑ!3Ô!3°EÑ!:Ô!:Ñ;Ô;€EØ�K‰MŒM˜5Ð"6Õ"4Ñ"6Ô"6Ð7IµzÀ&Ñ7IÔ7IÈ%Ñ7PÔ7PÑ"QÔ"QÐRÑSÔS€EØ�G�GÑÔ˜UÑ#Ô#€EØ@�F�4˜¨¸Ð@Ñ@Ô@ÀÑGÔG€EØ�C‰EŒE�5˜$�-Ñ Ô €EÝ  ¨¨f¸fÐEÑEÔE€Eà€DØ ÕÑ Ô Ð!3¥¨FÑ!3Ô!3°EÑ!:Ô!:Ñ;Ô;€EØ�K‰MŒM˜5Ð"6Õ"4Ñ"6Ô"6Ð7IµzÀ&Ñ7IÔ7IÈ%Ñ7PÔ7PÑ"QÔ"QÐRÑSÔS€EØ�G�GÑÔ˜UÑ#Ô#€EØ@�F�4˜¨¸Ð@Ñ@Ô@ÀÑGÔG€EØ�C‰EŒE�5˜$�-Ñ Ô €EÝ  ¨¨f¸fÐEÑEÔE€Eà€DØ ÕÑ Ô Ð!3¥¨FÑ!3Ô!3°EÑ!:Ô!:Ñ;Ô;€EØ�K‰MŒM˜5Ð"6Õ"4Ñ"6Ô"6Ð7IµzÀ&Ñ7IÔ7IÈ%Ñ7PÔ7PÑ"QÔ"QÐRÑSÔS€EØ�G�GÑÔ˜UÑ#Ô#€EØ@�F�4˜¨¸Ð@Ñ@Ô@ÀÑGÔG€EØ�C‰EŒE�5˜$�-Ñ Ô €EÝ  ¨¨f¸fÐEÑEÔE€Eà ÕÑ Ô Ð!3¥¨FÑ!3Ô!3°EÑ!:Ô!:Ñ;Ô;€EØ�G�GÑÔ˜UÑ#Ô#€EØ
l�&�˜F¨F¸yÐRXÐ_kÐ
lÑ
lÔ
lÐmrÑ
sÔ
s€Cå˜¨SÐ1Ñ1Ô1Ð1r   r+   r   c                 ót  —  t          j        |||dt          j        ¬¦  «        | ¦  «        }  t          j        d¦  «         t          j        ¦   «         | ¦  «        ¦  «        } t          j        ||dt          j        ¬¦  «        |¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        } t          j        d¦  «        |¦  «        } t          j        ¦   «         | |g¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        }|S ©Nr   )r   r   Údtyper   ©r   rL   g333333Ó?)	ÚLr   ÚtfÚfloat32r   r   ÚSeparableConv2Dr   r
   ©ÚinpÚkernelsr   r   rH   s        r   Úmy_conv_blockrU   †   s  € Ø
[�!Œ(�7˜K°À&ÕPRÔPZÐ
[Ñ
[Ô
[Ð\_Ñ
`Ô
`€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
S�!Ô
˜G [¸&ÍÌ
Ð
SÑ
SÔ
SÐTWÑ
XÔ
X€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
�!Œ)�C‰.Œ.˜Ñ
Ô
€CØ
�!Œ%‰'Œ'�3˜�*Ñ
Ô
€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ€Jr   c                 ót  —  t          j        |||dt          j        ¬¦  «        | ¦  «        }  t          j        d¦  «         t          j        ¦   «         | ¦  «        ¦  «        } t          j        ||dt          j        ¬¦  «        |¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        } t          j        d¦  «        |¦  «        } t          j        ¦   «         | |g¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        }|S rK   )	rN   r	   rO   rP   r   r   r   r   r
   rR   s        r   Úmy_trans_conv_blockrW   ‘   s  € Ø
d�!Ô
˜G [¸'È6ÕY[ÔYcÐ
dÑ
dÔ
dÐehÑ
iÔ
i€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
J�!Œ(�7˜K°½r¼zÐ
JÑ
JÔ
JÈ3Ñ
OÔ
O€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
�!Œ)�C‰.Œ.˜Ñ
Ô
€CØ
�!Œ%‰'Œ'�3˜�*Ñ
Ô
€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ€Jr   é   r%   c                 ó  — t          j        | | df¬¦  «        } t          j        dddd¬¦  «        |¦  «        }t          |ddd	¬
¦  «        }t          |dd¦  «        }t          |dd¦  «        }t          |ddd	¬
¦  «        }t          |dd¦  «        }t          |dd¦  «        }t          |dd¦  «        }t          |dd¦  «        } t          j        ¦   «         ||g¦  «        }t          |dd¦  «        }t          |dd¦  «        }t          |dd¦  «        }t          |dd¦  «        }t          |dd¦  «        } t          j        ¦   «         ||g¦  «        }t          |ddd	¬
¦  «        } t          j        dddt
          j        ¬¦  «        |¦  «        }	 t          j        d¦  «         t          j        ¦   «         |	¦  «        ¦  «        }	 t          j        ddd	dt
          j        ¬¦  «        |¦  «        }
 t          j        d¦  «         t          j        ¦   «         |
¦  «        ¦  «        }
 t          j        ddddt
          j        ¬¦  «        |¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        } t          j        ddddt
          j        ¬¦  «        |¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        } t          j        ¦   «         |	|
||g¦  «        } t          j	        dddt
          j        ¬¦  «        |¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        }t          |ddd	¬
¦  «        } t          j	        dddt
          j        ¬¦  «        |¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        } t          j        ¦   «         ||g¦  «        }t          |dd¦  «        } t          j	        dddt
          j        ¬¦  «        |¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        } t          j        ¦   «         ||g¦  «        }t          |ddd	¬
¦  «        } t          j	        dddt
          j        ¬¦  «        |¦  «        } t          j        d¦  «         t          j        ¦   «         |¦  «        ¦  «        } t          j        ¦   «         ||g¦  «        }t          |ddd	¬
¦  «        } t          j	        |dddt
          j        ¬¦  «        |¦  «        }t
          j                             ||¬¦  «        S )Nr%   )r'   r)   r+   r   r   )r-   r   é@   r   r,   r"   rM   )r   r   rL   )é   r[   )é   r\   r   r.   )r-   r   rL   r0   )rN   r   rQ   rU   r   rO   rP   r   r   r   rW   Úkerasr   )r4   r7   rS   ÚtensorÚl1r   Úl2Úl3ÚbotÚst1Úst2Úst3Úst4ÚstÚnormÚtl3Útl2Útl1Úout1s                      r   Úu_netrm   œ   s
  € Ý
Œ'˜ 8¨QÐ/Ð
0Ñ
0Ô
0€CØN�QÔ˜s F°vÀvÐNÑNÔNÈsÑSÔS€Få	�v˜r 6°6Ð	:Ñ	:Ô	:€BÝ	�r˜3 Ñ	'Ô	'€BÝ	�r˜3 Ñ	'Ô	'€Bå˜˜S &°&Ð9Ñ9Ô9€DÝ	�t˜S &Ñ	)Ô	)€BÝ	�r˜3 Ñ	'Ô	'€BÝ	�r˜3 Ñ	'Ô	'€BÝ	�r˜3 Ñ	'Ô	'€BØ	�Œ‰Œ˜$ ˜Ñ	$Ô	$€Bå	�r˜3 Ñ	'Ô	'€BÝ	�r˜3 Ñ	'Ô	'€BÝ	�r˜3 Ñ	'Ô	'€BÝ	�r˜3 Ñ	'Ô	'€BÝ	�r˜3 Ñ	'Ô	'€BØ	�Œ‰Œ˜"˜b˜Ñ	"Ô	"€Bå
˜˜C °Ð
8Ñ
8Ô
8€CØ
J�!Ô
˜C °½r¼zÐ
JÑ
JÔ
JÈ3Ñ
OÔ
O€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
`�!Ô
˜C °vÀvÕUWÔU_Ð
`Ñ
`Ô
`ÐadÑ
eÔ
e€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
`�!Ô
˜C °vÀvÕUWÔU_Ð
`Ñ
`Ô
`ÐadÑ
eÔ
e€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
b�!Ô
˜C °xÈÕWYÔWaÐ
bÑ
bÔ
bÐcfÑ
gÔ
g€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ	�Œ‰Œ˜#˜s C¨Ð-Ñ	.Ô	.€BØ	@�Œ�#�v vµR´ZÐ	@Ñ	@Ô	@ÀÑ	DÔ	D€BØ�1Œ<˜ÑÔÐ 6¥Ô 4Ñ 6Ô 6°rÑ :Ô :Ñ;Ô;€DÝ
˜d C¨¸Ð
@Ñ
@Ô
@€Cà
A�!Œ(�3˜¨µb´jÐ
AÑ
AÔ
AÀ#Ñ
FÔ
F€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
�!Œ-‰/Œ/˜3 ˜)Ñ
$Ô
$€CÝ
˜c 3¨Ñ
/Ô
/€Cð B�!Œ(�3˜¨µb´jÐ
AÑ
AÔ
AÀ#Ñ
FÔ
F€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
�!Œ-‰/Œ/˜3 ˜)Ñ
$Ô
$€CÝ
˜c 3¨¸Ð
?Ñ
?Ô
?€Cà
A�!Œ(�3˜¨µb´jÐ
AÑ
AÔ
AÀ#Ñ
FÔ
F€CØ
�!Œ,�vÑ
Ô
Ð5�qÔ3Ñ5Ô5°cÑ:Ô:Ñ
;Ô
;€CØ
�!Œ-‰/Œ/˜3 ˜)Ñ
$Ô
$€CÝ
˜c 3¨¸Ð
?Ñ
?Ô
?€Cà^�1Œ8�I˜v°)ÀVÕSUÔS]Ð^Ñ^Ô^Ð_bÑcÔc€Dõ Œ8�>Š> ¨dˆ>Ñ3Ô3Ð3r   Ú__main__)r   r   r   )r   r   )r"   r   r#   r   r   )r+   r   )rX   r%   )Ú
tensorflowrO   Útensorflow.keras.layersr]   ÚlayersrN   Útensorflow.kerasr   r   r   r   r   r   r	   r
   r   r   r!   rI   rU   rW   rm   Ú__name__rA   © r   r   ú<module>ru      sD  ðØ Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð8ð ð ð ð$G2ð G2ð G2ð G2ðTð ð ð ðð ð ð ðB4ð B4ð B4ð B4ðJ ˆzÒÐØˆ‰Œ€A€A€Að Ðr   