Ë
    °Ó^j÷o  ã                   ó  — d 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
mZmZmZ ddlZddlZddlmZ ddl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mZmZ ddl m!Z! ddl"m#Z#m$Z$m%Z% ede#deeef   fd„«       Z&de#de
dejN                  fd„Z(de#dede)ddfd„Z*de#ddfd„Z+de#ddfd„Z,de#ddfd„Z-de#dee
e
ejN                  ejN                  f   fd„Z.dede#de#ddfd„Z/de#ddfd„Z0de#ddfd„Z1de#ddfd „Z2de#ddfd!„Z3 ed"ee«      Z4dee4   d#ed$e
d%e
de4f
d&„Z5de#ded'e6d(e6d)e6ddfd*„Z7de#ddfd+„Z8de#ddfd,„Z9ej                  d-d.œde#d/e:defd0„«       Z;de#ddfd1„Z<de#ddfd2„Z=de#ddfd3„Z>de#ddfd4„Z?de#ddfd5„Z@de#ddfd6„ZAy)7zTests for the ordinal re-coder.é    N)ÚThreadPoolExecutor)Úcache)ÚAnyÚTupleÚTypeÚTypeVaré   )ÚEvalsLog)ÚDMatrixÚExtMemQuantileDMatrixÚQuantileDMatrix)Ú_lazy_load_cudf_is_cat)Útrainé   )ÚIteratorForTestÚis_pd_cat_dtypeÚmake_batchesÚmake_categoricalÚmemory)Úget_basescore)ÚDeviceÚassert_allcloseÚpredictor_equalÚdeviceÚreturnc                 óŒ   — | dk(  r ddl }|j                  }|j                  }||fS ddl}|j                  }|j                  }||fS )z3Get data frame implementation based on the ]device.Úcpur   N)ÚpandasÚ	DataFrameÚSeriesÚcudf)r   ÚpdÚDfÚSerr!   s        úb/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/xgboost/testing/ordinal.pyÚget_df_implr&      sK   € ð �‚Ûà�\‰\ˆØ�i‰iˆð ˆsˆ7€Nó	 	à�^‰^ˆØ�k‰kˆØˆsˆ7€Nó    Údatac                 ó`   — | dk(  rt        j                  |«      S ddl}|j                  |«      S )zWrapper to get an array.r   r   N)ÚnpÚasarrayÚcupy)r   r(   Úcps      r%   r+   r+   ,   s*   € à�‚Ü�z‰z˜$ÓÐÛà�:‰:�dÓÐr'   ÚXyÚboosterc                 ó^  — |j                  d¬«      j                  «       }|€J ‚t        j                  j	                  d«      }|j                  |j                  |j                  «       ¬«      «       t        || dœ|d«      }|j                  d¬«      j                  «       }|€J ‚||k(  sJ ‚y)z-Compare the results from DMatrix and Booster.T©Úexport_to_arrowNéé  ©Úsize)r/   r   r   )	Úget_categoriesÚto_arrowr*   ÚrandomÚdefault_rngÚ	set_labelÚnormalÚnum_rowr   )r   r.   r/   Úcats_dmÚrngÚbstÚcats_bsts          r%   Úcomp_boosterrA   5   s¤   € à×Ñ°ÐÓ5×>Ñ>Ó@€GØÐÐÐä
�)‰)×
Ñ
 Ó
%€CØ‡L�L�—‘ §¡£�Ó.Ô/Ü
˜G¨vÑ6¸¸AÓ
>€CØ×!Ñ!°$Ð!Ó7×@Ñ@ÓB€HØÐÐÐØ�hÒÐÑr'   c                 ó\   — dt         dt        ddfd„}t        t        fD ]  } || |«       Œ y)z8Basic tests for the container class used by the DMatrix.r   ÚDMatrixTr   Nc                 óÆ  — t        | «      \  }} |dddgid¬«      }|j                  j                  j                  } ||d¬«      }|j                  dgk(  sJ ‚|j
                  dgk(  sJ ‚|j                  d¬«      j                  «       }|€J ‚t        |«      }t        |d   «      t        |«      k(  sJ ‚t        t        |d   «      «      D ]4  }	t        |d   |	   «      t        ||	   «      k(  rŒ$J |d   |	   ||	   f«       ‚  |dg d	¢id¬«      } ||d¬«      }|j                  d¬«      j                  «       }
|
€J ‚t        |
«      }|d   j                  «       }|j                  d
   dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  dk(  sJ ‚|j                  «       }|j                   j                  dk(  sJ ‚t#        | |j                   t%        j&                  g d¢«      «       t#        | |j(                  t%        j&                  g d¢«      «       t#        | |j*                  t%        j&                  g d¢«      «       t-        | |d«       t-        | |d«        |dg d¢id¬«      } ||d¬«      }t-        | |d«       t-        | |d«       t/        j0                  t2        d¬«      5  |j                  d¬«      j                  «        d d d «       y # 1 sw Y   y xY w)NÚcÚcdefÚabcÚcategory©ÚdtypeT©Úenable_categoricalr1   )rF   NrG   rG   r   r   r	   é   )g      ð?ç        rN   )r   r   r   r	   rM   )r   r   r   ÚgbtreeÚdart)rF   NrG   zabc r2   ©ÚmatchF)r&   rE   ÚcatÚ
categoriesÚfeature_namesÚfeature_typesr6   r7   ÚdictÚlenÚrangeÚstrÚ	to_pandasÚilocr5   Úget_datar(   r   r*   ÚarrayÚindptrÚindicesrA   ÚpytestÚraisesÚ
ValueError)r   rC   r#   Ú_ÚdfrT   r.   ÚresultsÚ
results_diÚiÚcatsÚcats_idÚserÚcsrs                 r%   Úrun_dispatchz'run_cat_container.<locals>.run_dispatchE   s»  € Ü˜FÓ#‰ˆˆAá��v˜u�oÐ&¨jÔ9ˆØ—T‘T—X‘X×(Ñ(ˆ
á�b¨TÔ2ˆØ×Ñ C 5Ò(Ð(Ð(Ø×Ñ C 5Ò(Ð(Ð(Ø×#Ñ#°DÐ#Ó9×BÑBÓDˆØÐ"Ð"Ð"Ü˜'“]ˆ
Ü�:˜c‘?Ó#¤s¨:£Ò6Ð6Ð6Ü”s˜: c™?Ó+Ó,ò 	ˆAÜ�z #‘ qÑ)Ó*¬c°*¸Q±-Ó.@Ó@ð Ø˜3‘ Ñ"Ø˜1‘ðCó Ð@ð	ñ �Ò2Ð3¸:ÔFˆÙ�b¨TÔ2ˆà× Ñ °Ð Ó6×?Ñ?ÓAˆØÐÐÐÜ�t“*ˆØ�c‰l×$Ñ$Ó&ˆØ�x‰x˜‰{˜eÒ#Ð#Ð#Ø�x‰x˜‰{˜fÒ$Ð$Ð$Ø�x‰x˜1Š}Ðˆ}à�k‰k‹mˆØ�x‰x�}‰} Ò!Ð!Ð!Ü˜ §¡¬"¯(©(²?Ó*CÔDÜ˜ §
¡
¬B¯H©H²_Ó,EÔFÜ˜ §¡¬R¯X©X²iÓ-@ÔAä�V˜R Ô*Ü�V˜R Ô(ñ �Ò4Ð5¸ZÔHˆÙ�b¨TÔ2ˆä�V˜R Ô*Ü�V˜R Ô(ä�]‰]œ:Ð->Ô?ñ 	@Ø×Ñ¨eÐÓ4×=Ñ=Ô?÷	@÷ 	@ñ 	@ús   Ê-!KËK )r   r   r   r   )r   rm   Údms      r%   Úrun_cat_containerro   B   sA   € ð0@œVð 0@¬tð 0@¸ó 0@ôd œÐ(ò !ˆÙ�V˜RÕ ñ!r'   c                 óŠ  ‡ ‡‡‡— ddl }	 t        «       Št        d«      Šdt        d|j                  ddfˆ ˆfd	„Šd
t        ddfˆˆ ˆfd„}t        t        fD ]
  } ||«       Œ t        ddd‰ dk(  ¬«      }t        d„ |«      \  }}}t        t        fD ]ƒ  } ||||¬«      }	|	j                  d¬«      j                  «       }
