�
!A?hp � �� � d Z ddlmZ ddlZddlZddlZddlZddlZdgZej j
Zej j Z
ej dej ej z � � Z G d� dej � � ZdS )z/Fraction, infinite-precision, rational numbers.� ��DecimalN�Fractiona�
\A\s* # optional whitespace at the start,
(?P[-+]?) # an optional sign, then
(?=\d|\.\d) # lookahead for digit or .digit
(?P\d*|\d+(_\d+)*) # numerator (possibly empty)
(?: # followed by
(?:/(?P\d+(_\d+)*))? # an optional denominator
| # or
(?:\.(?P\d*|\d+(_\d+)*))? # an optional fractional part
(?:E(?P[-+]?\d+(_\d+)*))? # and optional exponent
)
\s*\Z # and optional whitespace to finish
c �l � � e Zd ZdZdZd.dd�� fd�Zed� � � Zed � � � Zd
� Z d/d�Z
ed
� � � Zed� � � Z
d� Zd� Zd� Zd� Z eeej � � \ ZZd� Z eeej � � \ ZZd� Z eeej � � \ ZZd� Z eeej � � \ Z Z!d� Z" ee"ej# � � \ Z$Z%d� Z& ee&e'� � \ Z(Z)d� Z* ee*ej+ � � \ Z,Z-d� Z.d� Z/d� Z0d� Z1d� Z2ej3 fd�Z4d� Z5d � Z6d!� Z7d0d"�Z8d#� Z9d$� Z:d%� Z;d&� Z