class_docstr: Associative operations, can separate noncommutative and
  commutative parts.
  
  (a op b) op c == a op (b op c) == a op b op c.
  
  Base class for Add and Mul.
  
  This is an abstract base class, concrete derived classes must define
  the attribute `identity`.
  
  .. deprecated:: 1.7
  
     Using arguments that aren't subclasses of :class:`~.Expr` in core
     operators (:class:`~.Mul`, :class:`~.Add`, and :class:`~.Pow`) is
     deprecated. See :ref:`non-expr-args-deprecated` for details.
  
  Parameters
  ==========
  
  *args :
      Arguments which are operated
  
  evaluate : bool, optional
      Evaluate the operation. If not passed, refer to ``global_parameters.evaluate``.
docstr: Create new instance with already-processed args.
  If the args are not in canonical order, then a non-canonical
  result will be returned, so use with caution. The order of
  args may change if the sign of the args is changed.
docstr_tok: ["Create","new","instance","with","already-processed","args",".","If","the","args","are","not","in","canonical","order",",","then","a","non-canonical","result","will","be","returned",",","so","use","with","caution",".","The","order","of","args","may","change","if","the","sign","of","the","args","is","changed","."]
code: def _from_args(cls, args, is_commutative=None):
      """Create new instance with already-processed args.
      If the args are not in canonical order, then a non-canonical
      result will be returned, so use with caution. The order of
      args may change if the sign of the args is changed."""
      if len(args) == 0:
          return cls.identity
      elif len(args) == 1:
          return args[0]
  
      obj = super().__new__(cls, *args)
      if is_commutative is None:
          is_commutative = fuzzy_and(a.is_commutative for a in args)
      obj.is_commutative = is_commutative
      return obj
  
imports: from __future__ import annotations
  from operator import attrgetter
  from collections import defaultdict
  from sympy.utilities.exceptions import sympy_deprecation_warning
  from .sympify import _sympify, sympify
  from .basic import Basic
  from .cache import cacheit
  from .sorting import ordered
  from .logic import fuzzy_and
  from .parameters import global_parameters
  from sympy.utilities.iterables import sift
  from sympy.multipledispatch.dispatcher import Dispatcher, ambiguity_register_error_ignore_dup, str_signature, RaiseNotImplementedError
label_desc: Use image node_id 2 for calling the AssocOp obj's underlying member method code with example usage: obj._from_args(cls, args, is_commutative) and returns: obj, cls, args