|
€J ‚|
D ]	  \  }}|€Œ	J ‚ t        j                  t         d¬«      5  |	j                  d¬«      j                  «        ddd«       Œ… y# t        $ r dt        dt        fd„ŠY �Œ!w xY w# 1 sw Y   Œ°xY w)zRun checks with mixed types.r   Nrd   r   c                  ó   — y)NF© )rd   s    r%   Úis_cudf_catz,run_cat_container_mixed.<locals>.is_cudf_cat„   s   € Ør'   é   r.   ÚXc                 óæ  •— | j                  d¬«      j                  «       }|€J ‚t        |«      }|j                  D �]  }t	        ||   j
                  «      s ‰||   j
                  «      râ||   }|€J ‚t        |j                  «       «      } ‰||   j
                  «      r0||   j                  «       j                  «       j                  «       }n!||   j                  «       j                  «       }t        j                  |v r|j                  t        j                  «       d |v r|j                  d «       t        |«      }||k(  r�ŒJ ‚||   €�ŒJ ‚ t        | d«      sæt        | t        «      rJ ‚t!        j"                  «       5 }t$        j&                  j)                  |d«      }| j+                  |«       t-        |«      }	|	j                  d¬«      j                  «       }
|
€J ‚t        |
«      }|j/                  «       D ]8  \  }}||   }|€|€ŒJ ‚|€J ‚|j                  «       |j                  «       k(  rŒ8J ‚ 	 d d d «       t1        ‰| d«       t1        ‰| d«       y # 1 sw Y   Œ$xY w)NTr1   ÚrefzDMatrix.binaryrO   rP   )r6   r7   rW   Úcolumnsr   rJ   ÚsortedÚ	to_pylistÚuniqueÚtolistr*   ÚnanÚremoveÚhasattrÚ
isinstancer   ÚtempfileÚTemporaryDirectoryÚosÚpathÚjoinÚsave_binaryr   ÚitemsrA   )r.   ru   ri   Úcats_diÚfnameÚvfÚaw_listÚpd_listÚtmpdirÚXy_1Úcats_1Ú	cats_1_diÚkÚv_0Úv_1r   rs   s                  €€r%   Úcheckz&run_cat_container_mixed.<locals>.check‰   s9  ø€ Ø× Ñ °Ð Ó6×?Ñ?ÓAˆØÐÐÐÜ�t“*ˆà—Y‘Yó 	.ˆEÜ˜q ™xŸ~™~Ô.±+¸aÀ¹h¿n¹nÔ2MØ˜U‘^�Ø�~Ð%�~Ü  §¡£Ó0�Ù˜q ™xŸ~™~Ô.Ø$% e¡H§O¡OÓ$5×$>Ñ$>Ó$@×$JÑ$JÓ$L‘Gà ™hŸo™oÓ/×6Ñ6Ó8�GÜ—6‘6˜WÑ$Ø—N‘N¤2§6¡6Ô*Ø˜7‘?Ø—N‘N 4Ô(Ü  ›/�Ø 'Ô)Ð)Ð)à˜u‘~Ò-Ð-Ð-ð!	.ô$ �r˜5Ô!Ü! "¤oÔ6Ð6Ð6Ü×,Ñ,Ó.ð B°&ÜŸ™Ÿ™ VÐ-=Ó>�Ø—‘˜uÔ%ä˜u“~�Ø×,Ñ,¸TÐ,ÓB×KÑKÓM�ØÐ)Ð)Ð)Ü  ›L�	à%Ÿm™m›oò B‘F�A�sØ# A™,�CØ�{Ø"™{Ð*˜{à"˜Ð.˜Ø"Ÿ}™}›°#·-±-³/ÓAÐAÐAñB÷Bô" 	�V˜R Ô*Ü�V˜R Õ(÷%Bð Bús   ÆBI'È'I'É I'É'I0rC   c           
      óš  •— t        ‰dddt        j                  ‰¬«      \  }} | ||d¬«      } ‰||«       t        ‰ddddt        j                  ‰¬«      \  }} | ||d¬«      } ‰||«       t        ‰dddddt        j                  ‰¬	«      \  }} | ||d¬«      } ‰||«       t        ‰dddt        j                  ‰¬«      \  }} | ||d¬«      } ‰||«       t        ‰ddddt        j                  ‰¬«      \  }} | ||d¬«      } ‰||«       t        ‰dddddt        j                  ‰¬	«      \  }} | ||d¬«      } ‰||«       y )
