
    gL              "          d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZ d dlmZ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 ddlm Z m!Z!m"Z" ddl#m$Z$  e!j%        e&          Z'dZ( e            r	 d dl)Z(n# e*$ r d dl+Z,e,j(        Z(Y nw xY wde$de$fdZ-d0dZ.d Z/d Z0	 	 d1de	de1dee2         fdZ3e-	 	 	 	 d2dee4e	f         deee4ef                  de1de1deee5e4f                  f
d            Z6d3d Z7e"e-dd!ddddddddddddd"d#e4dee2         d$e4d%e1d&ee4         d'ee4         d(ee4         d)ee1         d*eeee4         e4f                  d+eeee4         e4f                  d,eeee4         e4f                  d-ee4         de1deee5e4f                  de1fd.                        Z8 G d/ de          Z9dS )4    Nwraps)Path)copytree)AnyDictListOptionalUnion)ModelHubMixinsnapshot_download)get_tf_versionis_graphviz_availableis_pydot_availableis_tf_available	yaml_dump   )	constants)HfApi)SoftTemporaryDirectoryloggingvalidate_hf_hub_args)	CallableTfnreturnc                 <     t                      fd            }|S )Nc                 l    t          | d          st          dj         d           | g|R i |S )NhistoryzCannot use 'z}': Keras 3.x is not supported. Please save models manually and upload them using `upload_folder` or `huggingface-cli upload`.)hasattrNotImplementedError__name__)modelargskwargsr   s      W/var/www/html/ai-engine/env/lib/python3.11/site-packages/huggingface_hub/keras_mixin.py_innerz'_requires_keras_2_model.<locals>._inner+   se    ui(( 	%rr{ r r r   r%)$)))&)))    r   )r   r&   s   ` r%   _requires_keras_2_modelr(   )   s3    
2YY* * * * Y* Mr'    c                 <   g }|                                  D ]w\  }}|r| d| n|}t          |t          j                  r6|                    t          ||                                                      `|                    ||f           xt          |          S )a  Flatten a nested dictionary.
    Reference: https://stackoverflow.com/a/6027615/10319735

    Args:
        dictionary (`dict`):
            The nested dictionary to be flattened.
        parent_key (`str`):
            The parent key to be prefixed to the children keys.
            Necessary for recursing over the nested dictionary.

    Returns:
        The flattened dictionary.
    .)items
