File ojalgo.changes of Package ojalgo

-------------------------------------------------------------------
Wed Dec 24 21:14:30 UTC 2025 - Anton Shvetz <shvetz.anton@gmail.com>

- Update to v56.1.1
  * Added
    ~ org.ojalgo.matrix
      + There was a problem with GenericStore factory type
        declarations and usage.
- Update to v56.1.0
  * Added
    ~ org.ojalgo.data
      + New package org.ojalgo.data.proximity containing various
        distance and similarity calculation utilities.
      + Spectral clustering: New
        org.ojalgo.data.cluster.SpectralClusterer implementing
        spectral clustering over feature vectors using an RBF
        similarity graph and the symmetric normalised Laplacian.
        Factory methods FeatureBasedClusterer.newSpectral(int) and
        newSpectral(DistanceMeasure,int) create instances.
      + Clustering facade: New
        org.ojalgo.data.cluster.FeatureBasedClusterer facade with
        factory methods newAutomatic(...), newGreedy(...),
        newKMeans(...), and newSpectral(...). Adds a generic
        cluster(Collection<T>, Function<T,float[]>) that maps
        arbitrary items to feature vectors and returns clusters as
        List<Map<T,float[]>>.
      + Automatic k selection: New
        org.ojalgo.data.cluster.AutomaticClusterer that derives
        thresholds from distance statistics to seed/refine clusters
        (k-means under the hood).
    ~ org.ojalgo.matrix
      + Spectral decomposition: New Eigenvalue.Spectral interface
        (extends both Eigenvalue and SingularValue) and factory
        convenience Eigenvalue.Factory#makeSpectral(int) for normal
        (in particular symmetric / Hermitian) matrices, exposing a
        decomposition that can simultaneously be treated as an
        eigenvalue- and singular value decomposition. Includes
        isSPD() convenience check.
      + Static utility helpers: Eigenvalue.reconstruct(Eigenvalue)
        plus SingularValue.invert(...), SingularValue.solve(...)
        and SingularValue.reconstruct(...) centralise pseudoinverse
        / solve / reconstruction logic.
      + New Quasi-Minimal Residual (QMR) and Minimal Residual
        (MINRES) iterative solvers for general nonsymmetric square
        and symmetric (possibly indefinite) systems, respectively.
        Contributed by @Programmer-Magnus.
    ~ org.ojalgo.concurrent
      + Execute tasks in a separate JVM: New
        ExternalProcessExecutor that runs a specified static method
        or a Serializable Callable/Runnable in an external OS
        process (child JVM). Provides:
        = Hard cancellation and timeouts by killing the process
          tree.
        = Binary IPC framing (MAGIC/VER/LEN/CRC32) over stdio;
          stdout is reserved for protocol frames to avoid
          corruption.
        = Configurable ProcessOptions builder for heap (-Xmx),
          additional JVM args, system properties, environment and
          classpath; sensible defaults for Maven/Gradle test/main
          classpaths.
        = Overloads execute(...), call(...) and run(...) to target
          methods by Method, MethodDescriptor or
          owner/name/parameter types.
        = ProcessWorker main class (child entrypoint) and
          MethodDescriptor describing methods across classloaders.
        = ProcessAwareThread and a process-aware thread factory
          used so that interrupting an owner thread forcibly tears
          down the child process.
      + Thread factory: DaemonPoolExecutor exposes an internal
        process-aware ThreadFactory used by ExternalProcessExecutor
        (threads remain daemon and identifiably named).
      + Collections: MultiviewSet adds isAnyContents() to cheaply
        detect if any backed priority view still has queued
        entries.
    ~ org.ojalgo.machine
      + JavaType adds utilities box(Class<?>), unbox(Class<?>) and
        resolveType(String) to convert between primitive/wrapper
        types and resolve primitive/array/class names (e.g.
        "int[]", "java.lang.String[]").
  * Changed
    ~ org.ojalgo.data
      + Clustering refactor and performance: Greedy and k-means
        implementations now share a PointDistanceCache for pairwise
        distances, centroids and initialisation (median-based
        threshold), reducing allocations and repeated work.
      + Consistent factories and results: All clusterers are
        constructed via FeatureBasedClusterer factories and return
        clusters sorted by decreasing size when using the generic
        cluster(Collection<T>, Function<T,float[]>) entry point.
      + Singular Value Decomposition API now uses standard
        nomenclature: diagonal singular value matrix accessor
        changed from getD() to getS() (see Deprecated). Internal
        implementations (DenseSingularValue, RawSingularValue)
        updated accordingly.
      + Performance & allocation improvements in DenseSingularValue
        and RawSingularValue: direct use of internal singular value
        array (s[]), deferred/cached construction of S and inverse,
        centralised solve/invert logic reducing temporary object
        creation.
      + Eigenvalue decomposition updated to integrate spectral
        variant; minor javadoc clarifications and shared
        reconstruction via new static helper.
    ~ org.ojalgo.matrix
      + Internal refactoring in the
        org.ojalgo.matrix.task.iterative package. If you only used
        what was there these changes shouldn't affect you, but if
        you have implemented your own solver it does.
      + Created a Preconditioner interface. Factored the
        Jacobi-presolving out of the ConjugateGradientSolver and
        additionally implemented a Symmetric Successive
        Over-Relaxation (SSOR) preconditioner.
    ~ org.ojalgo.optimisation
      + In ConvexSolver, the iterative Schur complement solver used
        in the active set solver, is now configurable (which
        implementation to use). Use either the
        ConjugateGradientSolver or QMRSolver, or some other
        implementation.
    ~ org.ojalgo.concurrent
      + DivideAndConquer now uses a safer split-and-join: sibling
        tasks are cancelled on failure, causes are propagated, and
        interruption is preserved. The configurable Divider exposes
        threshold(int) and parallelism(IntSupplier);
        ProcessingService#newDivider() returns one bound to its
        executor. Default worker count uses
        OjAlgoUtils.ENVIRONMENT.threads consistently.
      + ProcessingService#divider() is deprecated in favour of
        newDivider() (same behaviour); javadocs clarified for
        compute/map/reduce* regarding uniqueness and hashing
        requirements.
      + DaemonPoolExecutor: internal addition of a process-aware
        thread factory; no behavioural change for existing
        new*ThreadPool(...) helpers.
  * Deprecated
    ~ org.ojalgo.matrix
      + SingularValue#getD() deprecated; use getS() instead.
        (Existing code continues to work; plan to remove in a
        future major release.)
    ~ org.ojalgo.concurrent
      + ProcessingService#divider() in favour of newDivider().
  * Fixed
    ~ org.ojalgo.optimisation
      + Fixed a couple of presolve issues with
        ExpressionsBasedModel and quadratic constraints.
