*Dec-13, 2023*

- Release 12.0 of the
**SDL Component Suite** - Support of the new
**RadStudio 12 Athens / Delphi 12 Athens / C++Builder 12 Athens** - many improvements and new features (see below for detailed list)
- SDL_colsel

- the method FindColorEntry allows finding a particular color in the color array of the component

- SDL_datatable

- the new methods RemoveUnmarkedRows and RemoveUnmarkedColumns allow removing unmarked rows and columns
- the new method RemoveMarkedColumns allows removing marked columns
- the new method SetCellStates allows to set the cell state of a range of cells by logical combination
- implemented the new method DuplicateDataAsArray to create a duplicate copy of the numeric data
- extended CopyDataColumnToVector and CopyDataRowToVector by more overloaded versions
- implemented two additional overloaded versions CopyDataRowToArray and CopyDataColumnToArray
- implemented CopyDataFromVector
- implemented CopyDataFromArray for one-dimensional arrays
- extended the method CopyDataToMatrix by additional parameters to get a more flexible copy method
- the method CopyDataToArray has been extended by additional parameters
- extended the methods MakeValidRowRange and MakeValidColRange to provide feedback code if a restriction applies
- extended the method CopyDataFromArray by more parameters to allow a more flexible copying process
- CopyContentsFrom is replaced by Clone
- implemented the method CopyDataFromMatrix
- implemented the methods CopyDataColumnFromVector, CopyDataColumnToVector, CopyDataRowFromVector and CopyDataRowToVector
- implemented the methods SplitDataSet and PrepareSplitCounts to support the creation of subsets
- implemented the function FindCells to search for cells having a specific value
- implemented SliceCol and SliceRow to extract data from a table
- implemented the event OnExportText
- the new method IsConstantRow checks is all values in a row are constant
- the method IsConstantColumn provides now a second overloaded version which returns the found constant value
- the new method RemoveRows allows to delete a range of rows of a datatable
- the new method IsDichotomousColumn tests whether the values in a column are dichotomous
- the method ImportFromCSV provides now a second overloaded version which allows to skip the first N lines and to stop at a specific line
- the new method CopyColumnFrom copies an entire column from an external data table
- bug fix: one overlaid version of TDataTable.ExportAsASC did not return the error code as the function value
- bug fix: TDataTable.ExportAsCSV did not include the header of the attributes
- bug fix: CreateContingencyTable caused an access violation due to shifted indices
- bug fix: TDataTable.SplitDataSet did not copy the cell states

- SDL_dendrogram

- bug fix: TDendrogram.CopyToBitMap caused a shifted scale on the target bitmap and assigned the wrong font

- SDL_dstruct

- implemented SHA1FromStringUnicode32 to support 32-bit Unicode strings
- implemented an overloaded version of TStringArray.Sort to provide independent specification of the sort orders
- the class TBitFld provides two new methods: Hash and SelectRandomBit
- the new class T2DArrayStack supports stacks of mixed-size two-dimensional arrays
- bug fix: memory leak in TFeatureMatrix fixed
- bug fix: TBitFld.RandomFill did not correctly fill the bit field if the number of bits to be set exceeded half the size
- bug fix: SHA1FromString assumed a 1-byte string and thus processed only the first half of the 2-byte Unicode string; the old version is kept as SHA1FromStringOld

- SDL_filesys

- implemented the function ReadStringFromTextFile to read text from a textfile into a string
- implemented a collection of easy to use routines for accessing the Windows registry: DeleteRegKey, DeleteRegValue, GetRegAllSubkeys, GetRegAllValueNames, GetRegValue, GetRegValueAsBoolean, GetRegValueAsDouble, GetRegValueAsInt, RegKeyExists, RegValueExists and SetRegValue
- the new function FilterCopyTextFile allows to remove certain lines from a text file
- the new procedure ClearTextFile empties a text file
- the new function GetMemoryUsed returns the amount of memory used by the current process

- SDL_foldertree

- the new property Options allows now to include symbolic links and hidden and system files
- bug fix: TFolderTree.SelectPath caused an error message if TFolderTree was on a modal form

