ó •abc @srdZddlZddlZddlmZddddd d d d gZejeƒZd e fd „ƒYZ de fd„ƒYZ de fd„ƒYZ ejdƒZd„ZeZde fd„ƒYZd„Zde fd„ƒYZejdƒdfejdƒdfejdƒdfejdƒdfejdƒdfejd ƒdfejd!ƒd"fejd#ƒd$fejd%ƒd&fejd'ƒd(ff Zejd)ƒdfejd*ƒdfejd+ƒd"fejd!ƒd"fejd,ƒdffZejd-ƒZd.„Zd/„Zejd0ejƒZid1d26d1d36d4d56d1d66d7d86dd6dd"6Zd9„Zde fd:„ƒYZde fd;„ƒYZ ejd<ejƒZ!d=„Z"d>„Z#d e fd?„ƒYZ$d e fd@„ƒYZ%dAe fdB„ƒYZ&ie&eeeƒdC6e&ee dD„ƒdE6e&e#e%eƒdF6Z'e'dCe'dGt‚t|ƒdksVt‚dS(Ni(tstript_stringtparset_partst isinstancettupletAssertionErrortlen(tselftstparts((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__init__scCstdƒ‚dS(Nsplease implement in a subclass(tNotImplementedError(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR$scCs5t|ƒt|ƒkr1td||fƒ‚ndS(Nscannot compare %r and %r(ttypet TypeError(Rtother((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt_check_compatible'scCs|j|ƒ|j|jkS(N(RR(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__eq__+s cCs|j|ƒ S(N(R(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__ne__/scCs|j|ƒ|j|jkS(N(RR(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__lt__2s cCs|j|ƒp|j|ƒ S(N(R R(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__gt__6scCs|j|ƒp|j|ƒS(N(R R(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__le__9scCs|j|ƒp|j|ƒS(N(R!R(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__ge__<scCs t|jƒS(N(thashR(R((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__hash__@scCsd|jj|jfS(Ns%s('%s')(t __class__R R(R((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__repr__CscCs|jS(N(R(R((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt__str__FscCstdƒ‚dS(NsPlease implement in subclasses.(R(R((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt is_prereleaseIs(R R RRRRRR R!R"R#R%R'R(tpropertyR)(((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR s            tMatchercBsèeZdZejdƒZejdƒZejdƒZid„d6d„d6d„d6d „d 6d „d 6d „d6d„d6d„d6Z d„Z d„Z e d„ƒZ d„Zd„Zd„Zd„Zd„Zd„ZRS(s^(\w[\s\w'.-]*)(\((.*)\))?s'^(<=|>=|<|>|!=|={2,3}|~=)?\s*([^\s,]+)$s ^\d+(\.\d+)*$cCs ||kS(N((tvtctp((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pytWttcCs||kp||kS(N((R,R-R.((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR/YR0s<=cCs||kp||kS(N((R,R-R.((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR/ZR0s>=cCs ||kS(N((R,R-R.((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR/[R0s==cCs ||kS(N((R,R-R.((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR/\R0s===cCs||kp||kS(N((R,R-R.((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR/^R0s~=cCs ||kS(N((R,R-R.((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR/_R0s!=c CsÚ|jdkrtdƒ‚n|jƒ|_}|jj|ƒ}|s\td|ƒ‚n|jdƒ}|djƒ|_|jj ƒ|_ g}|drÇg|dj dƒD]}|jƒ^q´}xø|D]í}|j j|ƒ}|s td||fƒ‚n|jƒ}|dp#d}|d }|j d ƒr”|dkr^td |ƒ‚n|d t}} |jj|ƒsª|j|ƒqªn|j|ƒt}} |j||| fƒqÓWnt|ƒ|_dS(NsPlease specify a version classs Not valid: %rR0iit,sInvalid %r in %rs~=is.*s==s!=s#'.*' not allowed for %r constraintsiþÿÿÿ(s==s!=(t version_classtNonet ValueErrorR Rtdist_retmatchtgroupstnametlowertkeytsplittcomp_retendswithtTruetnum_retFalsetappendRR( RRtmR9tclistR-t constraintstoptvntprefix((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRbs: ,     cCs¶t|tƒr!|j|ƒ}nxŽ|jD]ƒ\}}}|jj|ƒ}t|tƒrmt||ƒ}n|s˜d||jjf}t |ƒ‚n||||ƒs+t Sq+Wt S(sÉ Check if the provided version matches the constraints. :param version: The version to match against this instance. :type version: String or :class:`Version` instance. s%r not implemented for %s( RRR4Rt _operatorstgettgetattrR&R RRBR@(Rtversiontoperatort constraintRItftmsg((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR8‡scCsJd}t|jƒdkrF|jdddkrF|jdd}n|S(Niis==s===(s==s===(R5RR(Rtresult((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt exact_versionœs,cCsGt|ƒt|ƒks*|j|jkrCtd||fƒ‚ndS(Nscannot compare %s and %s(RR:R(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR£s*cCs/|j|ƒ|j|jko.|j|jkS(N(RR<R(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR§s cCs|j|ƒ S(N(R(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR«scCst|jƒt|jƒS(N(R$R<R(R((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR%¯scCsd|jj|jfS(Ns%s(%r)(R&R R(R((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR'²scCs|jS(N(R(R((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR(µsN(R R R5R4tretcompileR7R>RARJRR8R*RSRRRR%R'R((((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR+Ns,         %      sk^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?(\.(post)(\d+))?(\.(dev)(\d+))?(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$c CsK|jƒ}tj|ƒ}|s4td|ƒ‚n|jƒ}td„|djdƒDƒƒ}x0t|ƒdkr•|ddkr•|d }qfW|ds©d}nt|dƒ}|dd!}|d d !}|d d !}|d }|dkrÿd}n|dt|dƒf}|dkr.d}n|dt|dƒf}|dkr]d}n|dt|dƒf}|dkrŒd}nfg} xQ|jdƒD]@} | j ƒrÉdt| ƒf} n d| f} | j | ƒq¢Wt| ƒ}|s| r|rd}qd}n|s&d}n|s5d}n||||||fS(NsNot a valid version: %scss|]}t|ƒVqdS(N(tint(t.0R,((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pys Äsit.iÿÿÿÿiiiii i i i tatzt_tfinal(NN((NN((NN(((RYiÿÿÿÿ(RZ(R[(R\( R tPEP440_VERSION_RER8RR9RR=RRVR5tisdigitRC( RRDR9tnumstepochtpretposttdevtlocalRtpart((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt _pep_440_key¾sT  #%                      cBsAeZdZd„ZedddddgƒZed„ƒZRS(sIA rational version. Good: 1.2 # equivalent to "1.2.0" 1.2.0 1.2a1 1.2.3a2 1.2.3b1 1.2.3c1 1.2.3.4 TODO: fill this out Bad: 1 # minimum two numbers 1.2a # release level must have a release serial 1.2.3b cCsQt|ƒ}tj|ƒ}|jƒ}td„|djdƒDƒƒ|_|S(Ncss|]}t|ƒVqdS(N(RV(RWR,((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pys siRX(t_normalized_keyR]R8R9RR=t_release_clause(RRRRRDR9((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRs   &RYtbR-trcRccst‡fd†ˆjDƒƒS(Nc3s(|]}|r|dˆjkVqdS(iN(t PREREL_TAGS(RWtt(R(s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pys s(tanyR(R((Rs?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR)s(R R R RtsetRkR*R)(((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRþs cCsUt|ƒ}t|ƒ}||kr(tS|j|ƒs;tSt|ƒ}||dkS(NRX(tstrR@t startswithRBR(txtytn((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt _match_prefix"s    cBseZeZidd6dd6dd6dd6dd 6d d 6d d 6dd6Zd„Zd„Zd„Zd„Zd„Z d„Z d„Z d„Z d„Z RS(t_match_compatibles~=t _match_ltR1t _match_gtR2t _match_les<=t _match_ges>=t _match_eqs==t_match_arbitrarys===t _match_nes!=cCsx|r"d|ko|jd}n|jd o:|jd}|rn|jjddƒd}|j|ƒ}n||fS(Nt+iÿÿÿÿii(RRR=R4(RRMRORIt strip_localR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt _adjust_local<scCsj|j|||ƒ\}}||kr+tS|j}djg|D]}t|ƒ^qAƒ}t||ƒ S(NRX(RRBRhtjoinRoRt(RRMRORItrelease_clausetitpfx((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRvJs   (cCsj|j|||ƒ\}}||kr+tS|j}djg|D]}t|ƒ^qAƒ}t||ƒ S(NRX(RRBRhR€RoRt(RRMRORIRR‚Rƒ((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRwRs   (cCs%|j|||ƒ\}}||kS(N(R(RRMRORI((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRxZscCs%|j|||ƒ\}}||kS(N(R(RRMRORI((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRy^scCsC|j|||ƒ\}}|s0||k}nt||ƒ}|S(N(RRt(RRMRORIRR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRzbs cCst|ƒt|ƒkS(N(Ro(RRMRORI((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR{jscCsD|j|||ƒ\}}|s0||k}nt||ƒ }|S(N(RRt(RRMRORIRR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR|ms cCs˜|j|||ƒ\}}||kr+tS||kr;tS|j}t|ƒdkrc|d }ndjg|D]}t|ƒ^qpƒ}t||ƒS(NiiÿÿÿÿRX(RR@RBRhRR€RoRt(RRMRORIRR‚Rƒ((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRuus    ((R R RR4RJRRvRwRxRyRzR{R|Ru(((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR-s&         s[.+-]$R0s^[.](\d)s0.\1s^[.-]s ^\((.*)\)$s\1s^v(ersion)?\s*(\d+)s\2s^r(ev)?\s*(\d+)s[.]{2,}RXs\b(alfa|apha)\btalphas\b(pre-alpha|prealpha)\bs pre.alphas \(beta\)$tbetas ^[:~._+-]+s [,*")([\]]s[~:+_ -]s\.$s (\d+(\.\d+)*)c Csé|jƒjƒ}x&tD]\}}|j||ƒ}qW|sJd}ntj|ƒ}|snd}|}nû|jƒdjdƒ}g|D]}t|ƒ^qŽ}x#t |ƒdkrË|j dƒq©Wt |ƒdkrñ||j ƒ}nDdj g|dD]}t |ƒ^qƒ||j ƒ}|d }dj g|D]}t |ƒ^qBƒ}|jƒ}|r›x)tD]\}}|j||ƒ}qvWn|sª|}n&d|kr¼dnd}|||}t|ƒsåd}n|S( s€ Try to suggest a semantic form for a version for which _suggest_normalized_version couldn't come up with anything. s0.0.0iRXiRct-R}N(R R;t _REPLACEMENTStsubt_NUMERIC_PREFIXR8R9R=RVRRCtendR€Rot_SUFFIX_REPLACEMENTSt is_semverR5( RRRtpattreplRDRItsuffixR‚tsep((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt_suggest_semantic_versionœs:  : (    cCs yt|ƒ|SWntk r%nX|jƒ}xSd2d3d4d5d6d7d8d9d:d;d<d=d>d?d@fD]\}}|j||ƒ}qfWtjdd|ƒ}tjdd|ƒ}tjdd|ƒ}tjdd|ƒ}tjdd|ƒ}|jdƒr |d }ntjd!d|ƒ}tjd"d#|ƒ}tjd$d%|ƒ}tjd&d|ƒ}tjd'd(|ƒ}tjd)d(|ƒ}tjd*d |ƒ}tjd+d,|ƒ}tjd-d%|ƒ}tjd.d/|ƒ}tjd0d1|ƒ}yt|ƒWntk rdA}nX|S(BsèSuggest a normalized version close to the given version string. If you have a version string that isn't rational (i.e. NormalizedVersion doesn't like it) then you might be able to get an equivalent (or close) rational version from this function. This does a number of simple normalizations to the given string, based on observation of versions currently in use on PyPI. Given a dump of those version during PyCon 2009, 4287 of them: - 2312 (53.93%) match NormalizedVersion without change with the automatic suggestion - 3474 (81.04%) match when using this suggestion method @param s {str} An irrational version string. @returns A rational version string, or None, if couldn't determine one. s-alphaRYs-betaRiR„R…RjR-s-finalR0s-pres-releases.releases-stableR}RXR[t s.finalR\spre$tpre0sdev$tdev0s([abc]|rc)[\-\.](\d+)$s\1\2s[\-\.](dev)[\-\.]?r?(\d+)$s.\1\2s[.~]?([abc])\.?s\1R,is\b0+(\d+)(?!\d)s (\d+[abc])$s\g<1>0s\.?(dev-r|dev\.r)\.?(\d+)$s.dev\2s-(a|b|c)(\d+)$s[\.\-](dev|devel)$s.dev0s(?![\.\-])dev$s(final|stable)$s\.?(r|-|-r)\.?(\d+)$s.post\2s\.?(dev|git|bzr)\.?(\d+)$s\.?(pre|preview|-c)(\d+)$sc\g<2>sp(\d+)$s.post\1(s-alphaRY(s-betaRi(R„RY(R…Ri(RjR-(s-finalR0(s-preR-(s-releaseR0(s.releaseR0(s-stableR0(R}RX(R[RX(R’R0(s.finalR0(R\R0N(RgRR;treplaceRTRˆRpR5(RtrstorigRŽ((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt_suggest_normalized_versionÊsH           s([a-z]+|\d+|[\.-])R-Ratpreviewsfinal-R†Rjt@RccCs¬d„}g}x||ƒD]‚}|jdƒr‘|dkrgx'|rc|ddkrc|jƒq@Wnx'|r|ddkr|jƒqjWn|j|ƒqWt|ƒS(NcSs›g}xtj|jƒƒD]j}tj||ƒ}|rd|d koUdknrl|jdƒ}n d|}|j|ƒqqW|jdƒ|S(Nt0it9it*s*final(t _VERSION_PARTR=R;t_VERSION_REPLACERKtzfillRC(RRRR.((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt get_partsIs   Rs*finaliÿÿÿÿs*final-t00000000(RptpopRCR(RR¡RRR.((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyt _legacy_keyHs  cBs eZd„Zed„ƒZRS(cCs t|ƒS(N(R¤(RR((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRcscCsRt}xE|jD]:}t|tƒr|jdƒr|dkrt}PqqW|S(NRs*final(RBRRRRpR@(RRRRq((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyR)fs (R R RR*R)(((s?/usr/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyRbs cBs?eZeZeejƒZded s~   1k =$ W  . r       #