def test_solve_biquadratic(): x0, y0, x1, y1, r = symbols('x0 y0 x1 y1 r') f_1 = (x - 1)**2 + (y - 1)**2 - r**2 f_2 = (x - 2)**2 + (y - 2)**2 - r**2 assert solve_poly_system([f_1, f_2], x, y) == \ [(Rational(3, 2) - sqrt(-1 + 2*r**2)/2, Rational(3, 2) + sqrt(-1 + 2*r**2)/2), (Rational(3, 2) + sqrt(-1 + 2*r**2)/2, Rational(3, 2) - sqrt(-1 + 2*r**2)/2)] f_1 = (x - 1)**2 + (y - 2)**2 - r**2 f_2 = (x - 1)**2 + (y - 1)**2 - r**2 assert solve_poly_system([f_1, f_2], x, y) == \ [(1 - sqrt(((2*r - 1)*(2*r + 1)))/2, Rational(3, 2)), (1 + sqrt(((2*r - 1)*(2*r + 1)))/2, Rational(3, 2))] def query(expr): return expr.is_Pow and expr.exp is S.Half f_1 = (x - 1 )**2 + (y - 2)**2 - r**2 f_2 = (x - x1)**2 + (y - 1)**2 - r**2 result = solve_poly_system([f_1, f_2], x, y) assert len(result) == 2 and all(len(r) == 2 for r in result) assert all(r.count(query) == 1 for r in flatten(result)) f_1 = (x - x0)**2 + (y - y0)**2 - r**2 f_2 = (x - x1)**2 + (y - y1)**2 - r**2 result = solve_poly_system([f_1, f_2], x, y) assert len(result) == 2 and all(len(r) == 2 for r in result) assert all(len(r.find(query)) == 1 for r in flatten(result))
def test_solve_biquadratic(): x0, y0, x1, y1, r = symbols('x0 y0 x1 y1 r') f_1 = (x - 1)**2 + (y - 1)**2 - r**2 f_2 = (x - 2)**2 + (y - 2)**2 - r**2 assert (solve_poly_system([f_1, f_2], x, y) == [{x: Rational(3, 2) - sqrt(-1 + 2*r**2)/2, y: Rational(3, 2) + sqrt(-1 + 2*r**2)/2}, {x: Rational(3, 2) + sqrt(-1 + 2*r**2)/2, y: Rational(3, 2) - sqrt(-1 + 2*r**2)/2}]) f_1 = (x - 1)**2 + (y - 2)**2 - r**2 f_2 = (x - 1)**2 + (y - 1)**2 - r**2 assert (solve_poly_system([f_1, f_2], x, y) == [{x: 1 - sqrt(((2*r - 1)*(2*r + 1)))/2, y: Rational(3, 2)}, {x: 1 + sqrt(((2*r - 1)*(2*r + 1)))/2, y: Rational(3, 2)}]) def query(expr): return expr.is_Pow and expr.exp is S.Half f_1 = (x - 1 )**2 + (y - 2)**2 - r**2 f_2 = (x - x1)**2 + (y - 1)**2 - r**2 result = [tuple(r.values()) for r in solve_poly_system([f_1, f_2], x, y)] assert len(result) == 2 and all(len(r) == 2 for r in result) assert all(r.count(query) == 1 for r in flatten(result)) f_1 = (x - x0)**2 + (y - y0)**2 - r**2 f_2 = (x - x1)**2 + (y - y1)**2 - r**2 result = [tuple(r.values()) for r in solve_poly_system([f_1, f_2], x, y)] assert len(result) == 2 and all(len(r) == 2 for r in result) assert all(len(r.find(query)) == 1 for r in flatten(result)) eqs = [y**2 - 4 + x, y*2 + 3*x - 7] assert solve_poly_system(eqs, x, y) == [{x: Rational(11, 9), y: Rational(5, 3)}, {x: 3, y: -1}] eqs = [y + x**2 - 3, -y + x - 4] assert solve_poly_system(eqs, x, y) == [{x: -S.Half + sqrt(29)/2, y: Rational(-9, 2) + sqrt(29)/2}, {x: -sqrt(29)/2 - S.Half, y: Rational(-9, 2) - sqrt(29)/2}]
def _new(cls, *args, **kwargs): shape, flat_list = cls._handle_ndarray_creation_inputs(*args, **kwargs) flat_list = flatten(flat_list) self = object.__new__(cls) self._shape = shape self._array = list(flat_list) self._rank = len(shape) self._loop_size = functools.reduce(lambda x, y: x * y, shape) if shape else 0 return self
def test_flatten(): assert flatten((1, (1,))) == [1, 1] assert flatten((x, (x,))) == [x, x] ls = [[(-2, -1), (1, 2)], [(0, 0)]] assert flatten(ls, levels=0) == ls assert flatten(ls, levels=1) == [(-2, -1), (1, 2), (0, 0)] assert flatten(ls, levels=2) == [-2, -1, 1, 2, 0, 0] assert flatten(ls, levels=3) == [-2, -1, 1, 2, 0, 0] pytest.raises(ValueError, lambda: flatten(ls, levels=-1)) class MyOp(Basic): pass assert flatten([MyOp(x, y), z]) == [MyOp(x, y), z] assert flatten([MyOp(x, y), z], cls=MyOp) == [x, y, z] assert flatten({1, 11, 2}) == list({1, 11, 2})
def _new(cls, *args, **kwargs): shape, flat_list = cls._handle_ndarray_creation_inputs(*args, **kwargs) shape = Tuple(*map(_sympify, shape)) flat_list = flatten(flat_list) flat_list = Tuple(*flat_list) self = Basic.__new__(cls, flat_list, shape, **kwargs) self._shape = shape self._array = tuple(flat_list) self._rank = len(shape) self._loop_size = functools.reduce(lambda x, y: x * y, shape) if shape else 0 return self
def __new__(cls, *args, **kwargs): shape, flat_list = cls._handle_ndarray_creation_inputs(*args, **kwargs) self = object.__new__(cls) self._shape = shape self._rank = len(shape) self._loop_size = functools.reduce(lambda x, y: x * y, shape) if shape else 0 # Sparse array: if isinstance(flat_list, (dict, Dict)): self._sparse_array = dict(flat_list) return self self._sparse_array = {} for i, el in enumerate(flatten(flat_list)): if el != 0: self._sparse_array[i] = _sympify(el) return self
def __new__(cls, *args, **kwargs): shape, flat_list = cls._handle_ndarray_creation_inputs(*args, **kwargs) shape = Tuple(*map(_sympify, shape)) loop_size = functools.reduce(lambda x, y: x * y, shape) if shape else 0 # Sparse array: if isinstance(flat_list, (dict, Dict)): sparse_array = Dict(flat_list) else: sparse_array = {} for i, el in enumerate(flatten(flat_list)): if el != 0: sparse_array[i] = _sympify(el) sparse_array = Dict(sparse_array) self = Expr.__new__(cls, sparse_array, shape, **kwargs) self._shape = shape self._rank = len(shape) self._loop_size = loop_size self._sparse_array = sparse_array return self
def test_solve_biquadratic(): x0, y0, x1, y1, r = symbols('x0 y0 x1 y1 r') f_1 = (x - 1)**2 + (y - 1)**2 - r**2 f_2 = (x - 2)**2 + (y - 2)**2 - r**2 assert (solve_poly_system([f_1, f_2], x, y) == [{ x: Rational(3, 2) - sqrt(-1 + 2 * r**2) / 2, y: Rational(3, 2) + sqrt(-1 + 2 * r**2) / 2 }, { x: Rational(3, 2) + sqrt(-1 + 2 * r**2) / 2, y: Rational(3, 2) - sqrt(-1 + 2 * r**2) / 2 }]) f_1 = (x - 1)**2 + (y - 2)**2 - r**2 f_2 = (x - 1)**2 + (y - 1)**2 - r**2 assert (solve_poly_system([f_1, f_2], x, y) == [{ x: 1 - sqrt(((2 * r - 1) * (2 * r + 1))) / 2, y: Rational(3, 2) }, { x: 1 + sqrt(((2 * r - 1) * (2 * r + 1))) / 2, y: Rational(3, 2) }]) def query(expr): return expr.is_Pow and expr.exp is Rational(1, 2) f_1 = (x - 1)**2 + (y - 2)**2 - r**2 f_2 = (x - x1)**2 + (y - 1)**2 - r**2 result = [tuple(r.values()) for r in solve_poly_system([f_1, f_2], x, y)] assert len(result) == 2 and all(len(r) == 2 for r in result) assert all(r.count(query) == 1 for r in flatten(result)) f_1 = (x - x0)**2 + (y - y0)**2 - r**2 f_2 = (x - x1)**2 + (y - y1)**2 - r**2 result = [tuple(r.values()) for r in solve_poly_system([f_1, f_2], x, y)] assert len(result) == 2 and all(len(r) == 2 for r in result) assert all(len(r.find(query)) == 1 for r in flatten(result)) eqs = [y**2 - 4 + x, y * 2 + 3 * x - 7] assert solve_poly_system(eqs, x, y) == [{ x: Rational(11, 9), y: Rational(5, 3) }, { x: 3, y: -1 }] eqs = [y + x**2 - 3, -y + x - 4] assert solve_poly_system(eqs, x, y) == [{ x: Rational(-1, 2) + sqrt(29) / 2, y: Rational(-9, 2) + sqrt(29) / 2 }, { x: -sqrt(29) / 2 - Rational(1, 2), y: Rational(-9, 2) - sqrt(29) / 2 }] # issue sympy/sympy#6785 roots = solve_poly_system([((x - 5)**2 / 250000 + (y - Rational(5, 10))**2 / 250000) - 1, x], x, y) assert roots == [{ x: 0, y: Rational(1, 2) + 15 * sqrt(1111) }, { x: 0, y: Rational(1, 2) - 15 * sqrt(1111) }] roots = solve_poly_system([((x - 5)**2 / 250000 + (y - 5.0 / 10)**2 / 250000) - 1, x], x, y) assert len(roots) == 2 assert roots[0][x] == roots[1][x] == 0 assert roots[0][y].epsilon_eq(-499.474999374969, 1e12) assert roots[1][y].epsilon_eq(+500.474999374969, 1e12)