- SDL_fourier

- implemented Tukey weighting (see property WeightingWindow)

- SDL_math1

- implemented an overlaid version of QuickSelect which addresses the speed problem if there are many equal data values
- the function Hex has been extended to provide up to 16 hex digits
- HexToDouble and HexToSingle have been extended by an overloaded version which allows to control the endianess of the input string
- bug fix: RoundNeg125, RoundPos125 and Round125 did not deliver exact integer values (were off by approx. 1e-15)

- SDL_math2

- the class TMathExpression now supports the calculation of the minimum and maximum of a list of variables
- the new function ClassScatterMatrices calculates the within-class and between-class scatter matrices
- the new method TCurveFit.RMSDiff calculates the root mean square of the x-y differences
- the class TCurveFit has been extended to provide a more convenient model fitting: CalcRegModel, Predict, Evaluate, ModelPar, PolyOrder, Residual, FitQual, StdDevResid and CPXShift
- SDL_math2.FindCenters does not longer store auxiliary data in a file on the disk (it now stores it in a dynamic array)
- the class TMathExpression now allows to block arithmetic exceptions (properties BlockExceptions and ErrorValue)
- implemented a second overloaded version of MultiLinReg
- the new function VarInflatFactor calculates the variance inflation factors of a dataset
- bug fix: PolygonLength calculated wrong length for closed polygons

- SDL_matrix

- implemented TMatrix.DuplicateDataAsArray and TIntMatrix.DuplicateDataAsArray to copy the entire matrix to a two-dimensional array
- implemented FillSerial (Matrix/IntMatrix/Mat3D) and FillSerial (Mat4D)
- extended and improved TMatrix.CopyFromArray and TIntMatrix.CopyFromArray (more parameters, more overloaded versions)
- extended the methods TMatrix.CopyToArray and TIntMatrix.CopyToArray to provide a better control of the copying process
- extended the following methods to provide a feedback code: MakeValidRowRange, MakeValidColRange, TMat3D.MakeValidLayerRange and TMat4D.MakeValidTSlotRange,
- implemented CopyColTo1DArray and CopyRowTo1DArray
- implemented an overloaded version of T(Int)Matrix.CopyColToVec and CopyRowToVec to allow copying into a specific vector position
- the method Diff calculates the finite differences
- CalcHatMatrix now provides a numeric error code as function result (instead of a boolean value) to make it compatible with the same routine in SDL_openarrays
- the methods StandardizeColumns and StandardizeRows now automatically resize the mean/stddev vectors
- the new method MultiplyLayersByArray multiplies an array with the layers of TMat4D elementwise
- the new method ResampleExtMat resamples an external two dimensional matrix
- the new events TMat4D.OnResize, TIntMatrix.OnResize, TMatrix.OnResize and TMat3D.OnResize are triggered if a matrix changes its size
- the method EdgeVector has been extended to calculate values from selected columns/rows; the edge operation has been extended by the standard deviation
- bug fix: the .Resize methods of the classes TMatrix, TIntMatrix, TMat3D and TMat4D did not provide proper return values if the params were out of range
- bug fix: if a TMatrix, TIntMatrix, TMat3D or TMat4D was loaded from an XML file the matrix was not correctly resized
- bug fix: the method ReadBinaryHeader of the classes TMatrix, TIntMatrix, TMat3D and TMatd4D crashed if the specified file did not exist
- bug fix: TMatrix.LoadBinary did not trigger the OnPercentDone event

- SDL_minical

- TMiniCal now shows a label on the 'today' button
- double clicks are now only effective within the calendar area

- SDL_ntabed

- implemented the OnEmptyStChanged event and the method ChangedEmptyStates
- implemented the display of an empty message (properties EmptyMessage and ColorEmptyMsg)
- the popup menu of the data table has been extended by the command "Reset All Empty States"
- the new properties VRangeHigh and VRangeLow support the automatic limiting of numeric values
- the order of the menu entries 'data read-only' and 'extract from clipboard' in context menu are now exchanged
- disabling a menu entry via PopupDMask now makes it invisible (not just disabled)
- bug fix: the context menu of TNTabEd did not correctly disable/enable the paste command if the table was switched to readonly
- bug fix: the checking of the readonly flag of cells was shifted by the number of fixed columns/rows in the OnKeyPress and OnKeyDown events

