
    Vhz_                        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mZm	Z	m
Z
mZ d dlmZ d dlmZ  G d de      Zd Zed	ed
edediZedededediZd Zd ZdefdZe j8                   G d d             Zd ZddedefdZy)    N)IntEnum)	AnnotatedAny
ForwardRefOptionalUnion)schema)_Unionc                       e Zd Zy)SchemaUpdateErrorN)__name__
__module____qualname__     P/home/dcms/DCMS/lib/python3.12/site-packages/torch/_export/serde/schema_check.pyr   r      s    r   r   c                     | st        |      y )N)r   )xmsgs     r   _checkr      s    $$ r   zstd::stringint64_tF64boolstringi64doublec                     	
 i i i 
i 	g g g i dt         t        t        t        f   t        t        t        f   t        t        t        f   f   f
fd
fd} 	
fd}	fd}t	        t
              D ]S  }|j                  d      rt        t
        |      }t        |d      r|j                  t
        j                  k7  rO||<   U i j                         D ]  \  }}t        |t              rt        |t              r
 | ||       0t!        j"                  |      r?t%        j&                  |      d   |<   t        |t(              r
 |||       z |||       t+        d	| d
|       t        |t,        t         f      r|dv rJ t+        d| d
|        t/        d         d<   t1        d d   D              sJ d   d<   d   dkD  sJ dt3        d      j5                         ddj5                  
j7                                ddj5                  t        t9        	j                         fd            j7                                dt3        d      j5                         d	}dt3        d      j5                         dt3        d      j5                  t        t9        j                         fd            j7                                d}||fS )Nreturnc           
      B    dt         dt        t        t        t        f   ffddt        fddt        t        t        t        f   t        t
        t           t        t         f   f fd}i }i }i }t               }t        j                         D ]  } ||      \  }}}	}
}|||j                  <   ||	d||j                  <   |
|d||j                  <   ||v r)t        d| d	|j                   d
 j                   d      |j                  |        |||fS )Nlevelr   c           
         t        | dd       v r| j                  d| j                  fS | t        v r| j                  t        |    t        |    fS t	        | t
              r| v sJ | vsJ d| vsJ | d|  d| fS t	        | t              r'| j                  d| j                   d| j                  fS t        j                  |       x}r6|t        k(  rd\  }}}}n|t        k(  rd\  }}}}n|t        k(  re|dk(  sJ d	       t        j                  |       }t        |      d
k(  r|d   t        d       k(  sJ  |d   |dz         \  }}	}
d| dd|	 dd|
 fS |t         k(  r | j"                  |      S t%        d|  d      t'        t        j                  |       D cg c]  } ||dz          c} \  }}}| ddj)                  |       d| ddj)                  |       d| dj)                  |       | fS t	        | t              r#| j                  | j                  | j                  fS t%        d|  d      c c}w )Nr   r   [zForwardRef<>)Listzstd::vectorzlist<r#   )Dictzstd::unordered_mapzmap<r#   r   z,Optional is only supported at the top level.      	Optional[]zstd::optional<z	optional Type z# is not supported in export schema., <)getattrr   _CPP_TYPE_MAP_THRIFT_TYPE_MAP
isinstancestrr   __forward_arg__typing
get_originlistdictr   get_argslentyper   
__origin__AssertionErrorzipjoin)tr    o	yaml_headcpp_headthrift_headthrift_tailargs	yaml_typecpp_typethrift_typer   yaml_arg_typescpp_arg_typesthrift_arg_typescpp_enum_defsdefs	dump_types                  r   rM   z<_staged_schema.<locals>._handle_aggregate.<locals>.dump_type1   s   q*d+}<zz9ajj88m#

M!$46Fq6IJJAs#Dy y---!|#|Ks!,a//Az*%%!!"3"3!4A6%% 
 ''***9EAIxk $YEAIxk %Z A:U'UU:!??1-Dt9>d1gd.CCC7@a%RS)7T4Ix#I;a0(
