Julia

Latest version: v0.6.2

Safety actively analyzes 621420 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 27

1.11

========================

New language features
---------------------
* `public` is a new keyword. Symbols marked with `public` are considered public
API. Symbols marked with `export` are now also treated as public API. The
difference between `public` and `export` is that `public` names do not become
available when `using` a package/module ([50105]).
* `ScopedValue` implement dynamic scope with inheritance across tasks ([50958]).
* The new macro `Base.Cartesian.ncallkw` is analogous to `Base.Cartesian.ncall`,
but allows to add keyword arguments to the function call ([51501]).
* Support for Unicode 15.1 ([51799]).
* A new `AbstractString` type, `AnnotatedString`, is introduced that allows for
regional annotations to be attached to an underlying string. This type is
particularly useful for holding styling information, and is used extensively
in the new `StyledStrings` standard library. There is also a new `AnnotatedChar`
type, that is the equivalent new `AbstractChar` type.
* `Manifest.toml` files can now be renamed in the format `Manifest-v{major}.{minor}.toml`
to be preferentially picked up by the given julia version. i.e. in the same folder,
a `Manifest-v1.11.toml` would be used by v1.11 and `Manifest.toml` by every other julia
version. This makes managing environments for multiple julia versions at the same time
easier ([43845]).

Language changes
----------------
* During precompilation, the `atexit` hooks now run before saving the output file. This
allows users to safely tear down background state (such as closing Timers and sending
disconnect notifications to heartbeat tasks) and cleanup other resources when the program
wants to begin exiting.
* Code coverage and malloc tracking is no longer generated during the package precompilation stage.
Further, during these modes pkgimage caches are now used for packages that are not being tracked.
Meaning that coverage testing (the default for `julia-actions/julia-runtest`) will by default use
pkgimage caches for all other packages than the package being tested, likely meaning faster test
execution. ([52123])

* Specifying a path in `JULIA_DEPOT_PATH` now results in the expansion of empty strings to
omit the default user depot ([51448]).

Compiler/Runtime improvements
-----------------------------
* Updated GC heuristics to count allocated pages instead of individual objects ([50144]).
* A new `LazyLibrary` type is exported from `Libdl` for use in building chained lazy library
loads, primarily to be used within JLLs ([50074]).
* Added a support for annotating `Base.assume_effects` on code block ([52400]).

Command-line option changes
---------------------------

* The entry point for Julia has been standardized to `Main.main(ARGS)`. This must be explicitly opted into using the `main` macro
(see the docstring for further details). When opted-in, and julia is invoked to run a script or expression
(i.e. using `julia script.jl` or `julia -e expr`), julia will subsequently run the `Main.main` function automatically.
This is intended to unify script and compilation workflows, where code loading may happen
in the compiler and execution of `Main.main` may happen in the resulting executable. For interactive use, there is no semantic
difference between defining a `main` function and executing the code directly at the end of the script ([50974]).
* The `--compiled-modules` and `--pkgimages` flags can now be set to `existing`, which will
cause Julia to consider loading existing cache files, but not to create new ones ([50586]
and [52573]).

Multi-threading changes
-----------------------

Build system changes
--------------------

New library functions
---------------------

* `in!(x, s::AbstractSet)` will return whether `x` is in `s`, and insert `x` in `s` if not.
* The new `Libc.mkfifo` function wraps the `mkfifo` C function on Unix platforms ([34587]).
* `hardlink(src, dst)` can be used to create hard links ([41639]).
* `diskstat(path=pwd())` can be used to return statistics about the disk ([42248]).
* `copyuntil(out, io, delim)` and `copyline(out, io)` copy data into an `out::IO` stream ([48273]).
* `eachrsplit(string, pattern)` iterates split substrings right to left.
* `Sys.username()` can be used to return the current user's username ([51897]).
* `wrap(Array, m::Union{MemoryRef{T}, Memory{T}}, dims)` which is the safe counterpart to `unsafe_wrap` ([52049]).

New library features
--------------------

* `invmod(n, T)` where `T` is a native integer type now computes the modular inverse of `n` in the modular integer ring that `T` defines ([52180]).
* `invmod(n)` is an abbreviation for `invmod(n, typeof(n))` for native integer types ([52180]).
* `replace(string, pattern...)` now supports an optional `IO` argument to
write the output to a stream rather than returning a string ([48625]).
* `sizehint!(s, n)` now supports an optional `shrink` argument to disable shrinking ([51929]).
* New function `Docs.hasdoc(module, symbol)` tells whether a name has a docstring ([52139]).
* Passing an `IOBuffer` as a stdout argument for `Process` spawn now works as
expected, synchronized with `wait` or `success`, so a `Base.BufferStream` is
no longer required there for correctness to avoid data races ([52461]).
* After a process exits, `closewrite` will no longer be automatically called on
the stream passed to it. Call `wait` on the process instead to ensure the
content is fully written, then call `closewrite` manually to avoid
data-races. Or use the callback form of `open` to have all that handled
automatically.

Standard library changes
------------------------

StyledStrings