isinstancecollectionsMutableMappingextend_flatten_dictappenddict)
dictionary
parent_keyr,   keyvaluenew_keys         r%   r1   r1   7   s     E &&(( 
+ 
+
U+5>Z''#'''3e[788 	+LL  %''	    LL'5)****;;r'   c                    d}| j         v| j                                         }t          |          }t          j                                        j        |d<   d}|                                D ]\  }}|d| d| dz  }|S )z6Parse hyperparameter dictionary into a markdown table.Ntraining_precisionz*| Hyperparameters | Value |
| :-- | :-- |
z| z | z |
)	optimizer
get_configr1   kerasmixed_precisionglobal_policynamer,   )r"   tableoptimizer_paramsr6   r7   s        r%   _create_hyperparameter_tablerC   T   s    E" ?5577()9::161F1T1T1V1V1[-.>*0022 	. 	.JC-#--%----EELr'   c                 \    t           j                            | | dddddddd 	  	         d S )N
/model.pngFTTB`   )to_fileshow_shapes
show_dtypeshow_layer_namesrankdirexpand_nesteddpilayer_range)r=   utils
plot_model)r"   save_directorys     r%   _plot_networkrS   b   sO    	K!---  
 
 
 
 
r'   Trepo_dirrQ   metadatac                    |dz  }|                                 rdS t          |           }|r,t                      rt                      rt	          | |           |i }d|d<   d}|t          |d          z  }|dz  }|dz  }|d	z  }|d
z  }||dz  }|dz  }|dz  }||z  }|dz  }|rAt          j                             | d          r|dz  }|dz  }|dz  }d}|d| dz  }|dz  }|                    |           dS )zd
    Creates a model card for the repository.

    Do not overwrite an existing README.md file.
    z	README.mdNr=   library_namez---
F)default_flow_stylez/
## Model description

More information needed
z9
## Intended uses & limitations

More information needed
z:
## Training and evaluation data

More information needed
z
## Training procedure
z
### Training hyperparameters
z;
The following hyperparameters were used during training:


rE   z
 ## Model Plot
z

<details>z$
<summary>View Model Plot</summary>
z./model.pngz
![Model Image](z)
z
</details>)	existsrC   r   r   rS   r   ospath
write_text)r"   rT   rQ   rU   readme_pathhyperparameters
model_cardpath_to_plots           r%   _create_model_cardrb   p   s    [(K 2599O '+-- '2D2F2F 'eX&&&&H^J)H????J'JGGJQQJRRJ"11
88
VV
o%
d
 %bgnn%<%<%<== %**
m#
>>
$;,;;;;
n$
:&&&&&r'   FrR   configinclude_optimizertagsc                 d   t           t          d          | j        st          d          t	          |          }|                    dd           |rt          |t                    s t          dt          |           d          |t          j        z                      d          5 }t          j        ||           ddd           n# 1 swxY w Y   i }t          |t                    r||d	<   nt          |t                     r|g|d	<   |                    d
d          }	|	@t%          j        dt(                     d	|v r|d	                             |	           n|	g|d	<   | j        | j        j        i k    r|dz  }
|
                                rt%          j        dt0                     |
                    dd          5 }t          j        | j        j        |dd           ddd           n# 1 swxY w Y   t3          | |||           t          j        j        | |fd|i| dS )aL  
    Saves a Keras model to save_directory in SavedModel format. Use this if
    you're using the Functional or Sequential APIs.

    Args:
        model (`Keras.Model`):
            The [Keras
            model](https://www.tensorflow.org/api_docs/python/tf/keras/Model)
            you'd like to save. The model must be compiled and built.
        save_directory (`str` or `Path`):
            Specify directory in which you want to save the Keras model.
        config (`dict`, *optional*):
            Configuration object to be saved alongside the model weights.
        include_optimizer(`bool`, *optional*, defaults to `False`):
            Whether or not to include optimizer in serialization.
        plot_model (`bool`, *optional*, defaults to `True`):
            Setting this to `True` will plot the model and put it in the model
            card. Requires graphviz and pydot to be installed.
        tags (Union[`str`,`list`], *optional*):
            List of tags that are related to model or string of a single tag. See example tags
            [here](https://github.com/huggingface/hub-docs/blob/main/modelcard.md?plain=1).
        model_save_kwargs(`dict`, *optional*):
            model_save_kwargs will be passed to
            [`tf.keras.models.save_model()`](https://www.tensorflow.org/api_docs/python/tf/keras/models/save_model).
    Nz>Called a Tensorflow-specific function but could not import it.z+Model should be built before trying to saveT)parentsexist_okzAProvided config to save_pretrained_keras should be a dict. Got: ''wre   	task_namez>`task_name` input argument is deprecated. Pass `tags` instead.zhistory.jsonzZ`history.json` file already exists, it will be overwritten by the history of this version.zutf-8)encoding   )indent	sort_keysrd   )r=   ImportErrorbuilt
ValueErrorr   mkdirr-   r3   RuntimeErrortyper   CONFIG_NAMEopenjsondumpliststrpopwarningswarnFutureWarningr2   r   rZ   UserWarningrb   models
save_model)r"   rR   rc   rd   rQ   re   model_save_kwargsfrU   rk   r\   s              r%   save_pretrained_kerasr      s   F }Z[[[; HFGGG.))N555  !&$'' 	trcghncocorrrsssy44::3?? 	!1Ifa   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! H$ "	D#		 " 6!%%k488IL	
 	
 	
 XV##I.... ){HV} = B&&!N2D{{}} p   311 NQ	%-/1MMMMN N N N N N N N N N N N N N N unj(CCC	LE>llEVlZkllllls$   ,CCC
#G99G= G=KerasModelHubMixinc                  $    t          j        | i |S )a
  
    Instantiate a pretrained Keras model from a pre-trained model from the Hub.
    The model is expected to be in `SavedModel` format.

    Args:
        pretrained_model_name_or_path (`str` or `os.PathLike`):
            Can be either:
                - A string, the `model id` of a pretrained model hosted inside a
                  model repo on huggingface.co. Valid model ids can be located
                  at the root-level, like `bert-base-uncased`, or namespaced
                  under a user or organization name, like
                  `dbmdz/bert-base-german-cased`.
                - You can add `revision` by appending `@` at the end of model_id
                  simply like this: `dbmdz/bert-base-german-cased@main` Revision
                  is the specific model version to use. It can be a branch name,
                  a tag name, or a commit id, since we use a git-based system
                  for storing models and other artifacts on huggingface.co, so
                  `revision` can be any identifier allowed by git.
                - A path to a `directory` containing model weights saved using
                  [`~transformers.PreTrainedModel.save_pretrained`], e.g.,
                  `./my_model_directory/`.
                - `None` if you are both providing the configuration and state
                  dictionary (resp. with keyword arguments `config` and
                  `state_dict`).
        force_download (`bool`, *optional*, defaults to `False`):
            Whether to force the (re-)download of the model weights and
            configuration files, overriding the cached versions if they exist.
        proxies (`Dict[str, str]`, *optional*):
            A dictionary of proxy servers to use by protocol or endpoint, e.g.,
            `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}`. The
            proxies are used on each request.
        token (`str` or `bool`, *optional*):
            The token to use as HTTP bearer authorization for remote files. If
            `True`, will use the token generated when running `transformers-cli
            login` (stored in `~/.huggingface`).
        cache_dir (`Union[str, os.PathLike]`, *optional*):
            Path to a directory in which a downloaded pretrained model
            configuration should be cached if the standard cache should not be
            used.
        local_files_only(`bool`, *optional*, defaults to `False`):
            Whether to only look at local files (i.e., do not try to download
            the model).
        model_kwargs (`Dict`, *optional*):
            model_kwargs will be passed to the model during initialization

    <Tip>

    Passing `token=True` is required when you want to use a private
    model.

    </Tip>
    )r   from_pretrained)r#   r$   s     r%   from_pretrained_kerasr      s    j -t>v>>>r'   z'Push Keras model using huggingface_hub.)rc   commit_messageprivateapi_endpointtokenbranch	create_prallow_patternsignore_patternsdelete_patternslog_dirrd   re   rQ   repo_idr   r   r   r   r   r   r   r   r   r   c                   t          |          }|                    |||d          j        }t                      5 }t	          |          |z  }t          | |f||||d| |F|g nt          |t                    r|gn|}|                    d           t          ||dz             |
                    d|||||||	|
|	
  
        cddd           S # 1 swxY w Y   dS )
a  
    Upload model checkpoint to the Hub.

    Use `allow_patterns` and `ignore_patterns` to precisely filter which files should be pushed to the hub. Use
    `delete_patterns` to delete existing remote files in the same commit. See [`upload_folder`] reference for more
    details.

    Args:
        model (`Keras.Model`):
            The [Keras model](`https://www.tensorflow.org/api_docs/python/tf/keras/Model`) you'd like to push to the
            Hub. The model must be compiled and built.
        repo_id (`str`):
                ID of the repository to push to (example: `"username/my-model"`).
        commit_message (`str`, *optional*, defaults to "Add Keras model"):
            Message to commit while pushing.
        private (`bool`, *optional*, defaults to `False`):
            Whether the repository created should be private.
        api_endpoint (`str`, *optional*):
            The API endpoint to use when pushing the model to the hub.
        token (`str`, *optional*):
            The token to use as HTTP bearer authorization for remote files. If
            not set, will use the token set when logging in with
            `huggingface-cli login` (stored in `~/.huggingface`).
        branch (`str`, *optional*):
            The git branch on which to push the model. This defaults to
            the default branch as specified in your repository, which
            defaults to `"main"`.
        create_pr (`boolean`, *optional*):
            Whether or not to create a Pull Request from `branch` with that commit.
            Defaults to `False`.
        config (`dict`, *optional*):
            Configuration object to be saved alongside the model weights.
        allow_patterns (`List[str]` or `str`, *optional*):
            If provided, only files matching at least one pattern are pushed.
        ignore_patterns (`List[str]` or `str`, *optional*):
            If provided, files matching any of the patterns are not pushed.
        delete_patterns (`List[str]` or `str`, *optional*):
            If provided, remote files matching any of the patterns will be deleted from the repo.
        log_dir (`str`, *optional*):
            TensorBoard logging directory to be pushed. The Hub automatically
            hosts and displays a TensorBoard instance if log files are included
            in the repository.
        include_optimizer (`bool`, *optional*, defaults to `False`):
            Whether or not to include optimizer during serialization.
        tags (Union[`list`, `str`], *optional*):
            List of tags that are related to model or string of a single tag. See example tags
            [here](https://github.com/huggingface/hub-docs/blob/main/modelcard.md?plain=1).
        plot_model (`bool`, *optional*, defaults to `True`):
            Setting this to `True` will plot the model and put it in the model
            card. Requires graphviz and pydot to be installed.
        model_save_kwargs(`dict`, *optional*):
            model_save_kwargs will be passed to
            [`tf.keras.models.save_model()`](https://www.tensorflow.org/api_docs/python/tf/keras/models/save_model).

    Returns:
        The url of the commit of your model in the given repository.
    )endpointT)r   r   r   rh   )rc   rd   re   rQ   Nzlogs/*logsr"   )
	repo_typer   folder_pathr   r   revisionr   r   r   r   )r   create_repor   r   r   r   r-   r{   r2   r   upload_folder)r"   r   rc   r   r   r   r   r   r   r   r   r   r   rd   re   rQ   r   apitmp
saved_paths                       r%   push_to_hub_kerasr   (  s   ^ 
&
&
&CoogUGVZo[[cG 
 	!	! %
S#YY(
	
 /!	
 	
  	
 	
 	
  #*  "/377)_%%(  ""8,,,Wj61222  "))++ ! 
 
5%
 %
 %
 %
 %
 %
 %
 %
 %
 %
 %
 %
 %
 %
 %
 %
 %
 %
s   BCCCc                   T    e Zd ZdZd Ze	 ddeeee	f                  fd            Z
dS )r   aA  
    Implementation of [`ModelHubMixin`] to provide model Hub upload/download
    capabilities to Keras models.


    ```python
    >>> import tensorflow as tf
    >>> from huggingface_hub import KerasModelHubMixin


    >>> class MyModel(tf.keras.Model, KerasModelHubMixin):
    ...     def __init__(self, **kwargs):
    ...         super().__init__()
    ...         self.config = kwargs.pop("config", None)
    ...         self.dummy_inputs = ...
    ...         self.layer = ...

    ...     def call(self, *args):
    ...         return ...


    >>> # Initialize and compile the model as you normally would
    >>> model = MyModel()
    >>> model.compile(...)
    >>> # Build the graph by training it or passing dummy inputs
    >>> _ = model(model.dummy_inputs)
    >>> # Save model weights to local directory
    >>> model.save_pretrained("my-awesome-model")
    >>> # Push model weights to the Hub
    >>> model.push_to_hub("my-awesome-model")
    >>> # Download and initialize weights from the Hub
    >>> model = MyModel.from_pretrained("username/super-cool-model")
    ```
    c                 &    t          | |           d S N)r   )selfrR   s     r%   _save_pretrainedz#KerasModelHubMixin._save_pretrained  s    dN33333r'   Nrc   c
                    t           t          d          t          j                            |          s!t          |||dt                                }n|}t           j                            |          }|	|_	        |S )a   Here we just call [`from_pretrained_keras`] function so both the mixin and
        functional APIs stay in sync.

                TODO - Some args above aren't used since we are calling
                snapshot_download instead of hf_hub_download.
        Nz>Called a TensorFlow-specific function but could not import it.r=   )r   r   	cache_dirrW   library_version)
r=   rp   r[   r\   isdirr   r   r   
load_modelrc   )clsmodel_idr   r   force_downloadproxiesresume_downloadlocal_files_onlyr   rc   model_kwargsstorage_folderr"   s                r%   _from_pretrainedz#KerasModelHubMixin._from_pretrained  s    ( =^___ w}}X&& 		&. !#$ . 0 0  NN &N ''77 r'   r   )r!   
__module____qualname____doc__r   classmethodr
   r   r{   r   r    r'   r%   r   r     so        ! !F4 4 4  ,0( ( c3h(( ( ( [( ( (r'   )r)   )TN)NFTN)r   r   ):collections.abcabcr.   rx   r[   r}   	functoolsr   pathlibr   shutilr   typingr   r   r	   r
   r   huggingface_hubr   r   huggingface_hub.utilsr   r   r   r   r   r)   r   hf_apir   rP   r   r   r   utils._typingr   
get_loggerr!   loggerr=   tf_kerasrp   
tensorflowtfr(   r1   rC   rS   boolr3   rb   r{   rz   r   r   r   r   r   r'   r%   <module>r      s   % % % % % %  				                    3 3 3 3 3 3 3 3 3 3 3 3 3 3 < < < < < < < <                          H H H H H H H H H H $ $ $ $ $ $ 
	H	%	%? 

        	 i       :    " #	)' )')' )' tn	)' )' )' )'X  (,#'+Pm Pm#t)$Pm T#s(^$Pm 	Pm
 Pm 5s#
$Pm Pm Pm Pmf5? 5? 5? 5?p 
 "C"&  $6:7;7;!#'+#v
 v
 v
v
 TN	v

 v
 v
 3-v
 C=v
 SMv
 ~v
 U49c>23v
 eDIsN34v
 eDIsN34v
 c]v
 v
  5s#
$!v
" #v
 v
 v
  v
rP P P P P P P P P Ps   B BB