!4#K=1 
 )^$Q\\599(53V)WXXBE7=q7IJ!i519-JC?/? "{!DIIn$=#>a@ z499]#;"<A>"mDII.>$?#@N 
 At$

AJJ

;;$uQC/R%STT Ks    Ic                     | y| du ry| du ry| i k(  ry| g k(  ry| dk(  ryt        | t              rd|  dS t        d	|  d
      )Nzstd::nulloptTtrueFfalsez{}r   "zDefault value z' is not supported yet in export schema.)r0   r1   r;   )vs    r   dump_cpp_valuezA_staged_schema.<locals>._handle_aggregate.<locals>.dump_cpp_valuel   sm    y%debbbAs#1#Qx$$QC'NO r   c                     
| j                   d      \  }}}d|i}d }t        j                  | j                         t        k(  sJ d| j                   d       | j                   j
                  d   }t        |      t        u sJ d| j                   d       t        j                  }| j                  t        j                  ur| j                  }n,| j                  t        j                  ur| j                         }|t        j                  urQt        |      }||d<    	|      }|j                  d      r(|&t        dj                   d| j                   d	      |||||fS )
Nr   r9   Field z& must be annotated with an integer id.defaultr(   zOptional field .z$ must have default value to be None.)r9   r3   r4   r   name__metadata__intdataclassesMISSINGrV   default_factoryr1   
startswithr;   r   )fr>   rF   rG   retcpp_default	thrift_idvaluerV   rS   rM   tys            r   
dump_fieldz=_staged_schema.<locals>._handle_aggregate.<locals>.dump_field   s_   '0';$Ax1+C)-K!!!&&)Y6GxEFG6++A.IY3&GxEFG&  ''Eyy 3 33		""+*=*==))+K///e*!(I,U3<<,1B()"++ax?cd  +{IEEr   )rF   ra   )rG   rb   zDuplicate thrift id z for field z in rW   )rZ   tupler1   r6   r   r   setr[   fieldsrX   r;   r   add)rd   re   yaml_retcpp_ret
thrift_ret
thrift_idsr_   yaml_resrF   ra   rG   rb   rS   rM   rK   rL   s   `           @@r   _handle_aggregatez)_staged_schema.<locals>._handle_aggregate0   s(   9	U 9	Uc3m(< 9	Uv	 	(	FU4S>3sC#OP 	F< 
U
##B' 		&AFPQRmCHh[)'HQVV+3KPGAFFO1<9!UJqvvJ&$*9+[R[[MYZ[  NN9%		& *,,r   c                 Z   d|D ci c]  }|j                   |j                   c}d| <   d|  dt        d      j                  |D cg c]  }d|j                    d|j                   d! c}       d	|  d
t        d      j                  |D cg c]8  }d|  d|j                    dt        d       |j                    t        d       d	: c}       d|  dt        d      j                  |D cg c]8  }dt        d       |j                    t        d       d|  d|j                    d	: c}       d| <   j	                  d|  dt        d      j                  |D cg c]  }d|j                    d|j                   d! c}       d       y c c}w c c}w c c}w c c}w c c}w )Nenumkindrh   z
enum class  {

      = ,z-
};

inline std::string_view printEnum(const z& e) {
  switch (e) {
	    case z::	: return "   ;u
    default:
      throw std::runtime_error("Unknown enum value");
  }
}

inline void parseEnum(std::string_view s, z& t) {
  if (s == ) { t = ; return; }zH
  throw std::runtime_error("Unknown enum value: " + std::string{s});
}
z
enum 
}
)rX   rc   chrr=   append)rX   rd   r   rK   thrift_enum_defsrj   s      r   _handle_int_enumz(_staged_schema.<locals>._handle_int_enum   s   "(b4QQVVQWW_4QR6 R26aAFF83qwwiq)67 8 9) *. /RY[\TU4&166()CG9QVVHSWIQO\] ^ _+ ,0& 1RfhiabSWIaffXc"gYivRx|\ij k l 		
( 	
V R26aAFF83qwwiq)67 8 9	
+ 5R
 7
 ] j 7s   F	$F=F0=F#!$F(c                 ~    |      \  }}dd| <   dj                  d |j                         D              }fd}d|  d}dt        d	      j                  |j                         D  cg c]  \  } }d
|  d|  d c}}        d}d  d}	d|  dt        d	      j                  |j                         D  cg c]  \  } }d|  d|  d|  d c}}        d}
d  d| ddj                  |j                         D  cg c]  \  } } || |d          c}}        d| d|	 d <   j                  d| d|        j                  d|	 d|
        j                  d|  d       d |  d!t        d	      j                  d" |j                         D               d#| <   y c c}} w c c}} w c c}} w )$Nstructrr   
c              3   X   K   | ]"  \  }}d |d    d| |d   d|d   z   nd d $ yw)rv   rF    ra   Nrw    r|   r   ).0rX   r_   s      r   	<genexpr>z9_staged_schema.<locals>._handle_struct.<locals>.<genexpr>   sL       
a :q1]CSC_uq/?'?eg&hhij 
s   (*c                 v    |    d   }|v rd| d|  d| d|  d|  d| d|  d	S d
| d|  d|  d|  d| d|  dS )Nr9   z
  z get_z"() const {
    return static_cast<z>(z);
  }

  void set_(z def) {
    z" = static_cast<int64_t>(def);
  }
	
  const & get_z() const {
    return z;
  }

  void set_z = std::move(def);
  }
r   )rX   rd   	type_namerK   rh   s      r   accessorz8_staged_schema.<locals>._handle_struct.<locals>.accessor   s    tV,IM)+U4& !{"TF + 69+ 	F  		F4& 6  62$ 	F  r   z4void to_json(nlohmann::json& nlohmann_json_j, const z& nlohmann_json_t)z{
ru   z  nlohmann_json_j["z"] = nlohmann_json_t.r|   r   z6void from_json(const nlohmann::json& nlohmann_json_j, z{
  z nlohmann_json_default_obj;
z  nlohmann_json_t.z = nlohmann_json_j.value("z", nlohmann_json_default_obj.z);
class z {
 private:
z

 public:
r   rF   z

  friend z;
  friend z;
};
zinline r   class z
struct rt   c              3   F   K   | ]  \  }}d |d    d|d    d| d  ywrv   rb   : rG   r   r|   Nr   r   nr_   s      r   r   z9_staged_schema.<locals>._handle_struct.<locals>.<genexpr>  4     _A1[>""Q}%5$6as!<_   !
})r=   itemsr   r   )rX   rd   
cpp_fieldsthrift_fieldsfield_declsr   to_json_declr_   to_json_deffrom_json_declfrom_json_defrh   ro   cpp_class_defsrK   cpp_json_defscpp_type_declsthrift_type_defsrj   s              @r   _handle_structz&_staged_schema.<locals>._handle_struct   sR   ,=b,A)
M"*f=ii  
%++- 
 

	, NdVSefRWaWgWgWijGDRS$TF*?vQGjk l m RRVQWWij& 	R##%'a $9$?\]a\bbde '( ))	f   z7G7G7I	JGD!(4:
'	JK L M

 

	 
 		
 	w|nAk]CDw~&6aGHtfA./v R_I\I\I^__ ` a 		
