o
    *j                     @   s   d dl mZ d dlmZmZmZmZmZmZm	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 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 e ZeG dd dZej ej!dG dd deZ"dS )    )	dataclass)AnyCallableDictListOptionalTupleUnionN)nn)Dataset)Trainers)
TorchModel)	MsDataset)Preprocessor)TRAINERS)NlpEpochBasedTrainer)DEFAULT_MODEL_REVISION)
get_loggerc                   @   s>   e Zd ZdZdd Zdeeeef  deeef fddZ	dS )	GroupCollatorz
    Wrapper that does conversion from List[Tuple[encode_qry, encode_psg]] to
    List[qry], List[psg] and pass batch separately to the actual collator.
    Abstract out data detail for the model.
    c                 C   s>  g g g }}}g g }}g g g }}	}
d}|D ]v}t |dkr"qt |d dkrO|D ]!\}}}}}}|| || || || || q,qt |d dkrd}|D ]3\	}}}}}}}}}|| || || || || || |	| |
| q[q||||||||	|
|	 |S )NFr      	   T)lenappendupdate)selfgisZinpsZgis_input_idsZgis_token_type_idsZgis_rel_type_idsZgis_absolute_position_idsZgis_relative_position_idsZgis_prov_idsZgis_city_idsZgis_dist_idsZchina_versiondocZgeom_idZ	geom_typeZrel_typeZabsolute_positionZrelative_positionZlxlyZprov_idZcity_idZdist_id r   u/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/trainers/multi_modal/mgeo_ranking_trainer.pyget_gis   sD   












zGroupCollator.get_gisfeaturesreturnc                 C   s  t |d trt|g }|d  }dd |D }|D ]}| D ]\}}|| | q!qi }g }g }	|D ]}d|kr|d d }
| |
|d }
|
jd urh||
j|
j	|
j
|
j|
j|
j|
j|
j|
jd	 n||
j|
j	|
j
|
j|
j|
jd |	tdg|
jj q6d	|kr|d
 d }
| |
|d	 }
|
jd ur||
j|
j	|
j
|
j|
j|
j|
j|
j|
jd	 n||
j|
j	|
j
|
j|
j|
jd |	tdg|
jj q6d|v sd|v rtj|| dd||< q6|ds(dd || D }tjjj|}t| dkr| ||< q6| \}}}||||  ||< q6t|dkr4||d< t|	dkr?|	|d< |S )Nr   c                 S   s   i | ]}|t  qS r   )list).0kr   r   r   
<dictcomp>C       z*GroupCollator.__call__.<locals>.<dictcomp>Zsentence1_gisZgis1)		input_idsattention_masktoken_type_idsrel_type_idsabsolute_position_idsrelative_position_idsprov_idscity_idsdist_ids)r'   r(   r)   r*   r+   r,      Zsentence2_gisZgis2Zqidlabels)dimr   c                 S   s   g | ]}|  qS r   )t)r#   itr   r   r   
<listcomp>   r&   z*GroupCollator.__call__.<locals>.<listcomp>   gis_listgis_tp)
isinstancer"   sumkeysitemsr   r   r-   r'   r(   r)   r*   r+   r,   r.   r/   torchZ
LongTensortoZdevicecat
startswithr
   utilsZrnnZpad_sequencer   sizer3   view)r   r    r;   batchZeler$   vZmerged_batchr7   r8   r   Zk_tpadlb1b2r   r   r   __call__?   s   




zGroupCollator.__call__N)
__name__
__module____qualname____doc__r   r   r   strr   rJ   r   r   r   r   r      s    *!r   )module_namec                       s   e Zd Zdddddddddef
deeeeje	f  dee	 dee
 dee
 dee
 deeeef  d	eeeef  d
ee deejjejjjf dee	 f fddZ  ZS )MGeoRankingTrainerN)NNmodelcfg_filecfg_modify_fnarg_parse_fndata_collatortrain_dataseteval_datasetpreprocessor
optimizersmodel_revisionc                    s:   |d u rt  }t jd|||||||	|||
d
| d S )N)
rR   rS   rT   rU   rV   rY   rZ   rW   rX   r[   r   )r   super__init__)r   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   kwargs	__class__r   r   r]      s    
zMGeoRankingTrainer.__init__)rK   rL   rM   r   r   r	   r   r
   ModulerO   r   r   r   r   r   r=   ZoptimZ	OptimizerZlr_schedulerZ_LRSchedulerr]   __classcell__r   r   r_   r   rQ      sD    	
rQ   )#dataclassesr   typingr   r   r   r   r   r   r	   r=   r
   Ztorch.utils.datar   Zmodelscope.metainfor   Zmodelscope.models.baser   Z modelscope.msdatasets.ms_datasetr   Zmodelscope.preprocessors.baser   Zmodelscope.trainers.builderr   Zmodelscope.trainers.nlp_trainerr   Zmodelscope.utils.constantr   Zmodelscope.utils.loggerr   loggerr   Zregister_moduleZmgeo_ranking_trainerrQ   r   r   r   r   <module>   s&   $ 