{
  "__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.19.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 marked by the removal of much technical debt: support for Python 2 has been removed, many deprecations have been expired, and documentation has been improved. The polishing of the random module continues apace with bug fixes and better usability from Cython."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The Python versions supported for this release are 3.6-3.8. Downstream developers should use Cython >= 0.29.16 for Python 3.8 support and OpenBLAS >= 3.7 to avoid problems on the Skylake architecture."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "NumPy 1.19.0 Release Notes"
        }
      ],
      "level": 0,
      "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": "Code compatibility with Python versions < 3.6 (including Python 2) was   dropped from both the python and C code. The shims in "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.compat"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " will   remain to support third-party packages, but they may be deprecated in a   future release. Note that 1.19.x will "
                    },
                    {
                      "__type": "Emphasis",
                      "__tag": 4047,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "not"
                        }
                      ]
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " compile with earlier versions of   Python due to the use of f-strings."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-15233"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/15233",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Highlights"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "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": "This concludes a deprecation from 1.9, where when an "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "axis"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument was passed to a call to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "~numpy.insert"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "~numpy.delete"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " on a 0d array, the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "axis"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "obj"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument and indices would be completely ignored. In these cases, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "insert(arr, \"nonsense\", 42, axis=0)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " would actually overwrite the entire array, while "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "delete(arr, \"nonsense\", axis=0)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " would be "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "arr.copy()"
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Now passing "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "axis"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " on a 0d array raises "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "~numpy.AxisError"
            },
            {
              "__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-15802"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15802",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.insert"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.delete"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " can no longer be passed an axis on 0d arrays"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This concludes deprecations from 1.8 and 1.9, where "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.delete"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " would ignore both negative and out-of-bounds items in a sequence of indices. This was at odds with its behavior when passed a single index."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Now out-of-bounds items throw "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "IndexError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and negative items index from the end."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15804"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15804",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.delete"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " no longer ignores out-of-bounds indices"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This concludes a deprecation from 1.9, where sequences of non-integers indices were allowed and cast to integers. Now passing sequences of non-integral indices raises "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "IndexError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", just like it does when passing a single non-integral scalar."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15805"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15805",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.insert"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.delete"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " no longer accept non-integral indices"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This concludes a deprecation from 1.8, where "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.delete"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " would cast boolean arrays and scalars passed as an index argument into integer indices. The behavior now is to treat boolean arrays as a mask, and to raise an error on boolean scalars."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15815"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15815",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.delete"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " no longer casts boolean indices to integers"
        }
      ],
      "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": "A bug in the generation of random variates for the Dirichlet distribution with small 'alpha' values was fixed by using a different algorithm when "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "max(alpha) < 0.1"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  Because of the change, the stream of variates generated by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dirichlet"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " in this case will be different from previous releases."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-14924"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/14924",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Changed random variate stream from "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.random.Generator.dirichlet"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The promotion of mixed scalars and arrays in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArray_ConvertToCommonType"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been changed to adhere to those used by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.result_type"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This means that input such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "(1000, np.array([1], dtype=np.uint8)))"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will now return "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "uint16"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " dtypes. In most cases the behaviour is unchanged. Note that the use of this C-API function is generally discouraged. This also fixes "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.choose"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to behave the same way as the rest of NumPy in this respect."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-14933"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/14933",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Scalar promotion in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "PyArray_ConvertToCommonType"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The fasttake and fastputmask slots are now never used and must always be set to NULL. This will result in no change in behaviour. However, if a user dtype should set one of these a DeprecationWarning will be given."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-14942"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/14942",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Fasttake and fastputmask slots are deprecated and NULL'ed"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.ediff1d"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now uses the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"same_kind\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " casting rule for its additional "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "to_end"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "to_begin"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " arguments. This ensures type safety except when the input array has a smaller integer type than "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "to_begin"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "to_end"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". In rare cases, the behaviour will be more strict than it was previously in 1.16 and 1.17. This is necessary to solve issues with floating point NaN."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-14981"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/14981",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.ediff1d"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " casting behaviour with "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "to_end"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "to_begin"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Objects with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "len(obj) == 0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which implement an \"array-like\" interface, meaning an object implementing "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "obj.__array__()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "obj.__array_interface__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "obj.__array_struct__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", or the python buffer interface and which are also sequences (i.e. Pandas objects) will now always retain there shape correctly when converted to an array. If such an object has a shape of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "(0, 1)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " previously, it could be converted into an array of shape "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "(0,)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " (losing all dimensions after the first 0)."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-14995"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/14995",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Converting of empty array-like objects to NumPy arrays"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "As part of the continued removal of Python 2 compatibility, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "multiarray.int_asbuffer"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was removed. On Python 3, it threw a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NotImplementedError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and was unused internally. It is expected that there are no downstream use cases for this method with Python 3."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15229"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15229",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removed "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "multiarray.int_asbuffer"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This module contained only the function "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "get_exception()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", which was used as      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "try:\n    ...\nexcept Exception:\n    e = get_exception()",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Its purpose was to handle the change in syntax introduced in Python 2.6, from "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "except Exception, e:"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "except Exception as e:"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", meaning it was only necessary for codebases supporting Python 2.5 and older."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15255"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15255",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.distutils.compat"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " has been removed"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.issubdtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " had a FutureWarning since NumPy 1.14 which has expired now. This means that certain input where the second argument was neither a datatype nor a NumPy scalar type (such as a string or a python type like "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "int"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ") will now be consistent with passing in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype(arg2).type"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This makes the result consistent with expectations and leads to a false result in some cases which previously returned true."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15773"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15773",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "issubdtype"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " no longer interprets "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "float"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " as "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.floating"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Output of the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__round__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " dunder method and consequently the Python built-in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "round"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been changed to be a Python "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "int"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to be consistent with calling it on Python "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " objects when called with no arguments. Previously, it would return a scalar of the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " that was passed in."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15840"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15840",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Change output of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "round"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " on scalars to be consistent with Python"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The former has changed to have the expected meaning of setting "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.ndarray.strides"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", while the latter continues to result in strides being chosen automatically."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15882"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15882",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.ndarray"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " constructor no longer interprets "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "strides=()"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " as "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "strides=None"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The C-level casts from strings were simplified. This changed also fixes string to datetime and timedelta casts to behave correctly (i.e. like Python casts using "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "string_arr.astype(\"M8\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " while previously the cast would behave like "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "string_arr.astype(np.int_).astype(\"M8\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This only affects code using low-level C-API to do manual casts (not full array casts) of single scalar values or using e.g. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArray_GetCastFunc"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and should thus not affect the vast majority of users."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16068"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16068",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "C-Level string to datetime casts changed"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Small seeds (less than "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "2**96"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ") were previously implicitly 0-padded out to 128 bits, the size of the internal entropy pool. When spawned, the spawn key was concatenated before the 0-padding. Since the first spawn key is "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "(0,)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", small seeds before the spawn created the same states as the first spawned "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "SeedSequence"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  Now, the seed is explicitly 0-padded out to the internal pool size before concatenating the spawn key. Spawned "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "SeedSequences"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will produce different results than in the previous release. Unspawned "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "SeedSequences"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will still produce the same results."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16551"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16551",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "SeedSequence"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " with small seeds no longer conflicts with spawning"
        }
      ],
      "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": "Calling "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.array([[1, [1, 2, 3]])"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will issue a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "DeprecationWarning"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " as per "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "NEP 34"
                }
              ],
              "url": "https://numpy.org/neps/nep-0034.html",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Users should explicitly use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=object"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to avoid the warning."
            }
          ]
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "NEP 34"
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15119"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15119",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Deprecate automatic "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "dtype=object"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for ragged input"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is treated as a special case and is aliased to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "None"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " in the functions:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.core.records.fromarrays"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.core.records.fromrecords"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.core.records.fromstring"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.core.records.fromfile"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In future, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will not be special cased, and will be treated as an array length like any other integer."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15217"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15217",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Passing "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "shape=0"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " to factory functions in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.rec"
        },
        {
          "__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": "The following C-API functions are probably unused and have been deprecated:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyArray_GetArrayParamsFromObject"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyUFunc_GenericFunction"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyUFunc_SetUsesArraysAsData"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In most cases "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArray_GetArrayParamsFromObject"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " should be replaced by converting to an array, while "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyUFunc_GenericFunction"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " can be replaced with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyObject_Call"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " (see documentation for details)."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15427"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15427",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Deprecation of probably unused C-API functions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The super classes of scalar types, such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.integer"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.generic"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.inexact"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will now give a deprecation warning when converted to a dtype (or used in a dtype keyword argument). The reason for this is that "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.integer"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is converted to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.int_"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", while it would be expected to represent "
            },
            {
              "__type": "Emphasis",
              "__tag": 4047,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "any"
                }
              ]
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " integer (e.g. also "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "int8"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "int16"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", etc. For example, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=np.floating"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is currently identical to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=np.float64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", even though also "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.float32"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is a subclass of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.floating"
            },
            {
              "__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-15534"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15534",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Converting certain types to dtypes is Deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Output of the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__round__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " dunder method and consequently the Python built-in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "round"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been deprecated on complex scalars. This does not affect "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.round"
            },
            {
              "__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-15840"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15840",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Deprecation of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "round"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.complexfloating"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " scalars"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "~numpy.ndarray.tobytes"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has existed since the 1.9 release, but until this release "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "~numpy.ndarray.tostring"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " emitted no warning. The change to emit a warning brings NumPy in line with the builtin "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "array.array"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " methods of the same name."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15867"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15867",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.ndarray.tostring()"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " is deprecated in favor of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "tobytes()"
        }
      ],
      "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 following functions now accept a constant array of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "npy_intp"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ":"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyArray_BroadcastToShape"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyArray_IntTupleFromIntp"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyArray_OverflowMultiplyList"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously the caller would have to cast away the const-ness to call these functions."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15251"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15251",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Better support for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "const"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " dimensions in API functions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "UFuncGenericFunction"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now expects pointers to const "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dimension"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "strides"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " as arguments. This means inner loops may no longer modify either "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dimension"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "strides"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This change leads to an "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "incompatible-pointer-types"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " warning forcing users to either ignore the compiler warnings or to const qualify their own loop signatures."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15355"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15355",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Const qualify UFunc inner loops"
        }
      ],
      "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": "This allows the "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "numpy.ufunc.identity",
              "domain": null,
              "role": "attr",
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " attribute to be set on the resulting ufunc, meaning it can be used for empty and multi-dimensional calls to "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "numpy.ufunc.reduce",
              "domain": null,
              "role": "meth",
              "inventory": null
            },
            {
              "__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-8255"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/8255",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.frompyfunc"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " now accepts an identity argument"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.str_"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " arrays are always stored as UCS4, so the corresponding scalars now expose this through the buffer interface, meaning "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "memoryview(np.str_('test'))"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now works."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15385"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15385",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.str_"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " scalars now support the buffer protocol"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "A new kwarg, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "subok"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", was added to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.copy"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to allow users to toggle the behavior of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.copy"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " with respect to array subclasses. The default value is "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "False"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which is consistent with the behavior of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.copy"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for previous numpy versions. To create a copy that preserves an array subclass with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.copy"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", call "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.copy(arr, subok=True)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This addition better documents that the default behavior of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.copy"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " differs from the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.ndarray.copy"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " method which respects array subclasses by default."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15685"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15685",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "subok"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " option for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.copy"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "out"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " can be used to avoid creating unnecessary copies of the final product computed by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.linalg.multidot"
            },
            {
              "__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-15715"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15715",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.linalg.multi_dot"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " now accepts an "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "out"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " argument"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The parameter "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "keepdims"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was added to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.count_nonzero"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". The parameter has the same meaning as it does in reduction functions such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.sum"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.mean"
            },
            {
              "__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-15870"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15870",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "keepdims"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " parameter for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.count_nonzero"
        }
      ],
      "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": "equal_nan"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was added to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.array_equal"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "equal_nan"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is a boolean value that toggles whether or not "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "nan"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " values are considered equal in comparison (default is "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "False"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "). This matches API used in related functions such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.isclose"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.allclose"
            },
            {
              "__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-16128"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16128",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "equal_nan"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " parameter for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.array_equal"
        }
      ],
      "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": "Replace "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "npy_cpu_supports"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which was a gcc specific mechanism to test support of AVX with more general functions "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "npy_cpu_init"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "npy_cpu_have"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and expose the results via a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_CPU_HAVE"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " c-macro as well as a python-level "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__cpu_features__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " dictionary."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-13421"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/13421",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Improve detection of CPU features"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Use 64-bit integer size on 64-bit platforms in the fallback LAPACK library, which is used when the system has no LAPACK installed, allowing it to deal with linear algebra for large arrays."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15218"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15218",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Use 64-bit integer size on 64-bit platforms in fallback lapack_lite"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Use AVX512 intrinsic to implement "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.exp"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when input is "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.float64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", which can improve the performance of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.exp"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.float64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " input 5-7x faster than before. The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "_multiarray_umath.so"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " module has grown about 63 KB on linux64."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15648"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15648",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Use AVX512 intrinsic to implement "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.exp"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " when input is "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.float64"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "On Linux NumPy has previously added support for madavise hugepages which can improve performance for very large arrays.  Unfortunately, on older Kernel versions this led to performance regressions, thus by default the support has been disabled on kernels before version 4.6. To override the default, you can use the environment variable      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "NUMPY_MADVISE_HUGEPAGE=0",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "or set it to 1 to force enabling support. Note that this only makes a difference if the operating system is set up to use madvise transparent hugepage."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15769"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15769",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Ability to disable madvise hugepages"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "There is no longer a type error thrown when "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.einsum"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is passed a NumPy "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "int64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " array as its subscript list."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16080"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16080",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.einsum"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " accepts NumPy "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "int64"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " type in subscript list"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The ufunc "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "~numpy.logaddexp2"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now has an identity of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "-inf"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", allowing it to be called on empty sequences.  This matches the identity of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "~numpy.logaddexp"
            },
            {
              "__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-16102"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16102",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.logaddexp2.identity"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " changed to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "-inf"
        }
      ],
      "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": "A code path and test have been in the code since NumPy 0.4 for a two-argument variant of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array__(dtype=None, context=None)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". It was activated when calling "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ufunc(op)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ufunc.reduce(op)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " if "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "op.__array__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " existed. However that variant is not documented, and it is not clear what the intention was for its use. It has been removed."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15118"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15118",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Remove handling of extra argument to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__array__"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In order to expose "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.random.BitGenerator"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.random.SeedSequence"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to Cython, the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "_bitgenerator"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " module is now public as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.random.bit_generator"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.random._bit_generator"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " moved to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.random.bit_generator"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "c_distributions.pxd"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " provides access to the c functions behind many of the random distributions from Cython, making it convenient to use and extend them."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15463"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15463",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Cython access to the random distributions is provided via a "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "pxd"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " file"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously, when passing "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "method='eigh'"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "method='cholesky'"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.random.multivariate_normal"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " produced samples from the wrong distribution. This is now fixed."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15872"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15872",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Fixed "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "eigh"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "cholesky"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " methods in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.random.multivariate_normal"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This fix changes the stream produced from jumped MT19937 generators. It does not affect the stream produced using "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "RandomState"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "MT19937"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " that are directly seeded."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The translation of the jumping code for the MT19937 contained a reversed loop ordering. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "MT19937.jumped"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " matches the Makoto Matsumoto's original implementation of the Horner and Sliding Window jump methods."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16153"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16153",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Fixed the jumping implementation in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "MT19937.jumped"
        }
      ],
      "level": 2,
      "target": null
    }
  ],
  "local_refs": []
}