o
    soi!                     @  s(  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 e
r.d dlmZ dZdZdZed	Zed
ZedZd;ddZedZedZedZd<ddZedZedZd=ddZd>d$d%Zd?d)d*Zd@dAd.d/Z	0	0	1dBdCd6d7ZdDd8d9Z e!d:kre   dS dS )E    )annotationsN)dedent)TYPE_CHECKING)IterablezV//
// WARNING: This file is automatically generated!  Please edit onnx.in.proto.
//


zB

// For using protobuf-lite
option optimize_for = LITE_RUNTIME;

onnxz\s*//\s*#if\s+ONNX-ML\s*$z\s*//\s*#endif\s*$z\s*//\s*#else\s*$linesIterable[str]onnx_mlboolreturnc                 c  s    d}| D ]G}t |r|dksJ d}qt|r#|dks J d}qt|r1|dv s.J d}q|dkr9|V  q|dkrC|rC|V  q|dkrL|sL|V  qd S )Nr         )r   r   )IF_ONNX_ML_REGEXmatchELSE_ONNX_ML_REGEXENDIF_ONNX_ML_REGEX)r   r	   in_ifline r   B/home/ubuntu/.local/lib/python3.10/site-packages/onnx/gen_proto.pyprocess_ifs)   s(   


r   z#(\s*)import\s*"([^"]*)\.proto";\s*$z\{PACKAGE_NAME\}z(.*)\-mlpackage_namestrc                 c  s    |t k}| D ]@}|rt|nd }|r@|d}t|}|r,|d d| d}n| d| }|dd| d V  qt||V  qd S )Nr   r   _-mlimport "z.proto";)DEFAULT_PACKAGE_NAMEIMPORT_REGEXr   groupML_REGEXPACKAGE_NAME_REGEXsub)r   r   need_renamer   minclude_namemlr   r   r   process_package_nameC   s   

r&   z"(\s*)syntax\s*=\s*"proto2"\s*;\s*$z(\s*)optional\s(.*)$c                 c  s    | D ]?}t |}|r|dd V  qt|}|r(|d|d V  qt|}|r?|dd|d d V  q|V  qd S )Nr   zsyntax = "proto3";r   r   z	.proto3";)PROTO_SYNTAX_REGEXr   r   OPTIONAL_REGEXr   )r   r   r#   r   r   r   convert_to_proto3W   s    


r)   protoc_pathproto3_pathinclude_pathcpp_out
python_outNonec                 C  s:   t d|   | |d|g}|d|d|g t| d S )NzGenerate pb3 code using z-Iz	--cpp_outz--python_out)printextend
subprocess
check_call)r*   r+   r,   r-   r.   
build_argsr   r   r   gen_proto3_coden   s   r5   sourceprotointc                 C  sJ   |   }t||d}t||d}|dkrt|}n|dksJ tj|S )N)r	   )r      r   )
splitlinesr   r&   r)   oslinesepjoin)r6   r7   r	   r   r   r   r   r   	translatew   s   
r>   fpardir
str | Nonec                 C  s*   |d u rt jt jt}t j|| S N)r;   pathrealpathdirname__file__r=   )r?   r@   r   r   r   qualify   s   rG   F stemoutput
do_onnx_mllitec              
   C  s~  t |  d}|tk}|}d|v rd}|r%|r|  d| dn|  d}	n|r.|  d| n|  }	t |	 d|d}
t |	 d|d}td	|  t|d
d}| }td|
  t|
ddd
d}|t |t|d||d |r||t W d    n1 sw   Y  td|  t|ddd
d}|t |t|d||d |r|t W d    n1 sw   Y  |rt	j
|}t	j
|}t||||| tt	j
||	 d}|D ]}td|  t	| q|r<|rt |  d|d}n	t |  d|d}td|  t|ddd
d}|d |d|	 d W d    n	1 s7w   Y  W d    n	1 sGw   Y  t | dd d|d}|rjt |	dd d|d}n|r{t | dd d|d}nt | dd d|d}td|  t|dd
d}|tdt	j
t	j
|d   d! W d    d S 1 sw   Y  d S )"Nz	.in.proto	onnx-dataFr   r   z.proto)r@   z.proto3zProcessing zutf-8)encodingzWriting wrH   )newlinerN   r   )r7   r	   r   r9   z	.proto3.*z	Removing z-ml.pb.hz.pb.hz#pragma once
z
#include "z.pb.h"
-z_pb.pyz_pb2.pyz
_ml_pb2.pyzgenerating z[                # This file is generated by setup.py. DO NOT EDIT!


                from .r   z" import *  # noqa
                )rG   r   r0   openreadwriteautogen_headerr>   LITE_OPTIONr;   rC   rE   r5   globr=   removereplacer   splitextbasename)rI   r   rJ   rK   rL   r*   proto_inr"   	import_ml
proto_baser7   proto3finr6   fout
porto3_dirbase_dir	pb3_filespb3_fileproto_headerpb_pypb2_pyr?   r   r   r   convert   s    




'$ri   c               	   C  s   t jdd} | jddddd | jdd	d
dd | jddd
dd | jddtjtjtdd | jdddd | jddg ddd |  }tj	|j
sVt|j
 |jD ]}t||j|j
|j|j|jd qYd S )Nz/Generates .proto file variations from .in.proto)descriptionz-pz	--packager   z@package name in the generated proto files (default: %(default)s))defaulthelpz-mz--ml
store_truezML mode)actionrl   z-lz--litez-generate lite proto to use with protobuf-litez-oz--outputz'output directory (default: %(default)s)z--protoc_pathrH   z)path to protoc for proto3 file validationstems*)r   zonnx-operatorsrM   z3list of .in.proto file stems (default: %(default)s))nargsrk   rl   )r   rJ   rK   rL   r*   )argparseArgumentParseradd_argumentr;   rC   rD   rE   rF   
parse_argsexistsrJ   makedirsro   ri   packager%   rL   r*   )parserargsrI   r   r   r   main   sX   
r{   __main__)r   r   r	   r
   r   r   )r   r   r   r   r   r   )r   r   r   r   )r*   r   r+   r   r,   r   r-   r   r.   r   r   r/   )
r6   r   r7   r8   r	   r
   r   r   r   r   rB   )r?   r   r@   rA   r   r   )FFrH   )rI   r   r   r   rJ   r   rK   r
   rL   r
   r*   r   r   r/   )r   r/   )"
__future__r   rr   rW   r;   rer2   textwrapr   typingr   collections.abcr   rU   rV   r   compiler   r   r   r   r   r    r   r&   r'   r(   r)   r5   r>   rG   ri   r{   __name__r   r   r   r   <module>   sF   












	

W0
