{
  "__type": "IngestedDoc",
  "__tag": 4010,
  "_content": {},
  "_ordered_sections": [],
  "item_file": null,
  "item_line": null,
  "item_type": null,
  "aliases": [],
  "example_section_data": {
    "__type": "Section",
    "__tag": 4015,
    "children": [],
    "title": [],
    "level": 0,
    "target": null
  },
  "see_also": [],
  "signature": null,
  "references": null,
  "qa": "release:1.23.0-notes",
  "arbitrary": [
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [],
      "level": 0,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The NumPy 1.23.0 release continues the ongoing work to improve the handling and promotion of dtypes, increase the execution speed, clarify the documentation, and expire old deprecations. The highlights are:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Implementation of "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "loadtxt"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " in C, greatly improving its performance."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Exposing DLPack at the Python level for easy data exchange."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Changes to the promotion and comparisons of structured dtypes."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Improvements to f2py."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "See below for the details,"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "NumPy 1.23.0 Release Notes"
        }
      ],
      "level": 0,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "A masked array specialization of "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ndenumerate"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " is now available as   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.ma.ndenumerate"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ". It provides an alternative to "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.ndenumerate"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "   and skips masked values by default."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-20020"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/20020",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.from_dlpack"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " has been added to allow easy exchange of data using the   DLPack protocol.  It accepts Python objects that implement the "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "__dlpack__"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "   and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "__dlpack_device__"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " methods and returns a ndarray object which is   generally the view of the data of the input object."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-21145"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/21145",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New functions"
        }
      ],
      "level": 1,
      "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": "Setting "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "__array_finalize__"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " to "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "None"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " is deprecated.  It must now be   a method and may wish to call "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "super().__array_finalize__(obj)"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " after   checking for "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "None"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " or if the NumPy version is sufficiently new."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-20766"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/20766",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Using "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "axis=32"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " ("
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "axis=np.MAXDIMS"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ") in many cases had the   same meaning as "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "axis=None"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ".  This is deprecated and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "axis=None"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "   must be used instead."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-20920"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/20920",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The hook function "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyDataMem_SetEventHook"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " has been deprecated and the   demonstration of its use in tool/allocation_tracking has been removed.  The   ability to track allocations is now built-in to python via "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "tracemalloc"
                    },
                    {
                      "__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-20394"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/20394",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.distutils"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " has been deprecated, as a result of "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "distutils"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " itself   being deprecated. It will not be present in NumPy for Python >= 3.12, and   will be removed completely 2 years after the release of Python 3.12 For more   details, see "
                    },
                    {
                      "__type": "CrossRef",
                      "__tag": 4002,
                      "value": "distutils-status-migration",
                      "reference": {
                        "__type": "LocalRef",
                        "__tag": 4022,
                        "kind": "docs",
                        "path": "reference:distutils_status_migration"
                      },
                      "kind": "exists"
                    },
                    {
                      "__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-20875"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/20875",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "numpy.loadtxt"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " will now give a "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "DeprecationWarning"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " when an integer   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "dtype"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " is requested but the value is formatted as a floating point number."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-21663"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/21663",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Deprecations"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "NpzFile.iteritems()"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "NpzFile.iterkeys()"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " methods have been   removed as part of the continued removal of Python 2 compatibility. This   concludes the deprecation from 1.15."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-16830"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/16830",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "alen"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "asscalar"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " functions have been removed."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-20414"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/20414",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "UPDATEIFCOPY"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " array flag has been removed together with the enum   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "NPY_ARRAY_UPDATEIFCOPY"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ". The associated (and deprecated)   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyArray_XDECREF_ERR"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " was also removed. These were all deprecated in 1.14. They   are replaced by "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "NPY_ARRAY_WRITEBACKIFCOPY"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", that requires calling   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "PyArray_ResolveWritebackIfCopy"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " before the array is deallocated."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-20589"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/20589",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Exceptions will be raised during array-like creation.  When an object raised   an exception during access of the special attributes "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "__array__"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " or   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "__array_interface__"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ", this exception was usually ignored.  This behaviour   was deprecated in 1.21, and the exception will now be raised."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-20835"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/20835",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Multidimensional indexing with non-tuple values is not allowed.  Previously,   code such as "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "arr[ind]"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " where "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "ind = [[0, 1], [0, 1]]"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " produced a   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "FutureWarning"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " and was interpreted as a multidimensional index (i.e.,   "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "arr[tuple(ind)]"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "). Now this example is treated like an array index over a   single dimension ("
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "arr[array(ind)]"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ").  Multidimensional indexing with   anything but a tuple was deprecated in NumPy 1.15."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-21029"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/21029",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Changing to a dtype of different size in F-contiguous arrays is no longer   permitted. Deprecated since Numpy 1.11.0. See below for an extended   explanation of the effects of this change."
                    }
                  ]
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "("
                    },
                    {
                      "__type": "Link",
                      "__tag": 4049,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "gh-20722"
                        }
                      ],
                      "url": "https://github.com/numpy/numpy/pull/20722",
                      "title": ""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ")"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Expired deprecations"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New Features"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "crackfortran"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " parser now understands operator and assignment definitions in a module. They are added in the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "body"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " list of the module which contains a new key "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "implementedby"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " listing the names of the subroutines or functions implementing the operator or assignment."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15006"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15006",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "crackfortran has support for operator and assignment overloading"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "As a result, one does not need to use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "public"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "private"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " statements to specify derived type access properties."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-15844"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/15844",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "f2py supports reading access type attributes from derived type statements"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This parameter behaves the same as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndmin"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " from "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.loadtxt"
            },
            {
              "__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-20500"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/20500",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New parameter "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndmin"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " added to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "genfromtxt"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.loadtxt"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " now supports an additional "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "quotechar"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " keyword argument which is not set by default.  Using "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "quotechar='\"'"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will read quoted fields as used by the Excel CSV dialect."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Further, it is now possible to pass a single callable rather than a dictionary for the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "converters"
            },
            {
              "__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-20580"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/20580",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.loadtxt"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " now supports quote character and single converter function"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously, viewing an array with a dtype of a different item size required that the entire array be C-contiguous. This limitation would unnecessarily force the user to make contiguous copies of non-contiguous arrays before being able to change the dtype."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This change affects not only "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray.view"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", but other construction mechanisms, including the discouraged direct assignment to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray.dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This change expires the deprecation regarding the viewing of F-contiguous arrays, described elsewhere in the release notes."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-20722"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/20722",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Changing to dtype of a different size now requires contiguity of only the last axis"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "For F77 inputs, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "f2py"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will generate "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "modname-f2pywrappers.f"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " unconditionally, though these may be empty.  For free-form inputs, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "modname-f2pywrappers.f"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "modname-f2pywrappers2.f90"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will both be generated unconditionally, and may be empty. This allows writing generic output rules in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "cmake"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "meson"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and other build systems. Older behavior can be restored by passing "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "--skip-empty-wrappers"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "f2py"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "f2py-meson",
              "reference": {
                "__type": "LocalRef",
                "__tag": 4022,
                "kind": "docs",
                "path": "f2py:buildtools:meson"
              },
              "kind": "exists"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " details usage."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-21187"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/21187",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Deterministic output files for F2PY"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The parameter "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "keepdims"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was added to the functions "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.average"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.ma.average"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  The parameter has the same meaning as it does in reduction functions such as "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.sum"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.mean"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-21485"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/21485",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "keepdims"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " parameter for "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "average"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.unique"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was changed in 1.21 to treat all "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NaN"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " values as equal and return a single "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NaN"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Setting "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "equal_nan=False"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will restore pre-1.21 behavior to treat "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NaNs"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " as unique. Defaults to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "True"
            },
            {
              "__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-21623"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/21623",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "New parameter "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "equal_nan"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " added to "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.unique"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Compatibility notes"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Previously, this would promote to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float64"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ord"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " argument was not one of the explicitly listed values, e.g. "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ord=3"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> f32 = np.float32([1, 2])\n>>> np.linalg.norm(f32, 2).dtype\ndtype('float32')\n>>> np.linalg.norm(f32, 3)\ndtype('float64')  # numpy 1.22\ndtype('float32')  # numpy 1.23",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This change affects only "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float32"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "float16"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " vectors with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ord"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " other than "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "-Inf"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "1"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "2"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "Inf"
            },
            {
              "__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-17709"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/17709",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "1D "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.linalg.norm"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " preserves float input types, even for scalar results"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In general, NumPy now defines correct, but slightly limited, promotion for structured dtypes by promoting the subtypes of each field instead of raising an exception      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> np.result_type(np.dtype(\"i,i\"), np.dtype(\"i,d\"))\ndtype([('f0', '<i4'), ('f1', '<f8')])",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "For promotion matching field names, order, and titles are enforced, however padding is ignored. Promotion involving structured dtypes now always ensures native byte-order for all fields (which may change the result of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.concatenate"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ") and ensures that the result will be \"packed\", i.e. all fields are ordered contiguously and padding is removed. See "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "structured_dtype_comparison_and_promotion",
              "reference": {
                "__type": "LocalRef",
                "__tag": 4022,
                "kind": "docs",
                "path": "user:basics.rec"
              },
              "kind": "exists"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for further details."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "repr"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " of aligned structures will now never print the long form including "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "offsets"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "itemsize"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " unless the structure includes padding not guaranteed by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "align=True"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In alignment with the above changes to the promotion logic, the casting safety has been updated:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "\"equiv\""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " enforces matching names and titles. The itemsize   is allowed to differ due to padding."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "\"safe\""
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " allows mismatching field names and titles"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The cast safety is limited by the cast safety of each included   field."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "The order of fields is used to decide cast safety of each   individual field.  Previously, the field names were used and   only unsafe casts were possible when names mismatched."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The main important change here is that name mismatches are now considered \"safe\" casts."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-19226"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/19226",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Changes to structured (void) dtype promotion and comparisons"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "NumPy cannot be compiled with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "NPY_RELAXED_STRIDES_CHECKING=0"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " anymore.  Relaxed strides have been the default for many years and the option was initially introduced to allow a smoother transition."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-20220"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/20220",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "NPY_RELAXED_STRIDES_CHECKING"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " has been removed"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The row counting of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.loadtxt"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " was fixed.  "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "loadtxt"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " ignores fully empty lines in the file, but counted them towards "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "max_rows"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". When "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "max_rows"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is used and the file contains empty lines, these will now not be counted.  Previously, it was possible that the result contained fewer than "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "max_rows"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " rows even though more data was available to be read. If the old behaviour is required, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "itertools.islice"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " may be used      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "import itertools\nlines = itertools.islice(open(\"file\"), 0, max_rows)\nresult = np.loadtxt(lines, ...)",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "While generally much faster and improved, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.loadtxt"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " may now fail to converter certain strings to numbers that were previously successfully read. The most important cases for this are:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Parsing floating point values such as "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "1.0"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " into integers is now deprecated."
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Parsing hexadecimal floats such as "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "0x3p3"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " will fail"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "An "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "_"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " was previously accepted as a thousands delimiter "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "100_000"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": ".   This will now result in an error."
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If you experience these limitations, they can all be worked around by passing appropriate "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "converters="
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ".  NumPy now supports passing a single converter to be used for all columns to make this more convenient. For example, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "converters=float.fromhex"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " can read hexadecimal float numbers and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "converters=int"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will be able to read "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "100_000"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Further, the error messages have been generally improved.  However, this means that error types may differ.  In particularly, a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ValueError"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is now always raised when parsing of a single entry fails."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-20580"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/20580",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.loadtxt"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " has received several changes"
        }
      ],
      "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": "This means subclasses can now use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "super().__array_finalize__(obj)"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " without worrying whether "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "ndarray"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is their superclass or not. The actual call remains a no-op."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-20766"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/20766",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "ndarray.__array_finalize__"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " is now callable"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "With VSX4/Power10 enablement, the new instructions available in Power ISA 3.1 can be used to accelerate some NumPy operations, e.g., floor_divide, modulo, etc."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-20821"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/20821",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Add support for VSX4/Power10"
        }
      ],
      "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.fromiter"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " function now supports object and subarray dtypes. Please see he function documentation for examples."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-20993"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/20993",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.fromiter"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " now accepts objects and subarrays"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Compiling is preceded by a detection phase to determine whether the underlying libc supports certain math operations. Previously this code did not respect the proper signatures. Fixing this enables compilation for the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "wasm-ld"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " backend (compilation for web assembly) and reduces the number of warnings."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-21154"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/21154",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Math C library feature detection now uses correct signatures"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "np.kron"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " maintains subclass information now such as masked arrays while computing the Kronecker product of the inputs"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ">>> x = ma.array([[1, 2], [3, 4]], mask=[[0, 1], [1, 0]])\n>>> np.kron(x,x)\nmasked_array(\n  data=[[1, --, --, --],\n        [--, 4, --, --],\n        [--, --, 4, --],\n        [--, --, --, 16]],\n  mask=[[False,  True,  True,  True],\n        [ True, False,  True,  True],\n        [ True,  True, False,  True],\n        [ True,  True,  True, False]],\n  fill_value=999999)",
          "execution_status": null
        },
        {
          "__type": "Admonition",
          "__tag": 4056,
          "kind": "warning",
          "base_type": "warning",
          "children": [
            {
              "__type": "AdmonitionTitle",
              "__tag": 4055,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "warning "
                }
              ]
            },
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "InlineCode",
                  "__tag": 4051,
                  "value": "np.kron"
                },
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": " output now follows "
                },
                {
                  "__type": "InlineCode",
                  "__tag": 4051,
                  "value": "ufunc"
                },
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": " ordering ("
                },
                {
                  "__type": "InlineCode",
                  "__tag": 4051,
                  "value": "multiply"
                },
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": ") to determine the output class type"
                }
              ]
            },
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> class myarr(np.ndarray):\n>>>    __array_priority__ = -1\n>>> a = np.ones([2, 2])\n>>> ma = myarray(a.shape, a.dtype, a.data)\n>>> type(np.kron(a, ma)) == np.ndarray\nFalse # Before it was True\n>>> type(np.kron(a, ma)) == myarr\nTrue",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-21262"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/21262",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.kron"
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " now maintains subclass information"
        }
      ],
      "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": "InlineCode",
              "__tag": 4051,
              "value": "numpy.loadtxt"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is now generally much faster than previously as most of it is now implemented in C."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-20580"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/20580",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Faster "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.loadtxt"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Reduction operations like "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.sum"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.prod"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.add.reduce"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.logical_and.reduce"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " on contiguous integer-based arrays are now much faster."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-21001"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/21001",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Faster reduction operators"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.where"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is now much faster than previously on unpredictable/random input data."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-21130"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/21130",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Faster "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.where"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Many operations on NumPy scalars are now significantly faster, although rare operations (e.g. with 0-D arrays rather than scalars) may be slower in some cases. However, even with these improvements users who want the best performance for their scalars, may want to convert a known NumPy scalar into a Python one using "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "scalar.item()"
            },
            {
              "__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-21188"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/21188",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Faster operations on NumPy scalars"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "numpy.kron"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " is about 80% faster as the product is now computed using broadcasting."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "("
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "gh-21354"
                }
              ],
              "url": "https://github.com/numpy/numpy/pull/21354",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ")"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Faster "
        },
        {
          "__type": "InlineCode",
          "__tag": 4051,
          "value": "np.kron"
        }
      ],
      "level": 2,
      "target": null
    }
  ],
  "local_refs": []
}