Né   é   F)ÚonehotÚ	cat_dtyper   TrK   ç      à?)r˜   Ú	cat_ratior™   r   )r˜   r›   Úsparsityr™   r   )r   r*   Ústr_Úint64)rC   ru   Úyr.   r”   r   Ú	n_sampless       €€€r%   rm   z-run_cat_container_mixed.<locals>.run_dispatch¶   sƒ  ø€ äØ�r˜1 U´b·g±gÀfô
‰ˆˆ1ñ �a˜¨tÔ4ˆÙˆb�!Œô  ØØØØØÜ—g‘gØô
‰ˆˆ1ñ �a˜¨tÔ4ˆÙˆb�!Œô  ØØØØØØÜ—g‘gØô	
‰ˆˆ1ñ �a˜¨tÔ4ˆÙˆb�!Œô  Ø�r˜1 U´b·h±hÀvô
‰ˆˆ1ñ �a˜¨tÔ4ˆÙˆb�!Œô  ØØØØØÜ—h‘hØô
‰ˆˆ1ñ �a˜¨tÔ4ˆÙˆb�!Œô  ØØØØØØÜ—h‘hØô	
‰ˆˆ1ñ �a˜¨tÔ4ˆÙˆb�!�r'   é€   é   r   Úcuda)Ún_samples_per_batchÚ
n_featuresÚ	n_batchesÚuse_cupyc                 ó   — | d   S )Nr   rr   )Úxs    r%   ú<lambda>z)run_cat_container_mixed.<locals>.<lambda>  s
   € ˜A˜a™D€ r'   )ÚweightTr1   r2   rQ   F)r   r   ÚImportErrorr   ÚboolÚintr   r   r   r   r   Úmapr6   r7   ra   rb   rc   )r   r"   rm   rn   Úbatchesru   rŸ   ÚwrC   r.   Úall_numrd   Úvr”   rs   r    s   `            @@@r%   Úrun_cat_container_mixedr´   |   sy  û€ ãðÜ,Ó.ˆô �E“
€Ið+)”'ð +)˜bŸl™lð +)¨tö +)ðZCœtð C¨÷ CôJ œÐ(ò ˆÙ�RÕðô Ø¨A¸ÀVÈvÑEUô€Gô ‘. 'Ó*�G€A€qˆ!äœoÐ.ò @ˆÙ�a˜ 1Ô%ˆØ×#Ñ#°DÐ#Ó9×BÑBÓDˆØÐ"Ð"Ð"Øò 	‰DˆAˆqØ‘9Ð�9ð	ô �]‰]œ:Ð->Ô?ñ 	@Ø×Ñ¨eÐÓ4×=Ñ=Ô?÷	@ð 	@ñ@øôE ò ð	œ3ð 	¤4ö 	ðú÷R	@ð 	@ús   Š
D Ã-!D9ÄD6Ä5D6Ä9E	c           
      óú  — d}d}d}d}g g }}t        |«      D ]G  }t        |||ddt        j                  | ¬«      \  }}	|j	                  |«       |j	                  |	«       ŒI t        ||dd	| d
k(  ¬«      }
t        |
d¬«      }|j                  d¬«      j                  «       }|�t        |«      |k(  sJ ‚t        |«      }|j                  «       D ]*  \  }}|€J ‚|j                  dk(  sJ ‚t        |«      |k(  rŒ*J ‚ y)z8Test the categories container for iterator-based inputs.r¢   é   é@   é   Frš   )r˜   rœ   r™   r   Nr   r£   )r   Úon_hostTrK   r1   r   )rY   r   r*   rž   Úappendr   r   r6   r7   rX   rW   r‡   Ú
null_count)r   r¦   r¥   r¤   Ún_catsru   rŸ   rd   ÚX_iÚy_iÚitr.   ri   rˆ   r³   s                  r%   Úrun_cat_container_iterrÀ     s  € à€IØ€JØÐØ€Fàˆr€q€AÜ�9Óò ˆÜ#ØØØØØÜ—h‘hØô
‰ˆˆSð 	
�‰�ŒØ	�‰��ðô 
˜˜A˜t¨7¸FÀfÑ<LÔ	M€Bä	˜r°dÔ	;€BØ×Ñ¨TÐÓ2×;Ñ;Ó=€DØÐ¤ D£	¨ZÒ 7Ð7Ð7Ü�4‹j€GØ—‘“ò  ‰ˆˆ1Øˆ}Ðˆ}Ø�|‰|˜qÒ Ð Ð Ü�1‹v˜ÓÐÐñ r'   c                 óR  — t        | «      \  }} |dg d¢id¬«      }|j                  j                  j                  }t	        | t        | |«      t        j                  g d¢«      «       t        j                  |j                  d   |j                  d   g«      }t        j                  j	                  |ddg«        |dd	d
gid¬«      }|j                  j                  j                  }t	        | |t        j                  ddg«      «       t        j                  g d¢«      }||||fS )NrE   ©rF   rG   ÚdefrH   rI   ©r   r   r	   r	   r   r   rÃ   rG   ©r   r   r	   )
r&   rE   rS   Úcodesr   r+   r*   r^   r\   Útesting)r   r#   rd   ÚencrÆ   ÚencodedÚreencrŸ   s           r%   Ú_basic_examplerË   0  sè   € Ü˜Ó�E€Bˆá
ˆcÒ)Ð*°*Ô
=€CØ�E‰E�I‰I�O‰O€EÜ�FœG F¨EÓ2´B·H±HºYÓ4GÔHÜ�h‰h˜Ÿ
™
 1™ u§z¡z°!¡}Ð5Ó6€GÜ‡J�J×Ñ˜w¨¨A¨Ô/á��e˜U�^Ð$¨JÔ7€EØ�G‰G�K‰K×Ñ€EÜ�F˜E¤2§8¡8¨Q°¨FÓ#3Ô4ä
�‰’Ó€Aà��w Ð!Ð!r'   rC   Útdevicec                 ó  — t        |«      \  }}}} | ||d¬«      }t        d|i|d¬«      }|j                  |«      }	|j                  |«      }
t        ||	|
«        | |d¬«      }|j	                  |«      }t        ||	|«       y)z Enable tests with mixed devices.TrK   r   r¢   ©Únum_boost_roundN)rË   r   Úinplace_predictr   Úpredict)rC   r   rÌ   rÈ   rÊ   rÉ   rŸ   r.   r/   Úpredt0Úpredt1ÚfmatÚpredt2s                r%   Úrun_basic_predictrÖ   B  sˆ   € ä+¨FÓ3Ñ€Cˆ�˜á	�#�q¨TÔ	2€BÜ�X˜wÐ'¨¸QÔ?€Gà×$Ñ$ UÓ+€FØ×$Ñ$ WÓ-€FÜ�F˜F FÔ+á�E¨dÔ3€DØ�_‰_˜TÓ"€FÜ�F˜F FÕ+r'   c                 ó°   ‡ ‡— t        ‰ «      \  Š}t        t        fD ]  }t        |‰ ‰ «       Œ dt        ddfˆˆ fd„}t        t        fD ]
  } ||«       Œ y)z,Basic tests for re-coding during prediction.rC   r   Nc                 ó‚  •—  ‰g d¢g d¢dœd¬«      }t        j                  g d¢«      }|j                  j                  j                  }t        ‰t        ‰|«      t        j                  g d¢«      «       t        j                  |j                  d   |j                  d	   g«      }|j                  j                  j                  }t        ‰t        ‰|«      t        j                  g d¢«      «       t        j                  |j                  d   |j                  d	   g«      }t        j                  ||gd	¬