; k' 
Ks   1F- F3F9c           %          |      \  }}}d|d| <   d }dj                  t        |j                               D  cg c]"  \  }\  } }d| j                          d|  d|  d$ c}} }      }dj                  t        |j                               D  cg c].  \  }\  } }d	|  d
|dz    d|  d|d    d| j                          d0 c}} }      }	d  ddj                  |D  cg c]  } | j                          c}        ddj                  d |j	                         D               ddj                  t        |j                               D  cg c]  \  }\  } } || |d   |       c}} }       d  d| d|  d|	 d|  dt        d      j                  |D 
cg c]@  }
d|  d|
j                          dt        d        |
j                          t        d        d!	B c}
       d"|  d#t        d      j                  |D 
cg c]@  }
d$t        d        |
j                          t        d        d%|  d|
j                          d&	B c}
       d'| <   j                  d(|  d!       d)|  d*t        d      j                  d+ |j                         D               d,| <   y c c}} }w c c}} }w c c} w c c}} }w c c}
w c c}
w )-Nunionrr   c                 Z    d| d|  d|dz    d|  d| d|dz    d| j                          d	S )
Nr   r   z() const {
    return std::get<r'   z>(variant_);
  }

  void set_r   z def) {
    variant_.emplace<z#>(std::move(def));
    tag_ = Tag::z;
  }
)upper)rX   rd   idxs      r   r   z7_staged_schema.<locals>._handle_union.<locals>.accessor  s_    		F4& 1WI  62$ AgY  	 	r   r   z&
    if (nlohmann_json_t.tag_ == Tag::z) {
      nlohmann_json_j["z"] = nlohmann_json_t.get_z();
      return;
    }z#
    if (nlohmann_json_j.contains("z-")) {
      nlohmann_json_t.variant_.emplace<r'   z>(nlohmann_json_j.at("z").template get<rF   z(>());
      nlohmann_json_t.tag_ = Tag::z;
      return;
    }r   z6 {
  struct Void {};

 public:
  enum class Tag {
    r+   z&
  };

 private:
  std::variant<Void, c              3   &   K   | ]	  }|d      yw)rF   Nr   )r   r_   s     r   r   z8_staged_schema.<locals>._handle_union.<locals>.<genexpr>B  s     K!*K   zK> variant_;
  Tag tag_;

 public:
  Tag tag() const {
    return tag_;
  }
