class_docstr: Represents a slice of a SheetCoordinateSystem; i.e., an array
  specifying the row and column start and end points for a submatrix
  of the SheetCoordinateSystem.
  
  The slice is created from the supplied bounds by calculating the
  slice that corresponds most closely to the specified bounds.
  Therefore, the slice does not necessarily correspond exactly to
  the specified bounds. The bounds that do exactly correspond to the
  slice are available via the 'bounds' attribute.
  
  Note that the slice does not respect the bounds of the
  SheetCoordinateSystem, and that actions such as translate() also
  do not respect the bounds. To ensure that the slice is within the
  SheetCoordinateSystem's bounds, use crop_to_sheet().
docstr: Create the 'odd' Slice that best approximates the specified
  sheet-coordinate bounds.
  
  The supplied bounds are translated to have a center at the
  center of one of the sheet's units (we arbitrarily use the
  center unit), and then these bounds are converted to a slice
  in such a way that the slice exactly includes all units whose
  centers are within the bounds (see boundsspec2slicespec()).
  However, to ensure that the bounds are treated symmetrically,
  we take the right and bottom bounds and reflect these about
  the center of the slice (i.e. we take the 'xradius' to be
  right_col-center_col and the 'yradius' to be
  bottom_col-center_row). Hence, if the bounds happen to go
  through units, if the units are included on the right and
  bottom bounds, they will be included on the left and top
  bounds. This ensures that the slice has odd dimensions.
docstr_tok: ["Create","the","'odd","'","Slice","that","best","approximates","the","specified","sheet-coordinate","bounds",".","The","supplied","bounds","are","translated","to","have","a","center","at","the","center","of","one","of","the","sheet","'s","units","(","we","arbitrarily","use","the","center","unit",")",",","and","then","these","bounds","are","converted","to","a","slice","in","such","a","way","that","the","slice","exactly","includes","all","units","whose","centers","are","within","the","bounds","(","see","boundsspec2slicespec","(",")",")",".","However",",","to","ensure","that","the","bounds","are","treated","symmetrically",",","we","take","the","right","and","bottom","bounds","and","reflect","these","about","the","center","of","the","slice","(","i.e",".","we","take","the","'xradius","'","to","be","right_col-center_col","and","the","'yradius","'","to","be","bottom_col-center_row",")",".","Hence",",","if","the","bounds","happen","to","go","through","units",",","if","the","units","are","included","on","the","right","and","bottom","bounds",",","they","will","be","included","on","the","left","and","top","bounds",".","This","ensures","that","the","slice","has","odd","dimensions","."]
code: def _createoddslicespec(bounds, scs, min_matrix_radius):
      """
      Create the 'odd' Slice that best approximates the specified
      sheet-coordinate bounds.
  
      The supplied bounds are translated to have a center at the
      center of one of the sheet's units (we arbitrarily use the
      center unit), and then these bounds are converted to a slice
      in such a way that the slice exactly includes all units whose
      centers are within the bounds (see boundsspec2slicespec()).
      However, to ensure that the bounds are treated symmetrically,
      we take the right and bottom bounds and reflect these about
      the center of the slice (i.e. we take the 'xradius' to be
      right_col-center_col and the 'yradius' to be
      bottom_col-center_row). Hence, if the bounds happen to go
      through units, if the units are included on the right and
      bottom bounds, they will be included on the left and top
      bounds. This ensures that the slice has odd dimensions.
      """
      bounds_xcenter, bounds_ycenter = bounds.centroid()
      sheet_rows, sheet_cols = scs.shape
  
      center_row, center_col = sheet_rows / 2, sheet_cols / 2
      unit_xcenter, unit_ycenter = scs.matrixidx2sheet(
          center_row, center_col
      )
  
      bounds.translate(
          unit_xcenter - bounds_xcenter, unit_ycenter - bounds_ycenter
      )
  
      r1, r2, c1, c2 = Slice._boundsspec2slicespec(bounds.lbrt(), scs)
  
      xrad = max(c2 - center_col - 1, min_matrix_radius)
      yrad = max(r2 - center_row - 1, min_matrix_radius)
  
      r2 = center_row + yrad + 1
      c2 = center_col + xrad + 1
      r1 = center_row - yrad
      c1 = center_col - xrad
      return (r1, r2, c1, c2)
  
imports: import numpy
  from .boundingregion import BoundingBox
  from .util import datetime_types
label_desc: Use image node_id 11 for calling the Slice obj's underlying member method code with example usage: obj._createoddslicespec(bounds, scs, min_matrix_radius) and returns: r1,  r2,  c1,  c2