{
  "__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.21.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": "The NumPy 1.21.0 release highlights are"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "continued SIMD work covering more functions and platforms,"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "initial work on the new dtype infrastructure and casting,"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "universal2 wheels for Python 3.8 and Python 3.9 on Mac,"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "improved documentation,"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "improved annotations,"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "new "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PCG64DXSM"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " bitgenerator for random numbers."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In addition there are the usual large number of bug fixes and other improvements."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The Python versions supported for this release are 3.7-3.9. Official support for Python 3.10 will be added when it is released."
            }
          ]
        },
        {
          "__type": "Admonition",
          "__tag": 4056,
          "kind": "warning",
          "base_type": "warning",
          "children": [
            {
              "__type": "AdmonitionTitle",
              "__tag": 4055,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "warning "
                }
              ]
            },
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "There are unresolved problems compiling NumPy 1.20.0 with gcc-11.1."
                }
              ]
            },
            {
              "__type": "BulletList",
              "__tag": 4053,
              "ordered": false,
              "start": 1,
              "children": [
                {
                  "__type": "ListItem",
                  "__tag": 4054,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Optimization level "
                        },
                        {
                          "__type": "InlineRole",
                          "__tag": 4003,
                          "value": "-O3",
                          "domain": null,
                          "role": null,
                          "inventory": null
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " results in many incorrect warnings when   running the tests."
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "ListItem",
                  "__tag": 4054,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "On some hardware NumPY will hang in an infinite loop."
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "NumPy 1.21.0 Release Notes"
        }
      ],
      "level": 0,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New functions"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Uses of the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PCG64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "BitGenerator"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " in a massively-parallel context have been shown to have statistical weaknesses that were not apparent at the first release in numpy 1.17. Most users will never observe this weakness and are safe to continue to use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PCG64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". We have introduced a new "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PCG64DXSM"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "BitGenerator"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " that will eventually become the new default "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "BitGenerator"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " implementation used by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "default_rng"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " in future releases. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PCG64DXSM"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " solves the statistical weakness while preserving the performance and the features of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PCG64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "See "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "upgrading-pcg64",
              "reference": {
                "__type": "LocalRef",
                "__tag": 4022,
                "kind": "docs",
                "path": "reference:random:upgrading-pcg64"
              },
              "kind": "exists"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for more details."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18906"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18906",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Add "
        },
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "PCG64DXSM",
          "domain": null,
          "role": null,
          "inventory": null
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " "
        },
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "BitGenerator",
          "domain": null,
          "role": null,
          "inventory": null
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "shape"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " argument "
                    },
                    {
                      "__type": "CrossRef",
                      "__tag": 4002,
                      "value": "unravel_index",
                      "reference": {
                        "__type": "RefInfo",
                        "__tag": 4000,
                        "module": "numpy",
                        "version": "*",
                        "kind": "api",
                        "path": "numpy:unravel_index"
                      },
                      "kind": "module"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " cannot be passed   as "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "dims"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " keyword argument anymore. (Was deprecated in NumPy 1.16.)"
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-17900"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/17900",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The function "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyUFunc_GenericFunction"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " has been disabled.   It was deprecated in NumPy 1.19.  Users should call the ufunc   directly using the Python API."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-18697"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/18697",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The function "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyUFunc_SetUsesArraysAsData"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " has been disabled.   It was deprecated in NumPy 1.19."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-18697"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/18697",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The class "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PolyBase"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " has been removed (deprecated in numpy 1.9.0). Please   use the abstract "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ABCPolyBase"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " class instead."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-18963"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/18963",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The unused "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PolyError"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PolyDomainError"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " exceptions are   removed."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-18963"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/18963",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Expired deprecations"
        }
      ],
      "level": 1,
      "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": "A "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "DeprecationWarning"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is now given if the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": ".dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " attribute of an object passed into "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or as a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=obj"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument is not a dtype. NumPy will stop attempting to recursively coerce the result of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": ".dtype"
            },
            {
              "__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-13578"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/13578",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": ".dtype"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " attribute must return a "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "dtype"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "convolve",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:convolve"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "correlate",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:correlate"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now emit a warning when there are case insensitive and/or inexact matches found for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "mode"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument in the functions. Pass full "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"same\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"valid\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"full\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " strings instead of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"s\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"v\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "\"f\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "mode"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17492"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17492",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Inexact matches for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.convolve"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.correlate"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " are deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.typeDict"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is a deprecated alias for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.sctypeDict"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and has been so for over 14 years ("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "6689502"
                }
              ],
              "url": "https://github.com/numpy/numpy/commit/668950285c407593a368336ff2e737c5da84af7d",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "). A deprecation warning will now be issued whenever getting "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.typeDict"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "6689502"
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17586"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17586",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.typeDict"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " has been formally deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When an object raised an exception during access of the special attributes "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_interface__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", this exception was usually ignored. A warning is now given when the exception is anything but AttributeError. To silence the warning, the type raising the exception has to be adapted to raise an "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "AttributeError"
            },
            {
              "__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-19001"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/19001",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Exceptions will be raised during array-like creation"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Four methods of the "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "ndarray.ctypes",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " object have been deprecated, as they are (undocumentated) implementation artifacts of their respective properties."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The methods in question are:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "_ctypes.get_data"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " (use "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "_ctypes.data"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " instead)"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "_ctypes.get_shape"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " (use "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "_ctypes.shape"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " instead)"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "_ctypes.get_strides"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " (use "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "_ctypes.strides"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " instead)"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "_ctypes.get_as_parameter"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " (use "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "_ctypes._as_parameter_"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " instead)"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-19031"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/19031",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Four "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndarray.ctypes"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " methods have been deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "shape"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " argument "
                    },
                    {
                      "__type": "CrossRef",
                      "__tag": 4002,
                      "value": "numpy.unravel_index",
                      "reference": {
                        "__type": "RefInfo",
                        "__tag": 4000,
                        "module": "numpy",
                        "version": "*",
                        "kind": "api",
                        "path": "numpy:unravel_index"
                      },
                      "kind": "module"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " cannot be passed   as "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "dims"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " keyword argument anymore. (Was deprecated in NumPy 1.16.)"
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-17900"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/17900",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The function "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyUFunc_GenericFunction"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " has been disabled.   It was deprecated in NumPy 1.19.  Users should call the ufunc   directly using the Python API."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-18697"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/18697",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The function "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyUFunc_SetUsesArraysAsData"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " has been disabled.   It was deprecated in NumPy 1.19."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-18697"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/18697",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Expired deprecations"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The class "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PolyBase"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been removed (deprecated in numpy 1.9.0). Please use the abstract "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ABCPolyBase"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " class instead."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Furthermore, the unused "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PolyError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PolyDomainError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " exceptions are removed from the "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "numpy.polynomial",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy.polynomial"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18963"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18963",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Remove deprecated "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "PolyBase"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and unused "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "PolyError"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "PolyDomainError"
        }
      ],
      "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": "The universal functions may now raise different errors on invalid input in some cases.  The main changes should be that a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "RuntimeError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was replaced with a more fitting "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "TypeError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  When multiple errors were present in the same call, NumPy may now raise a different one."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15271"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15271",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Error type changes in universal functions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "NumPy will now partially validate arguments before calling "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_ufunc__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Previously, it was possible to pass on invalid arguments (such as a non-existing keyword argument) when dispatch was known to occur."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15271"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15271",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__array_ufunc__"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " argument validation"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously, all positionally passed arguments were checked for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_ufunc__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " support.  In the case of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "reduce"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "accumulate"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "reduceat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " all arguments may be passed by position.  This means that when they were passed by position, they could previously have been asked to handle the ufunc call via "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__array_ufunc__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  Since this depended on the way the arguments were passed (by position or by keyword), NumPy will now only dispatch on the input and output array.  For example, NumPy will never dispatch on the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " array in a reduction such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.add.reduce"
            },
            {
              "__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-15271"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15271",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__array_ufunc__"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and additional positional arguments"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Checked that "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "high - low >= 0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.random.Generator.uniform"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Raises "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ValueError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " if "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "low > high"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Previously out-of-order inputs were accepted and silently swapped, so that if "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "low > high"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", the value generated was "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "high + (low - high) * random()"
            },
            {
              "__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-17921"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17921",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Validate input values in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "Generator.uniform"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The default include paths when building a package with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.distutils"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " no longer include "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "/usr/include"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This path is normally added by the compiler, and hardcoding it can be problematic. In case this causes a problem, please open an issue. A workaround is documented in PR 18658."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18658"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18658",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "/usr/include"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " removed from default include paths"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype="
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " (or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "signature"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ") arguments to comparison ufuncs ("
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "equal"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "less"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", etc.) is used, this will denote the desired output dtype in the future. This means that:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "np.equal(2, 3, dtype=object)"
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "will give a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "FutureWarning"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " that it will return an "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "object"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " array in the future, which currently happens for:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "np.equal(None, None, dtype=object)"
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "due to the fact that "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.array(None)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is already an object array. (This also happens for some other dtypes.)"
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Since comparisons normally only return boolean arrays, providing any other dtype will always raise an error in the future and give a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "DeprecationWarning"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18718"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18718",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Changes to comparisons with "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "dtype=..."
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The universal function arguments "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "signature"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which are also valid for reduction such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.add.reduce"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " (which is the implementation for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.sum"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ") will now issue a warning when the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " provided is not a \"basic\" dtype."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "NumPy almost always ignored metadata, byteorder or time units on these inputs.  NumPy will now always ignore it and raise an error if byteorder or time unit changed. The following are the most important examples of changes which will give the error.  In some cases previously the information stored was not ignored, in all of these an error is now raised      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "# Previously ignored the byte-order (affect if non-native)\nnp.add(3, 5, dtype=\">i32\")\n\n# The biggest impact is for timedelta or datetimes:\narr = np.arange(10, dtype=\"m8[s]\")\n# The examples always ignored the time unit \"ns\":\nnp.add(arr, arr, dtype=\"m8[ns]\")\nnp.maximum.reduce(arr, dtype=\"m8[ns]\")\n\n# The following previously did use \"ns\" (as opposed to `arr.dtype`)\nnp.add(3, 5, dtype=\"m8[ns]\")  # Now return generic time units\nnp.maximum(arr, arr, dtype=\"m8[ns]\")  # Now returns \"s\" (from `arr`)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The same applies for functions like "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.sum"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which use these internally. This change is necessary to achieve consistent handling within NumPy."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If you run into these, in most cases pass for example "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=np.timedelta64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which clearly denotes a general "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "timedelta64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " without any unit or byte-order defined.  If you need to specify the output dtype precisely, you may do so by either casting the inputs or providing an output array using "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "out=",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "NumPy may choose to allow providing an exact output "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " here in the future, which would be preceded by a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "FutureWarning"
            },
            {
              "__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-18718"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18718",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Changes to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "dtype"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "signature"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " arguments in ufuncs"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The behaviour for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.ufunc(1.0, 1.0, signature=...)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.ufunc(1.0, 1.0, dtype=...)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " can now yield different loops in 1.21 compared to 1.20 because of changes in promotion. When "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "signature"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was previously used, the casting check on inputs was relaxed, which could lead to downcasting inputs unsafely especially if combined with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "casting=\"unsafe\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Casting is now guaranteed to be safe.  If a signature is only partially provided, for example using "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "signature=(\"float64\", None, None)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", this could lead to no loop being found (an error). In that case, it is necessary to provide the complete signature to enforce casting the inputs. If "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=\"float64\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is used or only outputs are set (e.g. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "signature=(None, None, \"float64\")"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " the is unchanged. We expect that very few users are affected by this change."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Further, the meaning of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=\"float64\""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been slightly modified and now strictly enforces only the correct output (and not input) DTypes. This means it is now always equivalent to      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "signature=(None, None, \"float64\")",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "(If the ufunc has two inputs and one output).  Since this could lead to no loop being found in some cases, NumPy will normally also search for the loop      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "signature=(\"float64\", \"float64\", \"float64\")",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "if the first search failed. In the future, this behaviour may be customized to achieve the expected results for more complex ufuncs.  (For some universal functions such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.ldexp"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " inputs can have different DTypes.)"
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18880"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18880",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Ufunc "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "signature=..."
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "dtype="
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " generalization and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "casting"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "NumPy distutils will now always add the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "-ffp-exception-behavior=strict"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " compiler flag when compiling with clang.  Clang defaults to a non-strict version, which allows the compiler to generate code that does not set floating point warnings/errors correctly."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-19049"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/19049",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Distutils forces strict floating point model on clang"
        }
      ],
      "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": "NumPy now normalizes the \"type tuple\" argument to the type resolver functions before calling it.  Note that in the use of this type resolver is legacy behaviour and NumPy will not do so when possible.  Calling "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ufunc->type_resolver"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyUFunc_DefaultTypeResolver"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is strongly discouraged and will now enforce a normalized type tuple if done.  Note that this does not affect providing a type resolver, which is expected to keep working in most circumstances.  If you have an unexpected use-case for calling the type resolver, please inform the NumPy developers so that a solution can be found."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18718"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18718",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Use of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ufunc->type_resolver"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and \"type tuple\""
        }
      ],
      "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": "A "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "mypy"
                }
              ],
              "url": "http://mypy-lang.org/",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " plugin is now available for automatically assigning the (platform-dependent) precisions of certain "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "number",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:number"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " subclasses, including the likes of "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "int_",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:int64"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "intp",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:int64"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "longlong",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:longlong"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". See the documentation on "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "scalar types",
              "reference": {
                "__type": "LocalRef",
                "__tag": 4022,
                "kind": "docs",
                "path": "reference:arrays.scalars"
              },
              "kind": "exists"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for a comprehensive overview of the affected classes."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Note that while usage of the plugin is completely optional, without it the precision of above-mentioned classes will be inferred as "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "Any",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "typing",
                "version": "*",
                "kind": "api",
                "path": "typing:Any"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "To enable the plugin, one must add it to their mypy "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "configuration file"
                }
              ],
              "url": "https://mypy.readthedocs.io/en/stable/config_file.html",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ":"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "[mypy]\nplugins = numpy.typing.mypy_plugin",
          "execution_status": null
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "mypy"
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "configuration file"
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17843"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17843",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Added a mypy plugin for handling platform-specific "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.number"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " precisions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "mypy"
                }
              ],
              "url": "http://mypy-lang.org/",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " plugin, introduced in "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "numpy/numpy#17843"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17843",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", has been expanded: the plugin now removes annotations for platform-specific extended-precision types that are not available to the platform in question. For example, it will remove "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "float128",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:longdouble"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when not available."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Without the plugin "
            },
            {
              "__type": "Emphasis",
              "__tag": 4047,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "all"
                }
              ]
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " extended-precision types will, as far as mypy is concerned, be available on all platforms."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "To enable the plugin, one must add it to their mypy "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "configuration file"
                }
              ],
              "url": "https://mypy.readthedocs.io/en/stable/config_file.html",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ":"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "[mypy]\nplugins = numpy.typing.mypy_plugin",
          "execution_status": null
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "mypy"
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "configuration file"
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "numpy/numpy#17843"
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18322"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18322",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Let the mypy plugin manage extended-precision "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.number"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " subclasses"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "A new "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "min_digits"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument has been added to the dragon4 float printing functions "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "format_float_positional",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:format_float_positional"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "format_float_scientific",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:format_float_scientific"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " . This kwd guarantees that at least the given number of digits will be printed when printing in unique=True mode, even if the extra digits are unnecessary to uniquely specify the value. It is the counterpart to the precision argument which sets the maximum number of digits to be printed. When unique=False in fixed precision mode, it has no effect and the precision argument fixes the number of digits."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18629"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18629",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "min_digits"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " argument for printing float values"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "f2py",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy.f2py"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " can now parse abstract interface blocks."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18695"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18695",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "f2py now recognizes Fortran abstract interface blocks"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Autodetection of installed BLAS and LAPACK libraries can be bypassed by using the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_BLAS_LIBS"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_LAPACK_LIBS"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " environment variables. Instead, the link flags in these environment variables will be used directly, and the language is assumed to be F77.  This is especially useful in automated builds where the BLAS and LAPACK that are installed are known exactly.  A use case is replacing the actual implementation at runtime via stub library links."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_CBLAS_LIBS"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is set (optional in addition to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_BLAS_LIBS"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "), this will be used as well, by defining "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "HAVE_CBLAS"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and appending the environment variable content to the link flags."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18737"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18737",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "BLAS and LAPACK configuration via environment variables"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.typing.NDArray"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been added, a runtime-subscriptable alias for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.ndarray[Any, np.dtype[~Scalar]]"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". The new type alias can be used for annotating arrays with a given dtype and unspecified shape. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "1"
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "1"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " NumPy does not support the annotating of array shapes as of 1.21, this is expected to change in the future though (see "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "Pep 646"
                }
              ],
              "url": "https://peps.python.org/pep-0646/",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "A runtime-subcriptable alias has been added for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndarray"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> import numpy as np\n>>> import numpy.typing as npt\n\n>>> print(npt.NDArray)\nnumpy.ndarray[typing.Any, numpy.dtype[~ScalarType]]\n\n>>> print(npt.NDArray[np.float64])\nnumpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]\n\n>>> NDArrayInt = npt.NDArray[np.int_]\n>>> a: NDArrayInt = np.arange(10)\n\n>>> def func(a: npt.ArrayLike) -> npt.NDArray[Any]:\n...     return np.array(a)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18935"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18935",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Examples"
        }
      ],
      "level": 3,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Improvements"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The size of the interval over which phases are unwrapped is no longer restricted to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "2 * pi"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This is especially useful for unwrapping degrees, but can also be used for other intervals."
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> phase_deg = np.mod(np.linspace(0,720,19), 360) - 180\n>>> phase_deg\narray([-180., -140., -100.,  -60.,  -20.,   20.,   60.,  100.,  140.,\n       -180., -140., -100.,  -60.,  -20.,   20.,   60.,  100.,  140.,\n       -180.])\n\n>>> unwrap(phase_deg, period=360)\narray([-180., -140., -100.,  -60.,  -20.,   20.,   60.,  100.,  140.,\n        180.,  220.,  260.,  300.,  340.,  380.,  420.,  460.,  500.,\n        540.])",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-16987"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/16987",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Arbitrary "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "period"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " option for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.unwrap"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.unique"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " operated on an array with multiple "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NaN"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " entries, its return included a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NaN"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for each entry that was "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NaN"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " in the original array. This is now improved such that the returned array contains just one "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NaN"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " as the last element."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Also for complex arrays all "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NaN"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " values are considered equivalent (no matter whether the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NaN"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is in the real or imaginary part). As the representant for the returned array the smallest one in the lexicographical order is chosen - see "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.sort"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for how the lexicographical order is defined for complex arrays."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18070"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18070",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.unique"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " now returns single "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "NaN"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The performance of Rayleigh and geometric random variate generation in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "Generator"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has improved. These are both transformation of exponential random variables and the slow log-based inverse cdf transformation has been replaced with the Ziggurat-based exponential variate generator."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This change breaks the stream of variates generated  when variates from either of these distributions are produced."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18666"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18666",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "Generator.rayleigh"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "Generator.geometric"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " performance improved"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "All placeholder annotations, that were previously annotated as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "typing.Any"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", have been improved. Where appropriate they have been replaced with explicit function definitions, classes or other miscellaneous objects."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18934"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18934",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Placeholder annotations have been improved"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Performance improvements"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Integer division of NumPy arrays now uses "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "libdivide"
                }
              ],
              "url": "https://libdivide.com/",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when the divisor is a constant. With the usage of libdivide and other minor optimizations, there is a large speedup. The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "//"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " operator and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.floor_divide"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " makes use of the new changes."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-17727"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17727",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Improved performance in integer division of NumPy arrays"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.save"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is now a lot faster for small arrays."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.load"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is also faster for small arrays, but only when serializing with a version >= "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "(3, 0)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Both are done by removing checks that are only relevant for Python 2, while still maintaining compatibility with arrays which might have been created by Python 2."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18657"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18657",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Improve performance of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.save"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.load"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for small arrays"
        }
      ],
      "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": "When "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "ndarray",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:ndarray"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " subclasses are used on input to "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "piecewise",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "numpy",
                "version": "*",
                "kind": "api",
                "path": "numpy:piecewise"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", they are passed on to the functions. The output will now be of the same subclass as well."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18110"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18110",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "numpy.piecewise",
          "domain": null,
          "role": null,
          "inventory": null
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " output class now matches the input class"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "With the release of macOS 11.3, several different issues that numpy was encountering when using Accelerate Framework's implementation of BLAS and LAPACK should be resolved.  This change enables the Accelerate Framework as an option on macOS.  If additional issues are found, please file a bug report against Accelerate using the developer feedback assistant tool (https://developer.apple.com/bug-reporting/). We intend to address issues promptly and plan to continue supporting and updating our BLAS and LAPACK libraries."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-18874"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/18874",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Enable Accelerate Framework"
        }
      ],
      "level": 2,
      "target": null
    }
  ],
  "local_refs": []
}