- SDL_numio

- the TNumIO2 component supports now an optional "freeze checkbox" which can be controlled by the following properties: FreezeBoxVisible, FreezeBoxLeft, FreezeBoxTop, FreezeBoxSize, FreezeBoxChecked and HideInputOnFreeze
- the new property HideInputEditor allows to block any inputs to the control
- bug fix: TNumIO2 did not handle Ctrl-V correctly

- SDL_openarrays

- additional overloaded versions of DichotomizeArray
- bug fix: DichotomizeArray created result arrays which were short by one element
- the new function CreateMaskShape supports the creation of array masks
- renamed FillArrayRix to FillArraySerial and extended the function by two additional parameters to specify both and offset and an increment
- implemented the two functions Copy2DColTo1DArray and Copy2DRowTo1DArray to copy data from 2D to 1D arrays
- CopyVectorToArrayColumn/CopyToArrayRow are renamed to CopyToArrayColumn/CopyToArrayRow
- the functions NormalizeColumns and NormalizeRows normalize the rows and the columns of an array
- bug fix: EdgeVector calculated wrong mean if Orient was orHoriz
- implemented the function EigenDecomposition to calculate the eigenvectors and eigenvalues of a symmetric matrix
- implemented the functions LUDecomposition and LUPDecomposition
- implemented the new function PermuteArray to permute the columns/rows of an array
- the method MultiplyArrays has been extended by overloaded versions allowing to mix integer and double 2D arrays
- the new procedures MeanCenterColumnsOfArray and MeanCenterRowsOfArray support the mean-centering of 2D arrays
- the new function RescaleArray allows to normalize the data in an array
- a new overloaded version of the function PercentileArray has been added
- the new functions LocalMean and LocalMedian calculate the mean and the median of an array around a specific cell
- the function CountTrueCellsOfArray has been extended to restrict the range where the TRUE values are counted
- the new function MeanAbsDev calculates the mean absolute deviation
- the function PercentileArray now supports integer arrays as well
- the new functions IsMonotone and IsStrictlyMonotone check whether the values of a one-dimensional array are (strictly) monotone
- the new function ListCellPositions converts a boolean array into cell indices
- the new function ReciprocalArray calculates the reciprocal values of all elements of an array
- the new function Resample2DArray resamples a two dimensional array
- the new function CheckLinearity checks a series of values for equidistance
- the new procedure SerializeArray serializes two-dimenional arrays
- the new function BoundingRect determines the bounding rectangle of non-zero regions in arrays
- the functions MinArray and MaxArray now support more overloaded options returning the indices of the found minima/maxima
- the new function SumArrayMasked calculates the sum of non-masked cells
- the function EdgeVector has been extended to calculate values from selected columns/rows; the edge operation has been extended by the standard deviation

- SDL_plot3d

- implemented CopyToBitmap to create a copy of the surface as a bit map

- SDL_rchart

- implemented TRChart.Cross and TContourPlot.Cross as new drawing primitives
- the method ClearAnnotations has been extended to delete annotations belonging to a particular layer
- implemented the new method TRChart.FindEncircledData
- bug fix: TRChart.FindNearestItemAlongAxis did not work with y-axis and reference point was master coordinates (now replaced by center to account for rectangles etc.)

- SDL_replist

- new properties to monitor the sorting history: TRLData.LastSortColumnSec, TRLData.LastSortOrderSec, TReportListView.LastSortColumnSec and TReportListView.LastSortOrderSec
- implemented an overloaded versions of RLData.Sort and of ReportListView.Sort to provide independent specification of the sort orders
- implemented the methods SetSelectedRows and GetSelectedRows
- implemented the event TRLData.OnTextExport
- bug fix: colors of the headers were not adjusted when switching between enabled and disabled state
- bug fix: TReportListview.AutoColWidth created a wrong width of checked columns
- bug fix: elements in the first row of checked columns of a TReportListView could not be ticked off if the list was scrolled

