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: Add themes together
  
  Subclasses should not override this method.
  
  This will be called when adding two instances of class 'theme'
  together.
  A complete theme will annihilate any previous themes. Partial themes
  can be added together and can be added to a complete theme.
docstr_tok: ["Add","themes","together","Subclasses","should","not","override","this","method",".","This","will","be","called","when","adding","two","instances","of","class","'theme'","together",".","A","complete","theme","will","annihilate","any","previous","themes",".","Partial","themes","can","be","added","together","and","can","be","added","to","a","complete","theme","."]
code: def add_theme(self, other: theme) -> theme:
      """
      Add themes together
  
      Subclasses should not override this method.
  
      This will be called when adding two instances of class 'theme'
      together.
      A complete theme will annihilate any previous themes. Partial themes
      can be added together and can be added to a complete theme.
      """
      if other.complete:
          return other
  
      self.themeables.update(deepcopy(other.themeables))
      return self
  
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 6 for calling the theme obj's underlying member method code with example usage: obj.add_theme(other) and returns: self, other