«      } | ||d¬«      }t        d‰i|d¬«      }	 ‰dd	gddgdœd¬«      }|	j                  |«      }
|	j                  |«      }t        ‰|
|«        | |d¬«      }|	j                  |«      }t        ‰|
|«       y )N©r	   r   rM   rÂ   ©ÚbrE   rH   rI   rÅ   rÄ   r	   r   )ÚaxisTrK   r   r¢   rÎ   rM   rÃ   rG   )r*   r^   rÛ   rS   rÆ   r   r+   r\   rE   Ústackr   rÐ   rÑ   )rC   re   rŸ   Úb_codesÚ	b_encodedÚc_codesÚ	c_encodedrÉ   r.   r/   rÒ   rÓ   rÔ   rÕ   r#   r   s                 €€r%   Ú	run_mixedz"run_cat_predict.<locals>.run_mixedY  sf  ø€ Ù’iÒ&<Ñ=ÀZÔPˆÜ�H‰H’YÓˆð —$‘$—(‘(—.‘.ˆÜ˜¤¨°Ó 8¼"¿(¹(Â9Ó:MÔNä—H‘H˜gŸl™l¨1™o¨w¯|©|¸A©Ð?Ó@ˆ	à—$‘$—(‘(—.‘.ˆÜ˜¤¨°Ó 8¼"¿(¹(Â9Ó:MÔNä—H‘H˜gŸl™l¨1™o¨w¯|©|¸A©Ð?Ó@ˆ	Ü—(‘(˜I yÐ1¸Ô:ˆá�b˜!°Ô5ˆÜ˜ 6Ð*¨BÀÔBˆá�q˜!�f E¨5 >Ñ2¸*ÔEˆØ×(Ñ(¨Ó,ˆØ×(Ñ(¨Ó1ˆÜ˜ ¨Ô/á˜¨tÔ4ˆØ—‘ Ó&ˆÜ˜ ¨Õ/r'   )r&   r   r   rÖ   r   )r   rd   rn   râ   r#   s   `   @r%   Úrun_cat_predictrã   R  sa   ù€ ä˜Ó�E€BˆäœÐ(ò .ˆÜ˜"˜f fÕ-ð.ð0œDð 0 Tö 0ô8 œÐ(ò ˆÙ�"�ñr'   c                 óì  ‡ ‡‡	— t        ‰ «      \  Š}t        j                  g d¢«      Š	dt        ddfˆˆ ˆ	fd„}t        t
        fD ]
  } ||«       Œ  ‰g d¢g d¢dœd	¬
«      }t	        |‰	d¬«      }t        d‰ i|d¬«      } |t        ‰ g d¢«      d	¬
«      |d<   d}t        j                  t        |¬«      5  |j                  |«       ddd«       t        j                  t        |¬«      5  t	        |d|j                  «       ¬«       ddd«       t        j                  t        |¬«      5  t        |d|j                  «       ¬«       ddd«       y# 1 sw Y   ŒŠxY w# 1 sw Y   ŒVxY w# 1 sw Y   yxY w)zBasic tests for invalid inputs.rÅ   rC   r   Nc                 óf  •—  ‰g d¢g d¢dœd¬«      } | |‰d¬«      }t        d‰i|d	¬
«      }|d   j                  t        j                  «      |d<   t	        j
                  t        d¬«      5  |j                  |«       d d d «        | |‰d¬«      }t	        j
                  t        d¬«      5  |j                  |«       d d d «        ‰g d¢g d¢dœd¬«      }t	        j
                  t        d¬«      5  |j                  |«       d d d «       y # 1 sw Y   Œ�xY w# 1 sw Y   Œ\xY w# 1 sw Y   y xY w)NrÙ   rÂ   rÚ   rH   rI   TrK   r   r¢   rÎ   rÛ   zThe data type doesn't matchrQ   )r	   r   rM   r¢   )rF   rG   rÃ   Úbbcú$Found a category not in the training)	r   Úastyper*   rž   ra   rb   rc   rÐ   rÑ   )rC   re   r.   r/   r#   r   rŸ   s       €€€r%   Úrun_invalidz$run_cat_invalid.<locals>.run_invalid~  s  ø€ Ù’iÒ&<Ñ=ÀZÔPˆá�b˜!°Ô5ˆÜ˜ 6Ð*¨BÀÔBˆØ�S‘'—.‘.¤§¡Ó*ˆˆ3‰Ü�]‰]œ:Ð-JÔKñ 	(Ø×#Ñ# BÔ'÷	(ñ �b˜!°Ô5ˆÜ�]‰]œ:Ð-JÔKñ 	 Ø�O‰O˜BÔ÷	 ñ ÚÒ%BÑCÈ:ô
