o
    ߥi                     @   s6   d dl Z d dlmZ d dlmZ G dd dejZdS )    N)	ModelFilec                       s   e Zd ZdZe Zedd Zedd Z	edd Z
 fdd	Zd
d Zdd Zdd Zdd Zdd Z			dddZ				dddZ  ZS )SpaceModelBasez;
    Basic model wrapper for static graph and dygrpah.
    c                 C   s   | t j|< d S Nr   	_registry)clsname r	   `/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/nlp/space/model/model_base.pyregister   s   
zSpaceModelBase.registerc                 C   s
   t j|  S r   r   )r   r	   r	   r
   by_name   s   
zSpaceModelBase.by_namec                 O   s&   t |jj}|| |g|R i |S r   )r   r   Modelmodel)	model_dirconfigargskwargs	model_clsr	   r	   r
   create   s   zSpaceModelBase.createc                    s@   t t|   tj|tj| _|j	j
| _
|j| _|jj| _d S r   )superr   __init__ospathjoinr   TORCH_MODEL_BIN_FILEinit_checkpointDatasetabandon_labeluse_gpuTrainergpu)selfr   r   	__class__r	   r
   r      s   

zSpaceModelBase.__init__c                 C      t )z Create model's parameters. NotImplementedError)r!   r	   r	   r
   _create_parameters'      z!SpaceModelBase._create_parametersc                 C   r$   )zH NO LABEL: Real forward process of model in different mode(train/test). r%   )r!   inputsis_training
with_labelr	   r	   r
   _forward+   r(   zSpaceModelBase._forwardc                 C   r$   )z@ NO LABEL: Calculate loss function by using inputs and outputs. r%   )r!   r)   outputsr+   	data_filer	   r	   r
   _collect_metrics/   r(   zSpaceModelBase._collect_metricsc                 C   r$   )z* Optimize loss function and update model. r%   )r!   loss	optimizerlr_schedulerr	   r	   r
   	_optimize3   r(   zSpaceModelBase._optimizec                 C   r$   )z" Real inference process of model. r%   )r!   r)   start_ideos_idmax_gen_len
prev_inputr	   r	   r
   _infer7   r(   zSpaceModelBase._inferFNc                 C   sJ   |r|    n|   | jrdn|}| j|||d}| j||||d}|S )z
        Forward process, include real forward, collect metrices and optimize(optional)

        Args:
            inputs(`dict` of numpy.ndarray/int/float/...) : input data
        F)r+   )r+   r.   )trainevalr   r,   r/   )r!   r)   r*   r+   r.   r-   metricsr	   r	   r
   forward;   s   
zSpaceModelBase.forwardc                 C   s    |    | j|||||d}|S )zqInference process.

        Args:
            inputs(`dict` of numpy.ndarray/int/float/...) : input data
        )r4   r5   r6   r7   )r:   r8   )r!   r)   r4   r5   r6   r7   resultsr	   r	   r
   inferR   s   zSpaceModelBase.infer)FFN)NNNN)__name__
__module____qualname____doc__dictr   classmethodr   staticmethodr   r   r   r'   r,   r/   r3   r8   r<   r>   __classcell__r	   r	   r"   r
   r   
   s0    


	
r   )r   torch.nnnnmodelscope.utils.constantr   Moduler   r	   r	   r	   r
   <module>   s   