- Update to v56.0.0
  ojAlgo is now modularised into a JPMS named module, and that
  module is named "ojalgo".
  * Added
    ~ org.ojalgo.matrix
      + New MatrixStore:s compressed sparse column (CSC) and
        compressed sparse row (CSR) implementations named R064CSC
        and R064CSR (primitive double, R064, only). Any/all of the
        previously existing sparse MatrixStore implementations
        SparseStore, RowsSupplier and ColumnsSupplier can be
        converted to either of these new formats.
      + New utility Eigenvalue#sort function that allow to sort
        eigenvalue-vector pairs in descending order. This existed
        before as a private method, and was used internally. Now
        it's publicly available.
      + New sparse LU decomposition, and it's updatable using
        Forrest-Tomlin.
    ~ org.ojalgo.optimisation
      + Many improvements to the LP solvers (improved basis
        representation, candidate selection and more).
    ~ org.ojalgo.scalar
      + The Scalar interface now defines a isZero() method.
  * Changed
    ~ org.ojalgo.array
      + Refactored the constructors, factories and builders for the
        classes in the org.ojalgo.array package. Most things should
        work as before, but the generics signature of
        DenseArray.Factory has changed. Instead of
        DenseArray.Factory<ELEMENT_TYPE> it is now
        DenseArray.Factory<ELEMENT_TYPE, ARRAY_TYPE>. What you may
        want to do is to instead use a subclass like
        PrimitiveArray.Factory.
      + SparseArray is now restricted to Integer#MAX_VALUE size
        (used to be Long#MAX_VALUE). There's been a number of
        changes internally in order to make it perform better at
        smaller sizes. Also added a bunch of new stuff to support
        sparse functionality in the org.ojalgo.matrix package.
    ~ org.ojalgo.machine
      + The (use of the) system property "shut.up.ojAlgo" is
        removed. Users will no longer be warned about missing
        hardware profiles. Instead this is now always estimated.
        The previous fallback estimation logic has been improved
        and promoted to be the primary solution. Users are still
        encouraged to provide hardware profile instances, but these
        are now instead used as test cases for the estimation
        logic.
    ~ org.ojalgo.matrix
      + For symmetric matrices the Eigenvalue decompositions are
        now always sorted. Previously it varied depending which
        implementation the factory returned. You should still
        always check Eigenvalue.isOrdered() – that a general rule
        for both eigenvalue and singular value decompositions.
      + Cleaned up the InvertibleFactor interface. The 2-arg
        ftran/btran alternatives are removed.
    ~ org.ojalgo.optimisation
      + Tweaking to various parts of ConvexSolver.
      + Multiple changes and improvements to the LinearSolver. The
        number of industry standard netlib models that are solved
        (fast enough to be included) as junit tests cases increased
        from 45 to 78. The LinearSolver has actually been improved
        over several versions, but with this version we see a lot
        of that coming together and working quite well.
      + Reworked the IntegerSolver's branching strategy. It now
        uses pseudo-costs when selecting which variable to branch
        on. The NodeKey now keeps track of the branch depth. This
        is used to implement proper depth-first and breadth-first
        strategies for the deferred nodes. The default set of node
        worker priorities have changed.
      + Reworked the IntegerSolver's cut generation strategy.
    ~ org.ojalgo.type
      + The relative error (epsilon) derived from the precision of
        a NumberContext was previously never smaller than the
        machine epsilon. Now it can be arbitrarily small depending
        only on the specified precision.
  * Fixed
    ~ org.ojalgo.matrix
      + Matrix multiplication performance using RawStore has been
        much improved.
    ~ org.ojalgo.optimisation
      + When using extended precision with the ConvexSolver there
        was a problem when extracting the solution. The solver uses
        Quadruple and in the end the solution is using BigDecimal
        but at an intermediate step it was converted to double.
- Update to v55.2.0
  * Added
    ~ org.ojalgo.optimisation
      + The EBM file format parser now handles comments and empty
        lines in the model file (contributed by Magnus Jansson).
  * Changed
    ~ org.ojalgo.array
      + Better implementation of SparseArray.supplyTo(Mutate1D).
    ~ org.ojalgo.matrix
      + General refactoring in the decomposition package. Shouldn't
        be any api-breaking changes.
      + New interface MatrixDecomposition.Updatable for partial
        updates to decompositions. The existing LU decomposition
        implementations implement this.
    ~ org.ojalgo.optimisation
      + Refactoring to SimplexSolver (significant performance
        improvements with larger/sparse instances).
      + Improved feasibility check for the QP ActiveSetSolver.
      + Removed some unnecessary work, and garbage creation, when
        validation models (contributed by @hallstromsamuel)
    ~ org.ojalgo.scalar
      + When creating rotation Quaternions the angle is now halved
        in the factory method as is standard elsewhere.
        (contributed by @twistedtwin)
- Update to v55.1.2
  * Changed
    ~ org.ojalgo.matrix
      + Minor change to progress logging of the
        ConjugateGradientSolver – sparse iterative equation system
        solver.
    ~ org.ojalgo.optimisation
      + Minor change to method signature of
        ExpressionsBasedModel#addIntegration.
- Update to v55.1.1
  * Added
    ~ org.ojalgo.type
      + The ForgetfulMap gained support for disposer-hooks – code
        that is called when objects are invalidated and removed
        from the cache. Also streamlined the code to create single
        ForgetfulMap.ValueCache<T> instances.
  * Changed
    ~ org.ojalgo.optimisation
      + The configuration option options.experimental is no longer
        used to switch between the old/classic and new/dual simplex
        solvers. Instead there are specific configurations for this
        – options.linear().dual() and options.linear().primal(). If
        you don't specify which to use, there is internal logic
        that switches implementation based on problem size.
      + Various internal refactoring and numerical tuning to the LP
        solvers.
    ~ org.ojalgo.type
      + NumberContext now explicitly exposes the relative and
        absolute errors as getRelativeError() and
        getAbsoluteError(), and the epsilon() method has been
        redefined to return the maximum of those two values.

-------------------------------------------------------------------
Wed Jan 15 00:19:43 UTC 2025 - Anton Shvetz <shvetz.anton@gmail.com>

- Update to v55.1.0
  * Added
    ~ org.ojalgo.data
      + New package org.ojalgo.data.cluster with k-means and greedy
        clustering algorithms implemented, as well as
        generalisations, specialisations and combinations of those.
      + DataProcessors now has a method Transformation2D
        newRowsTransformer(Function<SampleSet, UnaryFunction>) to
        complement the existing newColumnsTransformer.
    ~ org.ojalgo.random
      + SampleSet gained a couple of methods; getMidrange() and
        getRange().
  * Changed
    ~ org.ojalgo.array
      + Sorting is no longer parallel/multi-threaded. The previous
        implementations made use of the common ForkJoinPool.
    ~ org.ojalgo.data
      + Creating a JMX bean (to monitor throughput) with BatchNode
        is now optional, and the default is to not create them.
        (Used to always create them.)
    ~ org.ojalgo.netio
      + The FromFileReader and ToFileWriter interfaces and their
        implementations used to extend and delegate to code in the
        org.ojalgo.type.function package. Much of what was in that
        package has been moved to and merged with stuff in the
        org.ojalgo.netio package.
      + The FromFileReader.Builder and ToFileWriter.Builder
        builders now use generic "file" types. They used to be
        implemented in terms of Java's File, but can now be
        anything like Path or ojAlgo's own SegmentedFile,
        ShardedFile or InMemoryFile.
      + The DataInterpreter gained some additional standard
        interpreters, as well as utilities to convert back and
        forth between byte[].
    ~ org.ojalgo.random
      + SamleSet no longer makes use of parallel/multi-threaded
        sorting – to avoid making use of the common ForkJoinPool.
    ~ org.ojalgo.type
      + The AutoSupplier and AutoConsumer interfaces are removed.
        They used to provide abstract/generalised functionality for
        FromFileReader and ToFileWriter in the org.ojalgo.netio
        package. All features and functionality still exists, but
        in terms of the more specific/concrete FromFileReader and
        ToFileWriter. If you directly referenced any of the various
        utility methods in AutoSupplier or AutoConsumer they're now
        gone. They primarily existed so that FromFileReader and
        ToFileWriter could access them (from another package). The
        features and functionality they provided are now available
        through other classes in the org.ojalgo.netio package –
        like FromFileReader.Builder and ToFileWriter.Builder.
  * Fixed
    ~ org.ojalgo.data
      + In DataProcessors, the CENTER_AND_SCALE transformation
        didn't do exactly what the documentation said it. That's
        been fixed.
- Update to v55.0.2
  * Added
    ~ org.ojalgo.type
      + A new cache implementation named ForgetfulMap. To save you
        adding a dependency on Caffeine or similar.
    ~ org.ojalgo.optimisation
      + There is a new OptimisationService implementation with
        which you can queue up optimisation problems to have them
        solved. This service is (will be) configurable regarding
        how many problems to work on concurrently, and how many
        threads the solvers can use, among other things.
  * Changed
    ~ org.ojalgo.optimisation
      + Refactoring and additions to what's in the
        org.ojalgo.optimisation.service package. They're breaking
        changes, but most likely no one outside Optimatika used
        this.
      + Minor internal changes to how the IntegerSolver works.
        There's now an equal number of worker threads per
        worker-strategy.
  * Deprecated
    ~ org.ojalgo.type
      + TypeCache is replaced by ForgetfulMap.ValueCache.
- Update to v55.0.1
  * Added
    ~ org.ojalgo.concurrent
      + Addition to ProcessingService that simplify concurrently
        taking items from a BlockingQueue.
  * Changed
    ~ org.ojalgo.random
      + Refactored SampleSet (internally) to be better aligned with
        recent changes to other parts of the library. Primarily the
        class now uses int indices for all internal calculations.
        Also added a new java.util.stream.Collector implementation
        to simplify SampleSet creation from streams.
  * Fixed
    ~ org.ojalgo.optimisation
      + Fixed a bug where the (new) LP solver would fail to
        recognise unbounded problems and instead return a solution
        with infinite values, stating it to be optimal.

-------------------------------------------------------------------
Sun Oct  6 20:21:39 UTC 2024 - Anton Shvetz <shvetz.anton@gmail.com>

- Update to v55.0.0
  * Changed
    ~ org.ojalgo.function
      + The BigDecimal valued constants in BigMath for E, PI and
        GOLDEN_RATIO are redefined with more decimal digits.
      + The BigDecimal valued functions in BigMath for EXP, LOG,
        SIN and COS are re-implemented to produce much more
        accurate results.
    ~ org.ojalgo.optimisation
      + The new LP solver implementation is now the default
        alternative.
      + The two classes LinearSolver.GeneralBuilder and
        LinearSolver.StandardBuilder are replaced by a common
        LinearSolver.Builder. Consequently the methods
        newGeneralBuilder() and newStandardBuilder() are deprecated
        and replaced by newBuilder().
    ~ org.ojalgo.scalar
      + Re-implemented Quadruple's divide method using primitives
        only. (Previously delegated to BigDecimal.)
  * Deprecated
    ~ org.ojalgo.data
      + Everything related to downloading (historical) financial
        data is deprecated. It's already broken (due to changes in
        the external "service") and we're not going to try fix it.
  * Removed
    ~ org.ojalgo.structure
      + Removed a bunch of stuff that was deprecated in Factory1D,
        Factory2D and FactoryAnyD and/or some of their
        sub-interfaces.