z>
  friend void to_json(nlohmann::json& nlohmann_json_j, const z& nlohmann_json_t) {
zE
  }

  friend void from_json(const nlohmann::json& nlohmann_json_j, z1
  }
};

inline std::string_view printEnum(const z::Tag& e) {
  switch (e) {
ru   ry   z::Tag::rz   r{   r|   r}   z::Tag& t) {
r~   r   r   zI
  throw std::runtime_error("Unknown enum value: " + std::string{s});
}

r   z
union rt   c              3   F   K   | ]  \  }}d |d    d|d    d| d  ywr   r   r   s      r   r   z8_staged_schema.<locals>._handle_union.<locals>.<genexpr>g  r   r   r   )r=   	enumerater   r   valuesr   r   )rX   rd   rh   r   r   r   r   r_   to_json_branchesfrom_json_branchesr   ro   r   r   r   rj   s              r   _handle_unionz%_staged_schema.<locals>._handle_union  sY   ,=b,A)
M")V<
	 77 '0
0@0@0B&C  #C$&&*jjl^ 4v6tf =
	
  WW '0
0@0@0B&C  #C$##'& )((+ay0FtfL\]^_i]j\k l##'::<. 1


f 
 
YY4

456 7 iiKz7H7H7JKKL M 9ZM]M]M_C`	a	aitQ(4:
,	ab c d>>BV D  @ AEv F  ) *. /Rdno_`4&	{)CG9QWWYKPSTVPWyXYZop q r+ ,0& 1Rq{|lmSWIaggi[R	4&PQPWPWPY{Zfg|} ~ I( 		
V 	tfA./f R_I\I\I^__ ` a 		
E& 5 
b p }s&   'J*3J1(J8J=!AK.	AK	6_r   r'   zUnknown schema type r   SCHEMA_VERSIONTREESPEC_VERSIONzUnknown variable r   c              3   &   K   | ]	  }|d kD    yw)r   Nr   )r   r   s     r   r   z!_staged_schema.<locals>.<genexpr>  s     9q1u9r   r   r   a
  
#pragma once

#include <optional>
#include <stdexcept>
#include <string>
#include <unordered_map>
#include <variant>
#include <vector>

#include <nlohmann/json.hpp>

#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
#define NLOHMANN_JSON_NAMESPACE_BEGIN namespace nlohmann {
#endif

#ifndef NLOHMANN_JSON_NAMESPACE_END
#define NLOHMANN_JSON_NAMESPACE_END }
#endif

// https://github.com/nlohmann/json/pull/2117
NLOHMANN_JSON_NAMESPACE_BEGIN
template <typename T>
struct adl_serializer<std::optional<T>> {
  static void to_json(json& j, const std::optional<T>& opt) {
    if (opt == std::nullopt) {
      j = nullptr;
    } else {
      j = *opt; // this will call adl_serializer<T>::to_json which will
                // find the free function to_json in T's namespace!
    }
  }

  static void from_json(const json& j, std::optional<T>& opt) {
    if (j.is_null()) {
      opt = std::nullopt;
    } else {
      opt = j.template get<T>(); // same as above, but with
                                 // adl_serializer<T>::from_json
    }
  }
};
NLOHMANN_JSON_NAMESPACE_END

namespace torch {
namespace _export {

template <typename T>
class ForwardRef {
  static_assert(!std::is_reference_v<T>, "ForwardRef cannot be a reference type");

 public:
  ForwardRef(): ptr_(std::make_unique<T>()) {}
  ForwardRef(ForwardRef<T>&&);
  ForwardRef(const ForwardRef<T>& other): ptr_(std::make_unique<T>(*other.ptr_)) {}
  ForwardRef<T>& operator=(ForwardRef<T>&&);
  ForwardRef<T>& operator=(const ForwardRef<T>& other) {
    ptr_ = std::make_unique<T>(*other.ptr_);
    return *this;
  }
  const T& operator*() const {
    return *ptr_;
  }

  const T* operator->() const {
    return ptr_.get();
  }

  void emplace(T&& t) {
    ptr_ = std::make_unique<T>(std::move(t));
  }

 private:
  std::unique_ptr<T> ptr_;
};

template <typename T>
void to_json(nlohmann::json& j, const ForwardRef<T>& p) {
  j = *p;
}

template <typename T>
void from_json(const nlohmann::json& j, ForwardRef<T>& p) {
  p.emplace(j.template get<T>());
}

class F64 {
 public:
  double get() const {
    return value_;
  }

  void set(double value) {
    value_ = value;
  }

 private:
  double value_;
};

inline void to_json(nlohmann::json& j, const F64& f) {
  if (std::isinf(f.get())) {
    j = "Infinity";
  } else if (std::isinf(-f.get())) {
    j = "-Infinity";
  } else if (std::isnan(f.get())) {
    j = "NaN";
  } else {
    j = f.get();
  }
}

inline void from_json(const nlohmann::json& j, F64& f) {
  if (j == "Infinity") {
    f.set(std::numeric_limits<double>::infinity());
  } else if (j == "-Infinity") {
    f.set(-std::numeric_limits<double>::infinity());
  } else if (j == "NaN") {
    f.set(std::numeric_limits<double>::quiet_NaN());
  } else {
    f.set(j.get<double>());
  }
}

ru   r   r   c                     | d      S Nr   r   r   class_orderings    r   <lambda>z _staged_schema.<locals>.<lambda>
  s    >!A$;O r   )keyz

template <typename T> ForwardRef<T>::ForwardRef(ForwardRef<T>&&) = default;
template <typename T> ForwardRef<T>& ForwardRef<T>::operator=(ForwardRef<T>&&) = default;
} // namespace _export
} // namespace torch
zA
namespace py3 torch._export
namespace cpp2 torch._export.schema
c                     | d      S r   r   r   s    r   r   z _staged_schema.<locals>.<lambda>  s    .QRSTQUBV r   )rf   r6   r1   r   dirr	   r^   r-   hasattrr   r   r   r0   r9   
issubclassr   r[   is_dataclassinspect
findsourcer
   r;   rZ   r5   allr   r=   r   sorted)r   r   r   rX   rc   
cpp_headerthrift_schemaro   r   r   rK   r   r   rL   r   r   rj   s          @@@@@@@@@@r   _staged_schemar   &   s   !HD$&M%'N "N!M"$')|-tCH~tCH~tCQTH~'U!V |-|
<B BHX Xt F 	??3%5,'E,<,<,OT
	 Nzz| FeeT"%) u-))%0'.'9'9%'@'Ct$eV,!$."4/$';D6E7%KLLU|,AAAA #4TF"UG!DEEF" "&d+;&<!=H9h'789999#'(:#;H &'!+++|x Rn  			  ! "f^))+1OP	Q	X	X	Z[ \ ]Rm  EJL R   !Rd6*0028VWX__ab c d	M Z..r   c                 B   |j                         | j                         z
  D ci c]  }|||   
 }}| j                         |j                         z
  D ci c]  }|| |   
 }}|j                         | j                         z  }ddh}||z  }|D ]  }||   d   }||   d   }| |   d   }	| |   d   }
t        ||	k(  d| d|	 d|        t        |t              rt        |
t              sJ |j                         |
j                         z
  D ci c]  }|||   
 }}|
j                         |j                         z
  D ci c]  }||
|   
 }}|j                         |
j                         z  }|D ]  }||   }|
|   }|dk(  rZt        |d	   |d	   k(  d
 d| d|d	    d|d	           d|v rd|vri ||<   |d   ||   d<   d|vsVd|v s[i ||<   |d   ||   d<   l|dk(  rt        ||k(  d d| d| d|        |dk(  r(t        |d	   |d	   k(  d
 d| d|d	    d|d	           t	        d| d        t        |      dkD  r|vsJ i ||<   |||   d<   t        |      dkD  s|vsJ i ||<   |||   d<    ||fS c c}w c c}w c c}w c c}w )Nr   r   rs   rh   r*   z changed kind from z to r   r9   zType of the field rW   z changed from rV   rq   zValue of the enum field r   zUnknown kind r   r   )keysr   r0   r6   r;   r8   )dstsrcr   	additionssubtractionscommon_keysversionssrc_kind
src_fieldsdst_kind
dst_fieldsadded_fieldssubtracted_fieldscommon_fieldsfield	src_field	dst_fields                    r   _diff_schemar     s   *-((*sxxz*AB3c#hBIB-0XXZ#((*-DEcCSMELE((*sxxz)K "45H8K 3<s8F#Xh'
s8F#Xh'
 C5+H:T(D	
 *d+
:t0LLL,6OO,=
@Q,Q
%(CC 
 
 -7OO,=
@Q,Q
%(CC 
 
 #)JOO,==" 	HE"5)I"5)I8#f%6)::(Qug^IfDUCVVZ[dek[lZmn 	)iy.H*,L'5>y5IL'	2I-)y2H/1%e,:CI:N%e,Y7V#*.se1UG>)TXYbXcd W$f%6)::(Qug^IfDUCVVZ[dek[lZmn
 %}XJb%FGG3	H4 |q i'''IcN'3IcN8$ !A%l*** "L*;Lh'g3<j l""{ CE"

s   JJJJsc                     t        j                  | j                         j                  d            j	                         S )Nzutf-8)hashlibsha256stripencode	hexdigest)r   s    r   _hash_contentr   \  s+    >>!'')**734>>@@r   c                       e Zd ZU eeef   ed<   eed<   eed<   eeef   ed<   eeef   ed<   eeef   ed<   ee   ed<   eed<   eed	<   ee   ed
<   ee   ed<   eed<   eed<   eed<   y)_Commitresultchecksum_next	yaml_pathr   r   basechecksum_headr   cpp_header_paththrift_checksum_headthrift_checksum_realthrift_checksum_nextr   thrift_schema_pathN)r   r   r   r6   r1   r   __annotations__r   r   r   r   r   r   `  s    cNNCH~sCx. 
sCx.C= O"3-'"3-'r   r   c                     dd l } | j                  j                  t        d      r/| j                  j	                  t        d      }t        j                  d|      }t        |d ud       |J |j                  d      }| j                  j	                  t        d      }t        j                  d|      }t        |d ud       |J |j                  d      }|j                         }|d   j                  d      sJ |d   j                  d	      sJ t        d
j                  |dd              }ddlm}m}  |||      }	t!        |	t"              sJ d }d }d }d d d}	t%               \  }
}}t'        |	|
      \  }}t        j)                  dd      dz   }t        j)                  dd      dz   }d}|j                  |      sJ |j                  |      sJ t+        |
