class_docstr: Rudimentary, generic GLSL printing tools.
  
  Additional settings:
  'use_operators': Boolean (should the printer use operators for +,-,*, or functions?)
class_docstr_tok: ["Rudimentary",",","generic","GLSL","printing","tools",".","Additional","settings",":","'use_operators","'",":","Boolean","(","should","the","printer","use","operators","for","+",",","-",",","*",",","or","functions","?",")"]
code: def _print_Mul(self, expr, **kwargs):
      if self._settings["use_operators"]:
          return CodePrinter._print_Mul(self, expr, **kwargs)
      terms = expr.as_ordered_factors()
  
      def mul(a, b):
          # return self.known_functions['mul']+'(%s, %s)' % (a,b)
          return self._print_Function_with_args("mul", (a, b))
  
      s = reduce(
          lambda a, b: mul(a, b), (self._print(t) for t in terms)
      )
      return s
  
imports: from __future__ import annotations
  from sympy.core import Basic, S
  from sympy.core.function import Lambda
  from sympy.core.numbers import equal_valued
  from sympy.printing.codeprinter import CodePrinter
  from sympy.printing.precedence import precedence
  from functools import reduce
label_desc: Use image node_id 23 for calling the GLSLPrinter obj's underlying member method code with example usage: obj._print_Mul(expr) and returns: s, CodePrinter, self