ˆô �]‰]œ:Ð-SÔTñ 	(Ø×#Ñ# BÔ'÷	(ð 	(÷	(ð 	(ú÷	 ð 	 ú÷	(ð 	(ús$   Á.DÂ.DÃ4D'ÄDÄD$Ä'D0rÙ   rÂ   rÚ   rH   rI   TrK   r   r¢   rÎ   )r   r   r   rE   z7index type must match between the training and test setrQ   ©rL   rV   )r&   r*   r^   r   r   r   r   r+   ra   rb   rc   rÐ   r6   )
r   r$   ré   rn   re   r.   r/   Úmsgr#   rŸ   s
   `       @@r%   Úrun_cat_invalidrì   y  sQ  ú€ ä˜&Ó!�G€BˆÜ
�‰’Ó€Að(œdð ( t÷ (ô& œÐ(ò ˆÙ�B�ðñ 
’)Ò"8Ñ9ÀÔ	L€BÜ	��Q¨4Ô	0€BÜ�X˜vÐ&¨¸AÔ>€GÙ”'˜&¢)Ó,°JÔ?€B€s�Gà
C€Cä	�‰”z¨Ô	-ñ $Ø×Ñ Ô#÷$ô 
�‰”z¨Ô	-ñ UÜ� t¸7×;QÑ;QÓ;SÕT÷Uô 
�‰”z¨Ô	-ñ 
ÜØ 4°w×7MÑ7MÓ7Oõ	
÷
ð 
÷$ð $ú÷Uð Uú÷
ð 
ús$   Â7EÃ,EÄ,E*ÅEÅE'Å*E3c                 ó  ‡ — t        ‰ «      \  }}dt        dt        dt        j                  ddfˆ fd„} |g d¢g d¢d	œ«      }|d
   j	                  d«      |d
<    |ddgddgd	œ«      }|d
   j	                  d«      |d
<    |||t        j
                  g d¢«      «        |g d¢g d¢d	œ«      }|d
   j	                  d«      |d
<    |ddgddgd	œ«      }|d
   j	                  d«      |d
<    |||t        j
                  g d¢«      «       y)zLTest OOV categories whose sorted insertion point is inside the training set.Útrain_dfÚpred_dfrŸ   r   Nc                 óv  •— t         t        fD ]‘  } || |d¬«      }t        d‰i|d¬«      }t        j                  t
        d¬«      5  |j                  |«       d d d «        ||d¬«      }t        j                  t
        d¬«      5  |j                  |«       d d d «       Œ“ y # 1 sw Y   ŒKxY w# 1 sw Y   ŒªxY w)NTrK   r   r   rÎ   rç   rQ   )r   r   r   ra   rb   rc   rÐ   rÑ   )rî   rï   rŸ   rC   r.   r/   rÔ   r   s          €r%   r”   z#run_cat_oov_in_range.<locals>.check«  s·   ø€ Ü ¤/Ð2ò 	&ˆHÙ˜( A¸$Ô?ˆBÜ˜X vÐ.°ÀAÔFˆGä—‘ÜÐ"Hôñ 1ð ×'Ñ'¨Ô0÷1ñ
 ˜G¸Ô=ˆDÜ—‘ÜÐ"Hôñ &ð —‘ Ô%÷&ð &ñ	&÷1ð 1ú÷&ð &ús   ÁB#ÂB/Â#B,	Â/B8	)ÚAÚBÚCrñ   rò   rò   )r   r	   rM   r¢   r¸   é   )rS   r©   rS   rH   ÚB2ró   r	   )r   r   r   r   r   r   )r   rM   r¸   r   rM   rM   r¢   r¸   )r&   r   r*   Úndarrayrè   r^   )r   r#   rd   r”   rî   rï   s   `     r%   Úrun_cat_oov_in_ranger÷   §  s  ø€ ä˜Ó�E€Bˆð&œð &¤cð &¬b¯j©jð &¸Tõ &ñ" Ò8Ò?QÑRÓS€HØ˜u‘o×,Ñ,¨ZÓ8€HˆU�OÙ˜$ ˜¨A¨q¨6Ñ2Ó3€GØ˜U‘^×*Ñ*¨:Ó6€GˆE�NÙ	ˆ(�GœRŸX™XÒ&8Ó9Ô:ñ Ò,Ò3EÑFÓG€HØ˜u‘o×,Ñ,¨ZÓ8€HˆU�OÙ˜!˜Q˜ q¨! fÑ-Ó.€GØ˜U‘^×*Ñ*¨:Ó6€GˆE�NÙ	ˆ(�GœRŸX™XÒ&8Ó9Õ:r'   c                 óÜ  ‡ ‡‡— t        ddddd‰ ¬«      \  Š}t        ‰|d¬«      }t        d	‰ i|d
¬«      Šdt        dt        fˆˆˆ fd„}g }t        j                  «       }|€J ‚t        t        fD ]U  }t        t        |d
«      ¬«      5 }t        d«      D ]%  }|j                  ||«      }	|j                  |	«       Œ' 	 ddd«       ŒW |D ]  }
|
j                  «       rŒJ ‚ y# 1 sw Y   Œ{xY w)zBasic tests for thread safety.i   r–   ép   Frš   )r˜   r›   r   TrK   r   é
   rÎ   rC   r   c                 óx   •—  | ‰d¬«      }‰j                  |«      }‰j                  ‰«      }t        ‰||«       y)NTrK   )rÑ   rÐ   r   )rC   r.   rÒ   rÓ   ru   r/   r   s       €€€r%   Úrun_thread_safetyz0run_cat_thread_safety.<locals>.run_thread_safetyÓ  s<   ø€ Ù�a¨DÔ1ˆØ—‘ Ó$ˆØ×(Ñ(¨Ó+ˆÜ˜ ¨Ô/Ør'   N)Úmax_workersé    )r   r   r   r   r­   rƒ   Ú	cpu_countr   r   ÚmaxrY   Úsubmitrº   Úresult)r   rŸ   r.   rü   ÚfuturesÚn_cpusrn   Úerd   ÚfutÚfru   r/   s   `          @@r%   Úrun_cat_thread_safetyr  Í  sú   ú€ ä˜D " c°%À3ÈvÔV�D€A€qÜ	˜˜A°$Ô	7€BÜ�X˜vÐ&¨¸BÔ?€Gð¤Dð ¬T÷ ð €GÜ�\‰\‹^€FØÐÐÐÜœÐ(ò $ˆÜ¬C°¸«OÔ<ð 	$ÀÜ˜2“Yò $�Ø—h‘hÐ0°"Ó5�Ø—‘˜sÕ#ñ$÷	$ð 	$ð$ð ò ˆØ�x‰x�zÐˆzñ÷	$ð 	$ús   Â	4C"Ã"C+	ÚUrw   ÚargsÚkwargsc                 ó<   — | t         u r | ||ddœ|¤ŽS  | |ddi|¤ŽS )NT)rw   rL   rL   )r   )rC   rw   r
  r  s       r%   Ú_make_dmr  ê  s3   € Ø”?Ñ"Ù˜ 3¸4ÑJÀ6ÑJÐJÙ�TÐ=¨dÐ=°fÑ=Ð=r'   Úpred_contribsÚpred_interactionsÚ	pred_leafc           
      ó0  — t        | «      \  }}}} |||d¬«      }	t        d| i|	d¬«      }
