class_docstr: Base class for themes
  
  In general, only complete themes should subclass this class.
  
  Parameters
  ----------
  complete : bool
      Themes that are complete will override any existing themes.
      themes that are not complete (ie. partial) will add to or
      override specific elements of the current theme. e.g:
  
      ```python
      theme_gray() + theme_xkcd()
      ```
  
      will be completely determined by [](`~plotnine.themes.theme_xkcd`),
      but:
  
      ```python
      theme_gray() + theme(axis_text_x=element_text(angle=45))
      ```
  
      will only modify the x-axis text.
  kwargs: dict
      kwargs are :ref:`themeables <themeables>`. The themeables are
      elements that are subclasses of `themeable`. Many themeables
      are defined using theme elements i.e
  
      - [](`~plotnine.themes.element_line`)
      - [](`~plotnine.themes.element_rect`)
      - [](`~plotnine.themes.element_text`)
  
      These simply bind together all the aspects of a themeable
      that can be themed. See [](`~plotnine.themes.themeable.themeable`).
  
  Notes
  -----
  When subclassing, make sure to call :python:`theme.__init__`.
  After which you can customise :python:`self._rcParams` within
  the `__init__` method of the new theme. The `rcParams`
  should not be modified after that.
class_docstr_tok: ["Base","class","for","themes","In","general",",","only","complete","themes","should","subclass","this","class",".","Parameters","--","--","--","--","--","complete",":","bool","Themes","that","are","complete","will","override","any","existing","themes",".","themes","that","are","not","complete","(","ie",".","partial",")","will","add","to","or","override","specific","elements","of","the","current","theme",".","e.g",":","``","`","python","theme_gray","(",")","+","theme_xkcd","(",")","``","`","will","be","completely","determined","by","[","]","(","`","~plotnine.themes.theme_xkcd","`",")",",","but",":","``","`","python","theme_gray","(",")","+","theme","(","axis_text_x=element_text","(","angle=45",")",")","``","`","will","only","modify","the","x-axis","text",".","kwargs",":","dict","kwargs","are",":","ref",":","`","themeables","<","themeables",">","`",".","The","themeables","are","elements","that","are","subclasses","of","`","themeable","`",".","Many","themeables","are","defined","using","theme","elements","i.e","-","[","]","(","`","~plotnine.themes.element_line","`",")","-","[","]","(","`","~plotnine.themes.element_rect","`",")","-","[","]","(","`","~plotnine.themes.element_text","`",")","These","simply","bind","together","all","the","aspects","of","a","themeable","that","can","be","themed",".","See","[","]","(","`","~plotnine.themes.themeable.themeable","`",")",".","Notes","--","--","-","When","subclassing",",","make","sure","to","call",":","python",":","`","theme.__init__","`",".","After","which","you","can","customise",":","python",":","`","self._rcParams","`","within","the","`","__init__","`","method","of","the","new","theme",".","The","`","rcParams","`","should","not","be","modified","after","that","."]
docstr: Return rcParams dict for this theme.
  
  Notes
  -----
  Subclasses should not need to override this method method as long as
  self._rcParams is constructed properly.
  
  rcParams are used during plotting. Sometimes the same theme can be
  achieved by setting rcParams before plotting or a apply
  after plotting. The choice of how to implement it is is a matter of
  convenience in that case.
  
  There are certain things can only be themed after plotting. There
  may not be an rcParam to control the theme or the act of plotting
  may cause an entity to come into existence before it can be themed.
docstr_tok: ["Return","rcParams","dict","for","this","theme",".","Notes","--","--","-","Subclasses","should","not","need","to","override","this","method","method","as","long","as","self._rcParams","is","constructed","properly",".","rcParams","are","used","during","plotting",".","Sometimes","the","same","theme","can","be","achieved","by","setting","rcParams","before","plotting","or","a","apply","after","plotting",".","The","choice","of","how","to","implement","it","is","is","a","matter","of","convenience","in","that","case",".","There","are","certain","things","can","only","be","themed","after","plotting",".","There","may","not","be","an","rcParam","to","control","the","theme","or","the","act","of","plotting","may","cause","an","entity","to","come","into","existence","before","it","can","be","themed","."]
code: def rcParams(self):
      """
      Return rcParams dict for this theme.
  
      Notes
      -----
      Subclasses should not need to override this method method as long as
      self._rcParams is constructed properly.
  
      rcParams are used during plotting. Sometimes the same theme can be
      achieved by setting rcParams before plotting or a apply
      after plotting. The choice of how to implement it is is a matter of
      convenience in that case.
  
      There are certain things can only be themed after plotting. There
      may not be an rcParam to control the theme or the act of plotting
      may cause an entity to come into existence before it can be themed.
  
      """
      try:
          rcParams = deepcopy(self._rcParams)
      except NotImplementedError:
          # deepcopy raises an error for objects that are drived from or
          # composed of matplotlib.transform.TransformNode.
          # Not desirable, but probably requires upstream fix.
          # In particular, XKCD uses matplotlib.patheffects.withStrok
          rcParams = copy(self._rcParams)
  
      for th in self.themeables.values():
          rcParams.update(th.rcParams)
      return rcParams
  
imports: from __future__ import annotations
  import typing
  from copy import copy, deepcopy
  from typing import overload
  from ..exceptions import PlotnineError
  from ..options import get_option, set_option
  from .themeable import Themeables, themeable
label_desc: Use image node_id 5 for calling the theme obj's underlying member method code with example usage: obj.rcParams() and returns: rcParams