class_docstr: Base class for `Op`\s using OpenMP.
  
  This `Op` will check that the compiler support correctly OpenMP code.
  If not, it will print a warning and disable OpenMP for this `Op`, then it
  will generate the not OpenMP code.
  
  This is needed, as EPD on the Windows version of ``g++`` says it supports
  OpenMP, but does not include the OpenMP files.
  
  We also add the correct compiler flags in ``c_compile_args``.
docstr: Make sure ``self.openmp`` is not ``True`` if there is no OpenMP support in ``gxx``.
docstr_tok: ["Make","sure","``","self.openmp","``","is","not","``","True","``","if","there","is","no","OpenMP","support","in","``","gxx","``","."]
code: def update_self_openmp(self) -> None:
      """Make sure ``self.openmp`` is not ``True`` if there is no OpenMP support in ``gxx``."""
      if self.openmp:
          if OpenMPOp.gxx_support_openmp is None:
              OpenMPOp.gxx_support_openmp = OpenMPOp.test_gxx_support()
              if not OpenMPOp.gxx_support_openmp:
                  # We want to warn only once.
                  warnings.warn(
                      "Your g++ compiler fails to compile OpenMP code. We"
                      " know this happen with some version of the EPD mingw"
                      " compiler and LLVM compiler on Mac OS X."
                      " We disable openmp everywhere in PyTensor."
                      " To remove this warning set the pytensor flags `openmp`"
                      " to False.",
                      stacklevel=3,
                  )
          if OpenMPOp.gxx_support_openmp is False:
              self.openmp = False
              config.openmp = False
  
imports: import inspect
  import os
  import re
  import warnings
  from collections.abc import Collection
  from re import Pattern
  from typing import TYPE_CHECKING, Any, Callable, ClassVar, Optional, Union, cast
  import numpy
  from pytensor.configdefaults import config
  from pytensor.graph.basic import Apply, Variable
  from pytensor.graph.op import ComputeMapType, Op, StorageMapType, ThunkType
  from pytensor.graph.type import HasDataType
  from pytensor.graph.utils import MethodNotDefined
  from pytensor.link.c.interface import CLinkerOp
  from pytensor.link.c.params_type import ParamsType
  from pytensor.utils import hash_from_code
label_desc: Use image node_id 6 for calling the OpenMPOp obj's underlying member method code with example usage: obj.update_self_openmp() without return types