t        t-        |
            ||||	|||dz   ||t        |      ||      S )Nr   zschema.yamlzchecksum<<([A-Fa-f0-9]{64})>>z!checksum not found in schema.yamlr'   zexport_schema.thriftz*checksum not found in export_schema.thriftz// @generatedz// checksum<<r   r&   )loadLoader)r   r   rW   /z/schema.yamlz/export_schema.thriftztorch/z*csrc/utils/generated_serialization_types.h)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )importlib.resources	resourcesis_resource__package__	read_textresearchr   group
splitlinesr^   r   r=   yamlr   r   r0   r6   r   r   replacer   repr)	importlibcontentmatchr   thrift_contentr   r   r   r   r   r   r   r   r   r   r   r   torch_prefixs                     r   update_schemar  r  s$   &&{MB%%//]K		97CuD "EF   A",,66/
 		9>JuD "NO   ${{1~'224a ++,@AAAa ++O<<<,TYY~ab7I-JK%76*#t$$$##!%4@%3%5"C]*34I|##C->I$,,S#69PPL---((666#DI.!#$'SS11*=9#- r   commitforce_unsafec                 n   d }d}t        | j                        dkD  r| j                  j                         D ]t  \  }}|| j                  vr| j                  |   d   }|d   }|j                         D ]6  \  }}	|dk(  sd|	vs|d| d| d	d
