code: def test_zero():
      """
      Everything in this test doesn't work with the ask handlers, and most
      things would be very difficult or impossible to make work under that
      model.
  
      """
      assert satask(Q.zero(x) | Q.zero(y), Q.zero(x * y)) is True
      assert satask(Q.zero(x * y), Q.zero(x) | Q.zero(y)) is True
  
      assert satask(Implies(Q.zero(x), Q.zero(x * y))) is True
  
      # This one in particular requires computing the fixed-point of the
      # relevant facts, because going from Q.nonzero(x*y) -> ~Q.zero(x*y) and
      # Q.zero(x*y) -> Equivalent(Q.zero(x*y), Q.zero(x) | Q.zero(y)) takes two
      # steps.
      assert satask(Q.zero(x) | Q.zero(y), Q.nonzero(x * y)) is False
  
      assert satask(Q.zero(x), Q.zero(x**2)) is True
  
imports: from sympy.assumptions.ask import Q
  from sympy.assumptions.assume import assuming
  from sympy.core.numbers import I, pi
  from sympy.core.relational import Eq, Gt
  from sympy.core.singleton import S
  from sympy.core.symbol import symbols
  from sympy.functions.elementary.complexes import Abs
  from sympy.logic.boolalg import Implies
  from sympy.matrices.expressions.matexpr import MatrixSymbol
  from sympy.assumptions.cnf import CNF, Literal
  from sympy.assumptions.satask import satask, extract_predargs, get_relevant_clsfacts
  from sympy.testing.pytest import raises, XFAIL
label_desc: Use image node_id 2 for calling a global function with example usage: test_zero() without return types