- SDL_rot3d

- the new method CopyToBitmap copies the 3D plot to a bit map.
- new methods and properties to support mouse traces: ClearMouseTrace, NumMTracePoints, MouseTrace, MouseTraceColor, MouseTraceInvert
- the new method FindEncircledData allows finding data points within a closed polygonal

- SDL_sdlbase

- declaration of TNameStr

- SDL_sdlcolors

- the function ContrastBWColor returns the highest contrast black/white color
- the function ObtainColorName provides now an overloaded version which returns both the hex code and the color name
- the new function AdjustColorIntSat allows you to adjust the intensity and saturation of a color
- bug fix: TColorArray.FillbyInterpolation crashed if the color palette was shorter than two entries

- SDL_smithchart

- the method ClearAnnotations has been extended to delete annotations belonging to a particular layer

- SDL_statis

- the new class TMLRModel supports the creation of MLR (multiple linear regression), LDA (linear discriminant analyis) and RR (ridge regression) models
- implemented the function AkaikeInfCrit
- implemented the function GiniCoeff to calculate the Gini coefficient
- implemented the function TheilSenEstimator for robust linear regression
- implemented the properties TCrossValidator.FNCnt, TCrossValidator.FPCnt, TCrossValidator.TNCnt, and TCrossValidator.TPCnt
- implemented the two properties TCrossValidator.FNRate and TCrossValidator.TNRate
- implemented the BartlettTest
- implemented the binomial sign test BinomSignTest
- implemented a test for kurtosis: CalcAndTestKurtosis
- implemented a test for symmetry of distributions: CalcAndTestSkewness
- implemented PerformSiegelTukeyTest to perform a Siegel-Tukey test for equal variances
- implemented a second overloaded version of PerformKSNormalityTest to support dynamic arrays
- the function GrubbsTest has been changed and extended to support dynamic arrays as well
- the new function CorrTest tests whether the correlation of two datasets is significantly different from a reference value
- implemented the function PearsonCorrCoeff for calculating Pearson's correlation coeffcient from two arrays
- the class TPLSModel has been extended by the property CvdMCC
- the class TCrossValidator provides now the array property MatthewsCorr
- implemented a second overloaded version of PerformMannWhitneyUTest
- implemented a third overloaded version of Perform2SampleTTest
- implemented PerformFTest, Perform1SampleChi2Test, Perform1SampleTTest and WilcoxonSignedRankTest
- the function PerformLillieforsTest is now available in a second overload version supporting open arrays
- implemented an overloaded version of DeanDixonTest and of ShapiroWilkTest to support open arrays
- the function CFInformedness returns the informedness of a binary classifier
- the functions CFAccuracy and CFMatthewsCorr calculate the classifier accuracy and Matthew's correlation
- the function ExtractClassifPerformance extracts a classifiers performance from a multi-class confusion matrix
- the new members TPLSModel.SetObjTags and TPLSModel.ObjTag support object tags
- the new members TPLSModel.ObjAttrib, TPLSModel.NameObj and TPLSModel.SetObjAttribs support object attributes and object names in PLS models
- bug fix: BinomDistriQuantile did not return the ActualProb value
- bug fix: FisherExactTest changed the frequency table
- bug fix: the function UDistriIntegral returned a wrong probability (actually returned p[U-1] instead of p[U])

- SDL_streams

- bug fix: SDL_streams.ReadlnStream crashed if the final character was just LF instead of CRLF

- SDL_stringl

- the new function ScanStringForXMLTag scans a string for XML tags
- the new function ReplaceControlChars replaces all control characters in a string
- the new functions IsAllDec and IsAllHex test a string for all-decimal or all-hexadecimal characters
- the new function CountControlChars counts the control characters in a string
- the new function ConvertToTabs converts multiple spaces in strings to tabs
- the new function IntToStrGrouped returns integer numbers as grouped strings
- implemented a powerful sorting function for string lists: SortStringList

- SDL_vector