|
j                  t        ||	|¬«      |||¬«      }|
j                  t        ||	|j	                  dd	«      d
g¬«      |||¬«      }|s|rdnd}t        | |||¬«       y )NTrK   r   r¢   rÎ   )rw   r(   ©r  r  r  r	   r   rE   )rw   r(   rU   g�íµ ÷Æ°>r   )Úatol)rË   r   rÑ   r  Úreshaper   )r   rC   r  r  r  rÈ   rÊ   rÉ   rŸ   r.   r/   Úpredt_0Úpredt_1r  s                 r%   Ú
_run_predtr  ð  sµ   € ô ,¨FÓ3Ñ€Cˆ�˜á	�#�q¨TÔ	2€BÜ�X˜vÐ&¨¸AÔ>€Gà�o‰oÜ�˜r¨Ô.Ø#Ø+Øð	 ó €Gð �o‰oÜ�˜r¨¯©¸¸1Ó(=ÈcÈUÔSØ#Ø+Øð	 ó €Gñ !Ñ$5‰4¸1€DÜ�F˜G W°4Ö8r'   c                 óˆ   — t         t        fD ]  }t        | |ddd¬«       Œ t         t        fD ]  }t        | |ddd¬«       Œ y)zBasic tests for SHAP values.TFr  N)r   r   r  )r   rn   s     r%   Úrun_cat_shapr    sT   € ô œÐ(ò 
ˆÜØ�B d¸eÈuö	
ð
ô
 œÐ(ò 
ˆÜØ�B e¸tÈuö	
ñ
r'   c                 ó,   — t        | t        ddd¬«       y)z Basic tests for leaf prediction.FTr  N)r  r   )r   s    r%   Úrun_cat_leafr    s   € ô Ø” uÀÐQUör'   i   )r¥   r¥   c                óì  — t        | «      \  }}ddl}d}g d¢}g d¢}dddœ}t        j                  j	                  d«      }	|	j                  dd||d	z  f¬
«      }
|	j                  dd||d	z  ft        j                  ¬«      }i }t        |«      D ]H  }|d	z  dk(  r|
dd…|d	z  f   }n)|dd…|d	z  f   }|j                  j                  ||¬«      }||d|› �<   ŒJ  ||«      }|	j                  |¬
«      }|j                  «       }t        |«      D ]v  }|d	z  dk(  rŒd|› �}||   j                  j                  }t        |d«      r|j!                  «       }|j#                  |«      }|j                  j                  ||¬«      ||<   Œx  ||«      }|j$                  dd…df   j                  j                  |j$                  dd…df   j                  j                  k7  j'                  «       sJ ‚||||
|fS )z0Synthesize a test dataset with changed encoding.r   Nrt   ©ÚarÛ   rE   Úd©rÛ   r  rE   r  r   )r   r   r3   r	   r4   r¢   )ÚlowÚhighr5   rJ   ©rT   rÆ   r  r[   )r&   r   r*   r8   r9   ÚuniformÚintegersÚint32rY   ÚCategoricalÚ
from_codesr;   ÚcopyrS   rÆ   r   r[   Úreplacer\   Úany)r   r¥   r#   rd   r"   r    Úold_catsÚnew_catsÚmappingr>   Úcol_numericÚcol_categoricalre   rE   ÚcolrÆ   rÈ   rŸ   rÊ   ÚnameÚ	codes_serÚ	new_codess                         r%   Úmake_recodedr5  #  s  € ô ˜Ó�E€Bˆãð €Iò $€HÚ#€HØ˜‰l€Gä
�)‰)×
Ñ
 Ó
%€Cà—+‘+˜a ¨)°ZÀ1±_Ð)E�+ÓF€KØ—l‘lØ�A˜Y¨
°a©Ð8ÄÇÁð #ó €Oð 
€BÜ�:Óò 	ˆØˆq‰5�AŠ:Øša  a¡˜iÑ(‰Cà#¢A q¨A¡v IÑ.ˆEØ—.‘.×+Ñ+Ø#Øð ,ó ˆCð ˆˆQˆqˆcˆ7Šð	ñ ˆR‹&€CØ�
‰
˜	ˆ
Ó"€Aà�H‰H‹J€EÜ�:Óò 	VˆØˆq‰5�AŠ:Øà�1�#ˆwˆØ˜$‘K—O‘O×)Ñ)ˆ	Ü�9˜kÔ*Ø!×+Ñ+Ó-ˆIØ×%Ñ% gÓ.ˆ	Ø—n‘n×/Ñ/¸8È9Ð/ÓUˆˆdŠð	Vñ ˆu‹I€EØ�J‰J’q˜!�tÑ× Ñ ×&Ñ&¨#¯(©(²1°a°4©.×*<Ñ*<×*BÑ*BÑB×GÑGÔIÐIÐIØ��q˜+ Ð6Ð6r'   c                 óÔ  — ddl }g d¢}g d¢}t        j                  dd«      }|j                  j	                  |g d¢¬«      }|j                  ||dœ«      }t        | «      \  }} ||«      }t        j                  j                  d	«      }	|	j                  |j                  d   ¬
«      }
t        t        fD ]’  } |||
d¬«      }t        d| i|«      }|j                  |«      }|j                  |«      }t!        | ||«       |j                  j	                  |g d¢¬«      } |||dœ«      }|j                  |«      }t!        | ||«       Œ” t#        | «      \  }}}
}}t        ||
d¬«      }t        d| i|«      }|j                  |«      }|j                  |«      }t!        | ||«       t        ||
d¬«      }|j                  |«      }t!        | ||«       t        j$                  |j                  d   |j                  d   f¬«      }||dd…|j&                  dk(  f<   ||dd…|j&                  dk7  f<   | dk(  rddl}|j+                  |«      }|j                  |«      }t!        | ||«       y)z.Run with manually specified category encoding.r   Nr  r   é	   ©	r   r   r	   rM   r   r	   r	   rM   r   r#  ©Úf0Úf1r3   r4   TrK   r   ©	r   r   r	   rM   r   r	   r	   rM   r   r   )ÚshaperH   r£   )r   r*   Úaranger'  r(  r   r&   r8   r9   r$  r=  r   r   r   rÑ   rÐ   r   r5  ÚemptyÚdtypesr,   r^   )r   r"   r,  r-  Úcol0Úcol1re   r#   rd   r>   rŸ   rn   r.   r/   rÒ   rÓ   Údf1rÕ   rÈ   rÊ   r/  r0  r^   r-   Úpredt3s                            r%   Úrun_specified_catrE  Y  sQ  € ó ò $€HÚ#€Hä�9‰9�Q˜‹?€DØ�>‰>×$Ñ$àÚ)ð %ó €Dð
 
�‰˜T¨Ñ.Ó	/€BÜ˜Ó�E€BˆÙ	ˆB‹€BÜ
�)‰)×
Ñ
 Ó
