MCPcopy Create free account
hub / github.com/numpy/numpy / as_numer_denom

Function as_numer_denom

numpy/f2py/symbolic.py:1116–1158  ·  view source on GitHub ↗

Return expression as numer-denom pair.

(obj)

Source from the content-addressed store, hash-verified

1114
1115
1116def as_numer_denom(obj):
1117 """Return expression as numer-denom pair.
1118 """
1119 if isinstance(obj, Expr):
1120 obj = normalize(obj)
1121 if obj.op in (Op.INTEGER, Op.REAL, Op.COMPLEX, Op.SYMBOL,
1122 Op.INDEXING, Op.TERNARY):
1123 return obj, as_number(1)
1124 elif obj.op is Op.APPLY:
1125 if obj.data[0] is ArithOp.DIV and not obj.data[2]:
1126 numers, denoms = map(as_numer_denom, obj.data[1])
1127 return numers[0] * denoms[1], numers[1] * denoms[0]
1128 return obj, as_number(1)
1129 elif obj.op is Op.TERMS:
1130 numers, denoms = [], []
1131 for term, coeff in obj.data.items():
1132 n, d = as_numer_denom(term)
1133 n = n * coeff
1134 numers.append(n)
1135 denoms.append(d)
1136 numer, denom = as_number(0), as_number(1)
1137 for i in range(len(numers)):
1138 n = numers[i]
1139 for j in range(len(numers)):
1140 if i != j:
1141 n *= denoms[j]
1142 numer += n
1143 denom *= denoms[i]
1144 if denom.op in (Op.INTEGER, Op.REAL) and denom.data[0] < 0:
1145 numer, denom = -numer, -denom
1146 return numer, denom
1147 elif obj.op is Op.FACTORS:
1148 numer, denom = as_number(1), as_number(1)
1149 for b, e in obj.data.items():
1150 bnumer, bdenom = as_numer_denom(b)
1151 if e > 0:
1152 numer *= bnumer ** e
1153 denom *= bdenom ** e
1154 elif e < 0:
1155 numer *= bdenom ** (-e)
1156 denom *= bnumer ** (-e)
1157 return numer, denom
1158 raise OpError(f'cannot convert {type(obj)} to numer and denom')
1159
1160
1161def _counter():

Callers 2

test_as_numer_denomMethod · 0.90
linear_solveMethod · 0.85

Calls 3

normalizeFunction · 0.85
as_numberFunction · 0.85
OpErrorClass · 0.85

Tested by 1

test_as_numer_denomMethod · 0.72