-------------------------------------------------------------------
Thu Jun 13 17:18:48 UTC 2024 - Anton Shvetz <shvetz.anton@gmail.com>

- Update to v54.0.0
  * Added
    ~ org.ojalgo.matrix
      + Added the ability to specify the initial capacity of a
        SparseStore.
      + More efficient sparse to sparse copying of SparseStore.
      + New option to use a builder when initially setting the
        elements of a SparseStore.
      + When setting (or adding to) elements there used to be
        internally synchronized code. This is no longer the case.
        Instead you must call synchronised() to get a synchronized
        mutating wrapper. This should make common single threaded
        usage faster.
      + The sparse BasicMatrix builder no longer has all the
        methods that really only made sense with dense
        implementation. The sparse builder implementation changed
        to use that new SparseStore.Builder.
    ~ org.ojalgo.structure
      + There are new methods fillCompatile(...),
        modifyCompatile(...) and onCompatile(...) to complement the
        already existing "fill", "modify" and "on" methods.
        (Inspired by MATLAB's concept of compatible array sizes for
        binary operation.)
      + The factory interfaces got methods to construct instances
        of compatible sizes/shapes. (Inspired by MATLAB's concept
        of compatible array sizes for binary operation.)
  * Changed
    ~ org.ojalgo.matrix
      + The classes Primitive64Store and Primitive32Store have been
        renamed R064Store and R032Store. These classes are central
        to ojAlgo. The effect of this name change is widespread.
        ojAlgo has been transitioning to a new naming scheme over
        several versions now, but these classes were left untouched
        so far (in part because of how central they are). Now, to
        complete the work, it's done! No deprecations, just did it.
        Apart from the name change the classes are identical.
      + Vector space method like "add" and "subtract" have been
        redefined to no longer throw exceptions if dimensions are
        not equal, but instead broadcast/repeat rows or columns.
        (Inspired by MATLAB's concept of compatible array sizes for
        binary operation.)
    ~ org.ojalgo.optimisation
      + Refactored, cleaned up deprecations, primarily regarding
        how model variables are created. They can no longer be
        instantiated independent of a model. You have to first
        create the model, and then use that as the variable (and
        expression) factory.
    ~ org.ojalgo.structure
      + Refactored the builder/factory interfaces to better support
        creating immutable 1D, 2D or AnyD structures. This has
        implications for most ojAlgo data structures. There are
        deprecations in all factory classes, but everything that
        worked before still works (I believe).
      + The Structure*D, Access*D, Mutate*D and Factory*D
        interfaces have all been refactored to make working with
        int indices (rather than long) the primary alternative.
        Huge data structures, that require long indices, are still
        suported – no change in this regard. In reality only a few
        implementations actually allowed to create such large
        instances. This change is to allow all the other classes to
        be implemented using int and not bother (so much) with
        long. Users of the various classes in ojAlgo should see no
        difference. If you have created your own classes
        implementing some of ojAlgo's interfaces you will probably
        need to implement some additional methods in those classes.