* A new standard library for handling styling in a more comprehensive and structured way ([49586]).
* The new `Faces` struct serves as a container for text styling information
(think typeface, as well as color and decoration), and comes with a framework
to provide a convenient, extensible (via `addface!`), and customisable (with a
user's `Faces.toml` and `loadfaces!`) approach to
styled content ([49586]).
* The new `styled_str` string macro provides a convenient way of creating a
`AnnotatedString` with various faces or other attributes applied ([49586]).

Package Manager

LinearAlgebra
* `cbrt(::AbstractMatrix{<:Real})` is now defined and returns real-valued matrix cube roots of real-valued matrices ([50661]).
* `eigvals/eigen(A, bunchkaufman(B))` and `eigvals/eigen(A, lu(B))`, which utilize the Bunchkaufman (LDL) and LU decomposition of `B`,
respectively, now efficiently compute the generalized eigenvalues (`eigen`: and eigenvectors) of `A` and `B`. Note: The second
argument is the output of `bunchkaufman` or `lu` ([50471]).
* Structured matrices now retain either the axes of the parent (for `Symmetric`/`Hermitian`/`AbstractTriangular`/`UpperHessenberg`), or that of the principal diagonal (for banded matrices) ([52480]).

Printf

Profile

Random
* `rand` now supports sampling over `Tuple` types ([35856], [50251]).
* `rand` now supports sampling over `Pair` types ([28705]).
* When seeding RNGs provided by `Random`, negative integer seeds can now be used ([51416]).
* Seedable random number generators from `Random` can now be seeded by a string, e.g.
`seed!(rng, "a random seed")` ([51527]).

REPL

* Tab complete hints now show in lighter text while typing in the repl. To disable
set `Base.active_repl.options.hint_tab_completes = false` ([51229]).
* Meta-M with an empty prompt now returns the contextual module of the REPL to `Main`.

SuiteSparse


SparseArrays

Test

Dates

Statistics

* Statistics is now an upgradeable standard library ([46501]).

Distributed

* `pmap` now defaults to using a `CachingPool` ([33892]).

Unicode


DelimitedFiles


InteractiveUtils

Deprecated or removed
---------------------


External dependencies
---------------------
* `tput` is no longer called to check terminal capabilities, it has been replaced with a pure-Julia terminfo parser ([50797]).

Tooling Improvements
--------------------

* CI now performs limited automatic typo detection on all PRs. If you merge a PR with a
failing typo CI check, then the reported typos will be automatically ignored in future CI
runs on PRs that edit those same files ([51704]).

<!--- generated by NEWS-update.jl: -->


HTTP.jl Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

<!-- [Unreleased] -->

1.10.1

[543]: https://github.com/JuliaWeb/HTTP.jl/issues/543
[546]: https://github.com/JuliaWeb/HTTP.jl/issues/546
[547]: https://github.com/JuliaWeb/HTTP.jl/issues/547
[599]: https://github.com/JuliaWeb/HTTP.jl/issues/599
[601]: https://github.com/JuliaWeb/HTTP.jl/issues/601
[602]: https://github.com/JuliaWeb/HTTP.jl/issues/602
[608]: https://github.com/JuliaWeb/HTTP.jl/issues/608
[611]: https://github.com/JuliaWeb/HTTP.jl/issues/611
[613]: https://github.com/JuliaWeb/HTTP.jl/issues/613
[615]: https://github.com/JuliaWeb/HTTP.jl/issues/615
[616]: https://github.com/JuliaWeb/HTTP.jl/issues/616
[619]: https://github.com/JuliaWeb/HTTP.jl/issues/619
[635]: https://github.com/JuliaWeb/HTTP.jl/issues/635
[636]: https://github.com/JuliaWeb/HTTP.jl/issues/636
[640]: https://github.com/JuliaWeb/HTTP.jl/issues/640
[647]: https://github.com/JuliaWeb/HTTP.jl/issues/647
[648]: https://github.com/JuliaWeb/HTTP.jl/issues/648
[666]: https://github.com/JuliaWeb/HTTP.jl/issues/666
[674]: https://github.com/JuliaWeb/HTTP.jl/issues/674
[675]: https://github.com/JuliaWeb/HTTP.jl/issues/675
[678]: https://github.com/JuliaWeb/HTTP.jl/issues/678
[680]: https://github.com/JuliaWeb/HTTP.jl/issues/680
[682]: https://github.com/JuliaWeb/HTTP.jl/issues/682
[688]: https://github.com/JuliaWeb/HTTP.jl/issues/688
[693]: https://github.com/JuliaWeb/HTTP.jl/issues/693
[701]: https://github.com/JuliaWeb/HTTP.jl/issues/701
[702]: https://github.com/JuliaWeb/HTTP.jl/issues/702
[703]: https://github.com/JuliaWeb/HTTP.jl/issues/703
[704]: https://github.com/JuliaWeb/HTTP.jl/issues/704
[706]: https://github.com/JuliaWeb/HTTP.jl/issues/706
[707]: https://github.com/JuliaWeb/HTTP.jl/issues/707
[713]: https://github.com/JuliaWeb/HTTP.jl/issues/713
[714]: https://github.com/JuliaWeb/HTTP.jl/issues/714
[717]: https://github.com/JuliaWeb/HTTP.jl/issues/717
[718]: https://github.com/JuliaWeb/HTTP.jl/issues/718
[723]: https://github.com/JuliaWeb/HTTP.jl/issues/723
[725]: https://github.com/JuliaWeb/HTTP.jl/issues/725
[727]: https://github.com/JuliaWeb/HTTP.jl/issues/727
[730]: https://github.com/JuliaWeb/HTTP.jl/issues/730
[734]: https://github.com/JuliaWeb/HTTP.jl/issues/734
[737]: https://github.com/JuliaWeb/HTTP.jl/issues/737
[740]: https://github.com/JuliaWeb/HTTP.jl/issues/740
[742]: https://github.com/JuliaWeb/HTTP.jl/issues/742
[745]: https://github.com/JuliaWeb/HTTP.jl/issues/745
[752]: https://github.com/JuliaWeb/HTTP.jl/issues/752
[753]: https://github.com/JuliaWeb/HTTP.jl/issues/753
[760]: https://github.com/JuliaWeb/HTTP.jl/issues/760
[761]: https://github.com/JuliaWeb/HTTP.jl/issues/761
[763]: https://github.com/JuliaWeb/HTTP.jl/issues/763
[764]: https://github.com/JuliaWeb/HTTP.jl/issues/764
[765]: https://github.com/JuliaWeb/HTTP.jl/issues/765
[766]: https://github.com/JuliaWeb/HTTP.jl/issues/766
[770]: https://github.com/JuliaWeb/HTTP.jl/issues/770
[774]: https://github.com/JuliaWeb/HTTP.jl/issues/774
[775]: https://github.com/JuliaWeb/HTTP.jl/issues/775
[778]: https://github.com/JuliaWeb/HTTP.jl/issues/778
[781]: https://github.com/JuliaWeb/HTTP.jl/issues/781
[783]: https://github.com/JuliaWeb/HTTP.jl/issues/783
[789]: https://github.com/JuliaWeb/HTTP.jl/issues/789
[817]: https://github.com/JuliaWeb/HTTP.jl/issues/817
[818]: https://github.com/JuliaWeb/HTTP.jl/issues/818
[820]: https://github.com/JuliaWeb/HTTP.jl/issues/820
[830]: https://github.com/JuliaWeb/HTTP.jl/issues/830
[831]: https://github.com/JuliaWeb/HTTP.jl/issues/831
[833]: https://github.com/JuliaWeb/HTTP.jl/issues/833
[836]: https://github.com/JuliaWeb/HTTP.jl/issues/836
[838]: https://github.com/JuliaWeb/HTTP.jl/issues/838
[843]: https://github.com/JuliaWeb/HTTP.jl/issues/843
[846]: https://github.com/JuliaWeb/HTTP.jl/issues/846
[854]: https://github.com/JuliaWeb/HTTP.jl/issues/854
[857]: https://github.com/JuliaWeb/HTTP.jl/issues/857
[858]: https://github.com/JuliaWeb/HTTP.jl/issues/858
[861]: https://github.com/JuliaWeb/HTTP.jl/issues/861
[864]: https://github.com/JuliaWeb/HTTP.jl/issues/864
[865]: https://github.com/JuliaWeb/HTTP.jl/issues/865
[866]: https://github.com/JuliaWeb/HTTP.jl/issues/866
[867]: https://github.com/JuliaWeb/HTTP.jl/issues/867
[871]: https://github.com/JuliaWeb/HTTP.jl/issues/871
[872]: https://github.com/JuliaWeb/HTTP.jl/issues/872
[875]: https://github.com/JuliaWeb/HTTP.jl/issues/875
[876]: https://github.com/JuliaWeb/HTTP.jl/issues/876
[880]: https://github.com/JuliaWeb/HTTP.jl/issues/880
[882]: https://github.com/JuliaWeb/HTTP.jl/issues/882
[883]: https://github.com/JuliaWeb/HTTP.jl/issues/883
[885]: https://github.com/JuliaWeb/HTTP.jl/issues/885
[886]: https://github.com/JuliaWeb/HTTP.jl/issues/886
[897]: https://github.com/JuliaWeb/HTTP.jl/issues/897
[901]: https://github.com/JuliaWeb/HTTP.jl/issues/901
[904]: https://github.com/JuliaWeb/HTTP.jl/issues/904
[905]: https://github.com/JuliaWeb/HTTP.jl/issues/905
[909]: https://github.com/JuliaWeb/HTTP.jl/issues/909
[910]: https://github.com/JuliaWeb/HTTP.jl/issues/910
[911]: https://github.com/JuliaWeb/HTTP.jl/issues/911
[912]: https://github.com/JuliaWeb/HTTP.jl/issues/912
[914]: https://github.com/JuliaWeb/HTTP.jl/issues/914
[918]: https://github.com/JuliaWeb/HTTP.jl/issues/918
[919]: https://github.com/JuliaWeb/HTTP.jl/issues/919
[925]: https://github.com/JuliaWeb/HTTP.jl/issues/925
[928]: https://github.com/JuliaWeb/HTTP.jl/issues/928
[929]: https://github.com/JuliaWeb/HTTP.jl/issues/929
[933]: https://github.com/JuliaWeb/HTTP.jl/issues/933
[934]: https://github.com/JuliaWeb/HTTP.jl/issues/934
[935]: https://github.com/JuliaWeb/HTTP.jl/issues/935
[940]: https://github.com/JuliaWeb/HTTP.jl/issues/940
[941]: https://github.com/JuliaWeb/HTTP.jl/issues/941
[942]: https://github.com/JuliaWeb/HTTP.jl/issues/942
[943]: https://github.com/JuliaWeb/HTTP.jl/issues/943
[946]: https://github.com/JuliaWeb/HTTP.jl/issues/946
[950]: https://github.com/JuliaWeb/HTTP.jl/issues/950
[955]: https://github.com/JuliaWeb/HTTP.jl/issues/955
[960]: https://github.com/JuliaWeb/HTTP.jl/issues/960
[963]: https://github.com/JuliaWeb/HTTP.jl/issues/963
[964]: https://github.com/JuliaWeb/HTTP.jl/issues/964
[967]: https://github.com/JuliaWeb/HTTP.jl/issues/967
[972]: https://github.com/JuliaWeb/HTTP.jl/issues/972
[974]: https://github.com/JuliaWeb/HTTP.jl/issues/974
[975]: https://github.com/JuliaWeb/HTTP.jl/issues/975
[976]: https://github.com/JuliaWeb/HTTP.jl/issues/976
[981]: https://github.com/JuliaWeb/HTTP.jl/issues/981
[982]: https://github.com/JuliaWeb/HTTP.jl/issues/982
[983]: https://github.com/JuliaWeb/HTTP.jl/issues/983
[984]: https://github.com/JuliaWeb/HTTP.jl/issues/984
[986]: https://github.com/JuliaWeb/HTTP.jl/issues/986
[990]: https://github.com/JuliaWeb/HTTP.jl/issues/990
[991]: https://github.com/JuliaWeb/HTTP.jl/issues/991
[992]: https://github.com/JuliaWeb/HTTP.jl/issues/992
[993]: https://github.com/JuliaWeb/HTTP.jl/issues/993
[994]: https://github.com/JuliaWeb/HTTP.jl/issues/994
[998]: https://github.com/JuliaWeb/HTTP.jl/issues/998
[999]: https://github.com/JuliaWeb/HTTP.jl/issues/999
[1012]: https://github.com/JuliaWeb/HTTP.jl/issues/1012
[1013]: https://github.com/JuliaWeb/HTTP.jl/issues/1013
[1016]: https://github.com/JuliaWeb/HTTP.jl/issues/1016
[1029]: https://github.com/JuliaWeb/HTTP.jl/issues/1029
[1034]: https://github.com/JuliaWeb/HTTP.jl/issues/1034
[1035]: https://github.com/JuliaWeb/HTTP.jl/issues/1035
[1039]: https://github.com/JuliaWeb/HTTP.jl/issues/1039
[1043]: https://github.com/JuliaWeb/HTTP.jl/issues/1043
[1044]: https://github.com/JuliaWeb/HTTP.jl/issues/1044
[1046]: https://github.com/JuliaWeb/HTTP.jl/issues/1046
[1048]: https://github.com/JuliaWeb/HTTP.jl/issues/1048
[1049]: https://github.com/JuliaWeb/HTTP.jl/issues/1049
[1053]: https://github.com/JuliaWeb/HTTP.jl/issues/1053
[1057]: https://github.com/JuliaWeb/HTTP.jl/issues/1057
[1065]: https://github.com/JuliaWeb/HTTP.jl/issues/1065
[1068]: https://github.com/JuliaWeb/HTTP.jl/issues/1068
[1073]: https://github.com/JuliaWeb/HTTP.jl/issues/1073
[1075]: https://github.com/JuliaWeb/HTTP.jl/issues/1075
[1077]: https://github.com/JuliaWeb/HTTP.jl/issues/1077
[1078]: https://github.com/JuliaWeb/HTTP.jl/issues/1078
[1083]: https://github.com/JuliaWeb/HTTP.jl/issues/1083
[1088]: https://github.com/JuliaWeb/HTTP.jl/issues/1088
[1092]: https://github.com/JuliaWeb/HTTP.jl/issues/1092
[1110]: https://github.com/JuliaWeb/HTTP.jl/issues/1110
[1117]: https://github.com/JuliaWeb/HTTP.jl/issues/1117
[1119]: https://github.com/JuliaWeb/HTTP.jl/issues/1119
[1126]: https://github.com/JuliaWeb/HTTP.jl/issues/1126
[1127]: https://github.com/JuliaWeb/HTTP.jl/issues/1127


DataFrames.jl v1.7.0 Release Notes

New functionalities

* Allow passing multiple values to add in `push!`, `pushfirst!`,
`append!`, and `prepend!`
([3372](https://github.com/JuliaData/DataFrames.jl/pull/3372))
* `rename` and `rename!` now allow to apply a function transforming
column names only to a subset of the columns specified by the `cols`
keyword argument
([3380](https://github.com/JuliaData/DataFrames.jl/pull/3380))
* `mapcols` and `mapcols!` now allow to apply a function transforming
columns only to a subset of the columns specified by the `cols`
keyword argument
([3386](https://github.com/JuliaData/DataFrames.jl/pull/3386))

Bug fixes

* Correctly throw an error if negative number of rows is passed
to `first` or `last`
([3402](https://github.com/JuliaData/DataFrames.jl/pull/3402))
* Always use the default thread pool for multithreaded operations,
instead of using the interactive thread pool when Julia was started
with `-tM,N` with N > 0
([3385](https://github.com/JuliaData/DataFrames.jl/pull/3385))
* Correctly return `Bool[]` in the `nonunique` function applied to a data frame
with a pulled column that has zero levels in the pool
([3393](https://github.com/JuliaData/DataFrames.jl/pull/3393))

DataFrames.jl v1.6.1 Release Notes

Bug fixes

* Fix error in specification of dependency on DataStructures.jl
([3359](https://github.com/JuliaData/DataFrames.jl/pull/3359))

Minor improvements

* Improved error messages in `only`, and `push!`, `append!` and related functions
([3356](https://github.com/JuliaData/DataFrames.jl/pull/3356),
[3357](https://github.com/JuliaData/DataFrames.jl/pull/3357))

DataFrames.jl v1.6 Release Notes

Breaking changes

* Objects inheriting from `Tables.AbstractRow` are now treated in the same way as
`DataFrameRow` by `select`/`transform`/`combine` functions.
In previous versions they were treated as a scalar, but this was
inconsistent with the intention of `Tables.AbstractRow` definition
([3348](https://github.com/JuliaData/DataFrames.jl/pull/3348))

New functionalities

* Add `Iterators.partition` support for `DataFrameRows`
([3299](https://github.com/JuliaData/DataFrames.jl/pull/3299))
* Add support for `renamecols` keyword argument in `crossjoin`
([3314](https://github.com/JuliaData/DataFrames.jl/pull/3314))
* `DataFrameRows` and `DataFrameColumns` now support
`nrow`, `ncol`, and `Tables.subset`
([3311](https://github.com/JuliaData/DataFrames.jl/pull/3311))
* `Not` allows passing multiple positional arguments that are
treated as if they were wrapped in `Cols` and does not throw an error
when a vector of duplicate indices is passed when doing column selection
([3302](https://github.com/JuliaData/DataFrames.jl/pull/3302))
* Added the kwarg `checkunique` to sorting related functions (`issorted`,
`sort`, `sort!` and `sortperm`) that throws an error when duplicate elements
make multiple sort orders valid
([3312](https://github.com/JuliaData/DataFrames.jl/pull/3312))
* `reduce` performing `vcat` on a collection of data frames
now accepts `init` keyword argument
([3310](https://github.com/JuliaData/DataFrames.jl/pull/3310))
* Allow to pass column names in `DataFrame` constructor that replace
the names generated by default
([3320](https://github.com/JuliaData/DataFrames.jl/pull/3320))
* `describe` now has `:sum` available as a descriptive statistic.
([3303](https://github.com/JuliaData/DataFrames.jl/pull/3303))

Bug fixes

* `deleteat!` correctly handles the situation when vector of rows to be dropped
from a data frame is its column or might alias with some of its columns
([3304](https://github.com/JuliaData/DataFrames.jl/pull/3304))

DataFrames.jl v1.5 Release Notes

New functionalities

* Add `Iterators.partition` support
([3212](https://github.com/JuliaData/DataFrames.jl/pull/3212))
* Add `allunique` and allow transformations in `cols` argument of `describe`
and `nonunique` when working with `SubDataFrame`
([3232](https://github.com/JuliaData/DataFrames.jl/pull/3232))
* Add support for `Tables.AbstractRow` for `push!`, `pushfirst!`, and `insert!`
([3245](https://github.com/JuliaData/DataFrames.jl/pull/3245))
* Add support for `operator` keyword argument in `Cols`
to take a set operation to apply to passed selectors (`union` by default)
([3224](https://github.com/JuliaData/DataFrames.jl/pull/3224))
* Allow to pass multiple predicates in `Cols` and mix them with
other selectors
([3279](https://github.com/JuliaData/DataFrames.jl/pull/3279))
* Improve support for setting group order in `groupby`
([3253](https://github.com/JuliaData/DataFrames.jl/pull/3253))
* Joining functions now support `order` keyword argument allowing the user
to specify the order of the rows in the produced table
([3233](https://github.com/JuliaData/DataFrames.jl/pull/3233))
* Add `keep` keyword argument to `nonunique`, `unique`, and `unique!`
allowing to specify which duplicate rows should be kept
([3260](https://github.com/JuliaData/DataFrames.jl/pull/3260))
* Add `haskey` and `get` methods to `DataFrameColumns`
to make it support dictionary interface more completely
([3282](https://github.com/JuliaData/DataFrames.jl/pull/3282))
* Allow passing `scalar` keyword argument in `flatten`
([3283](https://github.com/JuliaData/DataFrames.jl/pull/3283))

Bug fixes

* passing very many data frames to `innerjoin` and `outerjoin`
does not lead to stack overflow
([3233](https://github.com/JuliaData/DataFrames.jl/pull/3233))
* fixed incorrect handling of passing no conditions in `subset` and `subset!`
([3264](https://github.com/JuliaData/DataFrames.jl/pull/3264))
* fixed error in fast aggregation in `sum` and `mean` of columns only having
`missing` values
([3268](https://github.com/JuliaData/DataFrames.jl/pull/3268))
* fixed error in indexing of `SubDataFrame` that has no columns selected from
its parent
([3273](https://github.com/JuliaData/DataFrames.jl/pull/3273))

Performance improvements

* `dropmissing` creates new columns in a single pass if `disallowmissing=true`
([3256](https://github.com/JuliaData/DataFrames.jl/pull/3256))

DataFrames.jl v1.4.4 Patch Release Notes

Bug fixes

* Fix bug in `select` and `transform` with `copycols=false` on `SubDataFrame`
that incorrectly allowed passing transformations
([3231](https://github.com/JuliaData/DataFrames.jl/pull/3231))

DataFrames.jl v1.4.3 Patch Release Notes

Bug fixes

* Fix incorrect handling of column metadata in `insertcols!` and `insertcols`
([3220](https://github.com/JuliaData/DataFrames.jl/pull/3220))
* Correctly handle `GroupedDataFrame` with no groups in multi-column
operation specification syntax
([3122](https://github.com/JuliaData/DataFrames.jl/issues/3122))

Display improvements

* Improve printing of grouping keys when displaying `GroupedDataFrame`
([3213](https://github.com/JuliaData/DataFrames.jl/pull/3213))

Integration changes

* Support updates of metadata API introduced in DataAPI.jl 1.13.0
([3216](https://github.com/JuliaData/DataFrames.jl/pull/3216))

DataFrames.jl v1.4.2 Patch Release Notes

Bug fixes

* Make sure `flatten` works correctly on a data frame with zero rows
([3198](https://github.com/JuliaData/DataFrames.jl/issues/3198))

DataFrames.jl v1.4.1 Patch Release Notes

Bug fixes

* Make sure we always copy the indexing value when calling `getindex` on
`DataFrameRows` object
([3192](https://github.com/JuliaData/DataFrames.jl/issues/3192))

DataFrames.jl v1.4 Release Notes

Julia compatibility change

* DataFrames.jl 1.4 requires Julia 1.6
([3145](https://github.com/JuliaData/DataFrames.jl/pull/3145))

New functionalities

* `subset` and `subset!` now allow passing zero column selectors
([3025](https://github.com/JuliaData/DataFrames.jl/pull/3025))
* `subset` and `subset!` processing `GroupedDataFrame` allow using a scalar as
a subsetting condition (this will result in including/excluding a whole group);
for `AbstractDataFrame` processing only `AbstractVector` subsetting condition is
allowed as accepting scalars can lead to hard to catch bugs in users' code
([3032](https://github.com/JuliaData/DataFrames.jl/pull/3032))
* `permutedims` now supports a `strict` keyword argument that allows
for a more flexible handling of values stored in a column that will
become a new header
([3004](https://github.com/JuliaData/DataFrames.jl/issues/3004))
* `unstack` now allows passing a function in `combine` keyword argument;
this allows for a convenient creation of two dimensional pivot tables
([2998](https://github.com/JuliaData/DataFrames.jl/issues/2998),
[3185](https://github.com/JuliaData/DataFrames.jl/pull/3185))
* `filter` for `GroupedDataFrame` now accepts `ungroup` keyword argument
([3021](https://github.com/JuliaData/DataFrames.jl/issues/3021))
* Add special syntax for `eachindex`, `groupindices`, and `proprow`
to transformation mini-language
([3001](https://github.com/JuliaData/DataFrames.jl/pull/3001)).
* Add support for `reverse!`, `permute!`, `invpermute!`, `shuffle`,
and `shuffle!` functions. Improve functionality of `reverse`.
([3010](https://github.com/JuliaData/DataFrames.jl/pull/3010)).
* `first` and `last` for `GroupedDataFrame` now support passing number of elements to get
([3006](https://github.com/JuliaData/DataFrames.jl/issues/3006))
* Add `insertcols`, which is a version of `insertcols!` that creates a new data frame
([3020](https://github.com/JuliaData/DataFrames.jl/issues/3020))
* Add `fillcombinations` function that generates all combinations of
levels of selected columns of a data frame
([3012](https://github.com/JuliaData/DataFrames.jl/issues/3012))
* Guarantee that `permute!` and `invpermute!` throw on invalid input
([3035](https://github.com/JuliaData/DataFrames.jl/pull/3035))
* Add `allcombinations` function that returns a data frame created
from all combinations of the passed vectors
([3031](https://github.com/JuliaData/DataFrames.jl/pull/3031))
* Add `resize!`, `keepat!`, `pop!`, `popfirst!`, and `popat!`,
make `deleteat!` signature more precise
([3047](https://github.com/JuliaData/DataFrames.jl/pull/3047))
* Add `pushfirst!` and `insert!`
([3072](https://github.com/JuliaData/DataFrames.jl/pull/3072))
* New `threads` argument allows disabling multithreading in
`combine`, `select`, `select!`, `transform`, `transform!`, `subset` and `subset!`
([3030](https://github.com/JuliaData/DataFrames.jl/pull/3030))
* Add support for table-level and column-level metadata using
DataAPI.jl interface
([3055](https://github.com/JuliaData/DataFrames.jl/pull/3055))
* `completecases` and `nonunique` no longer throw an error when data frame
with no columns is passed
([3055](https://github.com/JuliaData/DataFrames.jl/pull/3055))
* `describe` now accepts two predefined arguments: `:nnonmissing` and `:nuniqueall`
([3146](https://github.com/JuliaData/DataFrames.jl/pull/3146))

Previously announced breaking changes

* On Julia 1.7 or newer broadcasting assignment
into an existing column of a data frame replaces it. Under Julia 1.6
or older it is an in place operation.
([3022](https://github.com/JuliaData/DataFrames.jl/pull/3022))

Deprecations

* `allowduplicates` keyword argument in `unstack` is deprecated,
`combine` keyword argument should be used instead
([3185](https://github.com/JuliaData/DataFrames.jl/pull/3185))

Internal changes

* `DataFrame` is now a `mutable struct` and has three new fields
`metadata`, `colmetadata`, and `allnotemetadata`;
this change makes `DataFrame` objects serialized under
earlier versions of DataFrames.jl incompatible with version 1.4
([3055](https://github.com/JuliaData/DataFrames.jl/pull/3055))

Bug fixes

* fix dispatch ambiguity in `rename` and `rename!` when only
source data frame is passed
([3055](https://github.com/JuliaData/DataFrames.jl/pull/3055))
* Make sure that `AsTable` accepts only valid argument
([3064](https://github.com/JuliaData/DataFrames.jl/pull/3064))
* Make sure we avoid aliasing when repeating the same column
in `select[!]` and `transform[!]` on `GroupedDataFrame`
([3070](https://github.com/JuliaData/DataFrames.jl/pull/3070))
* Make `vcat` correctly handle `cols` keyword argument if only
data frames having no columns are passed
([3081](https://github.com/JuliaData/DataFrames.jl/pull/3081))
* Make `subset` preserves group ordering when `ungroup=false` like `subset!` already does
([3094](https://github.com/JuliaData/DataFrames.jl/pull/3094))
* Fix incorrect behavior of `GroupDataFrame` indexing in corner cases
([3179](https://github.com/JuliaData/DataFrames.jl/pull/3179))
* Fix errors in `insertcols!` when no columns to add are passed
([3179](https://github.com/JuliaData/DataFrames.jl/pull/3179))
* Fix errors in `minimum` and `maximum` aggregates
when processing `GroupedDataFrame` with `combine` in corner cases
([3179](https://github.com/JuliaData/DataFrames.jl/pull/3179))

Performance

* Speed up `permute!` and `invpermute!` (and therefore sorting) 2x-8x
for large tables by using cycle notation
([3035](https://github.com/JuliaData/DataFrames.jl/pull/3035))
* Make one-dimensional multi-element indexing of `DataFrameRows` return
`DataFrameRows`
([3037](https://github.com/JuliaData/DataFrames.jl/pull/3037))
* Make `transform!` on `SubDataFrame` faster
([3070](https://github.com/JuliaData/DataFrames.jl/pull/3070))

Integration changes

* Support `Tables.subset` and move `ByRow` definition to Tables.jl
([3158](https://github.com/JuliaData/DataFrames.jl/pull/3158))

DataFrames.jl v1.3.6 Patch Release Notes

Bug fixes

* Fix overly restrictive type assertion in `filter` and `filter!`
([3155](https://github.com/JuliaData/DataFrames.jl/pull/3155))

DataFrames.jl v1.3.5 Patch Release Notes

Integration change

* Allow version 4 of Compat.jl

DataFrames.jl v1.3.4 Patch Release Notes

Bug fixes

* Fix handling of `variable_eltype` in `stack`
([3043](https://github.com/JuliaData/DataFrames.jl/issues/3043))

DataFrames.jl v1.3.3 Patch Release Notes

Bug fixes

* Fix handling of `matchmissing` keyword argument in joins
([3040](https://github.com/JuliaData/DataFrames.jl/issues/3040))

DataFrames.jl v1.3.2 Patch Release Notes

Bug fixes

* Make sure that `select!`/`transform!` and `select`/`transform`
(with `copycols=false`) do not produce aliases of the same source column
consistently (currently only `transform[!]` ensured it for an unwrapped
column renaming operation)
([2983](https://github.com/JuliaData/DataFrames.jl/issues/2983))
* Fix aliasing detection in `sort!` (now only identical columns passing `===`
test are considered aliases)
([2981](https://github.com/JuliaData/DataFrames.jl/issues/2981))
* Make sure `ByRow` calls wrapped function exactly once for each element
in all cases
([2982](https://github.com/JuliaData/DataFrames.jl/issues/2982))

DataFrames.jl v1.3.1 Patch Release Notes

Bug fixes

* Fix `getindex` that incorrectly allowed vectors of `Pair`s
([2970](https://github.com/JuliaData/DataFrames.jl/issues/2970))

DataFrames.jl v1.3 Release Notes

New functionalities

* Improve `sort` keyword argument in `groupby`
([2812](https://github.com/JuliaData/DataFrames.jl/pull/2812)).

In the `groupby` function the `sort` keyword argument now allows three values:
- `nothing` (the default) leaves the order of groups undefined and allows
`groupby` to pick the fastest available grouping algorithm;
- `true` sorts groups by key columns;
- `false` creates groups in the order of their appearance in the parent data
frame;

In previous versions, the `sort` keyword argument allowed only `Bool` values
and `false` (which was the default) corresponded to the new
behavior when `nothing` is passed. Therefore only the user visible change
affecting existing code is when `sort=false` is passed explicitly.
The order of groups was undefined in that case, but in practice
groups were already created in their order of appearance, *except*
when grouping columns implemented the `DataAPI.refpool` API
(notably `PooledArray` and `CategoricalArray`) or when they contained only
integers in a small range.
([2812](https://github.com/JuliaData/DataFrames.jl/pull/2812))
* the `unstack` function receives new keyword argument `fill`
(with `missing` default) that is used to fill combinations of not encountered
rows and columns. This feature allows to distinguish between missings in
value column and just missing row/column combinations and to easily fill
with zeros non existing combinations in case of counting.
([2828](https://github.com/JuliaData/DataFrames.jl/pull/2828))

* Allow adding new columns to a `SubDataFrame` created with `:` as column selector
([2794](https://github.com/JuliaData/DataFrames.jl/pull/2794)).

If `sdf` is a `SubDataFrame` created with `:` as a column selector then
`insertcols!`, `setindex!`, and broadcasted assignment allow for creation
of new columns, automatically filling filtered-out rows with `missing` values;

* Allow replacing existing columns in a `SubDataFrame` with `!` as row selector
in assignment and broadcasted assignment
([2794](https://github.com/JuliaData/DataFrames.jl/pull/2794)).

Assignment to existing columns allocates a new column.
Values already stored in filtered-out rows are copied.

* Allow `SubDataFrame` to be passed as an argument to `select!` and `transform!`
(also on `GroupedDataFrame` created from a `SubDataFrame`)
([2794](https://github.com/JuliaData/DataFrames.jl/pull/2794)).

Assignment to existing columns allocates a new column.
Values already stored in filtered-out rows are copied.
In case of creation of new columns, filtered-out rows are automatically
filled with `missing` values.
If `SubDataFrame` was not created with `:` as column selector the resulting operation
must produce the same column names as stored in the source `SubDataFrame` or an error is thrown.

* `Tables.materializer` when passed the following types or their subtypes:
`AbstractDataFrame`, `DataFrameRows`, `DataFrameColumns` returns `DataFrame`.
([2839](https://github.com/JuliaData/DataFrames.jl/pull/2839))
* the `insertcols!` function receives new keyword argument `after`
(with `false` default) that specifies if columns should be inserted after
or before `col`.
([2829](https://github.com/JuliaData/DataFrames.jl/pull/2829))
* Added support for `deleteat!`
([2854](https://github.com/JuliaData/DataFrames.jl/issues/2854))
* `leftjoin!` performing a left join of two data frame objects by updating the
left data frame with the joined columns from right data frame.
([2843](https://github.com/JuliaData/DataFrames.jl/pull/2843))
* the `DataFrame` constructor when column names are passed to it as a second
argument now determines if a passed vector of column names is valid based on
its contents and not element type
([2859](https://github.com/JuliaData/DataFrames.jl/pull/2859))
* the `DataFrame` constructor when matrix is passed to it as a first
argument now allows `copycols` keyword argument
([2859](https://github.com/JuliaData/DataFrames.jl/pull/2859))
* `Cols` now accepts a predicate accepting column names as strings.
([2881](https://github.com/JuliaData/DataFrames.jl/pull/2881))
* In `source => transformation => destination` transformation specification
minilanguage now `destination` can be also a `Function` generating
target column names and taking column names specified by `source`
as an argument.
([2897](https://github.com/JuliaData/DataFrames.jl/pull/2897))
* `subset` and `subset!` now allow passing multiple column selectors and
vectors or matrices of `Pair`s as specifications of selection conditions
([2926](https://github.com/JuliaData/DataFrames.jl/pull/2926))
* When using broadcasting in `source .=> transformation .=> destination`
transformation specification minilanguage now `All`, `Cols`, `Between`, and
`Not` selectors when used as `source` or `destination` are properly expanded
to selected column names within the call data frame scope.
([2918](https://github.com/JuliaData/DataFrames.jl/pull/2918))
* `describe` now accepts `:detailed` as the `stats` argument
to compute standard deviation and quartiles
in addition to statistics that are reported by default.
([2459](https://github.com/JuliaData/DataFrames.jl/pull/2459))
* `sort!` now supports general `AbstractDataFrame`
([2946](https://github.com/JuliaData/DataFrames.jl/pull/2946))
* `filter` now supports `view` keyword argument
([2951](https://github.com/JuliaData/DataFrames.jl/pull/2951))

Bug fixes

* fix a problem with `unstack` on empty data frame
([2842](https://github.com/JuliaData/DataFrames.jl/issues/2842))
* fix a problem with not specialized `Pair` arguments passed as transformations
([2889](https://github.com/JuliaData/DataFrames.jl/issues/2889))
* sorting related functions now more carefully check passed arguments for
correctness. Now all keyword arguments are correctly checked to be either
scalars of vectors of scalars.
([2946](https://github.com/JuliaData/DataFrames.jl/pull/2946))

Performance improvements

* for selected common transformation specifications like e.g.
`AsTable(...) => ByRow(sum)` use a custom implementations that
lead to lower compilation latency and faster computation
([2869](https://github.com/JuliaData/DataFrames.jl/pull/2869)),
([2919](https://github.com/JuliaData/DataFrames.jl/pull/2919))

Deprecations

* `delete!` is deprecated in favor of `deleteat!`
([2854](https://github.com/JuliaData/DataFrames.jl/issues/2854))
* In `sort`, `sort!`, `issorted` and `sortperm` it is now documented
that the result of passing an empty column selector uses lexicographic
ordering of all columns, but this behavior is deprecated.
([2941](https://github.com/JuliaData/DataFrames.jl/issues/2941))

Planned changes

* In DataFrames.jl 1.4 release on Julia 1.7 or newer broadcasting assignment
into an existing column of a data frame will replace it. Under Julia 1.6
or older it will be an in place operation.
([2937](https://github.com/JuliaData/DataFrames.jl/pull/2937)

DataFrames.jl v1.2.2 Patch Release Notes

Bug fixes

* fix a bug in `crossjoin` if the first argument is `SubDataFrame` and
`makeunique=true`
([2826](https://github.com/JuliaData/DataFrames.jl/issues/2826))

DataFrames.jl v1.2.1 Patch Release Notes

Bug fixes

* Add workaround for `deleteat!` bug in Julia Base in `delete!` function
([2820](https://github.com/JuliaData/DataFrames.jl/issues/2820))

DataFrames.jl v1.2 Release Notes

New functionalities

* add option `matchmissing=:notequal` in joins;
in `leftjoin`, `semijoin` and `antijoin` missings are dropped in right data frame,
but preserved in left; in `rightjoin` missings are dropped in left data frame,
but preserved in right; in `innerjoin` missings are dropped in both data frames;
in `outerjoin` this value of keyword argument is not supported
([2724](https://github.com/JuliaData/DataFrames.jl/pull/2724))
* correctly handle selectors of the form `:col => AsTable` and `:col => cols`
by expanding a single column into multiple columns
([2780](https://github.com/JuliaData/DataFrames.jl/pull/2780))
* if `subset!` is passed a `GroupedDataFrame` the grouping in the passed object
gets updated to reflect rows removed from the parent data frame
([2809](https://github.com/JuliaData/DataFrames.jl/pull/2809))

Bug fixes

* fix bug in how `groupby` handles grouping of float columns;
now `-0.0` is treated as *not integer* when deciding on which
grouping algorithm should be used
([2791](https://github.com/JuliaData/DataFrames.jl/pull/2791))
* fix bug in how `issorted` handles custom orderings and improve performance
of sorting when complex custom orderings are passed
([2746](https://github.com/JuliaData/DataFrames.jl/pull/2746))
* fix bug in `combine`, `select`, `select!`, `transform`, and `transform!`
that incorrectly disallowed matrices of `Pair`s in `GroupedDataFrame` processing
([2782](https://github.com/JuliaData/DataFrames.jl/pull/2782))
* fix location of summary in `text/html` output
([2801](https://github.com/JuliaData/DataFrames.jl/pull/2801))

Performance improvements

* `SubDataFrame`, `filter!`, `unique!`, `getindex`, `delete!`, `leftjoin`,
`rightjoin`, and `outerjoin` are now more efficient if rows selected
in internal operations form a continuous block
([2727](https://github.com/JuliaData/DataFrames.jl/pull/2727),
[2769](https://github.com/JuliaData/DataFrames.jl/pull/2769))

Deprecated

* `hcat` of a data frame with a vector is now deprecated to allow consistent
handling of horizontal concatenation of data frame with Tables.jl tables
in the future
([2777](https://github.com/JuliaData/DataFrames.jl/pull/2777))

Other changes

* `text/plain` rendering of columns containing complex numbers is now improved
([2756](https://github.com/JuliaData/DataFrames.jl/pull/2756))
* in `text/html` display of a data frame show full type information when
hovering over the shortened type with a mouse
([2774](https://github.com/JuliaData/DataFrames.jl/pull/2774))

DataFrames.jl v1.1.1 Patch Release Notes

Performance improvements

* fix performance issue when aggregation function produces multiple rows
in split-apply-combine
([2749](https://github.com/JuliaData/DataFrames.jl/pull/2749))
* `completecases` is now optimized and only processes columns that
can contain missing values; additionally it is now type stable and
always returns a `BitVector`
([2726](https://github.com/JuliaData/DataFrames.jl/pull/2726))
* fix performance bottleneck when displaying wide tables
([2750](https://github.com/JuliaData/DataFrames.jl/pull/2750))

DataFrames.jl v1.1 Release Notes

Functionality changes

* make sure `subset` checks if the passed condition function
returns a vector of values (in the 1.0 release also returning scalar `true`,
`false`, or `missing` was allowed which was unintended and error prone)
([2744](https://github.com/JuliaData/DataFrames.jl/pull/2744))


DataFrames.jl v1.0.2 Patch Release Notes

Performance improvements

* fix of performance issue of `groupby` when using multi-threading
([2736](https://github.com/JuliaData/DataFrames.jl/pull/2736))
* fix of performance issue of `groupby` when using `PooledVector`
([2733](https://github.com/JuliaData/DataFrames.jl/pull/2733))

DataFrames.jl v1.0 Release Notes

Breaking changes

* No breaking changes are planned for v1.0 release

Bug fixes

* DataFrames.jl now checks that passed columns are 1-based as this is a current
design assumption ([2594](https://github.com/JuliaData/DataFrames.jl/pull/2594))
* `mapcols!` makes sure not to create columns being `AbstractRange` consistently
with other methods that add columns to a `DataFrame`
([2594](https://github.com/JuliaData/DataFrames.jl/pull/2594))
* `transform` and `transform!` always copy columns when column renaming transformation
is passed. If similar issues are identified after 1.0 release (i.e. that a
copy of data is not made in scenarios where it normally should be made these
will be considered bugs and fixed as non-breaking changes)
([2721](https://github.com/JuliaData/DataFrames.jl/pull/2721))

New functionalities

* `firstindex`, `lastindex`, `size`, `ndims`, and `axes` are now consistently defined
and documented in the manual for `AbstractDataFrame`, `DataFrameRow`,
`DataFrameRows`, `DataFrameColumns`, `GroupedDataFrame`, `GroupKeys`, and `GroupKey`
([2573](https://github.com/JuliaData/DataFrames.jl/pull/2573))
* add `subset` and `subset!` functions that allow to subset rows
([2496](https://github.com/JuliaData/DataFrames.jl/pull/2496))
* `names` now allows passing a predicate as a column selector
([2417](https://github.com/JuliaData/DataFrames.jl/pull/2417))
* `vcat` now allows a `source` keyword argument that specifies the
additional column to be added in the last position in the resulting data frame
that will identify the source data frame.
([2649](https://github.com/JuliaData/DataFrames.jl/pull/2649))
* `GroupKey` and `DataFrameRow` are consistently behaving like `NamedTuple`
in comparisons and they now implement: `hash`, `==`, `isequal`, `<`, `isless`
([2669](https://github.com/JuliaData/DataFrames.jl/pull/2669)])
* since Julia 1.7 using broadcasting assignment on a `DataFrame` column
selected as a property (e.g. `df.col .= 1`) is allowed when column does not
exist and it allocates a fresh column
([2655](https://github.com/JuliaData/DataFrames.jl/pull/2655))
* `delete!` now correctly handles the case when columns of a data frame are aliased
([2690](https://github.com/JuliaData/DataFrames.jl/pull/2690))

Deprecated

* in `leftjoin`, `rightjoin`, and `outerjoin` the `indicator` keyword argument
is deprecated in favor of `source` keyword argument; `indicator` will be removed
in 2.0 release ([2649](https://github.com/JuliaData/DataFrames.jl/pull/2649))
* Using broadcasting assignment on a `SubDataFrames` column selected as a property
(e.g. `sdf.col .= 1`) is deprecated; it will be disallowed in the future.
([2655](https://github.com/JuliaData/DataFrames.jl/pull/2655))
* Broadcasting assignment to an existing column of a `DataFrame`
selected as a property (e.g. `df.col .= 1`) being an in-place
operation is deprecated. It will allocate a fresh column in the future
([2655](https://github.com/JuliaData/DataFrames.jl/pull/2655))
* all deprecations present in 0.22 release now throw an error
([2554](https://github.com/JuliaData/DataFrames.jl/pull/2554));
in particular `convert` methods, `map` on `GroupedDataFrame`
that were deprecated in 0.22.6 release now throw an error
([2679](https://github.com/JuliaData/DataFrames.jl/pull/2679))

Other relevant changes

* `innerjoin`, `leftjoin`, `rightjoin`, `outerjoin`, `semijoin`, and `antijoin`
are now much faster and check if passed data frames are sorted by the `on`
columns and take into account if shorter data frame that is joined has unique
values in `on` columns. These aspects of input data frames might affect the
order of rows produced in the output
([2612](https://github.com/JuliaData/DataFrames.jl/pull/2612),
[2622](https://github.com/JuliaData/DataFrames.jl/pull/2622))
* `DataFrame` constructor, `copy`, `getindex`, `select`, `select!`, `transform`,
`transform!`, `combine`, `sort`, and join functions now use multiple threads
in selected operations
([2647](https://github.com/JuliaData/DataFrames.jl/pull/2647),
[2588](https://github.com/JuliaData/DataFrames.jl/pull/2588),
[2574](https://github.com/JuliaData/DataFrames.jl/pull/2574),
[2664](https://github.com/JuliaData/DataFrames.jl/pull/2664))

DataFrames.jl v0.22.7 Release notes

* `convert` methods from `AbstractDataFrame`, `DataFrameRow` and `GroupKey`
to `Array`, `Matrix`, `Vector` and `Tuple`, as well as from `AbstractDict` to
`DataFrame`, are now deprecated: use corresponding
constructors instead. The only conversions that are
retained are `convert(::Type{NamedTuple}, dfr::DataFrameRow)`,
`convert(::Type{NamedTuple}, key::GroupKey)`, and
`convert(::Type{DataFrame}, sdf::SubDataFrame)`; the deprecated methods will be
removed in 1.0 release
* as a bug fix `eltype` of vector returned by `eachrow` is now `DataFrameRow`
([2662](https://github.com/JuliaData/DataFrames.jl/pull/2662))
* applying `map` to `GroupedDataFrame` is now deprecated. It will
be an error in 1.0 release.
([2662](https://github.com/JuliaData/DataFrames.jl/pull/2662))
* `copycols` keyword argument is now respected when building a `DataFrame` from
`Tables.CopiedColumns`
([2656](https://github.com/JuliaData/DataFrames.jl/pull/2656))

DataFrames.jl v0.22 Release Notes

Breaking changes

* the rules for transformations passed to `select`/`select!`, `transform`/`transform!`,
and `combine` have been made more flexible; in particular now it is allowed to
return multiple columns from a transformation function
([2461](https://github.com/JuliaData/DataFrames.jl/pull/2461) and
[2481](https://github.com/JuliaData/DataFrames.jl/pull/2481))
* CategoricalArrays.jl is no longer reexported: call `using CategoricalArrays`
to use it [2404]((https://github.com/JuliaData/DataFrames.jl/pull/2404)).
In the same vein, the `categorical` and `categorical!` functions
have been deprecated in favor of
`transform(df, cols .=> categorical .=> cols)` and similar syntaxes
[2394]((https://github.com/JuliaData/DataFrames.jl/pull/2394)).
`stack` now creates a `PooledVector{String}` variable column rather than
a `CategoricalVector{String}` column by default;
pass `variable_eltype=CategoricalValue{String}` to get the previous behavior
([2391](https://github.com/JuliaData/DataFrames.jl/pull/2391))
* `isless` for `DataFrameRow`s now checks column names
([2292](https://github.com/JuliaData/DataFrames.jl/pull/2292))
* `DataFrameColumns` is now not a subtype of `AbstractVector`
([2291](https://github.com/JuliaData/DataFrames.jl/pull/2291))
* `nunique` is not reported now by `describe` by default
([2339](https://github.com/JuliaData/DataFrames.jl/pull/2339))
* stop reordering columns of the parent in `transform` and `transform!`;
always generate columns that were specified to be computed even for
`GroupedDataFrame` with zero rows
([2324](https://github.com/JuliaData/DataFrames.jl/pull/2324))
* improve the rule for automatically generated column names in
`combine`/`select(!)`/`transform(!)` with composed functions
([2274](https://github.com/JuliaData/DataFrames.jl/pull/2274))
* `:nmissing` in `describe` now produces `0` if the column does not allow
missing values; earlier `nothing` was produced in this case
([2360](https://github.com/JuliaData/DataFrames.jl/pull/2360))
* fast aggregation functions in for `GroupedDataFrame` now correctly
choose the fast path only when it is safe; this resolves inconsistencies
with what the same functions not using fast path produce
([2357](https://github.com/JuliaData/DataFrames.jl/pull/2357))
* joins now return `PooledVector` not `CategoricalVector` in indicator column
([2505](https://github.com/JuliaData/DataFrames.jl/pull/2505))
* `GroupKeys` now supports `in` for `GroupKey`, `Tuple`, `NamedTuple` and dictionaries
([2392](https://github.com/JuliaData/DataFrames.jl/pull/2392))
* in `describe` the specification of custom aggregation is now `function => name`;
old `name => function` order is now deprecated
([2401](https://github.com/JuliaData/DataFrames.jl/pull/2401))
* in joins passing `NaN` or real or imaginary `-0.0` in `on` column now throws an
error; passing `missing` throws an error unless `matchmissing=:equal` keyword argument
is passed ([2504](https://github.com/JuliaData/DataFrames.jl/pull/2504))
* `unstack` now produces row and column keys in the order of their first appearance
and has two new keyword arguments `allowmissing` and `allowduplicates`
([2494](https://github.com/JuliaData/DataFrames.jl/pull/2494))
* [PrettyTables.jl](https://github.com/ronisbr/PrettyTables.jl) is now the
default back-end to print DataFrames to text/plain; the print option
`splitcols` was removed and the output format was changed
([2429](https://github.com/JuliaData/DataFrames.jl/pull/2429))

New functionalities

* add `filter` to `GroupedDataFrame` ([2279](https://github.com/JuliaData/DataFrames.jl/pull/2279))
* add `empty` and `empty!` function for `DataFrame` that remove all rows from it,
but keep columns ([2262](https://github.com/JuliaData/DataFrames.jl/pull/2262))
* make `indicator` keyword argument in joins allow passing a string
([2284](https://github.com/JuliaData/DataFrames.jl/pull/2284),
[2296](https://github.com/JuliaData/DataFrames.jl/pull/2296))
* add new functions to `GroupKey` API to make it more consistent with `DataFrameRow`
([2308](https://github.com/JuliaData/DataFrames.jl/pull/2308))
* allow column renaming in joins
([2313](https://github.com/JuliaData/DataFrames.jl/pull/2313) and
([2398](https://github.com/JuliaData/DataFrames.jl/pull/2398))
* add `rownumber` to `DataFrameRow` ([2356](https://github.com/JuliaData/DataFrames.jl/pull/2356))
* allow passing column name to specify the position where a new columns should be
inserted in `insertcols!` ([2365](https://github.com/JuliaData/DataFrames.jl/pull/2365))
* allow `GroupedDataFrame`s to be indexed using a dictionary, which can use `Symbol` or string keys and
are not dependent on the order of keys. ([2281](https://github.com/JuliaData/DataFrames.jl/pull/2281))
* add `isapprox` method to check for approximate equality between two dataframes
([2373](https://github.com/JuliaData/DataFrames.jl/pull/2373))
* add `columnindex` for `DataFrameRow`
([2380](https://github.com/JuliaData/DataFrames.jl/pull/2380))
* `names` now accepts `Type` as a column selector
([2400](https://github.com/JuliaData/DataFrames.jl/pull/2400))
* `select`, `select!`, `transform`, `transform!` and `combine` now allow `renamecols`
keyword argument that makes it possible to avoid adding transformation function name
as a suffix in automatically generated column names
([2397](https://github.com/JuliaData/DataFrames.jl/pull/2397))
* `filter`, `sort`, `dropmissing`, and `unique` now support a `view` keyword argument
which if set to `true` makes them return a `SubDataFrame` view into the passed
data frame.
* add `only` method for `AbstractDataFrame` ([2449](https://github.com/JuliaData/DataFrames.jl/pull/2449))
* passing empty sets of columns in `filter`/`filter!` and in `select`/`transform`/`combine`
with `ByRow` is now accepted ([2476](https://github.com/JuliaData/DataFrames.jl/pull/2476))
* add `permutedims` method for `AbstractDataFrame` ([2447](https://github.com/JuliaData/DataFrames.jl/pull/2447))
* add support for `Cols` from DataAPI.jl ([2495](https://github.com/JuliaData/DataFrames.jl/pull/2495))
* add `reverse` function for `AbstractDataFrame` that reverses the rows
([2944](https://github.com/JuliaData/DataFrames.jl/pull/2944))

Deprecated

* `DataFrame!` is now deprecated ([2338](https://github.com/JuliaData/DataFrames.jl/pull/2338))
* several in-standard `DataFrame` constructors are now deprecated
([2464](https://github.com/JuliaData/DataFrames.jl/pull/2464))
* all old deprecations now throw an error
([2350](https://github.com/JuliaData/DataFrames.jl/pull/2350))

Dependency changes

* Tables.jl version 1.2 is now required.
* DataAPI.jl version 1.4 is now required. It implies that `All(args...)` is
deprecated and `Cols(args...)` is recommended instead. `All()` is still supported.

Other relevant changes

* Documentation is now available also in *Dark* mode
([2315](https://github.com/JuliaData/DataFrames.jl/pull/2315))
* add rich display support for Markdown cell entries in HTML and LaTeX
([2346](https://github.com/JuliaData/DataFrames.jl/pull/2346))
* limit the maximal display width the output can use in `text/plain` before
being truncated (in the `textwidth` sense, excluding `…`) to `32` per column
by default and fix a corner case when no columns are printed in situations when
they are too wide ([2403](https://github.com/JuliaData/DataFrames.jl/pull/2403))
* Common methods are now precompiled to improve responsiveness the first time a method
is called in a Julia session. Precompilation takes up to 30 seconds
after installing the package
([2456](https://github.com/JuliaData/DataFrames.jl/pull/2456)).

1.10

=========================

New language features
---------------------

* JuliaSyntax.jl is now used as the default parser, providing better diagnostics and faster
parsing. Set environment variable `JULIA_USE_FLISP_PARSER` to `1` to switch back to the old
parser if necessary (and if you find this necessary, please file an issue) ([46372]).
* `⥺` (U+297A, `\leftarrowsubset`) and `⥷` (U+2977, `\leftarrowless`) may now be used as
binary operators with arrow precedence ([45962]).

Language changes
----------------

* When a task forks a child, the parent task's task-local RNG (random number generator) is no longer affected. The seeding of child based on the parent task also takes a more disciplined approach to collision resistance, using a design based on the SplitMix and DotMix splittable RNG schemes ([49110]).
* A new more-specific rule for methods resolves ambiguities containing Union{} in favor of
the method defined explicitly to handle the Union{} argument. This makes it possible to
define methods to explicitly handle Union{} without the ambiguities that commonly would
result previously. This also lets the runtime optimize certain method lookups in a way
that significantly improves load and inference times for heavily overloaded methods that
dispatch on Types (such as traits and constructors).
* The "h bar" `ℏ` (`\hslash` U+210F) character is now treated as equivalent to `ħ` (`\hbar` U+0127).
* The `simd` macro now has more limited and clearer semantics: it only enables reordering and contraction
of floating-point operations, instead of turning on all "fastmath" optimizations.
If you observe performance regressions due to this change, you can recover previous behavior with `fastmath simd`,
if you are OK with all the optimizations enabled by the `fastmath` macro ([49405]).
* When a method with keyword arguments is displayed in the stack trace view, the textual
representation of the keyword arguments' type is simplified using the new
`Kwargs{key1::Type1, ...}` macro syntax ([49959]).

Compiler/Runtime improvements
-----------------------------

* Updated GC heuristics to count allocated pages instead of object sizes ([50144]). This should help
some programs that consumed excessive memory before.
* The mark phase of the garbage collector is now multi-threaded ([48600]).
* [JITLink](https://llvm.org/docs/JITLink.html) is enabled by default on Linux aarch64 when Julia is linked to LLVM 15 or later versions ([#49745]).
This should resolve many segmentation faults previously observed on this platform.
* The precompilation process now uses pidfile locks and orchestrates multiple julia processes to only have one process
spend effort precompiling while the others wait. Previously all would do the work and race to overwrite the cache files.
([49052])

Command-line option changes
---------------------------

* New option `--gcthreads` to set how many threads will be used by the garbage collector ([48600]).
The default is `N/2` where `N` is the number of worker threads (`--threads`) used by Julia.

Build system changes
--------------------

* SparseArrays and SuiteSparse are no longer included in the default system image, so the core
language no longer contains GPL libraries. However, these libraries are still included
alongside the language in the standard binary distribution ([44247], [48979], [49266]).

New library functions
---------------------

* `tanpi` is now defined. It computes tan(π*x) more accurately than `tan(pi*x)` ([48575]).
* `fourthroot(x)` is now defined in `Base.Math` and can be used to compute the fourth root of `x`.
It can also be accessed using the unicode character `∜`, which can be typed by `\fourthroot<tab>` ([48899]).
* `Libc.memmove`, `Libc.memset`, and `Libc.memcpy` are now defined, whose functionality matches that of their respective C calls.
* `Base.isprecompiled(pkg::PkgId)` has been added, to identify whether a package has already been precompiled ([50218]).

New library features
--------------------

* `binomial(x, k)` now supports non-integer `x` ([48124]).
* A `CartesianIndex` is now treated as a "scalar" for broadcasting ([47044]).
* `printstyled` now supports italic output ([45164]).
* `parent` and `parentindices` support `SubString`s.
* `replace(string, pattern...)` now supports an optional `IO` argument to
write the output to a stream rather than returning a string ([48625]).
* `startswith` now supports seekable `IO` streams ([43055]).

Standard library changes
------------------------

* The `initialized=true` keyword assignment for `sortperm!` and `partialsortperm!`
is now a no-op ([47979]). It previously exposed unsafe behavior ([47977]).
* Printing integral `Rational`s will skip the denominator in `Rational`-typed IO context (e.g. in arrays) ([45396]).

Package Manager

* `Pkg.precompile` now accepts `timing` as a keyword argument which displays per package timing information for precompilation (e.g. `Pkg.precompile(timing=true)`).

LinearAlgebra

* `AbstractQ` no longer subtypes `AbstractMatrix`. Moreover, `adjoint(Q::AbstractQ)`
no longer wraps `Q` in an `Adjoint` type, but instead in an `AdjointQ`, that itself
subtypes `AbstractQ`. This change accounts for the fact that typically `AbstractQ`
instances behave like function-based, matrix-backed linear operators, and hence don't
allow for efficient indexing. Also, many `AbstractQ` types can act on vectors/matrices
of different size, acting like a matrix with context-dependent size. With this change,
`AbstractQ` has a well-defined API that is described in detail in the
[Julia documentation](https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#man-linalg-abstractq)
([46196]).
* Adjoints and transposes of `Factorization` objects are no longer wrapped in `Adjoint`
and `Transpose` wrappers, respectively. Instead, they are wrapped in
`AdjointFactorization` and `TransposeFactorization` types, which themselves subtype
`Factorization` ([46874]).
* New functions `hermitianpart` and `hermitianpart!` for extracting the Hermitian
(real symmetric) part of a matrix ([31836]).
* The `norm` of the adjoint or transpose of an `AbstractMatrix` now returns the norm of the
parent matrix by default, matching the current behaviour for `AbstractVector`s ([49020]).
* `eigen(A, B)` and `eigvals(A, B)`, where one of `A` or `B` is symmetric or Hermitian,
are now fully supported ([49533]).
* `eigvals/eigen(A, cholesky(B))` now computes the generalized eigenvalues (`eigen`: and eigenvectors)
of `A` and `B` via Cholesky decomposition for positive definite `B`. Note: The second argument is
the output of `cholesky`.

Printf

* Format specifiers now support dynamic width and precision, e.g. `%*s` and `%*.*g` ([40105]).

REPL

* When stack traces are printed, the printed depth of types in function signatures will be limited
to avoid overly verbose output ([49795]).

Test

* The `test_broken` macro (or `test` with `broken=true`) now complains if the test expression returns a
non-boolean value in the same way as a non-broken test ([47804]).
* When a call to `test` fails or errors inside a function, a larger stacktrace is now printed such that the location of the test within a `testset` can be retrieved ([49451]).

InteractiveUtils

* `code_native` and `code_native` now default to intel syntax instead of AT&T.
* `time_imports` now shows the timing of any module `__init__()`s that are run ([49529]).

Deprecated or removed
---------------------

* The `pure` macro is now deprecated. Use `Base.assume_effects :foldable` instead ([48682]).

<!--- generated by NEWS-update.jl: -->
[31836]: https://github.com/JuliaLang/julia/issues/31836
[40105]: https://github.com/JuliaLang/julia/issues/40105
[43055]: https://github.com/JuliaLang/julia/issues/43055
[44247]: https://github.com/JuliaLang/julia/issues/44247
[45164]: https://github.com/JuliaLang/julia/issues/45164
[45396]: https://github.com/JuliaLang/julia/issues/45396
[45962]: https://github.com/JuliaLang/julia/issues/45962
[46196]: https://github.com/JuliaLang/julia/issues/46196
[46372]: https://github.com/JuliaLang/julia/issues/46372
[46874]: https://github.com/JuliaLang/julia/issues/46874
[47044]: https://github.com/JuliaLang/julia/issues/47044
[47804]: https://github.com/JuliaLang/julia/issues/47804
[47977]: https://github.com/JuliaLang/julia/issues/47977
[47979]: https://github.com/JuliaLang/julia/issues/47979
[48124]: https://github.com/JuliaLang/julia/issues/48124
[48575]: https://github.com/JuliaLang/julia/issues/48575
[48600]: https://github.com/JuliaLang/julia/issues/48600
[48625]: https://github.com/JuliaLang/julia/issues/48625
[48682]: https://github.com/JuliaLang/julia/issues/48682
[48899]: https://github.com/JuliaLang/julia/issues/48899
[48979]: https://github.com/JuliaLang/julia/issues/48979
[49020]: https://github.com/JuliaLang/julia/issues/49020
[49110]: https://github.com/JuliaLang/julia/issues/49110
[49266]: https://github.com/JuliaLang/julia/issues/49266
[49405]: https://github.com/JuliaLang/julia/issues/49405
[49451]: https://github.com/JuliaLang/julia/issues/49451
[49529]: https://github.com/JuliaLang/julia/issues/49529
[49533]: https://github.com/JuliaLang/julia/issues/49533
[49745]: https://github.com/JuliaLang/julia/issues/49745
[49795]: https://github.com/JuliaLang/julia/issues/49795
[49959]: https://github.com/JuliaLang/julia/issues/49959
[50144]: https://github.com/JuliaLang/julia/issues/50144
[50218]: https://github.com/JuliaLang/julia/issues/50218

1.10.0

1.9.16

1.9.15

Page 1 of 27

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.