Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
244 commits
Select commit Hold shift + click to select a range
9f917c3
[cppyy] Use `PyBuffer_Release` directly
guitargeek Mar 21, 2026
170ae7b
[cppyy] Add std::span converter with Python buffer support
guitargeek Mar 20, 2026
c909dfb
[RF] Don't re-expand recursive coefs in RooAddPdf::compileForNormSet
guitargeek Mar 21, 2026
6fbd172
[x11] change management of window handles
linev Mar 10, 2026
f55358d
[x11] introduce new methods in TVirtualX interface
linev Mar 11, 2026
0d9e692
[tgx11] provide independent list of GC objects per window
linev Mar 11, 2026
8e253d1
[tgx11] move XWindow_t declaration to source file
linev Mar 11, 2026
641319a
[tgx11] remove unused RemovePixmap/ClearPixmap methods
linev Mar 11, 2026
b25853f
[tcanvas] change draw mode after select drawable
linev Mar 11, 2026
344b679
[tgx11] use in all places window GCs for pixmap operation
linev Mar 11, 2026
299047f
[tgx11] fully exclude global gGCpxmp context
linev Mar 11, 2026
a331d0f
[tgx11] provide per-window line and fill attributes management
linev Mar 11, 2026
c0276d5
[tgx11] use new line/fill styles method for generic methods
linev Mar 11, 2026
7be349f
[tgx11] change marker attributes handling
linev Mar 11, 2026
2aa5239
[tgx11] use segments for markers
linev Mar 11, 2026
b8fbfbf
[tgx11] adjust text attributes handling in plain TGX11
linev Mar 12, 2026
957f371
[tgx11ttf] use new methods for text attributes
linev Mar 12, 2026
aa80d99
[tgx11] exclude usage of gGCline context
linev Mar 12, 2026
91a495b
[tgx11] fully exclude global context list usage
linev Mar 12, 2026
e2df601
[x11] provide move constructor signature for TGX11
linev Mar 12, 2026
77cf886
[x11] introduce draw methods with window context arg
linev Mar 13, 2026
b5cd4cd
[tgx11] implement draw methods with window handle
linev Mar 13, 2026
a3c163e
[pad painter] add methods to set complete attributes at once
linev Mar 13, 2026
687217b
[pad painter] use new virtualX methods for painting
linev Mar 13, 2026
01c2b36
[tgx11ttf] implement new text drawing methods with TTF
linev Mar 13, 2026
b9e704b
[tgx11] use context for TTF text drawing
linev Mar 13, 2026
7b98ba4
[padpainter] use new pad painter methods to set attributes
linev Mar 13, 2026
74ea26a
[tgx11] implement several attributes getters
linev Mar 13, 2026
6b178d0
[pad painter] remember some attributes used in drawing
linev Mar 13, 2026
630769d
[x11] rename method to SetDrawModeW
linev Mar 13, 2026
0b3d93f
[pad painter] provide direct access to PS pointer
linev Mar 17, 2026
3408bae
[pad painter] use PS directly in ASImage
linev Mar 17, 2026
18edebf
[pad painter] use in TArrow
linev Mar 17, 2026
f795606
[pad painter] use in TLatex and TMathText
linev Mar 17, 2026
ec58065
[ps] let create ps pad painter in non batch mode
linev Mar 17, 2026
30b61a0
[gl painter] now text align is identical on both platforms
linev Mar 17, 2026
8129d88
[tgx11] correctly implement fallback methods for attr
linev Mar 17, 2026
6f8d86c
[pad painter] use for TWbox painting
linev Mar 17, 2026
415277b
[pad painter] use TWbox methods to paint pad border
linev Mar 17, 2026
741a426
[stressGraphics] adjust ref files for quarks tests
linev Mar 18, 2026
7097158
[CMake][tmva] Fix SOFIE tests exclusion with builtin GSL (#21582)
AdityaDRathore Mar 23, 2026
60548a6
[core] Add zlib as proper builtin, fetching it from LCG
dpiparo Mar 16, 2026
38dd92d
[core] Remove vendored zlib code
dpiparo Mar 16, 2026
be7a5a4
[cmake] Identify zlibng and properly take it into account
dpiparo Mar 18, 2026
175c027
[test] Adapt all tests and references to zlib-ng
dpiparo Mar 22, 2026
f6c6827
[ci] Use system zlib and zstd
dpiparo Mar 22, 2026
297f16d
[tmva] Retire TH1::AddDirectory use in TMVA.
hageboeck Mar 20, 2026
bb4b871
[graf2d] builtin Freetype: standard directory and downloaded from LCG
dpiparo Mar 23, 2026
1393639
[graf2d] Remove vendored Freetype
dpiparo Mar 24, 2026
4cf2b28
[ci] Test the builtin_freetype configuration
dpiparo Mar 24, 2026
5e6a359
[CPyCppyy] Fix improper warning handling and support `-W error`
guitargeek Mar 23, 2026
e06c162
[core] Disable the TDirectory::Append warning when using the same obj…
hageboeck Mar 16, 2026
581896c
[treeplayer] Make TTree::Draw independent of histogram registration.
hageboeck Mar 20, 2026
d35e114
[cppyy] Disallow calling functions with non-const pointer references
guitargeek Mar 22, 2026
5068a4d
[CMake] Don't look for BLAS because of PyMVA
guitargeek Mar 24, 2026
a0bd54c
Revert "[CMake][tmva] Fix SOFIE tests exclusion with builtin GSL (#21…
guitargeek Mar 24, 2026
7959690
[tmva][sofie] Avoid some code duplication in ROperator_LSTM
guitargeek Mar 24, 2026
7a5051d
[ntuple] improve reading of std::vector<complex object>
jblomer Mar 20, 2026
1a3c130
[hist] Implement RRegularAxis::Compute{Low,High}Edge
hahnjo Mar 16, 2026
5215cf6
[hist] Implement RRegularAxis::Slice
hahnjo Mar 16, 2026
abac4a1
[hist] Implement RVariableBinAxis::Slice
hahnjo Mar 16, 2026
476229e
[hist] Implement RCategoricalAxis::Slice
hahnjo Mar 16, 2026
aa585be
[hist] Implement RAxisVariant::Slice
hahnjo Mar 16, 2026
d8c6141
Increase errors for PDF in zlibng.ref file
linev Mar 24, 2026
e22ee66
Add 60 bytes offset to stressGraphics ref files
linev Mar 24, 2026
f3d6b14
Fix some tutorials documentation (#21676)
couet Mar 25, 2026
d3077ca
[hist] RHistStats: Check for enabled dimension
hahnjo Feb 18, 2026
1b19c75
[hist] Implement RHistStats::Taint
hahnjo Feb 18, 2026
995ac57
[hist] Implement RHistEngine::SetBinContent
hahnjo Oct 30, 2025
cc9c100
[hist] Implement RHist::SetBinContent
hahnjo Feb 23, 2026
571d919
[hist] Protect conversion of tainted RHistStats
hahnjo Feb 23, 2026
2ee1910
[ntuple] read into non-owning RVecs
jblomer Mar 24, 2026
69b130c
[ruff] Try to run all range checks before exiting.
hageboeck Mar 24, 2026
d5bbb36
[Python] Replace more equality checks with identity checks
guitargeek Mar 24, 2026
c4d2d7f
[doxygen] Update html header to HTML5
silverweed Mar 24, 2026
4e0c7bf
[Python] Start switching ROOT pythonizations to Python Limited C API
guitargeek Mar 24, 2026
3f08ba7
[dict] add support for rntupleSoARecord(x) option
jblomer Mar 2, 2026
a66d513
[ntuple] add ROOT::Internal::IsRNTupleSoAType()
jblomer Mar 2, 2026
a393e4d
[ntuple] use const arg in GetRNTupleSerializationMode()
jblomer Mar 4, 2026
f69867b
[ntuple] add common check for valid user classes
jblomer Mar 4, 2026
aef676b
[ntuple] prevent accidental use of SoA type in RClassField
jblomer Mar 20, 2026
35cbadf
[ntuple] move RVec helpers to RFieldUtils
jblomer Mar 19, 2026
b2e46f2
[ntuple] bump spec version to 1.0.2.0
jblomer Mar 19, 2026
8d1030a
[ntuple] add s11n for field descriptior SoA flag
jblomer Mar 19, 2026
d15bbab
[ntuple] add RFieldBase::kTraitSoACollection
jblomer Mar 19, 2026
5b5c6ef
[ntuple] add minimal RSoAField
jblomer Mar 4, 2026
d40e71c
[ntuple] support RSoAField in RFieldBase::Create()
jblomer Mar 20, 2026
c020989
[ntuple] test SoA field descriptor flag
jblomer Mar 20, 2026
c882ef8
[ntuple] test writing empty SoA
jblomer Mar 20, 2026
0bf1e2b
[ntuple] test writing simple SoA type
jblomer Mar 20, 2026
9f96edb
[graf3d] Remove last remnants of GLEW
dpiparo Mar 25, 2026
05259b5
[cmake] lz4,lzma builtins: propagate the CMAKE_BUILD_TYPE value
dpiparo Mar 25, 2026
be6dfe8
[cmake] Add target and result variables for the newly revamped builtins
dpiparo Mar 25, 2026
fd7881a
[cmake] Hide symbols for builtin libgif/jpeg/png and lzma
dpiparo Mar 25, 2026
325181e
[cmake] freetype, gif, jpeg and png: require explicit user opt-in
dpiparo Mar 25, 2026
dc7723d
[cmake] Don't serialize roottest builds with MSVC (#21670)
bellenot Mar 26, 2026
7076012
[Python] Don't use limited C API on Windows yet
guitargeek Mar 26, 2026
e70dedd
[cmake] Require explicit opt-in to use the builtin openssl
dpiparo Mar 25, 2026
0c95fb9
tmva/sofie: fix ReduceMean kFirst loop variable typo causing infinite…
harz05 Mar 25, 2026
bf74fd7
fix clang-format spacing
harz05 Mar 26, 2026
3a9a870
[RN] Update
dpiparo Mar 26, 2026
2265970
[Python] Decouple Pythonizations from CPyCppyy internals via public API
guitargeek Mar 25, 2026
7ca0c4b
[Python] Use separate `GetBuffer` helper in Pythonization library
guitargeek Mar 25, 2026
9988707
Change signature of ModifyOn methods
linev Mar 18, 2026
984d4d4
Use pad painter in TBox::ExecuteEvent
linev Mar 19, 2026
37e459d
Provide Wrap and RequestLocator in TCanvasImp
linev Mar 19, 2026
df9a179
Exclude gVirtualX from TBox completely
linev Mar 19, 2026
15dbc8c
Fix - do not create GL painter for web canvas
linev Mar 19, 2026
9dbfaa0
[gl painter] directly use TCanvas class
linev Mar 19, 2026
d9eace6
[pad painter] Proive SetDrawMode
linev Mar 19, 2026
b055086
Use pad painter in TPad::ExecuteEvent
linev Mar 19, 2026
231e09f
Add TCanvasImp::GetCanvasGeometry method
linev Mar 20, 2026
2ab70bf
Use new GetCanvasGeometry method in TCanvas
linev Mar 20, 2026
b3b1066
Fix painting active pad border
linev Mar 20, 2026
ac8cb48
Adjust TPad::DrawCrosshair
linev Mar 20, 2026
1f06bf7
Use painter in TPad::ExecEventAxis
linev Mar 20, 2026
4431d09
Introduce TPadPainter::IsSupportAlpha()
linev Mar 20, 2026
c0127ff
Introduce TVirtualX::ClearWindowW
linev Mar 20, 2026
fe9d67f
Introduce TCanvasImp::ResizeCanvasWindow
linev Mar 20, 2026
93e05ce
Introduce TVirtualX::UpdateWindowW method
linev Mar 20, 2026
becdcfc
Provide TCanvasImp::UpdateDisplay method
linev Mar 23, 2026
7090eaa
Provide SetDoubleBuffer and SetCursor in pad painter
linev Mar 23, 2026
46222ae
[x11] improve CloseWindow
linev Mar 26, 2026
c4f87f7
Introduce TVirtualX::GetDrawModeW method
linev Mar 26, 2026
b20bc5c
[roottest] Remove unused reference files from Python tests
guitargeek Mar 23, 2026
27f249c
[RelNotes] Phrase the section about builtins in a "system first" manner.
hageboeck Mar 27, 2026
273dde9
[RF] Deprecate chi-square fits on x-y-data in RooFit
guitargeek Mar 26, 2026
ff0d903
[CMake] Make ROOTTEST_COMPILE_MACRO a function.
hageboeck Mar 26, 2026
19fcb33
[CMake] Use test fixtures to ensure that macros/dictionaries are pres…
hageboeck Mar 26, 2026
22e0298
[roottest] Correct a fixture name for a schema evolution test.
hageboeck Mar 26, 2026
6c329aa
[Python] Remove superfluous `(char *)` casts in PyROOTModule.cxx
guitargeek Mar 27, 2026
01a823a
[Python] Avoid `#include <Python.h>` from interpreter in Pythonizations
guitargeek Mar 27, 2026
b36225d
[CPyCppyy] New ExecStript implementation without re-initializing Python
guitargeek Mar 27, 2026
94af726
[TPython] Switch to Python limited API and delegate more to CPyCppyy
guitargeek Mar 27, 2026
9f3d7ec
Remove stray file
dpiparo Mar 27, 2026
c165fd2
[libgif] Lower cmake required version to 3.22
dpiparo Mar 27, 2026
e3b6920
[RDF] Clearer exception message when the dataset is not found
dpiparo Mar 27, 2026
639fe2b
[RF] Set fitrange attribute also for Chi2 fits
guitargeek Mar 27, 2026
5a499e1
Use `/use/bin/env bash` in shebang lines of doxygen helper scripts
guitargeek Mar 26, 2026
8fb372c
[RF] Move former RooChi2Var documentation to `RooAbsReal::createChi2()`
guitargeek Mar 26, 2026
dc4322b
[RF] Unify `chi2FitTo` and `createChi2` overloads and documentation
guitargeek Mar 27, 2026
faae1e1
[TPython] Fix preprocessor condition for PyObject_GetOptionalAttrString
guitargeek Mar 28, 2026
93fd191
[ntuple] use RRawFile reading for TCurlFile
jblomer Mar 27, 2026
ed64fd3
[CPyCppyy] Handle LowLevelView conversion via direct pointer conversion
guitargeek Mar 28, 2026
84c9fe9
[cmake][win] Use the correct build type and debug postfix
bellenot Mar 26, 2026
9a80f88
[hist] Exception safety in RHistStats::Fill
hahnjo Mar 18, 2026
2c5f702
[hist] Test exception safety in RHist::Fill
hahnjo Mar 18, 2026
2a591d5
[hist] Exception safety in RHistStats::Add
hahnjo Mar 18, 2026
ec043d4
[hist] Test exception safety in RHist::Add
hahnjo Mar 18, 2026
9087df8
[RF] Remove expensive object caching
guitargeek Mar 28, 2026
446ece0
[cmake] Do not require png,gif,jpeg if asimage is OFF
ferdymercury Mar 30, 2026
1c7f55b
[cmake] error when asimage_tiff used in combination with minimal
ferdymercury Mar 30, 2026
2030049
[TPython] Only use limited API for Python 3.10 and drop custom wrapper
guitargeek Mar 30, 2026
09868ee
[builtins] Bump XRootD version to 5.9.2
dpiparo Mar 30, 2026
09f2880
Revert "[tmva][sofie] Fix NonZero to define max output shape values i…
guitargeek Mar 12, 2026
3387080
[tmva][sofie] Restructure emitted code to be differentiable with Clad
guitargeek Apr 7, 2025
3437a3b
[asimage] Re-introduce preprocessor define erroneously removed
dpiparo Mar 30, 2026
a21eac4
[asimage] Initialise error code to success before opening the file ha…
dpiparo Mar 29, 2026
2fdc9a1
[test] Create also simple gif image
dpiparo Mar 28, 2026
64183f6
[ntuple] clang-format RPageStorageDaos
silverweed Mar 4, 2026
754005a
[ntuple] Start introducing RNTupleAttrSetWriter
silverweed Feb 6, 2026
18cefe1
[ntuple] Add RNTupleAttrSetWriter::Begin/CommitRange()
silverweed Feb 6, 2026
1513ccf
[ntuple] Allow creating AttrSetWriters from RNTupleWriter
silverweed Feb 6, 2026
e0a82d5
[ntuple] Add basic test for creating RNTupleAttrSetWriter
silverweed Jan 29, 2026
b71084e
[ntuple] Return anchor info from RMiniFileWriter::Commit()
silverweed Mar 4, 2026
edb95fc
[ntuple] Add attribute committing
silverweed Mar 4, 2026
c0f8a19
[ntuple] Rename RNTupleAttributes to RNTupleAttrWriting and split it
silverweed Mar 10, 2026
1ff388d
[NFC][ntuple] binaryfmt: add clarification for attr anchor uncomp len
silverweed Mar 16, 2026
5a284f3
[ntuple] add test for reassigning pending attr range
silverweed Mar 25, 2026
b498310
Fix the PaintHatches method (#21745)
couet Mar 31, 2026
9dc0b0e
[ML] Fix data loader undersampling test
siliataider Mar 30, 2026
1fbee0a
[tmva][sofie] Improve Keras test robustness and diagnostics
guitargeek Mar 30, 2026
56f1be9
[x11] remove commented out code
linev Mar 30, 2026
729cc44
[x11] use window draw mode when set GC colors
linev Mar 31, 2026
238b93f
[x11] always set line width
linev Mar 31, 2026
de932a7
[x11] prevent usage of invalid id in GetWindowID
linev Mar 31, 2026
71d11a9
[x11] use EAlign for text align constant
linev Mar 31, 2026
28fd6dc
[Tree] Emit error before crashing when reading type w/ no dictionary
dpiparo Mar 31, 2026
cc83bbc
[io] add RRawFile::DiscourageReadAheadImpl()
jblomer Feb 5, 2026
bbf4104
[hist] Implement RHistEngine::Slice
hahnjo Mar 16, 2026
417e957
[hist] Implement RHist::Slice
hahnjo Mar 25, 2026
6173e6e
[jsroot] dev 17/03/2026
linev Apr 1, 2026
04365d1
[ntuple] swap type lookup order of class and enum
jblomer Mar 31, 2026
42bd077
[RN] Update the version of XRootD and add the version of giflib
dpiparo Apr 2, 2026
32e5a37
[meta] Check TObject inheritance before TRef
hahnjo Apr 1, 2026
86213c5
[meta] Simplify inheritance check
hahnjo Apr 1, 2026
c64b7e1
[meta] Check collection proxy before TRef inheritance
hahnjo Apr 1, 2026
380603e
[cocoa] implement GetWindowContext
linev Mar 24, 2026
473300c
[cocoa] add graphics attributes to X11 Drawable
linev Mar 24, 2026
40d6173
[cocoa] provide attributes setter methods
linev Mar 24, 2026
1ca4cde
[cocoa] for individual attributes setter also change in the context
linev Mar 24, 2026
300ec32
[cocoa] Implement TGCocoa::SetDrawModeW
linev Mar 24, 2026
da49b98
[cocoa] implement ClearWindowW and UpdateWindowW
linev Mar 24, 2026
ec959ad
[cocoa] implement DrawBoxW
linev Mar 24, 2026
55f94f6
[cocoa] implement DrawFillAreaW
linev Mar 24, 2026
81d7b24
[cocoa] implement DrawLineW and DrawPolyLineW
linev Mar 24, 2026
356f3ea
[cocoa] implement DrawPolyMarkerW and DrawTextW
linev Mar 24, 2026
3657282
[cocoa] remove no longer user GetSelectedDrawableCheck
linev Mar 25, 2026
0b51fce
[cocoa] reduce gVirtualX usage in utils
linev Mar 25, 2026
b0fda04
[cocoa] add direct draw handling to X11Drawable
linev Mar 24, 2026
1e5b50c
[cocoa] implement GetDrawModeW
linev Mar 26, 2026
b78b3b2
[cocoa] move XOR buffer to QuartzWindow
linev Mar 26, 2026
7b2eb82
[cocoa] add XOR commands directly to target view
linev Mar 26, 2026
fca5843
[cocoa] remove old XOR implementation
linev Mar 26, 2026
3ad77ec
[cocoa] implement DrawLinesSegmentsW
linev Mar 30, 2026
01466db
[cocoa] use proper text align in wchar drawing
linev Mar 31, 2026
47c8eae
[cocoa] use text align and angle from window context
linev Mar 31, 2026
3a68e33
[cocoa] also for fill attributes use TAttFill ref
linev Mar 31, 2026
7555087
[win32] use std::unordered_map for windows managment
linev Mar 30, 2026
1d56dc5
[win32] introduce fGClist in the XWindow_t handle
linev Mar 30, 2026
e7cd8b8
[win32] handle marker attributes with window context
linev Mar 30, 2026
2b93d4d
[win32] handle fill and line attributes with window context
linev Mar 30, 2026
5e6e9d6
[win32] handle text attributes with window handle
linev Mar 31, 2026
953d24d
[win32] handle draw mode with window handle
linev Mar 31, 2026
ad2c1c8
[win32] implement ClearWindowW and UpdateWindowW
linev Mar 31, 2026
b1af9bf
[win32] use window GC for pixmap manipulation
linev Mar 31, 2026
f018a07
[win32] remove no longer use global GC array
linev Mar 31, 2026
4ade6df
[win32] use ETextAlign only in source code
linev Mar 31, 2026
5abeca0
[cmake] set LIBDIR when building freetype
linev Apr 2, 2026
037a9a4
[cmake] ASEXTRA_LIBRARIES should not depend on if builtin or not
ferdymercury Apr 1, 2026
de992f1
[CPyCppyy] Add `long double` array executor
guitargeek Apr 1, 2026
1fbac62
[io][doc] Some touches to TFile and RFile documentation
dpiparo Apr 2, 2026
6bffc91
meta: Record alignment of class in dictionary
pcanal Mar 21, 2026
53f3b1b
meta: Add test of alignment recording
pcanal Mar 23, 2026
81aae24
meta: Align allocatation of emulated objects in container
pcanal Mar 25, 2026
fd2b396
io: micro-optimization in alignment calculation.
pcanal Mar 25, 2026
95e1b19
io: factor out alignment operation
pcanal Mar 25, 2026
474e8e6
io: Explicitly forbid collection with content aligned to more than 4096
pcanal Mar 28, 2026
e36e705
meta: align PR address some of the comments
pcanal Mar 30, 2026
65c2aa9
meta: AlignOf -> GetClassAlignment
pcanal Mar 30, 2026
29b738e
meta: use std::max_align_t
pcanal Mar 30, 2026
07e9af5
meta: align PR address some of the comments
pcanal Mar 30, 2026
e50d464
meta: align PR address some of the comments
pcanal Mar 30, 2026
63e14b8
meta: TClass::GetClassAlignment doc
pcanal Mar 30, 2026
32de175
meta: Add alignment info to TDataType
pcanal Apr 1, 2026
4164f0e
meta: Remove over alignment of emulated class
pcanal Apr 1, 2026
6369af0
meta: adjust reference file from better alignment
pcanal Apr 1, 2026
78d8f4e
meta: adjust reference file from better alignment.
pcanal Apr 1, 2026
df2c190
meta: Add alignment info for emulated collections
pcanal Apr 1, 2026
7304cad
fixup! meta: Record alignment of class in dictionary
pcanal Apr 2, 2026
cc816c3
meta: Fix handling of alignment for Emulated Collection of pointer an…
pcanal Apr 2, 2026
9a71ee9
fixup! meta: adjust reference file from better alignment.
pcanal Apr 2, 2026
6029127
Revert "meta: adjust reference file from better alignment"
pcanal Apr 2, 2026
f485286
fixup! meta: adjust reference file from better alignment.
pcanal Apr 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
16 changes: 5 additions & 11 deletions .github/workflows/code_analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ jobs:
run: |
files=$(grep '\.py$' changed_files.txt || echo "")
if [ -n "$files" ]; then
diff_command=""
apply_command=""
failure=false
for file in $files; do
while IFS=- read -r start length; do
[ -z "$start" ] && continue
Expand All @@ -101,20 +101,14 @@ jobs:
continue
fi
end=$((start + length))
diff_command+="ruff format --diff --range $start-$end $file && "
ruff format --diff --preview --range ${start}-${end} ${file} || failure=true
apply_command+="ruff format --range $start-$end $file && "
done < <(git diff --unified=0 HEAD~1 -- "$file" | grep '^@@' | sed -E 's/^@@ -[0-9]+(,[0-9]+)? \+([0-9]+)(,([0-9]+))? @@.*/\2-\4/')
done

if [ -n "$diff_command" ]; then
diff_command=${diff_command% && }
if ! eval "$diff_command"; then
apply_command=${apply_command% && }
echo -e "::error::Formatting failed. To apply the changes locally, run the following command:\n$apply_command"
exit 123
fi
else
echo "No ranges detected to format."
if ${failure}; then
echo -e "::error::Formatting failed. To apply the changes locally, run the following command:\n$apply_command"
exit 123;
fi
else
echo "No python files to format"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
CMAKE_CXX_STANDARD=20
builtin_vdt=ON
builtin_zlib=ON
builtin_zstd=ON
pythia8=ON
r=OFF
rootbench=ON
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
CMAKE_C_COMPILER=clang
CMAKE_CXX_COMPILER=clang++
CMAKE_GENERATOR=Ninja
builtin_vdt=ON
builtin_freetype=ON
builtin_gif=ON
builtin_jpeg=ON
builtin_png=ON
builtin_lz4=ON
builtin_lzma=ON
builtin_png=ON
builtin_vdt=ON
builtin_zlib=ON
builtin_zstd=ON
pythia8=ON
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
ccache=ON
builtin_vdt=ON
builtin_zlib=ON
builtin_zstd=ON
fail-on-missing=ON
minimal=ON
roottest=ON
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/root-ci-config/buildconfig/alma10.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
builtin_vdt=ON
builtin_zlib=ON
builtin_zstd=ON
pythia8=ON
r=OFF
2 changes: 0 additions & 2 deletions .github/workflows/root-ci-config/buildconfig/fedora43.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
CMAKE_CXX_STANDARD=23
builtin_zlib=ON
builtin_zstd=ON
experimental_adaptivecpp=ON
pythia8=ON
roofit_multiprocess=ON
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/root-ci-config/buildconfig/fedora44.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
CMAKE_CXX_STANDARD=23
builtin_zlib=ON
builtin_zstd=ON
experimental_adaptivecpp=ON
pythia8=ON
roofit_multiprocess=ON
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/root-ci-config/buildconfig/rawhide.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
builtin_zlib=ON
builtin_zstd=ON
pythia8=ON
test_distrdf_dask=OFF
test_distrdf_pyspark=OFF
Expand Down
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,9 @@ else()
if(asimage)
message(SEND_ERROR "minimal=ON is not compatible with asimage=ON. Consider setting instead gminimal=ON")
endif()
if(asimage_tiff)
message(SEND_ERROR "minimal=ON is not compatible with asimage_tiff=ON. Consider setting instead gminimal=ON")
endif()
if(x11)
message(SEND_ERROR "minimal=ON is not compatible with x11=ON. Consider setting instead gminimal=ON")
endif()
Expand Down
50 changes: 49 additions & 1 deletion README/ReleaseNotes/v640/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ The following people have contributed to this new version:
The ZeroMQ library and its C++ bindings are used by the experimental RooFit multiprocessing package, enabled by the `roofit_multiprocess` build option.
The ZeroMQ versions it requires (>=4.3.6 or 4.3.5 with the draft API) are now available in the package managers of several platforms, for example Conda, Homebrew, Fedora and the Extra Packages for Enterprise Linux (EPEL).
The `roofit_multiprocess` feature is only required by a small set of RooFit power uses, who are using one of these environments and therefore don't require the builtin ZeroMQ library.
* The overloads of `RooAbsReal::createChi2()` and `RooAbsReal::chi2FitTo()` that take unbinned **RooDataSet** data objects are deprecated and will be removed in ROOT 6.42.
These methods implemented a specialized chi-square fit for x-y-data with errors in y and optional errors in x, which is conceptually different from the standard histogram-based chi-square in the **RooDataHist** case and can lead to ambiguous results.
To fit 2D data with errors in and `x` and `y`, use specialized tools like `TGraphErrors::Fit()`, or build an explicit likelihood model if you want to stay with RooFit.

## Removals

Expand All @@ -69,6 +72,12 @@ The following people have contributed to this new version:

## Build System

### Moving from builtin dependencies to system-provided packages

* The general direction of the ROOT project is to become more and more reliant on system packages. It is *recommended* to make the packages required by ROOT available on the system, e.g. via a package manager, and not with the builtin mechanism. This allows for timely updates and reduces the size of the installed binaries.
* The previously vendored builtins `freetype`, `zlib`, `lzma`, `zstd`, `lz4`, `libpng`, `giflib`, `libjpeg`, and `openssl` should be installed in the system if possible. ROOT will not automatically fall-back to their builtin versions if these are not found: the user is informed of that with a helpful message. If installing these dependencies in the system is not possible, the CMake option `-Dbuiltin_XYZ=ON` has to be consciously chosen by the user.
* For the builtin versions of `freetype`, `zlib`, `lzma`, `zstd`, `lz4`, `libpng`, `giflib`, `libjpeg`, the source tarballs are now fetched from [SPI](https://spi.web.cern.ch)'s [website](https://lcgpackages.web.cern.ch/), as for the vast majority of ROOT's builtins, e.g. `openssl` or `xrootd`.

## Core Libraries

* ROOT now adds a RUNPATH to compiled macros. This ensures that when compiled macros are loaded, they load the libraries that belong to the ROOT installation
Expand Down Expand Up @@ -253,6 +262,14 @@ Now:
Results may differ from previous ROOT versions for `n > 100` or `nSigma != 1`.
The new implementation is statistically consistent and recommended.

### Removal of global expensive object caching in RooFit

The global “expensive object cache” used in RooFit to store numeric integrals and intermediate histogram results has been removed.

While originally intended as a performance optimization, this mechanism could lead to **incorrect results due to cache collisions**: cached integrals or histograms created in one context (e.g. during plotting) could be reused unintentionally in a different context, even when the underlying configuration had changed.

Given the risk of silently incorrect physics results, and the absence of known workflows that depend critically on this feature, this global caching mechanism has been removed. If you encounter performance regressions in workflows involving expensive integrals or convolutions, we encourage you to report your use case and performance regression as a GitHub issue, so that targeted and robust optimizations can be developed,

## RDataFrame

- The message shown in ROOT 6.38 to inform users about change of default compression setting used by Snapshot (was 101 before 6.38, became 505 in 6.38) is now removed.
Expand Down Expand Up @@ -369,6 +386,29 @@ after importing ROOT.

This option is intended **for debugging only and will be removed in ROOT 6.44**.

### Drop support for calling C++ functions with non-const pointer references

From now on, we disallow calling C++ functions with non-const pointer references (`T*&`) from Python.
These allow pointer rebinding, which cannot be represented safely in Python and could previously lead to confusing behavior.
A `TypeError` is now raised. Typical ROOT usage is unaffected.

In the rare case where you want to call such a function, please change the C++ interface or - if the interface is outside your control - write a wrapper function that avoids non-const pointer references as arguments.

For example, a function with the signature `bool setPtr(MyClass *&)` could be wrapped by a function that augments the return value with the updated pointer:
```
ROOT.gInterpreter.Declare("""
std::pair<bool, MyClass*> setPtrWrapper(MyClass *ptr) {
bool out = setPtr(ptr);
return {out, ptr};
}
""")
```
Then, call it from Python as follows:
```Python
# Use tuple unpacking for convenience
_, ptr = cppyy.gbl.setPtrWrapper(ptr)
```

### UHI
#### Backwards incompatible changes
- `TH1.values()` now returns a **read-only** NumPy array by default. Previously it returned a writable array that allowed modifying histogram contents implicitly.
Expand Down Expand Up @@ -430,10 +470,18 @@ The version of the following packages has been updated:

- cppzeromq: 4.10.0
- fftw3: 3.3.10
- freetype: 2.14.3
- gsl: 2.8
- gtest: 1.17.0
- giflib: 5.2.2
- libjpeg-turbo 3.1.3 is now used as a replacement for libjpeg
- libpng: 1.6.4
- libzeromq: 4.3.5
- xrootd: 5.9.1
- lz4: 1.10.0
- lzma: 5.8.2
- xrootd: 5.9.2
- zlib: 1.3.2
- zstd: 1.5.7


## Items addressed for this release
9 changes: 9 additions & 0 deletions bindings/pyroot/cppyy/CPyCppyy/include/CPyCppyy/API.h
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,10 @@ CPYCPPYY_EXTERN void* CallVoidP(Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallCo

//- C++ access to cppyy objects ---------------------------------------------

// Get C++ Instance (python object proxy) name.
// Sets a TypeError and returns an empty string if the pyobject is not a CPPInstance.
CPYCPPYY_EXTERN std::string Instance_GetScopedFinalName(PyObject* pyobject);

// C++ Instance (python object proxy) to void* conversion
CPYCPPYY_EXTERN void* Instance_AsVoidPtr(PyObject* pyobject);

Expand All @@ -199,6 +203,11 @@ CPYCPPYY_EXTERN bool Instance_IsLively(PyObject* pyobject);
CPYCPPYY_EXTERN bool Overload_Check(PyObject* pyobject);
CPYCPPYY_EXTERN bool Overload_CheckExact(PyObject* pyobject);

// Sets the __reduce__ method for the CPPInstance class, which is by default not
// implemented by cppyy but might make sense to implement by frameworks that
// support IO of arbitrary C++ objects, like ROOT.
CPYCPPYY_EXTERN void Instance_SetReduceMethod(PyCFunction reduceMethod);


//- access to the python interpreter ----------------------------------------

Expand Down
140 changes: 49 additions & 91 deletions bindings/pyroot/cppyy/CPyCppyy/src/API.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,18 @@ static bool Initialize()


//- C++ access to cppyy objects ---------------------------------------------
std::string CPyCppyy::Instance_GetScopedFinalName(PyObject* pyobject)
{
if (!Instance_Check(pyobject)) {
PyErr_SetString(PyExc_TypeError, "Instance_GetScopedFinalName : object is not a C++ instance");
return "";
}

Cppyy::TCppType_t pyobjectClass = ((CPPInstance *)pyobject)->ObjectIsA();
return Cppyy::GetScopedFinalName(pyobjectClass);
}

//-----------------------------------------------------------------------------
void* CPyCppyy::Instance_AsVoidPtr(PyObject* pyobject)
{
// Extract the object pointer held by the CPPInstance pyobject.
Expand Down Expand Up @@ -254,6 +266,11 @@ bool CPyCppyy::Overload_CheckExact(PyObject* pyobject)
return CPPOverload_CheckExact(pyobject);
}

//-----------------------------------------------------------------------------
void CPyCppyy::Instance_SetReduceMethod(PyCFunction reduceMethod)
{
CPPInstance::ReduceMethod() = reduceMethod;
}

//- access to the python interpreter ----------------------------------------
bool CPyCppyy::Import(const std::string& mod_name)
Expand Down Expand Up @@ -338,117 +355,58 @@ void CPyCppyy::ExecScript(const std::string& name, const std::vector<std::string
}

// store a copy of the old cli for restoration
PyObject* oldargv = PySys_GetObject(const_cast<char*>("argv")); // borrowed
if (!oldargv) // e.g. apache
PyObject* oldargv = PySys_GetObject("argv"); // borrowed
if (oldargv) {
PyObject* copy = PyList_GetSlice(oldargv, 0, PyList_Size(oldargv));
oldargv = copy; // now owned
} else {
PyErr_Clear();
else {
PyObject* l = PyList_New(PyList_GET_SIZE(oldargv));
for (int i = 0; i < PyList_GET_SIZE(oldargv); ++i) {
PyObject* item = PyList_GET_ITEM(oldargv, i);
Py_INCREF(item);
PyList_SET_ITEM(l, i, item); // steals ref
}
oldargv = l;
}

// create and set (add program name) the new command line
int argc = args.size() + 1;
#if PY_VERSION_HEX < 0x03000000
// This is a legacy implementation for Python 2
const char** argv = new const char*[argc];
for (int i = 1; i < argc; ++i) argv[i] = args[i-1].c_str();
argv[0] = Py_GetProgramName();
PySys_SetArgv(argc, const_cast<char**>(argv));
delete [] argv;
#else
// This is a common code block for Python 3. We prefer using objects to
// automatize memory management and not introduce even more preprocessor
// branching for deletion at the end of the method.
//
// FUTURE IMPROVEMENT ONCE OLD PYTHON VERSIONS ARE NOT SUPPORTED BY CPPYY:
// Right now we use C++ objects to automatize memory management. One could use
// RAAI and the Python memory allocation API (PEP 445) once some old Python
// version is deprecated in CPPYY. That new feature is available since version
// 3.4 and the preprocessor branching to also support that would be so
// complicated to make the code unreadable.
std::vector<std::wstring> argv2;
argv2.reserve(argc);
argv2.emplace_back(name.c_str(), &name[name.size()]);

for (int i = 1; i < argc; ++i) {
auto iarg = args[i - 1].c_str();
argv2.emplace_back(iarg, &iarg[strlen(iarg)]);
}

#if PY_VERSION_HEX < 0x03080000
// Before version 3.8, the code is one simple line
wchar_t *argv2_arr[argc];
for (int i = 0; i < argc; ++i) {
argv2_arr[i] = const_cast<wchar_t *>(argv2[i].c_str());
}
PySys_SetArgv(argc, argv2_arr);
// build new argv
const int argc = (int)args.size() + 1;
std::vector<wchar_t*> wargv(argc);

#else
// Here we comply to "PEP 587 – Python Initialization Configuration" to avoid
// deprecation warnings at compile time.
class PyConfigHelperRAAI {
public:
PyConfigHelperRAAI(const std::vector<std::wstring> &argv2)
{
PyConfig_InitPythonConfig(&fConfig);
fConfig.parse_argv = 1;
UpdateArgv(argv2);
InitFromConfig();
}
~PyConfigHelperRAAI() { PyConfig_Clear(&fConfig); }

private:
void InitFromConfig() { Py_InitializeFromConfig(&fConfig); };
void UpdateArgv(const std::vector<std::wstring> &argv2)
{
auto WideStringListAppendHelper = [](PyWideStringList *wslist, const wchar_t *wcstr) {
PyStatus append_status = PyWideStringList_Append(wslist, wcstr);
if (PyStatus_IsError(append_status)) {
std::wcerr << "Error: could not append element " << wcstr << " to arglist - " << append_status.err_msg
<< std::endl;
}
};

#if PY_VERSION_HEX < 0x30d00f0
WideStringListAppendHelper(&fConfig.argv, Py_GetProgramName());
#else
PyObject* progname = PySys_GetObject("executable"); // borrowed
wchar_t buf[4096];
Py_ssize_t sz = CPyCppyy_PyUnicode_AsWideChar(progname, buf, 4095);
if (0 < sz)
WideStringListAppendHelper(&fConfig.argv, buf);
#endif
for (const auto &iarg : argv2) {
WideStringListAppendHelper(&fConfig.argv, iarg.c_str());
}
}
PyConfig fConfig;
};
wargv[0] = Py_DecodeLocale(name.c_str(), nullptr);

PyConfigHelperRAAI pych(argv2);
for (int i = 1; i < argc; ++i) {
wargv[i] = Py_DecodeLocale(args[i - 1].c_str(), nullptr);
}

#endif // of the else branch of PY_VERSION_HEX < 0x03080000
#endif // of the else branch of PY_VERSION_HEX < 0x03000000
// set sys.argv
PyObject* sysmod = PyImport_ImportModule("sys"); // new reference
if (sysmod) {
PyObject* argv_obj = PyList_New(argc);
for (int i = 0; i < argc; ++i) {
PyList_SET_ITEM(argv_obj, i, PyUnicode_FromWideChar(wargv[i], -1));
}
PyObject_SetAttrString(sysmod, "argv", argv_obj);
Py_DECREF(argv_obj);
Py_DECREF(sysmod);
} else {
PyErr_Print();
}

// actual script execution
PyObject* gbl = PyDict_Copy(gMainDict);
PyObject* result = // PyRun_FileEx closes fp (b/c of last argument "1")
PyRun_FileEx(fp, const_cast<char*>(name.c_str()), Py_file_input, gbl, gbl, 1);

if (!result)
PyErr_Print();

Py_XDECREF(result);
Py_DECREF(gbl);

// restore original command line
if (oldargv) {
PySys_SetObject(const_cast<char*>("argv"), oldargv);
PySys_SetObject("argv", oldargv);
Py_DECREF(oldargv);
}

// free memory from Py_DecodeLocale
for (auto ptr : wargv)
PyMem_RawFree(ptr);
}

//-----------------------------------------------------------------------------
Expand Down
Loading