a DOg]Y@s@dZgdZddZddZddZdd Zd d Zd d ZddZddZ ddZ ddZ ddZ ddZ dddddZd)dd Zd*d!d"Zz d#d$lTWneyYn0zd#d%lmZWneyYn0zd#d&lm Z WneyYn0zd#d'lmZWneyYn0ed(kr|dd?}||}||kr>|||<|}qq>q|||<dSNr rrstartposposnewitem parentposparentrrrr s r cCst|}|}||}d|d}||krj|d}||krL||||ksL|}||||<|}d|d}q |||<t|||dSNrr )r r rr)endposr(r*childposrightposrrrrs  rcCsJ||}||kr>|dd?}||}||kr>|||<|}qq>q|||<dSr&rr'rrr _siftdown_maxs r2cCst|}|}||}d|d}||krj|d}||krL||||ksL|}||||<|}d|d}q |||<t|||dSr-)r r2r.rrrr"%s  r"NFkeyreversec gsg}|j}|r t}t}t}d}nt}t}t}d}|durttt |D]:\} } z| j } || | || gWqHt yYqH0qH||t |dkrz2|d\} } } } | V| | d<||| qWqt y||Yq0q|r|d\} } } | V| j EdHdSttt |D]H\} } z(| j } | } ||| | || | gWnt ydYn0q ||t |dkrzF|d\}} } } } | V| } || | d<| | d<||| qWnt y||Yn0qr|r|d\}} } } | V| j EdHdS)Nr r r)r r%r#r$rrr enumeratemapiter__next__ StopIterationr __self__)r4r5 iterableshh_append_heapify_heappop _heapreplace directionorderitnextvalues key_valuerrrr:sl        rc s|dkr6t|}t}t||d}||ur0gS|gSz t|}WnttfyXYn0||krvt|dd|Sdurt|}ddtt||D}|s|St ||dd}|}t } |D].} | |kr| || |f|d\}} |d7}q| dd|DSt|}fddtt||D}|s<|St ||dd}|}t } |D]>} | } | |kr\| || || f|d\}} } |d7}q\| d d|DS) Nr defaultr4r4cSsg|]\}}||fqSrr.0r!elemrrr znsmallest..r cSsg|] \}}|qSrrrNrOrDrrrrPrQcsg|]\}}|||fqSrrrMrLrrrPrQcSsg|]\}}}|qSrrrNkrDrOrrrrPrQ) r9objectminr TypeErrorAttributeErrorsortedziprr%r$sortr iterabler4rEsentinelresultsizetoprDrBrO_orderrT_elemrrLrrsV        rc s|dkr6t|}t}t||d}||ur0gS|gSz t|}WnttfyXYn 0||krxt|ddd|Sdurt|}ddttd| d|D}|s|St ||dd}| }t } |D].} || kr| || |f|d\}} |d8}q|j dd d d|DSt|}fd dttd| d|D}|sP|St ||dd}| }t } |D]>} | } || krr| || || f|d\}} } |d8}qr|j dd d d|DS) Nr rJTr3cSsg|]\}}||fqSrrrMrrrrP"rQznlargest..r r6)r5cSsg|] \}}|qSrrrRrrrrP/rQcsg|]\}}|||fqSrrrMrLrrrP3rQcSsg|]\}}}|qSrrrSrrrrPArQ) r9rUmaxr rWrXrYrZrrrr[r\rrLrr sV      "    rr )*)r$)r%)r#__main__)N)N) __about____all__rrrrrr#r$r%r rr2r"rrr_heapq ImportError__name__ZdoctestprintZtestmodrrrr!sH^    5 < ;