{
  "__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:2.4.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 2.4.0 release continues the work to improve free threaded Python support, user dtypes implementation, and annotations. There are many expired deprecations and bug fixes as well."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This release supports Python versions 3.11-3.14"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "NumPy 2.4.0 Release Notes"
        }
      ],
      "level": 0,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Apart from annotations and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "same_value"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " kwarg, the 2.4 highlights are mostly of interest to downstream developers. They should help in implementing new user dtypes."
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Many annotation improvements. In particular, runtime signature introspection."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "New "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "casting"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " kwarg "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "'same_value'"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " for casting by value."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "New "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyUFunc_AddLoopsFromSpec"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " function that can be used to add user sort   loops using the "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ArrayMethod"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " API."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "New "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "__numpy_dtype__"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " protocol."
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Highlights"
        }
      ],
      "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": "Setting the strides attribute is now deprecated since mutating an array is unsafe if an array is shared, especially by multiple threads.  As an alternative, you can create a new view (no copy) via:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.lib.stride_tricks.strided_window_view"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " if applicable,"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.lib.stride_tricks.as_strided"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " for the general case,"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "or the "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.ndarray"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " constructor ("
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "buffer"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " is the original array) for a   light-weight version."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-28925"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/28925",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Setting the "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "strides"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " attribute is deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Passing the output array "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "out"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " positionally to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.maximum"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.minimum"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is deprecated. For example, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.maximum(a, b, c)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will emit a deprecation warning, since "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "c"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is treated as the output buffer rather than a third input."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Always pass the output with the keyword form, e.g.  "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.maximum(a, b, out=c)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This makes intent clear and simplifies type annotations."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29052"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29052",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Positional "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "out"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " argument to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.maximum"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ", "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.minimum"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " is deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When creating a new "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "VisibleDeprecationWarning"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will be given if "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "align="
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is not a boolean.  This is mainly to prevent accidentally passing a subarray align flag where it has no effect, such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype(\"f8\", 3)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " instead of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype((\"f8\", 3))"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  We strongly suggest to always pass "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "align="
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " as a keyword argument."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29301"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29301",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "align="
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " must be passed as boolean to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.dtype()"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.testing.assert_warns"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.testing.suppress_warnings"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " are deprecated.  Use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "warnings.catch_warnings"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "warnings.filterwarnings"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "pytest.warns"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "pytest.filterwarnings"
            },
            {
              "__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-29550"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29550",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Assertion and warning control utilities are deprecated"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.fix"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " function will be deprecated in a future release. It is recommended to use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.trunc"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " instead, as it provides the same functionality of truncating decimal values to their integer parts. Static type checkers might already report a warning for the use of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.fix"
            },
            {
              "__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-30168"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/30168",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.fix"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " is pending deprecation"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Setting the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray.shape"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " attribute directly will be deprecated in a future release.  Instead of modifying the shape in place, it is recommended to use the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.reshape"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " function.  Static type checkers might already report a warning for assignments to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray.shape"
            },
            {
              "__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-30282"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/30282",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "in-place modification of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndarray.shape"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " is pending deprecation"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.lib.user_array.container"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " class is deprecated and will be removed in a future version."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-30284"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/30284",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Deprecation of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.lib.user_array.container"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Expired deprecations"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29836"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29836",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removed deprecated "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "MachAr"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " runtime discovery mechanism."
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Conversion of an array with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndim > 0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to a scalar was deprecated in NumPy 1.25.  Now, attempting to do so raises "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "TypeError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  Ensure you extract a single element from your array before performing this operation."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29841"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29841",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Raise "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "TypeError"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " on attempt to convert array with "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndim > 0"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " to scalar"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The following were deprecated in NumPy 2.0 and have been moved to private modules:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.linalg.linalg"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "   Use "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.linalg"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " instead."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.fft.helper"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "   Use "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.fft"
                    },
                    {
                      "__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-29909"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29909",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removed numpy.linalg.linalg and numpy.fft.helper"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "interpolation"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " parameter was deprecated in NumPy 1.22.0 and has been removed from the following functions:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.percentile"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.nanpercentile"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.quantile"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.nanquantile"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Use the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "method"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " parameter instead."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29973"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29973",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removed "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "interpolation"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " parameter from quantile and percentile functions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.in1d"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been deprecated since NumPy 2.0 and is now removed in favor of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.isin"
            },
            {
              "__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-29978"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29978",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removed "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.in1d"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndindex.ndincr()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " method has been deprecated since NumPy 1.20 and is now removed; use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "next(ndindex)"
            },
            {
              "__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-29980"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29980",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removed "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.ndindex.ndincr()"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "fix_imports"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " parameter was deprecated in NumPy 2.1.0 and is now removed. This flag has been ignored since NumPy 1.17 and was only needed to support loading files in Python 2 that were written in Python 3."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29984"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29984",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removed "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "fix_imports"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " parameter from "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.save"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Four undocumented methods of the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray.ctypes"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " object have been removed:"
            }
          ]
        },
        {
          "__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": "These methods have been deprecated since NumPy 1.21."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29986"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29986",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removal of four undocumented "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndarray.ctypes"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " methods"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "newshape"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " parameter was deprecated in NumPy 2.1.0 and has been removed from "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.reshape"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Pass it positionally or use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "shape="
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " on newer NumPy versions."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29994"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29994",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removed "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "newshape"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " parameter from "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.reshape"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The following long-deprecated APIs have been removed:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.trapz"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " — deprecated since NumPy 2.0 (2023-08-18). Use "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.trapezoid"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " or   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "scipy.integrate"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " functions instead."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "disp"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " function — deprecated from 2.0 release and no longer functional. Use   your own printing function instead."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "bias"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ddof"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " arguments in "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.corrcoef"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " — these had no effect   since NumPy 1.10."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29997"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29997",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removal of deprecated functions and arguments"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "delimitor"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " parameter was deprecated in NumPy 1.22.0 and has been removed from "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.ma.mrecords.fromtextfile()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "delimiter"
            },
            {
              "__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-30021"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/30021",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Removed "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "delimitor"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " parameter from "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.ma.mrecords.fromtextfile()"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The following long-deprecated APIs have been removed or converted to errors:"
            }
          ]
        },
        {
          "__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": "style"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " parameter has been removed from "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.array2string"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ".   This argument had no effect since Numpy 1.14.0.  Any arguments following   it, such as "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "formatter"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " have now been made keyword-only."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Calling "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.sum(generator)"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " directly on a generator object now raises a   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "TypeError"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ".  This behavior was deprecated in NumPy 1.15.0. Use   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.sum(np.fromiter(generator))"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " or the python "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "sum"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " builtin instead."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-30068"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/30068",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.array2string"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " and "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.sum"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " deprecations finalized"
        }
      ],
      "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": "NumPy's C extension modules have begun to use multi-phase initialisation, as   defined by PEP 489. As part of this, a new explicit check has been added that   each such module is only imported once per Python process. This comes with   the side-effect that deleting "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " from "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "sys.modules"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and re-importing   it will now fail with an "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ImportError"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ". This has always been unsafe, with   unexpected side-effects, though did not previously raise an error."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-29030"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/29030",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.round"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " now always returns a copy. Previously, it returned a view   for integer inputs for "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "decimals >= 0"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and a copy in all other cases.   This change brings "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "round"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " in line with "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ceil"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "floor"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "trunc"
                    },
                    {
                      "__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-29137"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/29137",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Type-checkers will no longer accept calls to "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.arange"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " with   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "start"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " as a keyword argument. This was done for compatibility with   the Array API standard. At runtime it is still possible to use   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.arange"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " with "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "start"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " as a keyword argument."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-30147"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/30147",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The Macro NPY_ALIGNMENT_REQUIRED has been removed The macro was defined in   the "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "npy_cpu.h"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " file, so might be regarded as semi public. As it turns out,   with modern compilers and hardware it is almost always the case that   alignment is required, so numpy no longer uses the macro.  It is unlikely   anyone uses it, but you might want to compile with the "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "-Wundef"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " flag or   equivalent to be sure."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-29094"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/29094",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Compatibility notes"
        }
      ],
      "level": 1,
      "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": "This is of interest if you are using "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArray_Sort"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArray_ArgSort"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". We have changed the semantics of the old names in the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_SORTKIND"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " enum and added new ones. The changes are backward compatible, and no recompilation is needed. The new names of interest 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": "NPY_SORT_DEFAULT"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " -- default sort (same value as "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "NPY_QUICKSORT"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "NPY_SORT_STABLE"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "  -- the sort must be stable (same value as "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "NPY_MERGESORT"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "NPY_SORT_DESCENDING"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " -- the sort must be descending"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The semantic change is that "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_HEAPSORT"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is mapped to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_QUICKSORT"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when used. Note that "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_SORT_DESCENDING"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is not yet implemented."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29642"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29642",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The NPY_SORTKIND enum has been enhanced with new variables"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "A new slot "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_DT_get_constant"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " has been added to the DType API, allowing dtype implementations to provide constant values such as machine limits and special values. The slot function has the signature      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "int get_constant(PyArray_Descr *descr, int constant_id, void *ptr)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "It returns 1 on success, 0 if the constant is not available, or -1 on error. The function is always called with the GIL held and may write to unaligned memory."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Integer constants (marked with the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "1 << 16"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " bit) return "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "npy_intp"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " values, while floating-point constants return values of the dtype's native type."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Implementing this can be used by user DTypes to provide "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.finfo"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " values."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29836"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29836",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "NPY_DT_get_constant"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " slot for DType constant retrieval"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This function allows adding multiple ufunc loops from their specs in one call using a NULL-terminated array of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyUFunc_LoopSlot"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " structs. It allows registering sorting and argsorting loops using the new ArrayMethod API."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29900"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29900",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "A new "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "PyUFunc_AddLoopsFromSpecs"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " convenience function has been added to the C API."
        }
      ],
      "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": "Let "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.size"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " accept multiple axes."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-29240"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/29240",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Extend "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.pad"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " to accept a dictionary for the "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "pad_width"
                    },
                    {
                      "__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-29273"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/29273",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New Features"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "casting"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " kwarg now has a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "'same_value'"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " option that checks the actual values can be round-trip cast without changing value. Currently it is only implemented in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray.astype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". This will raise a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ValueError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " if any of the values in the array would change as a result of the cast, including rounding of floats or overflowing of ints."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29129"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29129",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "'same_value'"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for casting by value"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Masked arrays now accept and preserve a Python "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "str"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " as their "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "fill_value"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when using the variable‑width "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "StringDType"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " (kind "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "'T'"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "), including through slicing and views.  The default is "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "'N/A'"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and may be overridden by any valid string. This fixes issue "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh‑29421"
                }
              ],
              "url": "https://github.com/numpy/numpy/issues/29421",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and was implemented in pull request "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh‑29423"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29423",
              "title": ""
            },
            {
              "__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-29423"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29423",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "StringDType"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " fill_value support in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.ma.MaskedArray"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndmax"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " option is now available for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.array"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". It explicitly limits the maximum number of dimensions created from nested sequences."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This is particularly useful when creating arrays of list-like objects with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype=object"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". By default, NumPy recurses through all nesting levels to create the highest possible dimensional array, but this behavior may not be desired when the intent is to preserve nested structures as objects. The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndmax"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " parameter provides explicit control over this recursion depth."
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "# Default behavior: Creates a 2D array\n>>> a = np.array([[1, 2], [3, 4]], dtype=object)\n>>> a\narray([[1, 2],\n       [3, 4]], dtype=object)\n>>> a.shape\n(2, 2)\n\n# With ndmax=1: Creates a 1D array\n>>> b = np.array([[1, 2], [3, 4]], dtype=object, ndmax=1)\n>>> b\narray([list([1, 2]), list([3, 4])], dtype=object)\n>>> b.shape\n(2,)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29569"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29569",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndmax"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " option for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.array"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Ufuncs called with a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " mask and without an "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "out"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " positional or kwarg will now emit a warning. This usage tends to trip up users who expect some value in output locations where the mask is "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "False"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " (the ufunc will not touch those locations). The warning can be suppressed by using "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "out=None"
            },
            {
              "__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-29813"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29813",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Warning emitted when using "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "where"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " without "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "out"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "User-defined dtypes can now implement custom sorting and argsorting using the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ArrayMethod"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " API. This mechanism can be used in place of the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyArray_ArrFuncs"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " slots which may be deprecated in the future."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The sorting and argsorting methods are registered by passing the arraymethod specs that implement the operations to the new "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "PyUFunc_AddLoopsFromSpecs"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " function.  See the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ArrayMethod"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " API documentation for details."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29900"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29900",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "DType sorting and argsorting supports the ArrayMethod API"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "NumPy now has a new "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__numpy_dtype__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " protocol. NumPy will check for this attribute when converting to a NumPy dtype via "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.dtype(obj)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or any "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype="
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Downstream projects are encouraged to implement this for all dtype like objects which may previously have used a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": ".dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " attribute that returned a NumPy dtype. We expect to deprecate "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": ".dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " in the future to prevent interpreting array-like objects with a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": ".dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " attribute as a dtype. If you wish you can implement "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__numpy_dtype__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to ensure an earlier warning or error ("
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": ".dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is ignored if this is found)."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-30179"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/30179",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__numpy_dtype__"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " protocol"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Improvements"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "flatiter"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " object now shares the same index preparation logic as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", ensuring consistent behavior and fixing several issues where invalid indices were previously accepted or misinterpreted."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Key fixes and improvements:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Stricter index validation"
                    }
                  ]
                },
                {
                  "__type": "BulletList",
                  "__tag": 4053,
                  "ordered": false,
                  "start": 1,
                  "children": [
                    {
                      "__type": "ListItem",
                      "__tag": 4054,
                      "children": [
                        {
                          "__type": "Paragraph",
                          "__tag": 4045,
                          "children": [
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": "Boolean non-array indices like "
                            },
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "arr.flat[[True, True]]"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " were     incorrectly treated as "
                            },
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "arr.flat[np.array([1, 1], dtype=int)]"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": ".     They now raise an index error. Note that indices that match the     iterator's shape are expected to not raise in the future and be     handled as regular boolean indices. Use "
                            },
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "np.asarray(<index>)"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " if     you want to match that behavior."
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "__type": "ListItem",
                      "__tag": 4054,
                      "children": [
                        {
                          "__type": "Paragraph",
                          "__tag": 4045,
                          "children": [
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": "Float non-array indices were also cast to integer and incorrectly     treated as "
                            },
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "arr.flat[np.array([1.0, 1.0], dtype=int)]"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": ". This is now     deprecated and will be removed in a future version."
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "__type": "ListItem",
                      "__tag": 4054,
                      "children": [
                        {
                          "__type": "Paragraph",
                          "__tag": 4045,
                          "children": [
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": "0-dimensional boolean indices like "
                            },
                            {
                              "__type": "InlineCode",
                              "__tag": 4051,
                              "value": "arr.flat[True]"
                            },
                            {
                              "__type": "Text",
                              "__tag": 4046,
                              "value": " are also     deprecated and will be removed in a future version."
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Consistent error types:"
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Certain invalid "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "flatiter"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " indices that previously raised "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ValueError"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "   now correctly raise "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "IndexError"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", aligning with "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ndarray"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " behavior."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Improved error messages:"
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The error message for unsupported index operations now provides more   specific details, including explicitly listing the valid index types,   instead of the generic "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "IndexError: unsupported index operation"
                    },
                    {
                      "__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-28590"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/28590",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Fix "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "flatiter"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " indexing edge cases"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "np.quantile",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now raises errors if:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "All weights are zero"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "At least one weight is "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.nan"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "At least one weight is "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.inf"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-28595"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/28595",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Improved error handling in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.quantile"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The error message generated by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "assert_array_compare"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " which is used by functions like "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "assert_allclose"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "assert_array_less"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " etc. now also includes information about the indices at which the assertion fails."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29112"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29112",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Improved error message for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "assert_array_compare"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "When a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "datetime64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " object is \"Not a Time\" (NaT), its "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "__repr__"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " method now includes the time unit of the datetime64 type. This makes it consistent with the behavior of a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "timedelta64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " object."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29396"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29396",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Show unit information in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__repr__"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "datetime64(\"NaT\")"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The speed of calculations on scalars has been improved by about a factor 6 for ufuncs that take only one input (like "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.sin(scalar)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "), reducing the speed difference from their "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "math"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " equivalents from a factor 19 to 3 (the speed for arrays is left unchanged)."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29819"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29819",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Performance increase for scalar calculations"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.finfo"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " class has been completely refactored to obtain floating-point constants directly from C compiler macros rather than deriving them at runtime. This provides better accuracy, platform compatibility and corrected several attribute calculations:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Constants like "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "eps"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "min"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "max"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "smallest_normal"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", and   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "smallest_subnormal"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " now come directly from standard C macros ("
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "FLT_EPSILON"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ",   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "DBL_MIN"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", etc.), ensuring platform-correct values."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The deprecated "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "MachAr"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " runtime discovery mechanism has been removed."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Derived attributes have been corrected to match standard definitions:   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "machep"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "negep"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " now use "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "int(log2(eps))"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "; "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "nexp"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " accounts for   all exponent patterns; "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "nmant"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " excludes the implicit bit; and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "minexp"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "   follows the C standard definition."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "longdouble constants, Specifically "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "smallest_normal"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " now follows the   C standard definitions as per respecitive platform."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Special handling added for PowerPC's IBM double-double format."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "New test suite added in "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "test_finfo.py"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " to validate all   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "finfo"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " properties against expected machine arithmetic values for   float16, float32, and float64 types."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29836"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29836",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.finfo"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " Refactor"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "axis"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.trim_zeros"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now accepts a sequence; for example "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.trim_zeros(x, axis=(0, 1))"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will trim the zeros from a multi-dimensional array "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "x"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " along axes 0 and 1. This fixes issue "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh‑29945"
                }
              ],
              "url": "https://github.com/numpy/numpy/issues/29945",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and was implemented in pull request "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh‑29947"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29947",
              "title": ""
            },
            {
              "__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-29947"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29947",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Multiple axes are now supported in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.trim_zeros"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Many NumPy functions, classes, and methods that previously raised "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ValueError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when passed to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "inspect.signature()"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now return meaningful signatures. This improves support for runtime type checking, IDE autocomplete, documentation generation, and runtime introspection capabilities across the NumPy API."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Over three hundred classes and functions have been updated in total, including, but not limited to, core classes such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "generic"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ufunc"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "broadcast"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "nditer"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", etc., most methods of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and scalar types, array constructor functions ("
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "array"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "empty"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "arange"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "fromiter"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", etc.), all "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ufuncs"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and many other commonly used functions, including "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dot"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "concat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "bincount"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "can_cast"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and numerous others."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-30208"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/30208",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Runtime signature introspection support has been significantly improved"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Performance improvements and changes"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The hash-based algorithm for unique extraction provides an order-of-magnitude speedup on large string arrays.  In an internal benchmark with about 1 billion string elements, the hash-based np.unique completed in roughly 33.5 seconds, compared to 498 seconds with the sort-based method – about 15× faster for unsorted unique operations on strings.  This improvement greatly reduces the time to find unique values in very large string datasets."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-28767"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/28767",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Performance improvements to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.unique"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for string dtypes"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.ndindex"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " function now uses "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "itertools.product"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " internally, providing significant improvements in performance for large iteration spaces, while maintaining the original behavior and interface.  For example, for an array of shape (50, 60, 90) the NumPy "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndindex"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " benchmark improves performance by a factor 5.2."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29165"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29165",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Rewrite of "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.ndindex"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " using "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "itertools.product"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The hash-based algorithm for unique extraction now also supports complex dtypes, offering noticeable performance gains."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In our benchmarks on complex128 arrays with 200,000 elements, the hash-based approach was about 1.4–1.5× faster than the sort-based baseline when there were 20% of unique values, and about 5× faster when there were 0.2% of unique values."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29537"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29537",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Performance improvements to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.unique"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for complex dtypes"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Multiplication between a string and integer now raises OverflowError instead   of MemoryError if the result of the multiplication would create a string that   is too large to be represented. This follows Python's behavior."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-29060"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/29060",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The accuracy of "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.quantile"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "np.percentile"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " for 16- and 32-bit   floating point input data has been improved."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-29105"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/29105",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "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": "np.unique now supports hash‐based duplicate removal for string dtypes. This enhancement extends the hash-table algorithm to byte strings ('S'), Unicode strings ('U'), and the experimental string dtype ('T', StringDType). As a result, calling np.unique() on an array of strings will use the faster hash-based method to obtain unique values. Note that this hash-based method does not guarantee that the returned unique values will be sorted. This also works for StringDType arrays containing None (missing values) when using equal_nan=True (treating missing values as equal)."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-28767"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/28767",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "unique_values"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for string dtypes may return unsorted data"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Strong",
              "__tag": 4048,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "IMPORTANT"
                }
              ]
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ": The default setting for "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "cpu-baseline"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " on x86 has been raised to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "x86-64-v2"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " microarchitecture.  This can be changed to none during build time to support older CPUs, though SIMD optimizations for pre-2009 processors are no longer maintained."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "NumPy has reorganized x86 CPU features into microarchitecture-based groups instead of individual features, aligning with Linux distribution standards and Google Highway requirements."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Key changes:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Replaced individual x86 features with microarchitecture levels: "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "X86_V2"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ",   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "X86_V3"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "X86_V4"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Raised the baseline to "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "X86_V2"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Improved "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "-"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " operator behavior to properly exclude successor features that   imply the excluded feature"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Added meson redirections for removed feature names to maintain backward   compatibility"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Removed compiler compatibility workarounds for partial feature support (e.g.,   AVX512 without mask operations)"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Removed legacy AMD features (XOP, FMA4) and discontinued Intel Xeon Phi   support"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "New Feature Group Hierarchy:"
            }
          ]
        },
        {
          "__type": "Table",
          "__tag": 4065,
          "children": [
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": true,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Name"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Implies"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "Includes"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": false,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "X86_V2"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": []
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "SSE"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "SSE2"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "SSE3"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "SSSE3"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "SSE4_1"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "SSE4_2"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "POPCNT"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "CX16"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "LAHF"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": false,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "X86_V3"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "X86_V2"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX2"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "FMA3"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "BMI"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "BMI2"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "LZCNT"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "F16C"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "MOVBE"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": false,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "X86_V4"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "X86_V3"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512F"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512CD"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512VL"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512BW"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512DQ"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": false,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512_ICL"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "X86_V4"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512VBMI"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512VBMI2"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512VNNI"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512BITALG"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512VPOPCNTDQ"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512IFMA"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "VAES"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "GFNI"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "VPCLMULQDQ"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "__type": "TableRow",
              "__tag": 4068,
              "header": false,
              "children": [
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512_SPR"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512_ICL"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "TableCell",
                  "__tag": 4069,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "AVX512FP16"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "These groups correspond to CPU generations:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "X86_V2"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ": x86-64-v2 microarchitectures (CPUs since 2009)"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "X86_V3"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ": x86-64-v3 microarchitectures (CPUs since 2015)"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "X86_V4"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ": x86-64-v4 microarchitectures (AVX-512 capable CPUs)"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "AVX512_ICL"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ": Intel Ice Lake and similar CPUs"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "AVX512_SPR"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ": Intel Sapphire Rapids and newer CPUs"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Admonition",
          "__tag": 4056,
          "kind": "note",
          "base_type": "note",
          "children": [
            {
              "__type": "AdmonitionTitle",
              "__tag": 4055,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "note "
                }
              ]
            },
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "On 32-bit x86, "
                },
                {
                  "__type": "InlineCode",
                  "__tag": 4051,
                  "value": "cx16"
                },
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": " is excluded from "
                },
                {
                  "__type": "InlineCode",
                  "__tag": 4051,
                  "value": "X86_V2"
                },
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "."
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Documentation has been updated with details on using these new feature groups with the current meson build system."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-28896"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/28896",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Modulate dispatched x86 CPU features"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In some cases, if "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "out"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was non-contiguous, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.matmul"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " would cause memory corruption or a c-level assert. This was new to v2.3.0 and fixed in v2.3.1."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29179"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29179",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Fix bug in "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "matmul"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for non-contiguous out kwarg parameter"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The array interface now accepts NULL pointers (NumPy will do its own dummy allocation, though).  Previously, these incorrectly triggered an undocumented scalar path.  In the unlikely event that the scalar path was actually desired, you can (for now) achieve the previous behavior via the correct scalar path by not providing a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "data"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " field at all."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29338"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29338",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "__array_interface__"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " with NULL pointer changed"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "np.unique now supports hash‐based duplicate removal for complex dtypes.  This enhancement extends the hash‐table algorithm to all complex types ('c'), and their extended precision variants.  The hash‐based method provides faster extraction of unique values but does not guarantee that the result will be sorted."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29537"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29537",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "unique_values"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " for complex dtypes may return unsorted data"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "It is unlikely that this change will be noticed, but if you do see a change in execution time or unstable argsort order, that is likely the cause. Please let us know if there is a performance regression. Congratulate us if it is improved :)"
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29642"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29642",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Sorting "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "kind='heapsort'"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " now maps to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "kind='quicksort'"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The type alias "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.typing.DTypeLike"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " no longer accepts "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "None"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Instead of"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "dtype: DTypeLike = None",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "it should now be"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "dtype: DTypeLike | None = None",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__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-29739"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29739",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "npymath"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "npyrandom"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " libraries now have a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": ".lib"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " rather than a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": ".a"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " file extension on win-arm64, for compatibility for building with MSVC and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "setuptools"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Please note that using these static libraries is discouraged and for existing projects using it, it's best to use it with a matching compiler toolchain, which is "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "clang-cl"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " on Windows on Arm."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-29750"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/29750",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "numpy.typing.DTypeLike"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " no longer accepts "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "None"
        }
      ],
      "level": 2,
      "target": null
    }
  ],
  "local_refs": []
}