-------------------------------------------------------------------
Fri May 24 09:45:31 UTC 2024 - Anton Shvetz <shvetz.anton@gmail.com>

- Update to v53.3.0
  * Added
    ~ org.ojalgo.function
      + Some additional PowerOf2 utilities.
    ~ org.ojalgo.netio
      + SegmentedFile that divides a large file in segments to
        enable reading those in parallel using memory mapped files
        (memory mapped file segments).
    ~ org.ojalgo.type
      + New primitive number parsers in NumberDefinition. They take
        CharSequence rather than String as input and do not create
        any intermediate objects. In particular the parseDouble
        performs much better than its counterpart in Double. The
        downside is that it only handles a limited plain format.
  * Changed
    ~ org.ojalgo.concurrent
      + The reduce(...) methods of ProcessingService are renamed
        (deprecated) reduceMergeable(...). In addition there are
        now also reduceCombineable(...).
    ~ org.ojalgo.data
      + The processMapped(...) method of BatchNode is renamed
        (deprecated) processMergeable(...). In addition there is
        now also processCombineable(...).
      + The reduceMapped(...) method of BatchNode is renamed
        (deprecated) reduceByMerging(...). In addition there is now
        also reduceByCombining(...).
    ~ org.ojalgo.type
      + The merge(Object) method of TwoStepMapper has been removed.
        Instead there are two new sub-interfaces
        TwoStepMapper.Mergeable and TwoStepMapper.Combineable.
