Использование других базовых систем в SymPy

Как использовать другую базовую систему в SymPy? Я хотел бы сделать что-то подобное Rational(string) но не в базе 10.

Большинство из того, что вам нужно, доступно в Python:

 def sdigits(s, b, tuple=False): p = len(s.split('.')[1]) n, d = (int(s.replace('.', ''), base=b), b**p) if tuple: return n, d return '%s/%s' % (n, d) 

Это дает следующее:

 sdigits('1.1', 3) -> '4/3' sdigits('1.01', 3) -> '10/9' sdigits('-1.12', 3) -> '-14/9' sdigits('-1.12', 3, tuple=True) -> (-14, 9) sdigits('1.2', 4) -> '6/4' 

Чтобы воспользоваться преимуществами SymPy для обеспечения упрощенных соотношений, вы можете передать любой результат в Rational:

 Rational(sdigits('1.2', 4)) -> 3/2 Rational(*sdigits('1.2', 4, tuple=True)) -> 3/2