o
    q::j"                     @  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   U/home/nk/hobo-godmode/plappi-mvp/.venv/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j|dd d S )NzGenerate pb3 code using z-Iz	--cpp_outz--python_outT)check)printextend
subprocessrun)r*   r+   r,   r-   r.   
build_argsr   r   r   gen_proto3_coden   s   r6   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)r7   r8   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@   rA   r   r   r   qualify   s   rH   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)rA   z.proto3zProcessing zutf-8)encodingzWriting wrI   )newlinerO   r   )r8   r	   r   r:   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 za                # This file is generated by 'gen_proto.py'. DO NOT EDIT!


                from .r   z" import *  # noqa
                )rH   r   r1   openreadwriteautogen_headerr?   LITE_OPTIONr<   rD   rF   r6   globr>   removereplacer   splitextbasename)rJ   r   rK   rL   rM   r*   proto_inr"   	import_ml
proto_baser8   proto3finr7   fout
porto3_dirbase_dir	pb3_filespb3_fileproto_headerpb_pypb2_pyr@   r   r   r   convert   s    




'$rj   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)actionrm   z-lz--litez-generate lite proto to use with protobuf-litez-oz--outputz'output directory (default: %(default)s)z--protoc_pathrI   z)path to protoc for proto3 file validationstems*)r   zonnx-operatorsrN   z3list of .in.proto file stems (default: %(default)s))nargsrl   rm   )r   rK   rL   rM   r*   )argparseArgumentParseradd_argumentr<   rD   rE   rF   rG   
parse_argsexistsrK   makedirsrp   rj   packager%   rM   r*   )parserargsrJ   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/   )
r7   r   r8   r9   r	   r
   r   r   r   r   rC   )r@   r   rA   rB   r   r   )FFrI   )rJ   r   r   r   rK   r   rL   r
   rM   r
   r*   r   r   r/   )r   r/   )"
__future__r   rs   rX   r<   rer3   textwrapr   typingr   collections.abcr   rV   rW   r   compiler   r   r   r   r   r    r   r&   r'   r(   r)   r6   r?   rH   rj   r|   __name__r   r   r   r   <module>   sF   












	

W0