- Update to v53.2.0
  * Added
    ~ org.ojalgo.data
      + There is a new package org.ojalgo.data.transform that (so
        far) contain implementations of the ZTransform and the
        DiscreteFourierTransform. Most notably ojAlgo now contains
        an implementation of the FFT algorithm.
      + ImageData has been extended with features to work with
        Fourier transforms of images, as well as a Gaussian blur
        function.
    ~ org.ojalgo.function
      + The PolynomialFunction interface now extends
        org.ojalgo.algebra.Ring which means it is now possible to
        add and multiply polynomials. There’s also been some
        refactoring of the internals of the polynomial
        implementations.
      + Two new PrimitiveFunction.Unary implementations
        PeriodicFunction and FourierSeries. It is now possible to
        take any (periodic) function and, via FFT, get a Fourier
        series approximation of it (1 method call).
    ~ org.ojalgo.scalar
      + Some minor additions to ComplexNumber. It is now possible
        to do complex number multiplication without creating new
        instances (calculate the real and imaginary parts
        separately). Added utilities to get the unit roots.

-------------------------------------------------------------------
Sat Jan 20 10:35:19 UTC 2024 - Anton Shvetz <shvetz.anton@gmail.com>

- Update to v53.1.1
  * Added
    ~ org.ojalgo.data
      + New ImageData class that wraps a
        java.awt.image.BufferedImage and implements MatrixStore.
        Further it adds a few utility methods to simplify working
        with image data - convert to grey scale, re-sample (change
        size), separate the colour channels…
    ~ org.ojalgo.matrix
      + It is now possible to create a matrix decomposition
        instance and calculate the decomposition with 1 method
        call. Previously you had to first call make on the factory
        instance and then decompose on the decomposition instance.
        Now it is possible to call decomposed directly on the
        factory instance.
      + The SingularValue interface now defines a method to
        reconstruct a matrix using a specified number of singular
        values.

-------------------------------------------------------------------
Tue Sep 26 12:29:58 UTC 2023 - Anton Shvetz <shvetz.anton@gmail.com>

- Initial packaging with v52.0.1
openSUSE Build Service is sponsored by