%€CØ�‰˜Ÿ™ !™ˆÓ%€AäœÐ(ò 0ˆÙ��A¨$Ô/ˆÜ˜ 6Ð*¨BÓ/ˆØ—‘ Ó$ˆØ×(Ñ(¨Ó,ˆÜ˜ ¨Ô/à�~‰~×(Ñ(àÚ-ð )ó 
ˆñ
 ˜ DÑ)Ó*ˆØ×(Ñ(¨Ó-ˆÜ˜ ¨Õ/ð0ô  3?¸vÓ2FÑ/€Cˆ��; ä	��a¨DÔ	1€BÜ�X˜vÐ&¨Ó+€Gà�_‰_˜RÓ €FØ×$Ñ$ SÓ)€FÜ�F˜F FÔ+ä	�˜¨dÔ	3€BØ�_‰_˜RÓ €FÜ�F˜F FÔ+ä�H‰H˜EŸK™K¨™N¨E¯K©K¸©NÐ;Ô<€Eà)8€EŠ!ˆS�Z‰Z˜:Ñ%Ð
%Ñ&Ø)4€EŠ!ˆS�Z‰Z˜:Ñ%Ð
%Ñ&à�ÒÛà—‘˜“ˆà×$Ñ$ UÓ+€FÜ�F˜F FÕ+r'   c                 óÂ   — t        | «      \  }}}}}t        ||d¬«      }t        ||d¬«      }i }t        d| i||df|dfg|¬«       t        | |d   d   |d   d   «       y)	z;Check the validation dataset is using the correct encoding.TrK   r   ÚTrainÚValid)ÚevalsÚevals_resultÚrmseN)r5  r   r   r   )r   rÈ   rÊ   rŸ   rd   r.   ÚXy_validrJ  s           r%   Úrun_validationrM  š  s„   € ä& vÓ.Ñ€Cˆ��1�aä	��a¨DÔ	1€BÜ�u˜a°DÔ9€Hà€LÜ	Ø	�6ÐØ
Ø�Gˆ}˜x¨Ð1Ð2Ø!õ	ô Ø�˜WÑ% fÑ-¨|¸GÑ/DÀVÑ/Lõr'   c                 óÊ  — ddl }t        | «      \  }}g d¢}g d¢}t        j                  dd«      }|j                  j                  |g d¢¬«      } |||dœ«      }t        |d	¬
«      }	|	j                  d	¬«      }
|	j                  ddgk(  sJ ‚|j                  j                  |g d¢¬«      } |||dœ«      }t        |d	|
¬«      }	|	j                  ddgk(  sJ ‚|	j                  ddgk(  sJ ‚|	j                  d	¬«      }|
j                  «       |j                  «       k(  sJ ‚|j                  j                  g d¢g d¢¬«      }t        | «      \  }} |d|i«      }t        t        fD ]f  } ||d	¬
«      }	|	j                  d	¬«      }
|
€J ‚ ||d	|
¬«      }	|	j                  d	¬«      }|€J ‚|
j                  «       |j                  «       k(  rŒfJ ‚ t        t        fD ]‡  }t        | «      \  }}}}} |||d	¬
«      }|j                  d	¬«      }
|
€J ‚ ||||
d	¬«      }|j                  d	¬«      }|€J ‚|
j                  «       |j                  «       k(  sJ ‚t        ||«      rŒ‡J ‚ y)z"Test re-coding inpput for DMatrix.r   Nr  r   r7  r8  r#  r9  TrK   r1   r®   rE   r<  rê   r:  r;  )r¸   rô   r—   r¶   rS   ©rV   rL   )r   r&   r*   r>  r'  r(  r   r6   rV   rU   r7   r   r5  r   )r   r"   r#   rd   r,  r-  rA  rB  re   r.   Úcats_0r�   rC   rÈ   rÊ   rŸ   ÚXy_0rŽ   s                     r%   Úrun_recode_dmatrixrR  ¯  s¬  € ãä˜Ó�E€Bˆò $€HÚ#€Hä�9‰9�Q˜‹?€DØ�>‰>×$Ñ$àÚ)ð %ó €Dñ
 
�4˜tÑ$Ó	%€Bä	�¨Ô	-€BØ×Ñ¨tÐÓ4€FØ×Ñ  s˜|Ò+Ð+Ð+à�>‰>×$Ñ$àÚ)ð %ó €Dñ
 
