{
  "__type": "IngestedDoc",
  "__tag": 4010,
  "_content": {},
  "_ordered_sections": [],
  "item_file": null,
  "item_line": null,
  "item_type": null,
  "aliases": [],
  "example_section_data": {
    "__type": "Section",
    "__tag": 4015,
    "children": [],
    "title": [],
    "level": 0,
    "target": null
  },
  "see_also": [],
  "signature": null,
  "references": null,
  "qa": "release:1.20.0-notes",
  "arbitrary": [
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [],
      "level": 0,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This NumPy release is the largest so made to date, some 684 PRs contributed by 184 people have been merged. See the list of highlights below for more details. The Python versions supported for this release are 3.7-3.9, support for Python 3.6 has been dropped. Highlights are"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Annotations for NumPy functions. This work is ongoing and improvements can   be expected pending feedback from users."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Wider use of SIMD to increase execution speed of ufuncs. Much work has been   done in introducing universal functions that will ease use of modern   features across different hardware platforms. This work is ongoing."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Preliminary work in changing the dtype and casting implementations in order to   provide an easier path to extending dtypes. This work is ongoing but enough   has been done to allow experimentation and feedback."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Extensive documentation improvements comprising some 185 PR merges. This work   is ongoing and part of the larger project to improve NumPy's online presence   and usefulness to new users."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Further cleanups related to removing Python 2.7. This improves code   readability and removes technical debt."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Preliminary support for the upcoming Cython 3.0."
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "NumPy 1.20.0 Release Notes"
        }
      ],
      "level": 0,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New functions"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The new function differs from "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "shuffle"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "permutation"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " in that the subarrays indexed by an axis are permuted rather than the axis being treated as a separate 1-D array for every combination of the other indexes. For example, it is now possible to permute the rows or columns of a 2-D array."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15121"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15121",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The random.Generator class has a new "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "permuted"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " function."
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.lib.stride_tricks.sliding_window_view",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy.lib.stride_tricks:sliding_window_view"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " constructs views on numpy arrays that offer a sliding or moving window access to the array. This allows for the simple implementation of certain algorithms, such as running means."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17394"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17394",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "sliding_window_view"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " provides a sliding window view for numpy arrays"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "broadcast_shapes",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:broadcast_shapes"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " gets the resulting shape from broadcasting the given shape tuples against each other."
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> np.broadcast_shapes((1, 2), (3, 1))\n(3, 2)\n\n>>> np.broadcast_shapes(2, (3, 1))\n(3, 2)\n\n>>> np.broadcast_shapes((6, 7), (5, 6, 1), (7,), (5, 1, 7))\n(5, 6, 7)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17535"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17535",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "numpy.broadcast_shapes",
          "domain": null,
          "role": null,
          "inventory": null
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " is a new user-facing function"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Deprecations"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "For a long time, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.int"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been an alias of the builtin "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "int"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This is repeatedly a cause of confusion for newcomers, and existed mainly for historic reasons."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "These aliases have been deprecated. The table below shows the full list of deprecated aliases, along with their exact meaning. Replacing uses of items in the first column with the contents of the second column will work identically and silence the deprecation warning."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The third column lists alternative NumPy names which may occasionally be preferential. See also "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "basics.types",
              "reference": {
                "__type": "LocalRef",
                "__tag": 4022,
                "kind": "docs",
                "path": "user:basics.types"
              },
              "kind": "exists"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for additional details."
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "=================  ============  ==================================================================\nDeprecated name    Identical to  NumPy scalar type names\n=================  ============  ==================================================================\n``numpy.bool``     ``bool``      `numpy.bool_`\n``numpy.int``      ``int``       `numpy.int_` (default), ``numpy.int64``, or ``numpy.int32``\n``numpy.float``    ``float``     `numpy.float64`, `numpy.float_`, `numpy.double` (equivalent)\n``numpy.complex``  ``complex``   `numpy.complex128`, `numpy.complex_`, `numpy.cdouble` (equivalent)\n``numpy.object``   ``object``    `numpy.object_`\n``numpy.str``      ``str``       `numpy.str_`\n``numpy.long``     ``int``       `numpy.int_` (C ``long``), `numpy.longlong` (largest integer type)\n``numpy.unicode``  ``str``       `numpy.unicode_`\n=================  ============  ==================================================================",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "To give a clear guideline for the vast majority of cases, for the types "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "bool"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "object"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "str"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " (and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "unicode"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ") using the plain version is shorter and clear, and generally a good replacement. For "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "complex"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " you can use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "complex128"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " if you wish to be more explicit about the precision."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "For "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.int"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " a direct replacement with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.int_"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "int"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is also good and will not change behavior, but the precision will continue to depend on the computer and operating system. If you want to be more explicit and review the current use, you have the following alternatives:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.int64"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " or "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.int32"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " to specify the precision exactly.   This ensures that results cannot depend on the computer or operating system."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.int_"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " or "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "int"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " (the default), but be aware that it depends on   the computer and operating system."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The C types: "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.cint"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " (int), "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.int_"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " (long), "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.longlong"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.intp"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " which is 32bit on 32bit machines 64bit on 64bit machines.   This can be the best type to use for indexing."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When used with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype(...)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=..."
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " changing it to the NumPy name as mentioned above will have no effect on the output. If used as a scalar with      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.float(123)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "changing it can subtly change the result.  In this case, the Python version "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float(123)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "int(12.)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is normally preferable, although the NumPy version may be useful for consistency with NumPy arrays (for example, NumPy behaves differently for things like division by zero)."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-14882"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/14882",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Using the aliases of builtin types like "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.int"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " is deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously, this was an alias for passing "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "shape=()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This deprecation is emitted by "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "PyArray_IntpConverter",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " in the C API. If your API is intended to support passing "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "None"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", then you should check for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "None"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " prior to invoking the converter, so as to be able to distinguish "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "None"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15886"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15886",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Passing "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "shape=None"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " to functions with a non-optional shape argument is deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In the future, NumPy will raise an IndexError when an integer array index contains out of bound values even if a non-indexed dimension is of length 0. This will now emit a DeprecationWarning. This can happen when the array is previously empty, or an empty slice is involved      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "arr1 = np.zeros((5, 0))\narr1[[20]]\narr2 = np.zeros((5, 5))\narr2[[20], :0]",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously the non-empty index "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "[20]"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was not checked for correctness. It will now be checked causing a deprecation warning which will be turned into an error. This also applies to assignments."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15900"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15900",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Indexing errors will be reported even when index result is empty"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Inexact and case insensitive matches for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "mode"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "searchside"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " were valid inputs earlier and will give a DeprecationWarning now.  For example, below are some example usages which are now deprecated and will give a DeprecationWarning      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "import numpy as np\narr = np.array([[3, 6, 6], [4, 5, 1]])\n# mode: inexact match\nnp.ravel_multi_index(arr, (7, 6), mode=\"clap\")  # should be \"clip\"\n# searchside: inexact match\nnp.searchsorted(arr[0], 4, side='random')  # should be \"right\"",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16056"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16056",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Inexact matches for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "mode"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "searchside"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " are deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The module "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "numpy.dual",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is deprecated.  Instead of importing functions from "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "numpy.dual",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", the functions should be imported directly from NumPy or SciPy."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16156"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16156",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Deprecation of "
        },
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "numpy.dual",
          "domain": null,
          "role": null,
          "inventory": null
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.matrix"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " use with "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "outer",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:outer"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or generic ufunc outer calls such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.add.outer"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Previously, matrix was converted to an array here. This will not be done in the future requiring a manual conversion to arrays."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16232"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16232",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "outer"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ufunc.outer"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " deprecated for matrix"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The remaining numeric-style type codes "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "Bytes0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "Str0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "Uint32"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "Uint64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "Datetime64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " have been deprecated.  The lower-case variants should be used instead.  For bytes and string "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"S\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"U\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " are further alternatives."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16554"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16554",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Further Numeric Style types Deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The documentation has warned against using this function since NumPy 1.8. Use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "next(it)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " instead of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "it.ndincr()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17233"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17233",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndincr"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " method of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndindex"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " is deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Objects which define one of the protocols "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_interface__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_struct__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " but are not sequences (usually defined by having a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__len__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__getitem__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ") will behave differently during array-coercion in the future."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When nested inside sequences, such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.array([array_like])"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", these were handled as a single Python object rather than an array. In the future they will behave identically to      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array([np.array(array_like)])",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This change should only have an effect if "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.array(array_like)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is not 0-D. The solution to this warning may depend on the object:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Some array-likes may expect the new behaviour, and users can ignore the   warning.  The object can choose to expose the sequence protocol to opt-in   to the new behaviour."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "For example, "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "shapely"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " will allow conversion to an array-like using   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "line.coords"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " rather than "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.asarray(line)"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ". Users may work around   the warning, or use the new convention when it becomes available."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Unfortunately, using the new behaviour can only be achieved by calling "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.array(array_like)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If you wish to ensure that the old behaviour remains unchanged, please create an object array and then fill it explicitly, for example      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "arr = np.empty(3, dtype=object)\narr[:] = [array_like1, array_like2, array_like3]",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This will ensure NumPy knows to not enter the array-like and use it as a object instead."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17973"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17973",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "ArrayLike objects which do not define "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__len__"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__getitem__"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Future Changes"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Array creation and casting using "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.array(arr, dtype)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "arr.astype(dtype)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will use different logic when "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is a subarray dtype such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype(\"(2)i,\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "For such a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " the following behaviour is true      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "res = np.array(arr, dtype)\n\nres.dtype is not dtype\nres.dtype is dtype.base\nres.shape == arr.shape + dtype.shape",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "But "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "res"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is filled using the logic      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "res = np.empty(arr.shape + dtype.shape, dtype=dtype.base)\nres[...] = arr",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "which uses incorrect broadcasting (and often leads to an error). In the future, this will instead cast each element individually, leading to the same result as      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "res = np.array(arr, dtype=np.dtype([\"f\", dtype]))[\"f\"]",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Which can normally be used to opt-in to the new behaviour."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This change does not affect "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.array(list, dtype=\"(2)i,\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " unless the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "list"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " itself includes at least one array.  In particular, the behaviour is unchanged for a list of tuples."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17596"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17596",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Arrays cannot be using subarray dtypes"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The deprecation of numeric style type-codes "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.dtype(\"Complex64\")"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "   (with upper case spelling), is expired.  "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "\"Complex64\""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " corresponded to   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "\"complex128\""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "\"Complex32\""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " corresponded to "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "\"complex64\""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The deprecation of "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.sctypeNA"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.typeNA"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " is expired. Both   have been removed from the public API. Use "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.typeDict"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " instead."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-16554"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/16554",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The 14-year deprecation of "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.ctypeslib.ctypes_load_library"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " is expired.   Use "
                    },
                    {
                      "__type": "CrossRef",
                      "__tag": 4002,
                      "value": "load_library",
                      "reference": {
                        "__type": "RefInfo",
                        "__tag": 4000,
                        "module": "numpy",
                        "version": "*",
                        "kind": "api",
                        "path": "numpy.ctypeslib:load_library"
                      },
                      "kind": "module"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " instead, which is identical."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-17116"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/17116",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Expired deprecations"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In accordance with NEP 32, the financial functions are removed from NumPy 1.20. The functions that have been removed are "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "fv"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ipmt"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "irr"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "mirr"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "nper"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "npv"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "pmt"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ppmt"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "pv"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "rate"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  These functions are available in the "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "numpy_financial"
                }
              ],
              "url": "https://pypi.org/project/numpy-financial",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " library."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17067"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17067",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Financial functions removed"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Compatibility notes"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "NumPy dtypes are not direct instances of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " anymore.  Code that may have used "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "type(dtype) is np.dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will always return "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "False"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and must be updated to use the correct version "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "isinstance(dtype, np.dtype)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This change also affects the C-side macro "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArray_DescrCheck"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " if compiled against a NumPy older than 1.16.6. If code uses this macro and wishes to compile against an older version of NumPy, it must replace the macro (see also "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "C API changes",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " section)."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "isinstance(dtype, np.dtype)"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and not "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "type(dtype) is not np.dtype"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "concatenate",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:concatenate"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is called with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "axis=None"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", the flattened arrays were cast with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "unsafe"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Any other axis choice uses \"same kind\". That different default has been deprecated and \"same kind\" casting will be used instead. The new "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "casting"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " keyword argument can be used to retain the old behaviour."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16134"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16134",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Same kind casting in concatenate with "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "axis=None"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When creating or assigning to arrays, in all relevant cases NumPy scalars will now be cast identically to NumPy arrays.  In particular this changes the behaviour in some cases which previously raised an error      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array([np.float64(np.nan)], dtype=np.int64)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "will succeed and return an undefined result (usually the smallest possible integer).  This also affects assignments      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "arr[0] = np.float64(np.nan)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "At this time, NumPy retains the behaviour for      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array(np.float64(np.nan), dtype=np.int64)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The above changes do not affect Python scalars      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array([float(\"NaN\")], dtype=np.int64)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "remains unaffected ("
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.nan"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is a Python "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", not a NumPy one). Unlike signed integers, unsigned integers do not retain this special case, since they always behaved more like casting. The following code stops raising an error      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array([np.float64(np.nan)], dtype=np.uint64)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "To avoid backward compatibility issues, at this time assignment from "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "datetime64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " scalar to strings of too short length remains supported. This means that "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.asarray(np.datetime64(\"2020-10-10\"), dtype=\"S5\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " succeeds now, when it failed before.  In the long term this may be deprecated or the unsafe cast may be allowed generally to make assignment of arrays and scalars behave consistently."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "NumPy Scalars are cast when assigned to arrays"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When strings and other types are mixed, such as      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array([\"string\", np.float64(3.)], dtype=\"S\")",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The results will change, which may lead to string dtypes with longer strings in some cases.  In particularly, if "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=\"S\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is not provided any numerical value will lead to a string results long enough to hold all possible numerical values. (e.g. \"S32\" for floats).  Note that you should always provide "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=\"S\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when converting non-strings to strings."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=\"S\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is provided the results will be largely identical to before, but NumPy scalars (not a Python float like "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "1.0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "), will still enforce a uniform string length      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array([np.float64(3.)], dtype=\"S\")  # gives \"S32\"\nnp.array([3.0], dtype=\"S\")  # gives \"S3\"",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously the first version gave the same result as the second."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Array coercion changes when Strings and other types are mixed"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Array coercion has been restructured.  In general, this should not affect users.  In extremely rare corner cases where array-likes are nested      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array([array_like1])",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Things will now be more consistent with      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array([np.array(array_like1)])",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This can subtly change output for some badly defined array-likes. One example for this are array-like objects which are not also sequences of matching shape. In NumPy 1.20, a warning will be given when an array-like is not also a sequence (but behaviour remains identical, see deprecations). If an array like is also a sequence (defines "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__getitem__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__len__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ") NumPy will now only use the result given by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_interface__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_struct__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This will result in differences when the (nested) sequence describes a different shape."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16200"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16200",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Array coercion restructure"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In NumPy 1.17 "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.broadcast_arrays",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:broadcast_arrays"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " started warning when the resulting array was written to. This warning was skipped when the array was used through the buffer interface (e.g. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "memoryview(arr)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "). The same thing will now occur for the two protocols "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_interface__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_struct__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " returning read-only buffers instead of giving a warning."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16350"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16350",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Writing to the result of "
        },
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "numpy.broadcast_arrays",
          "domain": null,
          "role": null,
          "inventory": null
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " will export readonly buffers"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "To stay in sync with the deprecation for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype(\"Complex64\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and other numeric-style (capital case) types.  These were removed from "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.sctypeDict"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.typeDict"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  You should use the lower case versions instead.  Note that "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"Complex64\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " corresponds to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"complex128\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"Complex32\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " corresponds to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"complex64\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  The numpy style (new) versions, denote the full size and not the size of the real/imaginary part."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16554"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16554",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Numeric-style type names have been removed from type dictionaries"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The previous behavior was to fall back to addition and add the two arrays, which was thought to be unexpected behavior for a concatenation function."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16570"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16570",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "operator.concat"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " function now raises TypeError for array arguments"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "An abstract property "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "nickname"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been removed from  "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ABCPolyBase"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " as it was no longer used in the derived convenience classes. This may affect users who have derived classes from "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ABCPolyBase"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and overridden the methods for representation and display, e.g. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__str__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__repr__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "_repr_latex"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", etc."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16589"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16589",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "nickname"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " attribute removed from ABCPolyBase"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Float and timedelta promotion consistently raises a TypeError. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.promote_types(\"float32\", \"m8\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " aligns with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.promote_types(\"m8\", \"float32\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now and both raise a TypeError. Previously, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.promote_types(\"float32\", \"m8\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " returned "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"m8\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which was considered a bug."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Uint64 and timedelta promotion consistently raises a TypeError. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.promote_types(\"uint64\", \"m8\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " aligns with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.promote_types(\"m8\", \"uint64\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now and both raise a TypeError. Previously, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.promote_types(\"uint64\", \"m8\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " returned "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"m8\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which was considered a bug."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16592"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16592",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "float->timedelta"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "uint64->timedelta"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " promotion will raise a TypeError"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously, "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.genfromtxt",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:genfromtxt"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " failed to unpack if it was called with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "unpack=True"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and a structured datatype was passed to the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument (or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=None"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was passed and a structured datatype was inferred). For example      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> data = StringIO(\"21 58.0\\n35 72.0\")\n>>> np.genfromtxt(data, dtype=None, unpack=True)\narray([(21, 58.), (35, 72.)], dtype=[('f0', '<i8'), ('f1', '<f8')])",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Structured arrays will now correctly unpack into a list of arrays, one for each column      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> np.genfromtxt(data, dtype=None, unpack=True)\n[array([21, 35]), array([58., 72.])]",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16650"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16650",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.genfromtxt"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " now correctly unpacks structured arrays"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.mgrid[np.float32(0.1):np.float32(0.35):np.float32(0.1),]"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.r_[0:10:np.complex64(3j)]"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " failed to return meaningful output. This bug potentially affects "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "~numpy.mgrid",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "~numpy.ogrid",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "~numpy.r_",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "~numpy.c_",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when an input with dtype other than the default "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "complex128"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and equivalent Python types were used. The methods have been fixed to handle varying precision correctly."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16815"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16815",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "mgrid"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ", "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "r_"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ", etc. consistently return correct outputs for non-default precision input"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously, if a boolean array index matched the size of the indexed array but not the shape, it was incorrectly allowed in some cases. In other cases, it gave an error, but the error was incorrectly a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ValueError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " with a message about broadcasting instead of the correct "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "IndexError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "For example, the following used to incorrectly give "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ValueError: operands could not be broadcast together with shapes (2,2) (1,4)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ":"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.empty((2, 2))[np.array([[True, False, False, False]])]",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "And the following used to incorrectly return "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "array([], dtype=float64)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ":"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.empty((2, 2))[np.array([[False, False, False, False]])]",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Both now correctly give "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "IndexError: boolean index did not match indexed array along dimension 0; dimension is 2 but corresponding boolean dimension is 1"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17010"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17010",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Boolean array indices with mismatching shapes now properly give "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "IndexError"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When iterating while casting values, an error may stop the iteration earlier than before. In any case, a failed casting operation always returned undefined, partial results. Those may now be even more undefined and partial. For users of the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NpyIter"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " C-API such cast errors will now cause the "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "iternext()",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " function to return 0 and thus abort iteration. Currently, there is no API to detect such an error directly. It is necessary to check "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyErr_Occurred()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", which may be problematic in combination with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NpyIter_Reset"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". These issues always existed, but new API could be added if required by users."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17029"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17029",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Casting errors interrupt Iteration"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Some byte strings previously returned by f2py generated code may now be unicode strings. This results from the ongoing Python2 -> Python3 cleanup."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17068"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17068",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "f2py generated code may return unicode instead of byte strings"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This has been the documented interface for many years, but there was still code that would accept a byte string representation of the pointer address. That code has been removed, passing the address as a byte string will now raise an error."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17241"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17241",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The first element of the "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__array_interface__[\"data\"]"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " tuple  must be an integer"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously, constructing an instance of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "poly1d"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " with all-zero coefficients would cast the coefficients to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.float64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This affected the output dtype of methods which construct "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "poly1d"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " instances internally, such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.polymul"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17577"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17577",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "poly1d respects the dtype of all-zero argument"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Uses of Python 2.7 C-API functions have been updated to Python 3 only. Users who need the old version should take it from an older version of NumPy."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17580"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17580",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The numpy.i file for swig is Python 3 only."
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In calls using "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.array(..., dtype=\"V\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "arr.astype(\"V\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and similar a TypeError will now be correctly raised unless all elements have the identical void length. An example for this is       "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "np.array([b\"1\", b\"12\"], dtype=\"V\")",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Which previously returned an array with dtype "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"V2\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which cannot represent "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "b\"1\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " faithfully."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17706"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17706",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Void dtype discovery in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.array"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "C API changes"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArray_DescrCheck"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " macro has been updated since NumPy 1.16.6 to be      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "#define PyArray_DescrCheck(op) PyObject_TypeCheck(op, &PyArrayDescr_Type)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Starting with NumPy 1.20 code that is compiled against an earlier version will be API incompatible with NumPy 1.20. The fix is to either compile against 1.16.6 (if the NumPy 1.16 release is the oldest release you wish to support), or manually inline the macro by replacing it with the new definition      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "PyObject_TypeCheck(op, &PyArrayDescr_Type)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "which is compatible with all NumPy versions."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "PyArray_DescrCheck"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " macro is modified"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The size of the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArrayObject"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyVoidScalarObject"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " structures have changed.  The following header definition has been removed      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "#define NPY_SIZEOF_PYARRAYOBJECT (sizeof(PyArrayObject_fields))",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "since the size must not be considered a compile time constant: it will change for different runtime versions of NumPy."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The most likely relevant use are potential subclasses written in C which will have to be recompiled and should be updated.  Please see the documentation for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArrayObject"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for more details and contact the NumPy developers if you are affected by this change."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "NumPy will attempt to give a graceful error but a program expecting a fixed structure size may have undefined behaviour and likely crash."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16938"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16938",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Size of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.ndarray"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.void_"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " changed"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New Features"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The keyword argument "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is added and allows to only consider specified elements or subaxes from an array in the Boolean evaluation of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "all"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "any"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This new keyword is available to the functions "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "all"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "any"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " both via "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " directly or in the methods of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.ndarray"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Any broadcastable Boolean array or a scalar can be set as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". It defaults to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "True"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to evaluate the functions for all elements in an array if "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is not set by the user. Examples are given in the documentation of the functions."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "where"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " keyword argument for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.all"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.any"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " functions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The keyword argument "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is added and allows to limit the scope in the calculation of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "mean"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "std"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "var"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to only a subset of elements. It is available both via "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " directly or in the methods of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.ndarray"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Any broadcastable Boolean array or a scalar can be set as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". It defaults to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "True"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to evaluate the functions for all elements in an array if "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is not set by the user. Examples are given in the documentation of the functions."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15852"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15852",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "where"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " keyword argument for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " functions "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "mean"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ", "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "std"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ", "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "var"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The keyword argument option "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "norm=backward"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is added as an alias for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "None"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and acts as the default option; using it has the direct transforms unscaled and the inverse transforms scaled by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "1/n"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Using the new keyword argument option "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "norm=forward"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has the direct transforms scaled by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "1/n"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and the inverse transforms unscaled (i.e. exactly opposite to the default option "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "norm=backward"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16476"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16476",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "norm=backward"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ", "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "forward"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " keyword options for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.fft"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " functions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Type annotations have been added for large parts of NumPy. There is also a new "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.typing",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy.typing"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " module that contains useful types for end-users. The currently available types are"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ArrayLike"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ": for objects that can be coerced to an array"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "DtypeLike"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ": for objects that can be coerced to a dtype"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16515"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16515",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "NumPy is now typed"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The types in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.typing"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " can now be imported at runtime. Code like the following will now work:"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "from numpy.typing import ArrayLike\nx: ArrayLike = [1, 2, 3, 4]",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16558"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16558",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.typing"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " is accessible at runtime"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Because f2py is released together with NumPy, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__f2py_numpy_version__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " provides a way to track the version f2py used to generate the module."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16594"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16594",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__f2py_numpy_version__"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " attribute for f2py generated modules."
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Currently running mypy with the NumPy stubs configured requires either:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Installing NumPy"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Adding the source directory to MYPYPATH and linking to the "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "mypy.ini"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Both options are somewhat inconvenient, so add a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "--mypy"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " option to runtests that handles setting things up for you. This will also be useful in the future for any typing codegen since it will ensure the project is built before type checking."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17123"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17123",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "mypy"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " tests can be run via runtests.py"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "~numpy.distutils",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " allows negation of libraries when determining BLAS/LAPACK libraries. This may be used to remove an item from the library resolution phase, i.e. to disallow NetLIB libraries one could do:"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "NPY_BLAS_ORDER='^blas' NPY_LAPACK_ORDER='^lapack' python setup.py build",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "That will use any of the accelerated libraries instead."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17219"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17219",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Negation of user defined BLAS/LAPACK detection order"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "It is now possible to pass  "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "-j"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "--cpu-baseline"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "--cpu-dispatch"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "--disable-optimization"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " flags to ASV build when the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "--bench-compare"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument is used."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17284"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17284",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Allow passing optimizations arguments to asv build"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Support for the nvfortran compiler, a version of pgfortran, has been added."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17344"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17344",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The NVIDIA HPC SDK nvfortran compiler is now supported"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " option is now available for "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.cov",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:cov"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.corrcoef",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:corrcoef"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". It specifies which data-type the returned result should have. By default the functions still return a "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.float64",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:float64"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " result."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17456"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17456",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "dtype"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " option for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "cov"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "corrcoef"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Improvements"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The string representation ("
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__str__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ") of all six polynomial types in "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.polynomial",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy.polynomial"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been updated to give the polynomial as a mathematical expression instead of an array of coefficients. Two package-wide formats for the polynomial expressions are available - one using Unicode characters for superscripts and subscripts, and another using only ASCII characters."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15666"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15666",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Improved string representation for polynomials ("
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__str__"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ")"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Apple no longer supports Accelerate. Remove it."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15759"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15759",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Remove the Accelerate library as a candidate LAPACK library"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If elements of an object array have a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "repr"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " containing new lines, then the wrapped lines will be aligned by column. Notably, this improves the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "repr"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " of nested arrays      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> np.array([np.eye(2), np.eye(3)], dtype=object)\narray([array([[1., 0.],\n              [0., 1.]]),\n       array([[1., 0., 0.],\n              [0., 1., 0.],\n              [0., 0., 1.]])], dtype=object)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15997"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15997",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Object arrays containing multi-line objects have a more readable "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "repr"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Support was added to "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "concatenate",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:concatenate"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to provide an output "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "casting"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " using keyword arguments. The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument cannot be provided in conjunction with the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "out"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " one."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16134"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16134",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Concatenate supports providing an output dtype"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Callback functions in f2py are now thread safe."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16519"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16519",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Thread safe f2py callback functions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.core.records.fromfile"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " can now use file-like objects, for instance "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "io.BytesIO",
              "domain": "py",
              "role": "class",
              "inventory": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16675"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16675",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.core.records.fromfile"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " now supports file-like objects"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This allows SciPy to be built on AIX."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16710"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16710",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "RPATH support on AIX added to distutils"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The compiler command selection for Fortran Portland Group Compiler is changed in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.distutils.fcompiler"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  This only affects the linking command.  This forces the use of the executable provided by the command line option (if provided) instead of the pgfortran executable.  If no executable is provided to the command line option it defaults to the pgf90 executable, which is an alias for pgfortran according to the PGI documentation."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16730"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16730",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Use f90 compiler specified by the command line args"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The pxd declarations for Cython 3.0 were improved to avoid using deprecated NumPy C-API features.  Extension modules built with Cython 3.0+ that use NumPy can now set the C macro "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to avoid C compiler warnings about deprecated API usage."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16986"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16986",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Add NumPy declarations for Cython 3.0 and later"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Make sure the window functions provided by NumPy are symmetric. There were previously small deviations from symmetry due to numerical precision that are now avoided by better arrangement of the computation."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17195"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17195",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Make the window functions exactly symmetric"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Performance improvements and changes"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "A series of improvements for NumPy infrastructure to pave the way to "
            },
            {
              "__type": "Strong",
              "__tag": 4048,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "NEP-38"
                }
              ]
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", that can be summarized as follow:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Strong",
                      "__tag": 4048,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "New Build Arguments"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "BulletList",
                  "__tag": 4053,
                  "ordered": false,
                  "start": 1,
                  "children": [
                    {
                      "__type": "ListItem",
                      "__tag": 4054,
                      "children": [
                        {
                          "__type": "Paragraph",
                          "__tag": 4045,
                          "children": [
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "--cpu-baseline"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " to specify the minimal set of required       optimizations, default value is "
                            },
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "min"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " which provides the minimum       CPU features that can safely run on a wide range of users       platforms."
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "__type": "ListItem",
                      "__tag": 4054,
                      "children": [
                        {
                          "__type": "Paragraph",
                          "__tag": 4045,
                          "children": [
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "--cpu-dispatch"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " to specify the dispatched set of additional       optimizations, default value is "
                            },
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "max -xop -fma4"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " which enables       all CPU features, except for AMD legacy features."
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "__type": "ListItem",
                      "__tag": 4054,
                      "children": [
                        {
                          "__type": "Paragraph",
                          "__tag": 4045,
                          "children": [
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "--disable-optimization"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " to explicitly disable the whole new       improvements, It also adds a new "
                            },
                            {
                              "__type": "Strong",
                              "__tag": 4048,
                              "children": [
                                {
                                  "__type": "Text",
                                  "__tag": 4046,
                                  "value": "C"
                                }
                              ]
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " compiler #definition       called "
                            },
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "NPY_DISABLE_OPTIMIZATION"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " which it can be used as       guard for any SIMD code."
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Strong",
                      "__tag": 4048,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Advanced CPU dispatcher"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "A flexible cross-architecture CPU dispatcher built on the top of    Python/Numpy distutils, support all common compilers with a wide range of    CPU features."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The new dispatcher requires a special file extension "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "*.dispatch.c"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " to    mark the dispatch-able "
                    },
                    {
                      "__type": "Strong",
                      "__tag": 4048,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "C"
                        }
                      ]
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " sources. These sources have the ability to be    compiled multiple times so that each compilation process represents certain    CPU features and provides different #definitions and flags that affect the    code paths."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Strong",
                      "__tag": 4048,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "New auto-generated C header ``core/src/common/_cpu_dispatch.h``"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "This header is generated by the distutils module "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ccompiler_opt"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", and    contains all the #definitions and headers of instruction sets, that had been    configured through command arguments '--cpu-baseline' and '--cpu-dispatch'."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Strong",
                      "__tag": 4048,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "New C header ``core/src/common/npy_cpu_dispatch.h``"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "This header contains all utilities that required for the whole CPU    dispatching process, it also can be considered as a bridge linking the new    infrastructure work with NumPy CPU runtime detection."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Strong",
                      "__tag": 4048,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Add new attributes to NumPy umath module(Python level)"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "BulletList",
                  "__tag": 4053,
                  "ordered": false,
                  "start": 1,
                  "children": [
                    {
                      "__type": "ListItem",
                      "__tag": 4054,
                      "children": [
                        {
                          "__type": "Paragraph",
                          "__tag": 4045,
                          "children": [
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "__cpu_baseline__"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " a list contains the minimal set of required      optimizations that supported by the compiler and platform according to the      specified values to command argument '--cpu-baseline'."
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "__type": "ListItem",
                      "__tag": 4054,
                      "children": [
                        {
                          "__type": "Paragraph",
                          "__tag": 4045,
                          "children": [
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "__cpu_dispatch__"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " a list contains the dispatched set of additional      optimizations that supported by the compiler and platform according to the      specified values to command argument '--cpu-dispatch'."
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Strong",
                      "__tag": 4048,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Print the supported CPU features during the run of PytestTester"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-13516"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/13516",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Enable multi-platform SIMD compiler optimizations"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Changes"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The changes also assure that different compiler versions have the same behavior for nan or inf usages in these operations. This was previously compiler dependent, we now force the invalid and divide by zero flags, making the results the same across compilers. For example, gcc-5, gcc-8, or gcc-9 now result in the same behavior. The changes are tabulated below:"
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Summary of New Behavior"
            }
          ]
        },
        {
          "__type": "Table",
          "__tag": 4065,
          "children": [
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": true,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Operator"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Old Warning"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "New Warning"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Old Result"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "New Result"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Works on MacOS"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": false,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "np.divmod(1.0, 0.0)"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Invalid"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Invalid and Dividebyzero"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "nan, nan"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "inf, nan"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Yes"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": false,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "np.fmod(1.0, 0.0)"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Invalid"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Invalid"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "nan"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "nan"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "No? Yes"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": false,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "np.floor_divide(1.0, 0.0)"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Invalid"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Dividebyzero"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "nan"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "inf"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Yes"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": false,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "np.remainder(1.0, 0.0)"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Invalid"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Invalid"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "nan"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "nan"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Yes"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16161"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16161",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Changed behavior of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "divmod(1., 0.)"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and related functions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When using a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "int"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " dtype in "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.linspace",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:linspace"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", previously float values would be rounded towards zero. Now "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.floor",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:floor"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is used instead, which rounds toward "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "-inf"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This changes the results for negative values. For example, the following would previously give      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> np.linspace(-3, 1, 8, dtype=int)\narray([-3, -2, -1, -1,  0,  0,  0,  1])",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "and now results in      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> np.linspace(-3, 1, 8, dtype=int)\narray([-3, -3, -2, -2, -1, -1,  0,  1])",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The former result can still be obtained with      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> np.linspace(-3, 1, 8).astype(int)\narray([-3, -2, -1, -1,  0,  0,  0,  1])",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16841"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16841",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.linspace"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " on integers now uses floor"
        }
      ],
      "level": 2,
      "target": null
    }
  ],
  "local_refs": []
}