- added the OnResize event
- renamed the method TVector.FillSeries to TVector.FillSerial
- extended the method MakeValidElemRange to provide a feedback code
- the methods CopyFrom2DArrayColumn and CopyFrom2DArrayRow copy columns or rows from a two-dimensional array
- the method CopyToArray has been extended with more overlaid versions
- the method FillSeries fills the vector with an arithmetic series
- the method FindExact is now available for the TVector class, as well

- SDL_colsel

*Oct-20, 2021*

- Support of the new
**RadStudio 11 Alexandria / Delphi 11 Alexandria / C++Builder 11 Alexandria**

*Aug-24, 2020*

**Release 10.7**of the**SDL Component Suite**- Support of the new
**RadStudio 10.4 Sydney / Delphi 10.4 Sydney / C++Builder 10.4 Sydney** - many improvements and new features (see below for detailed list)
- SDL_cdata

- the function GetEDXLines returns analytically interesting EDX lines

- SDL_colsel

- bug fix: TColSel did not trigger the onChange event if the color was redefined via the color dialog

- SDL_cpuid

- the new function GenerateCPUIDEx includes the MAC address of the network adapter (in addition to the CPU info)
- bug fix: the function CheckGeneratedCPUID did not work correctly

- SDL_datatable

- the method ScanForCatValues analyses a categorical variable
- the method Assign implemented
- the new method RemoveMarkedRows removes all marked rows
- the new methods CopyDataColumnFromArray, CopyDataColumnToArray, CopyDataRowFromArray and CopyDataRowToArray support the copying of columns and rows to and from open arrays
- TDataTable.SumOfSquaredMarkedCells and TDatatable.SumOfSquaredNumCells calculate the sum of squared data cells
- TDataTable.ExportAsASC and TDataTable.ImportASC now support the export and import of custom data
- the function QuartilesOfMarkedCells calculates the quartiles of marked cells
- the new methods CopyDataFromArray and CopyDataToArray allow to copy the numeric data to open arrays
- new method IfAnyCellHasCellState allows to test cells states of a range of cells
- the new method CreateContingencyTable calculates the contingency table
- the method CountNominalIDs returns the number of defined nominal IDs
- bug fix: the methods MinRowAttrib, MaxRowAttrib, MinColAttrib and MaxColAttrib returned an invalid row/column index under some circumstances

- SDL_dstruct

- implemented the routines DecodeBase64 and EncodeBase64 to support base-64 encoding
- EncodeASCII85 now allows to insert line breaks
- implemented TAssocArray.Assign
- the new methods InsertColumn and RemoveColumn insert and remove a column to/from the string array
- the new property TByteMatrix.DefaultValue allows to control the returned value, if the index of a byte is out of range
- added the following methods of TFeatureMatrix: RemoveFeature, SetFeatType, RenumberFeatures, GenerateFeatNames

- SDL_filesys

- the new property ParentWnd of the TUnivSaveDialog allows to assign a parent window in order to control the position of the default dialog
- the functions DateTimeToFileTime and FileTimeToDateTime convert file times to date times and vice versa.
- the functions GetFileDates and SetFileDates support the access of file dates
- the functions IsValidFileName and ReplaceInvalidFileNameChars test and process invalid filenames
- the function GetMemoryStatus retrieves the available system memory
- the function IsFN83CompliantPath checks for Windows 8.3 compliant filenames
- the function GetMacAddress retrieves the MAC address of the network adapter

- SDL_math1

- the function modr calculates the remainder of a floating point division
- the function Squash calculates a sigmoid function
- the function InterpolXYTable now supports both ascending and descending pivot tables
- the new function ProductConsecInts calculates the product of consecutive integers

- SDL_math2

- the function CalcRanks calculates the ranks of data in a vector
- the function ReducePolygon allows to remove superfluous vertices from a polygon
- the function CreateSigmoidArray fills an array with values of the sigmoid function
- the function CreateGaussianPeaks generates a signal based on Gaussian peaks
- the function Gauss2D fill an array with value from a Gaussian radial basis function
- the functions ApplyCompassKernel and ApplyKirschKernel filter a 2D matrix by the compass and the Kirsch kernel, respectively
- the new function KernelConvolve is a general 2D kernel convolving function
- TMathExpression.HelperObject implemented
- the function ExtractVarNames scans a mathematical expression for variable names
- the functions ConvertFromDiffPolygon and ConvertToDiffPolygon allow to convert polygons between absolute and relative coordinates

