
    ij                         d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ 	 dd
Zd Zd Zd Zd Zy)    N)backend)treeconvert_spec_to_tensor)get_input_signature)make_tf_tensor_spec)DEFAULT_ENDPOINT_NAME)ExportArchive)io_utilsc                 @   |j                  d      st        d|       ddl}ddlm ddlm ddlm ||nd}|t        |       }t        j                         dk(  rddl
}dfd		t        |t              rt        |      d
k(  r|d   }t        j                  d |      } |      }	|j!                  | j"                        }
t        |
j$                        d
kD  rt        |	t        t&        f      r | |	 }n | |	      }t        j(                  |	      D cg c]  }|j*                  j-                          }}t        j(                  |      D cg c]  }j/                  |j*                         }}|j1                  ||      }t        j(                  |      }t3        |j4                  |      D ]R  \  }}|j6                  D cg c]  }|dn|
 }}|j9                  |      }|j-                         j;                  |       T nAt        j                         dv rEt        j                  t<        |      }t?        | |fi |}|jA                  |      }tC        ||       nt        j                         dk(  rddl"}t        j                  d |      }t'        |      }tG        | d      r| jI                          tK        jL                         5  tK        jN                  d|jP                  jR                         |jP                  jU                  | |      }|jA                  |      }tC        ||       ddd       ntW        d      |jY                  |       |rt[        j\                  d| d       yyc c}w c c}w c c}w # 1 sw Y   GxY w)a	  Export the model as an OpenVINO IR artifact for inference.

    This method exports the model to the OpenVINO IR format,
    which includes two files:
    a `.xml` file containing the model structure and a `.bin` file
    containing the weights.
    The exported model contains only the forward pass
    (i.e., the model's `call()` method), and can be deployed with the
    OpenVINO Runtime for fast inference on CPU and other Intel hardware.

    Args:
        filepath: `str` or `pathlib.Path`. Path to the output `.xml` file.
        The corresponding `.bin` file will be saved alongside it.
        verbose: Optional `bool`. Whether to print a confirmation message
        after export. If `None`, it uses the default verbosity configured
        by the backend.
        input_signature: Optional. Specifies the shape and dtype of the
        model inputs. If not provided, it will be inferred.
        **kwargs: Additional keyword arguments.

     Example:

    ```python
    import keras

    # Define or load a Keras model
    model = keras.models.Sequential([
        keras.layers.Input(shape=(128,)),
        keras.layers.Dense(64, activation="relu"),
        keras.layers.Dense(10)
    ])

    # Export to OpenVINO IR
    model.export("model.xml", format="openvino")
    ```
    z.xmlzLThe OpenVINO export requires the filepath to end with '.xml'. Got: filepath=r   N)OPENVINO_DTYPES)OpenVINOKerasTensorTopenvinoc           	      &   t        | t        t        f      r)t        |       D cg c]  \  }} || |        c}}S t        | t              r+| j                         D ci c]  \  }}| ||       c}}S t        | 
      rh	t        | j                           }t        | j                        }j                  ||      }|j                  |        
|j                  d            S t        dt        |              c c}}w c c}}w )N)shapedtyper   zUnknown input type: )
isinstancelisttuple	enumeratedictitemsstrr   r   	parameterset_friendly_nameoutput	TypeErrortype)inputsprefixiekvov_typeov_shapeparamr   r   ov_opsetparameterize_inputss            n/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/keras/src/export/openvino.pyr)   z,export_openvino.<locals>.parameterize_inputsH   s    &4-0 !*& 11 (fXaS>:  FD)AGPA.q!44PPF$78)#fll*;<- ***I''/*5<<?;;"6tF|n EFF
 Qs   D$D   c                     t        | d      S Nr+   )replace_none_numberr   xs    r*   <lambda>z!export_openvino.<locals>.<lambda>]       ,QAF     )results
