
    5i6                        d dl mZ d dlZddlmZ dZdZej                  j                  Z	dZ
ddZd	 Zd
 Z	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZy)    )annotationsN   )err_exitz#Found following invalid filters: {}z/Too many items given in field {}, maximum is {})refzhet-refhomzhet-althalfno-callc                @    t        d|  t        j                         y )Nz	WARNING: )file)printsysstderr)msgs    /home/marpiech/ifpan-abm-pgxpred/analysis/marpiech-gwas-test/venv/lib/python3.12/site-packages/dxpy/dx_extract_utils/input_validation.pywarnr      s    	IcU
#**-    c                    t        | t              sy| D ]A  }t        dk(  r$t        |t              rt        |t              r. yt        |t              rA y y)NFr   T)
isinstancelistpython_versionstrunicode)objectitems     r   is_list_of_stringsr      sN    fd# QtS)Zg-FdC( r   c                   | j                         }|dk(  rd|v rd|v rt        d       d|v sd|v st        d       d|v r\t        | d         st        t        j	                  d             t        | d         dkD  rt        t        j	                  dd             d|v rt        | d         st        t        j	                  d             | d   D ]%  }|dvst        t        j	                  d             ' t        | d         dkD  rt        t        j	                  dd             d	|v ry| d	   d
   }| d	   d   }|dk  rt        t        j	                  d	             |dkD  rt        t        j	                  d	             ||kD  rt        t        j	                  d	             d|v ry| d   d
   }| d   d   }|dk  rt        t        j	                  d             |dkD  rt        t        j	                  d             ||kD  rt        t        j	                  d             d|v rt        | d         dkD  rt        t        j	                  dd             | d   D ]}  }|j                         }d|v rd|v rd|v st        t        j	                  d             t        t        |j                                     r`t        t        j	                  d              |dk(  r| j                         }d| j                         v s/d| j                         v sd| j                         v st        d       d|v rd|v sd|v r;t        d       n/d|v rd|v sd|v r#t        d       nd|v rd|v sd|v rt        d       d|v sd|v rd|vrd|vrd|vrt        d       |D ]/  }t        | |         rt        t        j	                  |             1 d|v r0t        | d         dkD  rt        t        j	                  dd             d|v r0t        | d         dkD  rt        t        j	                  dd             d|v r0t        | d         dkD  rt        t        j	                  dd             d|v r0t        | d         dkD  rt        t        j	                  dd             d|v r0t        | d         dkD  rt        t        j	                  dd             |dk(  rv| j                         }d|v sd|v st        d       d|v rd|v rt        d        d|v r\t        | d         st        t        j	                  d             t        | d         dkD  rt        t        j	                  dd             d|v rt        | d         dkD  rt        t        j	                  dd             | d   D ]  }|j                         }d|v rd|v st        t        j	                  d             d|v rt        t        j	                  d             t        t        |j                                     r~t        t        j	                  d              d!|v r\t        | d!         st        t        j	                  d!             t        | d!         d"kD  rt        t        j	                  d!d"             d#|v rt        | d#         s!t        t        j	                  d#      d$z          | d#   D ];  }|t        vst        t        j	                  d#      d%j	                  |      z          = t        | d#         d&kD  r t        t        j	                  d#d'             y y y y )(NallelelocationrsidzDlocation and rsid fields cannot both be specified in the same filterz=Either location or rsid must be specified in an allele filterd   type)SNPInsDelMixeddataset_alt_afminmaxr      gnomad_alt_af
chromosomestarting_positionending_position
annotation	allele_id	gene_namegene_idzBallele_id, gene_name, or gene_id is required in annotation_filterszUOnly one of allele_id, gene_name, and gene_id can be provided in an annotation filterconsequencesputative_impact
feature_idzvconsequences and putative impact fields may not be specified without at least one of gene_id, gene_name, or feature_idhgvs_chgvs_pgenotypez5allele_id or location is required in genotype filterszRallele_id and location fields cannot both be specified in the same genotype filter	sample_idi  genotype_typez'
genotype type is not a list of stringsz&
value {} is not a valid genotype_type      )
keysr   r   malformed_filterformatlenmaxitem_messager   valuesGENOTYPE_TYPES)	filterfilter_typer<   r   min_valmax_valindiv_locationindiv_loc_keyskeys	            r   validate_filterrJ   (   s   ;;=Dh$Vt^V t#4TUT>%fVn5)00896&>"S(//<=T>%fVn5)0089v >==-44V<=> 6&>"S(//<= t#-.u5G-.u5G{)001ABC{)001ABC )001ABCd"_-e4G_-e4G{)00AB{)00AB )00AB6*%&,//
C@A"("4 B!/!4!4!6 "^3,>*n<-44Z@A)$~/D/D/F*GH-44Z@AB l"{{}FKKM)v{{},V[[]*T
 $t#d):k $t#)<k D T!{d':k
 d"(9T(A$& ,!-J  	7C%fSk2)0056	7
 $6+&'#-//SAB$6+&'#-//SAB6)$%+//	3?@t6(#$s*//#>?t6(#$s*//#>?j {{}t#zT'9LM$:#5ij $%f[&9:)00=> 6+&'#-//SAB 6*%&,//
C@A"("4 	B!/!4!4!6$6;NR`;`-44Z@A$6-44Z@A)$~/D/D/F*GH-44Z@A	B $%f[&9:)00=> 6+&'$.//TBC d"%f_&=>)00ADnno / ~--44_EGpGwGwx|G}}~
 6/*+a///CD 0 #W !r   c                2   |s| r|t        d       dt        |      j                          dt        |      j                          dt        |      j                          }|r|du r|du r|st        d|        | r|r|du r|du st        d|        y y y )NzThe --infer-ref or --infer-nocall flags can only be used when the undelying assay is of version generalized_assay_model_version 1.0.1/1.1.1 or higher.z:Exclusion parameters set at the ingestion: exclude_nocall=z, exclude_halfref=z, exclude_refdata=FzThe --infer-ref flag can only be used when exclusion parameters at ingestion were set to 'exclude_nocall=false', 'exclude_halfref=false', and 'exclude_refdata=true'.
zThe --infer-nocall flag can only be used when exclusion parameters at ingestion were set to 'exclude_nocall=true', 'exclude_halfref=false', and 'exclude_refdata=false'.
)r   r   lower)infer_nocall	infer_refexclude_nocallexclude_refdataexclude_halfrefingestion_parameters_strs         r   validate_infer_flagsrS      s,    	\~'= e	
 "\\_`n\o\u\u\w[x  yK  LO  P_  L`  Lf  Lf  Lh  Ki  i{  |  @O  |P  |V  |V  |X  {Y   Ze#5( z  {S  zT  U 5(5( }  ~V  }W  X )	 r   c                >   d|v r|r'| s%d|d   v rt        d       |d   g k(  rt        d       |r'|s%d|d   v rt        d       |d   g k(  rt        d       |r%d|d   v rt        d	       |d   g k(  rt        d
       |d|d   v s	|d|d   v rt        d       y y y y )Nr9   r	   zFilter requested genotype type 'no-call', genotype entries of this type were not ingested in the provided dataset and the --infer-nocall flag is not set!zNo genotype type requested in the filter. All genotype types will be returned. Genotype entries of type 'no-call' were not ingested in the provided dataset and the --infer-nocall flag is not set!r   zFilter requested genotype type 'ref', genotype entries of this type were not ingested in the provided dataset and the --infer-ref flag is not set!zNo genotype type requested in the filter. All genotype types will be returned. Genotype entries of type 'ref' were not ingested in the provided dataset and the --infer-ref flag is not set!r   zsFilter requested genotype type 'half', 'half-ref genotype' entries (0/.) were not ingested in the provided dataset!zNo genotype type requested in the filter. All genotype types will be returned.  'half-ref' genotype entries (0/.) were not ingested in the provided dataset!z"ref" and "no-call" genotype types can only be filtered when the undelying assay is of version generalized_assay_model_version 1.0.1/1.1.1 or higher.)r   r   rM   rN   filter_dictrO   rP   rQ   s         r   )validate_filter_applicable_genotype_typesrW     s
    +%,K88 p ?+r1 Z 9O44 i ?+r1 S _55 J ?+r1 s #_55%[99 h : &? &r   c                B    t        | ||||       t        | |||||       y )N)rS   rW   rU   s         r   inference_validationrY   :  s3     i/ .r   )r   r   )
rM   boolrN   rZ   rO   rZ   rP   rZ   rQ   rZ   )rM   rZ   rN   rZ   rV   dictrO   rZ   rP   rZ   rQ   rZ   )
__future__r   r   
exceptionsr   r=   r@   version_infomajorr   rB   r   r   rJ   rS   rW   rY    r   r   <module>ra      s    " 
 ! 9 C!!''.}E~  	
 B/// / 	/
 / /d  	
  r   