Ë
    FêñiÈ  ã                  ó–   — d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	Z
d dlZd dlmZmZ d dlmZ 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
d„Zy)é    )ÚannotationsN)ÚCallable)ÚPath)ÚAny)ÚLOGGERÚYAML)Úcheck_requirementsc                óÌ  — t         j                  j                  d«      }dt         j                  d<   	 ddlm} ddlm}	 dd	l	m
}
 t        j                  d
|› d�«       t        |«      }|j                  dd¬«        |
| «      } |	||dddd¬«      }|j                  | |||¬«      }|j!                  |||¬«       |› d�dfD ]<  }t        |«      }|j#                  «       sŒ|j%                  ||j&                  z  «       Œ> dh}ddh}|j)                  «       D ]A  }|j+                  «       sŒ|j,                  |vsŒ#|j&                  |vsŒ2|j/                  «        ŒC |�t1        j2                  |dz  |«       |€+t         j                  j5                  dd«       t7        |«      S |t         j                  d<   t7        |«      S # t
        $ r t        dd¬«       ddlm} Y �Œ¨w xY w)aÖ  Convert a YOLO model to Axelera format.

    Args:
        model (torch.nn.Module): Source YOLO model for quantization.
        output_dir (Path | str): Directory to save the exported Axelera model.
        calibration_dataset (torch.utils.data.DataLoader): Calibration dataloader for quantization.
        transform_fn (Callable[[Any], np.ndarray]): Calibration preprocessing transform function.
        model_name (str, optional): Name for the compiled model. Defaults to "model".
        metadata (dict | None, optional): Optional metadata to save as YAML. Defaults to None.
        prefix (str, optional): Prefix for log messages. Defaults to "".

    Returns:
        (str): Path to exported Axelera model directory.
    Ú&PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATIONÚpythonr   )Úcompilerzaxelera-devkit==1.6.0zV--extra-index-url https://software.axelera.ai/artifactory/api/pypi/axelera-pypi/simple)Úcmds)ÚCompilerConfig)Úextract_ultralytics_metadataú
z) starting export with Axelera compiler...T)ÚparentsÚexist_okg      Ð?é   Úbatch)Úmodel_metadataÚ
model_nameÚresources_usedÚaipu_cores_usedÚmulticore_modeÚoutput_axm_format)ÚmodelÚcalibration_datasetÚconfigÚtransform_fn)r   r   Ú
output_dirz.axmzcompiler_config_final.tomlzmetadata.yamlN)ÚosÚenvironÚgetÚaxelerar   ÚImportErrorr	   Úaxelera.compilerr   Ú&axelera.compiler.config.model_specificr   r   Úinfor   ÚmkdirÚquantizeÚcompileÚexistsÚreplaceÚnameÚiterdirÚis_fileÚsuffixÚunlinkr   ÚsaveÚpopÚstr)r   r    r   r   r   ÚmetadataÚprefixÚprev_protobufr   r   r   Úaxelera_model_metadatar   ÚqmodelÚartifactÚartifact_pathÚkeep_suffixesÚ
keep_namesÚfs                      úb/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/ultralytics/utils/export/axelera.pyÚtorch2axelerarA      sð  € ô. —J‘J—N‘NÐ#KÓL€MØ;C„B‡J�JÐ7Ñ8ð%Ý$õ 0ÝSä
‡K�K�"�V�HÐEÐFÔGä�jÓ!€JØ×Ñ˜T¨DÐÔ1á9¸%Ó@ÐÙØ-ØØØØØô€Fð ×ÑØØ/ØØ!ð	 ó €Fð ×Ñ˜6¨&¸ZÐÔHà"�| 4Ð(Ð*FÐGò CˆÜ˜X›ˆØ×ÑÕ!Ø×!Ñ! *¨}×/AÑ/AÑ"AÕBðCð �H€MØ.°Ð@€JØ×ÑÓ!ò ˆØ�9‰9�;˜1Ÿ8™8¨=Ò8¸Q¿V¹VÈ:Ò=UØ�H‰H�Jðð ÐÜ�	‰	�*˜Ñ.°Ô9ð ÐÜ
�
‰
�‰Ð?ÀÔFô ˆz‹?Ðð @MŒ�
‰
Ð;Ñ<äˆz‹?Ðøôk ò %ÜØ#Øiõ	
÷ 	%Ð$ð%ús   ´G ÇG#Ç"G#)r   NÚ )r   ztorch.nn.Moduler    z
Path | strr   ztorch.utils.data.DataLoaderr   zCallable[[Any], np.ndarray]r   r5   r6   zdict | Noner7   r5   Úreturnr5   )Ú
__future__r   r!   Úcollections.abcr   Úpathlibr   Útypingr   ÚnumpyÚnpÚtorchÚultralytics.utilsr   r   Úultralytics.utils.checksr	   rA   © ó    r@   ú<module>rO      s‡   ðõ #ã 	Ý $Ý Ý ã Û ç *Ý 7ð Ø ØðPØðPàðPð 5ðPð .ð	Pð
 ðPð ðPð ðPð 	ôPrN   