U
    qh%                     @  sH   d dl mZ d dlZd dlmZmZmZ d dlm	Z	 G dd de	Z
dS )    )annotationsN)compute_probitcompute_softmax_zeroexpit)OpRunAiOnnxMlc                   @  s"   e Zd Zedd ZdddZdS )LinearClassifierc                   s(    dk	r t  fdd| D } | |fS )zNReplaces int64 predicted labels by the corresponding
        strings.
        Nc                   s   g | ]} | qS  r   .0iclasslabels_ints_stringr   T/tmp/pip-unpacked-wheel-xnis5xre/onnx/reference/ops/aionnxml/op_linear_classifier.py
<listcomp>   s     zBLinearClassifier._post_process_predicted_label.<locals>.<listcomp>)nparray)labelscoresr   r   r   r   _post_process_predicted_label   s    z.LinearClassifier._post_process_predicted_labelNc                   s  |j }|tjkr|tj}t||j }t||j }|d|jd fj}t	||}	|d k	rr|	|7 }	t
t p|g tpg }
|jd dkr|
dkrtj|	jd dftjd}|	d d df  |d d df< |	d d df |d d df< |}	|dkrn|dkrt|	}	n|dkr`tj|	|	j
ddd	|	d
 t|	}	t|	|	jddd	}	n|dkrt|	jd D ]&}t|	|d d f |	|d d f< qxnX|dkrt|	jd D ]4}t|	jd D ]}t|	||f |	||f< q̐qntd|	jd dkrftj|	dd} d k	rBtj fdd|D tjd}n"d k	rtfdd|D }n|dkrtdnd} d k	rt|	|k d dtj }nBd k	rt|	|kd dtj }n|	|ktj }||	fS )N      r   )dtypeNONEZLOGISTICZSOFTMAX)axisZkeepdims)outZSOFTMAX_ZEROZPROBITz+Unknown post_transform: '{post_transform}'.)r   c                   s   g | ]} | qS r   r   r	   )classlabels_intsr   r   r   O   s     z)LinearClassifier._run.<locals>.<listcomp>c                   s   g | ]} | qS r   r   r	   )classlabels_stringsr   r   r   Q   s     g      ? )r   r   Zfloat64ZastypeZfloat32r   ZreshapeshapeTdotmaxlenemptyr   subtractexpdividesumranger   r   NotImplementedErrorZargmaxZint64whereZravel)selfxr   r   ZcoefficientsZ
interceptsZmulti_classZpost_transformr   r   Z	n_classesZ
new_scoresr   jlabels	thresholdr   )r   r   r   _run   sl    






&
"
 


zLinearClassifier._run)NNNNNN)__name__
__module____qualname__staticmethodr   r1   r   r   r   r   r      s   
      r   )
__future__r   Znumpyr   Z.onnx.reference.ops.aionnxml._common_classifierr   r   r   Z,onnx.reference.ops.aionnxml._op_run_aionnxmlr   r   r   r   r   r   <module>   s   