- SDL_matrix

- TMat4D.LoadBinary now checks whether the file is too big for the 32-bit version
- implemented TMat4D.CopyVectorToPixel and TMat4D.CopyPixelToVector
- the LoadBinaryNoFmtCheck has been implemented to be able to load the old binary data format (which did not contain information on the numeric format)
- the methods LoadBinary and SaveBinary have been extended to all four kinds of matrices (TMatrix, TIntMatrix, TMat3D and TMat4D)
- the new methods RemoveRow and RemoveColumn delete specific columns or rows
- the method Read4DLayer reads layer data from a binary TMat4D file
- the method Read4DLayerAndAccumulate accumulates layer data obtained from binary TMat4D files
- the new method TMat4DAccumulateLayer supports the accumulation of layers
- the following methods of TMat4D have been converted to functions: AppendToBinaryFile, LoadBinary, ReadBinary, ReadLayer and SaveBinary
- the new overloaded method TMat4D.FillLayer allows to fill a particular layer with differently distributed values
- the method TMat4D.CopyPixelTo1DArray allows to copy a pixel of the 4D datacube
- the methods TMatrix.Fill, TMatrix.FillRandomGauss and TMatrix.FillRandomUniform are now available in a second overloaded version
- the method CalcHatMatrix calculates the hat matrix
- implemented ExportAsASC and ImportASC
- the classes TMatrix, TIntMatrix, TMat3D and TMat4D now provide public access to their internal data array if SDLPUBLICMAT is defined
- added new overloaded versions of CopyFromArray and CopyToArray
- added the method TMat3D.MeanVar

- SDL_membl

- first implementation of the memory based learner (aka. kNN)

- SDL_ntabed

- the new property ShowCellCursor controls the visibility of the cell cursor
- the new event OnClear allows to replace the clear routine by user-defined code
- bug fix: selection of TNTabEd was wrong after pasting data via PopupMenuClickExtClip

- SDL_openarrays

- the function IsDichotomous tests whether the values of an array are dichotomous
- the function SortAndRemoveDuplicates sorts array values and removes duplicates
- the function SaveArrayAsImg allows to save a matrix as an image (BMP, PNG, JPG or clipboard)
- the functions ReadBinaryArrayHeader, LoadBinaryArray and SaveBinaryArray have been extended to support 3D and 4D matrices
- the functions RemoveColumn and RemoveRow delete columns and rows of an array
- the function CloneAndReverseArray clones an array and reverses the order of the elements
- the function FindInArray search for a value in an array (both integers and strings)
- the function SumOfSquaredDiffs calculates the sum of squared differences
- the function DistanceOfObjects calculates a multivariate distance
- the function FillArrayMasked allows to fill masked regions of a 2-dimensional matrix
- the functions SortArray and ShuffleArray sorts and randomizes one-dimensional arrays, respectively
- the function CalcHatMatrix calculates the hat matrix of a two-dimensional array
- the function EdgeVector calculates various parameters along the edge of a two-dimensional array
- the functions LoadBinaryArray and SaveBinaryArray load and save the 2D open arrays in binary form
- the function ReadBinaryArrayHeader reads the header of a binary array file
- BoolToNumArray converts a boolean array to a dichotomous numeric array
- the function FloodFillArray implements a flood filling algorithm for matrices
- DichotomizeArray extended to support more array types
- implemented an overloaded version of PercentileArray which supports 2-dim. arrays
- FindInSortedArray allows a quick search for array elements
- CloneArray extended to deal with single precision arrays
- InvertArray inverts boolean arrays
- MinMaxArray extended to TSingleArray
- MinArray extended to return the found positions of the minima for TIntArray and TInt2DArray
- MaxArray extended to support TInt3DArray and TInt4DArray
- PercentileArray calculates a quantile of the array values
- FrequDistOfArray calculates the frequency distribution of array values
- DichotomizeArray allows to create a boolean matrix from a numeric matrix
- FillArrayRix fills the array with a running index
- LoadArray loads data from files previously stored by StoreArray
- the functions CopyVectorToArrayColumn and CopyVectorToArrayRow copy a vector to an array
- the function EqualArrays compares two arrays
- bug fix: FillArray of boolean array did not work correctly

