docstr: This subclass handles the case where one or both coordinates should be
  taken modulo 360, or be restricted to not exceed a specific range.
  
  Parameters
  ----------
  nx, ny : int
      The number of samples in each direction.
  
  lon_cycle, lat_cycle : 360 or None
      If not None, values in the corresponding direction are taken modulo
      *lon_cycle* or *lat_cycle*; in theory this can be any number but
      the implementation actually assumes that it is 360 (if not None);
      other values give nonsensical results.
  
      This is done by "unwrapping" the transformed grid coordinates so
      that jumps are less than a half-cycle; then normalizing the span to
      no more than a full cycle.
  
      For example, if values are in the union of the [0, 2] and
      [358, 360] intervals (typically, angles measured modulo 360), the
      values in the second interval are normalized to [-2, 0] instead so
      that the values now cover [-2, 2].  If values are in a range of
      [5, 1000], this gets normalized to [5, 365].
  
  lon_minmax, lat_minmax : (float, float) or None
      If not None, the computed bounding box is clipped to the given
      range in the corresponding direction.
docstr_tok: ["This","subclass","handles","the","case","where","one","or","both","coordinates","should","be","taken","modulo","360",",","or","be","restricted","to","not","exceed","a","specific","range",".","Parameters","--","--","--","--","--","nx",",","ny",":","int","The","number","of","samples","in","each","direction",".","lon_cycle",",","lat_cycle",":","360","or","None","If","not","None",",","values","in","the","corresponding","direction","are","taken","modulo","*","lon_cycle","*","or","*","lat_cycle","*",";","in","theory","this","can","be","any","number","but","the","implementation","actually","assumes","that","it","is","360","(","if","not","None",")",";","other","values","give","nonsensical","results",".","This","is","done","by","``","unwrapping","''","the","transformed","grid","coordinates","so","that","jumps","are","less","than","a","half-cycle",";","then","normalizing","the","span","to","no","more","than","a","full","cycle",".","For","example",",","if","values","are","in","the","union","of","the","[","0",",","2","]","and","[","358",",","360","]","intervals","(","typically",",","angles","measured","modulo","360",")",",","the","values","in","the","second","interval","are","normalized","to","[","-2",",","0","]","instead","so","that","the","values","now","cover","[","-2",",","2","]",".","If","values","are","in","a","range","of","[","5",",","1000","]",",","this","gets","normalized","to","[","5",",","365","]",".","lon_minmax",",","lat_minmax",":","(","float",",","float",")","or","None","If","not","None",",","the","computed","bounding","box","is","clipped","to","the","given","range","in","the","corresponding","direction","."]
code: def __init__(
      self,
      nx,
      ny,
      lon_cycle=360.0,
      lat_cycle=None,
      lon_minmax=None,
      lat_minmax=(-90, 90),
  ):
      """
      This subclass handles the case where one or both coordinates should be
      taken modulo 360, or be restricted to not exceed a specific range.
  
      Parameters
      ----------
      nx, ny : int
          The number of samples in each direction.
  
      lon_cycle, lat_cycle : 360 or None
          If not None, values in the corresponding direction are taken modulo
          *lon_cycle* or *lat_cycle*; in theory this can be any number but
          the implementation actually assumes that it is 360 (if not None);
          other values give nonsensical results.
  
          This is done by "unwrapping" the transformed grid coordinates so
          that jumps are less than a half-cycle; then normalizing the span to
          no more than a full cycle.
  
          For example, if values are in the union of the [0, 2] and
          [358, 360] intervals (typically, angles measured modulo 360), the
          values in the second interval are normalized to [-2, 0] instead so
          that the values now cover [-2, 2].  If values are in a range of
          [5, 1000], this gets normalized to [5, 365].
  
      lon_minmax, lat_minmax : (float, float) or None
          If not None, the computed bounding box is clipped to the given
          range in the corresponding direction.
      """
      self.nx, self.ny = nx, ny
      self.lon_cycle, self.lat_cycle = lon_cycle, lat_cycle
      self.lon_minmax = lon_minmax
      self.lat_minmax = lat_minmax
  
imports: import numpy
  import math
  from mpl_toolkits.axisartist.grid_finder import ExtremeFinderSimple
label_desc: Use image node_id 1 to create a new ExtremeFinderCycle object from inherited base classes: ExtremeFinderSimple with example: obj = ExtremeFinderCycle(nx, ny, lon_cycle, lat_cycle, lon_minmax, lat_minmax)