z   z  }| j                  d   d   dz   dg}8 v t        | j
                        dkD  r[| j
                  j                         D ]>  \  }}|| j                  vr|d   D ]  }d| d| d} | j                  d   d   dz   dg}@ |r|dz  }| j                  d   }||fS |zt        | j                        dkD  rb| j                  j                         D ]  \  }}|d   D ]  }|d| d| ddz   z  }   | j                  d   d   | j                  d   d   dz   g}|zt        | j
                        dkD  rb| j
                  j                         D ]  \  }}|d   D ]  }|d| d| ddz   z  }   | j                  d   d   | j                  d   d   dz   g}||fS )Nr   r   rs   rh   r   rV   rU   rW   zI is added to schema.py without a default value as an incomparible change z#which requires major version bump.
r   r'   zX is removed from schema.py as an incompatible change which requires major version bump.
z--force-unsafe is used.z/ is added to schema.py as an compatible change z)which still requires minor version bump.
z3 is removed from schema.py as an compatible change )r8   r   r   r   r   r   )
r  r  next_versionreasonkrR   rs   rh   r_   ds
             r   checkr    s   LF
6q $$**, 	MDAq#==#F+Dx[F M18#	(: 1QC'pq@AF %+KK0@$A!$Dq$H!#LLM	M 6!#''--/ 	EDAq%x[ C!!AaS  )B  CC"KK(89!<q@!DL	E ++}}%564 / C(8(8$9A$=((..0 18 A 1QC'VWFGF ,-a0,-a014L C(;(;$<q$@++113 18 A 1QC'Z[FGF ,-a0,-a014L
 r   )F) r[   r   r   r   r3   rq   r   r   r   r   r   r   torch._export.serder	   torch._export.serde.unionr
   	Exceptionr   r   r1   rZ   floatr   r.   r/   r   r   r   	dataclassr   r  r  r   r   r   <module>r     s       	   > > & ,		 	% 	5&	 	8&	 r/j>#BAS A   "7t6 ' 6  6 r   