- SDL_rchart

- TContourPlot provides a better oversampling resolution for low resolution images
- bug fix: TRChart.Assign did not copy some of the annotation properties
- bug fix: TContourPlot rendered the interpolated (oversampled) pixels at the wrong positions (shifted by half a pixel)
- bug fix: RChart did not correctly calculate the extents of an tkMarkEBar element

- SDL_replist

- the methods TRLData.RemoveColumn and TRLData.InsertColumn allow to delete or insert a column
- the method TRLData.InsertRow inserts a row
- the method TReportListview.RemoveColumn deletes a column of the report listview
- the method TReportListview.InsertColumn inserts a column in the report listview
- SortEnabledState allows to sort the enabled and disabled rows of the report listview separately
- bug fix: reading from XML files did not correctly read data if the number of rows was zero

- SDL_rot3d

- TRot3D supports now an unlimited number of colors of the data points (no longer limited to 32 colors)

- SDL_sdlbase

- the type declaration TDistMode and the definition of the corresponding IDs DistModeId has been moved from SDL_matrix to SDL_sdlbase
- new type declaation TPIntArray for integer point arrays
- the constant array CSVDELIMITERIDS provides now names of CSV delimiters

- SDL_sdlcolors

- the procedures ColorToHSV, HSVtoColor, HSVtoRGB and RGBtoHSV provide conversion routines for the HSV color system
- the procedures ColorToHSL and HSLtoColor convert between TColor and the HSL color model
- the procedures HSLtoRGB and RGBtoHSL convert between HSL and RGB color space
- the functions HSItoColor and ColorToHSI transform a HSI color to the (RGB) TColor and vice versa
- the new method LogTransform allows to create a logarithmic color scale
- the new method TColorArray.ReverseRGB reverses the RGB order
- the new methods TColorArray.Backup and TColorArray.Restore provide a simple backup and restore capability

- SDL_statis

- the new function MedianTest implements the median test
- the new functions Chi2OfContTab and Chi2OfContTabYates calculate the chi-square value of a contingency table
- the new class TCFEvaluator provides an easy way to calculate binary classifier metrics
- the new function AdjustedRandIx calculates the adjusted Rand index
- the new function FriedmanTest provides Friedman's test for homogeneity of groups
- the new function LeveneTest provides Levene's test for equal variances
- the new function Lambda calculates the Lambda value of contingency tables
- the new functions DurbinWatson and DurbinWatsonCrit5pct support the application of a Durbin-Watson test for serial correlation.
- the new function Prob2x2Contingency calculates the probability of a contingency table
- the new function FisherExactTest calculates Fisher's exact test
- the new function PerformChi2DistComp performs a chi
^{2}-test to compare empirical distributions - bug fix: TCrossValidator did not create the matrices XMat and YMat
- bug fix: TCrossValidator.Execute did not correctly recognize the cases when calculating TPRate and FPRate

- SDL_streams

- new function StreamAsByteString reads a byte stream as ASCII string
- the new class TMixedFStream supports the handling of mixed binary/ASCII strings

- SDL_stringl

- the new functions ExtractAfterTrigger and ExtractBeforeTrigger extract substrings
- the new function SplitString splits a string into two halves
- the new function NumberedPosBw searches for a substring backwards
- the function CreateParList has been extended to support boolean arrays as well
- the new function DetectCSVDelimiter scans a string for CSV delimiters
- the new function ConvertVariant returns a string representation of the a variant value

- SDL_univconst

- Math constants uc_MaxInt64 abd uc_lnMaxInt64 added

- SDL_vector

- the new function IsDichotomous tests whether a vector is dichotomous
- implemented ExportAsASC and ImportASC

- SDL_cdata

(news prior to August 2020 removed)