parameters)
tensorflowjaxtorchc                     t        | d      S r-   r   r/   s    r*   r1   z!export_openvino.<locals>.<lambda>{   r2   r3   evalignore)categoryzW`export_openvino` is only compatible with OpenVINO, TensorFlow, JAX and Torch backends.zSaved OpenVINO IR at 'z'.) )/endswith
ValueErrorr   openvino.opset16opset16keras.src.backend.openvino.corer   r   r   r   inspectr   r   lenr   map_structure	signaturecallr5   r   flattenr   get_noderesultModelzipr   r   PartialShapeset_partial_shaper   get_concrete_fnconvert_model	set_namesr9   hasattrr;   warningscatch_warningsfilterwarningsjitTracerWarningtraceNotImplementedError	serializer   	print_msg)modelfilepathverboseinput_signaturekwargsovactual_verboserD   sample_inputsparamsrG   outputspr5   rr4   ov_model
flat_specsov_inputspecdimdynamic_shape_dimsdynamic_shaper   decorated_fnr9   tracedr   r   r(   r)   s                              @@@@r*   export_openvinorr      s>   N V$%J(
 	

 '?C ' 3WN-e4J&	G 	G" ot,_1E1J-a0O**F
 %]3%%ejj1	y##$q(Zu-NVnGFmG37<<3GHaahh'')H
H6:ll76KL8??188,LL88G
8C\\/2
!(//:> 	ANHd 7;jj"/2cks*" " OO,>?M11-@	A 
	3	3##$7I&uf??##L1(F#		g	%**F
 m,5&!JJL$$& 	/##Huyy7N7NOYY__UM:F''/Hh.		/ 	/ "2
 	

 LL8$3H:R@A Q IL
"*	/ 	/s   "!N"N
NA%NNc              #     K   t        | t              rL| j                         D ]8  \  }}t        |t        t        t        f      rt        |      E d {    5| : y t        | t        t        f      r| D ]  }t        |      E d {     y t        | d      r| j                  r| j                   y d y 7 i7 5w)Nnameinput)r   r   r   r   r   collect_namesrS   rt   )	structurer#   r$   s      r*   rv   rv      s     )T"OO% 	DAq!dD%01(+++		
 
Ie}	- 	(A$Q'''	( 9f%).... M ,
 (s$   AC B<5C B>	4C >C c                     t        t        |            }t        | j                  |      D ]@  \  }}|j	                         j                  |       |j                  j                  |h       B y )N)r   rv   rM   r   rJ   r   tensorrR   )r]   r   namesrk   rt   s        r*   rR   rR      sZ    v&'EellE2 *$--d3!!4&)*r3   c                     | j                         } d| vrd| d<   d| vrddd| d<   | d   durt        d      | d   d   durt        d      | d   d	   durt        d
      | S )N	is_staticTjax2tf_kwargsF)
enable_xlanative_serializationzB`is_static` must be `True` in `kwargs` when using the jax backend.r~   zU`enable_xla` must be `False` in `kwargs['jax2tf_kwargs']` when using the jax backend.r   z_`native_serialization` must be `False` in `kwargs['jax2tf_kwargs']` when using the jax backend.)copyr@   )ra   s    r*   _check_jax_kwargsr      s    [[]F& "{f$$)#
 k$&P
 	
 o|,E9*
 	
 o56eCD
 	
 Mr3   c                    t        j                          dk(  rt        |      }t               } |j                  t        | |fi | t        j                          dk(  r|j                          |j                  t              S )Nr8   r7   )r   r   r
   track_and_add_endpointr	   _filter_and_track_resources_get_concrete_fn)r]   r`   ra   export_archives       r*   rP   rP      sp    E!"6*"_N)N))uo9? L(224**+@AAr3   )NN)rT   	keras.srcr   r   keras.src.export.export_utilsr   r   r   keras.src.export.saved_modelr	   r
   keras.src.utilsr   rr   rv   rR   r   rP    r3   r*   <module>r      sB       @ = = > 6 $ 48BBJ"*4	Br3   