�4˜tÑ$Ó	%€BÜ	�¨¸FÔ	C€Bà×Ñ  d˜|Ò+Ð+Ð+Ø×Ñ  s˜|Ò+Ð+Ð+Ø×Ñ¨tÐÓ4€FØ�?‰?Ó §¡Ó 1Ò1Ð1Ð1ð �>‰>×$Ñ$ÚÚ)ð %ó €Dô ˜Ó�E€BˆÙ	ˆU�DˆMÓ	€BÜœoÐ.ò 	6ˆÙ�b¨TÔ2ˆØ×"Ñ"°4Ð"Ó8ˆØÐ!Ð!Ð!á�b¨TÀÔHˆØ×"Ñ"°4Ð"Ó8ˆØÐ!Ð!Ð!à�‰Ó  F§O¡OÓ$5Ó5Ð5Ð5ð	6ô œoÐ.ò +ˆÜ*¨6Ó2ÑˆˆU�A�q˜!Ù˜˜Q°4Ô8ˆØ×$Ñ$°TÐ$Ó:ˆàÐ!Ð!Ð!á˜˜q°È4ÔPˆØ×$Ñ$°TÐ$Ó:ˆØÐ!Ð!Ð!à�‰Ó  F§O¡OÓ$5Ò5Ð5Ð5Ü˜t TÕ*Ð*Ð*ñ+r'   c                 ó`  ‡ ‡‡	— t        ‰ «      \  ŠŠ	}}}dt        dt        ddfˆ ˆˆ	fd„}t        j                  t        t        gt        t        g«      D ]W  \  }} |‰|d¬«      }|t        u r |‰	|d|j                  «       |¬«      }n |‰	|d|j                  «       ¬	«      } |||«       ŒY y)
z)Test re-coding for training continuation.rQ  rŽ   r   Nc                 óˆ  •— d‰i}d}i }t        || |dfg||¬«      }i }t        |||dfg|||¬«      }t        |«      t        |«      k(  sJ ‚i }t        || |dfg|dz  |¬«      }	|d   d   |d   d   z   }
|d   d   }t        j                  j	                  ||
«       t        j                  ‰‰g‰‰g«      D ]6  \  }}|j                  |«      }|	j                  |«      }t	        ‰||d¬«       Œ8 t        j                  | |g| |g«      D ]6  \  }}|j                  |«      }|	j                  |«      }t	        ‰||d¬«       Œ8 y )	Nr   r	   rH  )rI  rÏ   rJ  )rI  Ú	xgb_modelrÏ   rJ  rK  gñhãˆµøä>)Úrtol)	r   r   r*   rÇ   r   Ú	itertoolsÚproductrÐ   rÑ   )rQ  rŽ   ÚparamsÚrÚevals_result_0Ú	booster_0Úevals_result_1Ú	booster_1Úevals_result_2Ú	booster_2Úeval_concatÚ	eval_fullr  rÛ   r  r  r   rÈ   rÊ   s                   €€€r%   r”   z(run_training_continuation.<locals>.checkø  sœ  ø€ Ø˜FÐ#ˆàˆØ#%ˆÜØØØ˜'�?Ð#ØØ'ô
ˆ	ð $&ˆÜØØØ˜'�?Ð#ØØØ'ô
ˆ	ô ˜YÓ'¬=¸Ó+CÒCÐCÐCà#%ˆÜØØØ˜'�?Ð#Ø ™EØ'ô
ˆ	ð % WÑ-¨fÑ5¸ÀwÑ8OÐPVÑ8WÑWˆØ" 7Ñ+¨FÑ3ˆ	Ü
�
‰
×"Ñ" 9¨kÔ:ô ×%Ñ% s¨E l°S¸%°LÓAò 	A‰DˆAˆqØ×/Ñ/°Ó2ˆGØ×/Ñ/°Ó2ˆGÜ˜F G¨W¸4Ö@ð	Aô ×%Ñ% t¨T l°T¸4°LÓAò 	A‰DˆAˆqØ×'Ñ'¨Ó*ˆGØ×'Ñ'¨Ó*ˆGÜ˜F G¨W¸4Ö@ñ	Ar'   TrK   )rL   rV   rw   rê   )r5  r   rW  rX  r   r6   )
r   rŸ   rd   r”   rG  rH  rQ  rŽ   rÈ   rÊ   s
   `       @@r%   Úrun_training_continuationrc  ô  sÊ   ú€ ä& vÓ.Ñ€Cˆ��1�að.A”Gð .A¤7ð .A¨t÷ .Aô` "×)Ñ)Ü	”/Ð"¤W¬oÐ$>óò ‰ˆˆuñ �S˜!°Ô5ˆØ”OÑ#ÙØØØ#'Ø"×1Ñ1Ó3Øô‰Dñ Ø�q¨TÀ×ATÑATÓAVôˆDñ 	ˆd�DÕñ!r'   c                 ó  — t        | «      \  }}}}}t        ||d¬«      }t        d| i|d¬«      }|j                  «       }|j	                  «       }t        |||d¬«      }	t        | ddd	œ|	d|¬
«      }
|
j                  «       }||k(  sJ ‚y)zTest with individual updaters.TrK   r   r¢   rÎ   rO  ÚpruneÚupdate)r   ÚupdaterÚprocess_type)rÏ   rU  N)r5  r   r   Úsave_rawr6   )r   rÈ   rÊ   rŸ   rd   r.   r\  Úmodel_0rP  rŽ   r^  Úmodel_1s               r%   Ú
run_updaterl  ;  s¥   € ä& vÓ.Ñ€Cˆ��1�aÜ	��a¨DÔ	1€BÜ�x Ð(¨"¸aÔ@€IØ× Ñ Ó"€GØ×%Ñ%Ó'€Fä�5˜!¨6ÀdÔK€DäàØØ$ñ	
ð
 	ØØô	€Ið × Ñ Ó"€Gà�gÒÐÑr'   c                 ó–  — t        | «      \  }}}}}t        t        fD ]©  }t        ||d¬«      }t        d| i|d¬«      }|j	                  «       }t        |||||¬«      }	t        ||||«      }
|j                  |«      }|j                  |	«      }|j                  |
«      }|j                  |«      }|||fD ]  }t        | ||«       Œ Œ« y)z%Run prediction with re-coded DMatrix.TrK   r   r¢   rÎ   )rV   N)	r5  r   r   r   r6   r  rÑ   rÐ   r   )r   rÈ   rÊ   rŸ   rd   rC   r.   r/   rP  rŽ   ÚXy_2r  r  Úpredt_2Úpredt_3Úpredts                   r%   Úrun_recode_dmatrix_predictrr  T  sØ   € ä& vÓ.Ñ€Cˆ��1�aäœoÐ.ò 4ˆÜ�S˜!°Ô5ˆÜ˜ 6Ð*¨BÀÔBˆØ×'Ñ'Ó)ˆä˜ " e¨Q¸fÔEˆÜ˜ " e¨QÓ/ˆà—/‘/ "Ó%ˆØ—/‘/ $Ó'ˆØ—/‘/ $Ó'ˆØ×)Ñ)¨#Ó.ˆà˜w¨Ð0ò 	4ˆEÜ˜F G¨UÕ3ñ	4ñ4r'   )BÚ__doc__rW  rƒ   r�   Úconcurrent.futuresr   Ú	functoolsr   ÚfcacheÚtypingr   r   r   r   Únumpyr*   ra   Ú_typingr
   Úcorer   r   r   r(   r   Útrainingr   r   r   r   r   r   rg  r   Úutilsr   r   r   r&   rö   r+   rZ   rA   ro   r´   rÀ   rË   rÖ   rã   rì   r÷   r  r	  r  r­   r  r  r  r®   r5  rE  rM  rR  rc  rl  rr  rr   r'   r%   ú<module>r}     sÙ  ðÙ %ã Û 	Û Ý 1Ý %ß ,Ó ,ã Û å ß BÑ BÝ )Ý ÷õ õ #ß ;Ñ ;ð ð˜ð  5¨¨t¨Ñ#4ò ó ðð�Fð  #ð ¨"¯*©*ó ð
˜ð 
 Wð 
°sð 
¸tó 
ð6!˜fð 6!¨ó 6!ðtP@ Fð P@¨tó P@ðf  6ð  ¨dó  ðB"˜6ð " e¨C°°b·j±jÀ"Ç*Á*Ð,LÑ&Mó "ð$, ð ,¨fð ,¸vð ,È$ó ,ð $˜Fð $ tó $ðN+
˜Fð +
 tó +
ð\#; ð #;¨Dó #;ðL &ð ¨Tó ñ4 ˆC�˜/Ó*€ð>�t˜A‘wð > Wð >°Sð >ÀCð >ÈAó >ð9Øð9àð9ð ð9ð ð	9ð
 ð9ð 
ó9ð8
˜ð 
 Dó 
ð˜ð  Dó ð ‡�Ø6:ò 27˜ð 27°ð 27¸uò 27ó ð27ðj>,Øð>,à	ó>,ðB˜6ð  dó ð*B+˜vð B+¨$ó B+ðJD fð D°ó DðN�vð  $ó ð24 vð 4°$ô 4r'   