bBFj ddlZddlZddlmZddlmZddlmZmZdZ GddeZ dd e d e d d fd Z ddee efde de d e fdZd e fdZGddeZeGddeZd efdZdde d efdZdS)N) literal_eval)total_ordering) NamedTupleUnion)  …u
u
c.eZdZUeed<eed<eed<dS)VersionmajorminormicroN__name__ __module__ __qualname__int__annotations__9C:\PYTHON\_runtimes\venv\Lib\site-packages\parso/utils.pyrrs+ JJJ JJJ JJJJJrrFstringkeependsreturnz list[str]c|r|d}g}t|D]<\}} |d}|tvr||-#t$rY9wxYwt |D]0} ||||dzz||<||dz=!#t$rY-wxYw|ds|ds|dkr|d|Stjd|S)a Intended for Python code. In contrast to Python's :py:meth:`str.splitlines`, looks at form feeds and other special characters as normal text. Just splits ``\n`` and ``\r\n``. Also different: Returns ``[""]`` for an empty string input. In Python 2.7 form feeds are used as normal characters when using str.splitlines. However in Python 3 somewhere there was a decision to split also on form feeds. T  z \n|\r\n|\r) splitlines enumerate_NON_LINE_BREAKSappend IndexErrorreversedendswithresplit)rrlstmergeilinelast_chrindexs r split_linesr3sI/%% ~~ $ $GAt $8///LLOOO      e__  E  Z#eai.8E  NN     ??4  FOOD$9$9 Vr\\ JJrNNN x v...s#A A#"A#8B B#"B#utf-8strictsourceencodingerrorscfd}ttrS| t|S#t$r|dkrtd|cYSwxYw)aM Checks for unicode BOMs and PEP 263 encoding declarations. Then returns a unicode object like in :py:meth:`bytes.decode`. :param encoding: See :py:meth:`bytes.decode` documentation. :param errors: See :py:meth:`bytes.decode` documentation. ``errors`` can be ``'strict'``, ``'replace'`` or ``'ignore'``. cLtd}|rdStjdd}tjd|}|r=|d}t |tst|dd}|SS) z For the implementation of encoding definitions in Python, look at: - http://www.python.org/dev/peps/pep-0263/ - http://docs.python.org/2/reference/lexical_analysis.html#encoding-declarations zb'\xef\xbb\xbf'r4s(?:[^\r\n]*(?:\r\n|\r|\n)){0,2}rscoding[=:]\s*([-\w.]+)r asciireplace)r startswithr+matchgroupsearch isinstancestr) byte_markfirst_two_linespossible_encodinger7r6s rdetect_encodingz0python_bytes_to_unicode..detect_encodingTs !!344   Y ' ' 7(#FOOUUVWXXI&@&577  !''**Aa%% /7I..HOrr<r4)rArB LookupError)r6r7r8rGs`` rpython_bytes_to_unicoderIIs.&#   H 68V,,,  Y   vw// / / / s<!A!A!cxddlm}tjd|}t dt |DS)z` Returns a namedtuple of parso's version, similar to Python's ``sys.version_info``. r) __version__z [a-z]+|\d+cBg|]\}}|dkr|nt|S))r).0r/xs r z version_info..s.IIIA!q&&QQc!ffIIIr)parsorKr+findallrr%)rKtupls r version_inforT}sG "!!!!! :m[ 1 1D II4III JJrc$eZdZUeed<eed<dS)_PythonVersionInforrNrrrrrVrVs" JJJ JJJJJrrVc.eZdZfdZfdZdZxZS)PythonVersionInfoct|tr4t|dkrtd|j|jf|kSt ||j|jfSNz'Can only compare to tuples of length 2.)rAtuplelen ValueErrorrrsuper__gt__selfother __class__s rr`zPythonVersionInfo.__gt__sl eU # # 45zzQ !JKKKJ +e3 3 u DJ''rct|tr4t|dkrtd|j|jf|kSt |dSrZ)rAr\r]r^rrr___eq__ras rrfzPythonVersionInfo.__eq__sc eU # # 55zzQ !JKKKJ +u4 4 urc.|| SN)rf)rbrcs r__ne__zPythonVersionInfo.__ne__s;;u%%%%r)rrrr`rfri __classcell__)rds@rrXrXs`(((((&&&&&&&rrXc@tjd|}|tdt|d}|d}|!|dkrd}n|dkrd}nt dt|}t ||S) Nz-(\d+)(?:\.(\d{1,2})(?:\.\d+)?)?((a|b|rc)\d)?$zNThe given version is not in the right format. Use something like "3.8" or "3".r r[7rM6z7Sorry, no support yet for those fancy new/old versions.)r+r>r^rr?NotImplementedErrorrX)versionr>rrs r_parse_versionrps HEw O OE }<== =  A  E KKNNE } A::EE aZZEE%&_`` ` JJE UE * **rroc|dtjddz}t|tst dt |S)z Checks for a valid version number (e.g. `3.8` or `3.10.1` or `3`) and returns a corresponding version info that is always two characters long in decimal. Nz%s.%sr[z#version must be a string like "3.8")sysrTrArB TypeErrorrp)ros rparse_version_stringrtsN C,RaR00 gs # #?=>>> ' " ""r)F)r4r5rh)r+rrastr functoolsrtypingrrr&rrBboolr3bytesrIrTrVrXrprtrrrrzs $$$$$$$$$$$$$$ j )/)/)/t)/ )/)/)/)/ZGO11 #u* 1),1@C11111hKgKKKK &&&&&*&&&*+0++++* # ## #1B # # # # # #r