Changes in version 1.3                         

  - lemur now automatically inserts the variables from the design
    formula into the group_by argument for find_de_neighborhoods.
    (thanks Katha for pushing for this feature)
  - The formula parsing automatically detects global variables and adds
    them to the colData. This avoids problems with the random test /
    training assignment.
  - Duplicate column names in colData are now longer allowed.
  - Require harmony version >= 1.2.0 (thanks Maija for reporting the
    problem)

                         Changes in version 1.1                         

  - Make predict function faster and less memory intensive for subset
    fits.
  - Speed-up internal function get_groups
  - Gracefully handle duplicated column names in colData(fit)
  - Give better error message in test_de if cond(..) is used for a fit
    that was not specified with a design formula (thanks
    @MaximilianNuber for reporting)

                         Changes in version 1.0                         

  - Bug fix in subsetting logic affecting predict and test_de. The
    problem occured if a fit object was subsetted with indices or gene
    names and the order changed, and resulted in a wrong order of the
    predictions.

                    Changes in version 0.99.1-0.99.8                    

  - Submission to Bioconductor, thus the jump in version number.
  - Adjusted internal code to handle breaking changes in harmony v1.0.0.
  - Multiple small fixes to comply with Bioconductor guidelines (see
    https://github.com/Bioconductor/Contributions/issues/3152)

                       Changes in version 0.0.27                        

  - Instead of include_complement, the find_de_neighborhoods function
    gains a add_diff_in_diff argument. If it is true, the function
    calculates the difference between the DE results inside the
    neighborhood vs. outside.
  - Change indices columns to neighborhood and store list of cell name
    vectors in output of find_de_neighborhoods.
  - Enforce unique column and row names.

                       Changes in version 0.0.26                        

  - Make the neighborhoods more consistent: (1) include cells which are
    connected to many cells inside the neighborhood, (2) exclude cells
    from the neighborhood which are not well connected to the other
    cells in the neighborhood.
  - Add a control_parameters argument to find_de_neighborhoods.
  - Add BiocNeighbor as a dependency.

                       Changes in version 0.0.25                        

  - Detect problematic neighborhoods and skip them.
  - Replace test_data_cell_size_factors by size_factor_method, which is
    more flexibel. Setting size_factor_method = "ratio" uses the size
    factor method described in the original DESeq paper

                       Changes in version 0.0.24                        

  - Fix bug in find_de_neighborhoods that meant that accidentally
    additionally zeros where included in each neighborhood pseudobulk.
    The test should have more power now.
  - Expose min_neighborhood_size argument in find_de_neighborhoods.
  - Add test_data_cell_size_factors argument to find_de_neighborhoods
    which is useful if the function is called with a subsetted fit
    argument.

                       Changes in version 0.0.23                        

  - Improve alignment functions: simplify algorithm, find linear
    approximation to Harmony's steps, include an intercept.
  - Avoid calling private methods from harmony.
  - Convert character columns in colData to factors to avoid problems
    when dividing data into test and training data.
  - Fix bug in find_de_neighborhoods where I didn't embrace an argument.
  - Remove BiocNeighbors dependency.

                       Changes in version 0.0.21                        

  - Minor bug fix in find_de_neighborhoods. The function threw an error
    if alignment_design != design.
  - Better error messages if find_de_neighborhoods is called without
    having called test_de before.

                       Changes in version 0.0.20                        

  - Change defaults for find_de_neighborhoods. Increase the
    ridge_penalty and add a min_neighborhood_size = 10 argument to avoid
    creation of very small neighborhoods.

                       Changes in version 0.0.19                        

  - Add new test_fraction argument to lemur() function. It automatically
    defines a hold-out datasets for the fitting step. These hold-out
    data is used to infer the differential expression of the
    neighborhoods in find_de_neighborhoods. This change addresses the
    double-dipping problem, where it was previously left to the user to
    provide an independent matrix for the find_de_neighborhoods
    function.
  - As a consequence of these changes, the structure of lemur_fit
    objects has changed. They gain three new fields called
    fit$test_data, fit$training_data, and fit$is_test_data.
  - The order and names of the arguments for find_de_neighborhoods has
    changed.

                       Changes in version 0.0.18                        

  - Remove alignment_method field from lemur_fit objects as it was not
    used for anything.

                       Changes in version 0.0.17                        

  - Rename argument name for align_by_template from alignment_template
    to template
  - Tweak algorithm for alignment to take cluster sizes into account
    during optimization

                       Changes in version 0.0.13                        

  - Change in the alignment model. Previously, the method tried to align
    cells using rotations and / or stretching, however, the method could
    not represent reflections! To fix this, I now allow arbitrary linear
    transformations where $R(x) = (I + sum_k x_k V_k)^{-1}$. The new
    alignment is more flexible and easier to infer. The downside is the
    term inside the parantheses can be singular which would lead to an
    error.
  - Skip iteration step: first infer centering and then infer latent
    space. Previously, I iterated between these steps but that either
    didn't add anything or actually degraded the results.
  - Set center = FALSE in find_base_point. Centering the data before
    fitting the base point caused problems and made the data look less
    integrated in some cases.
  - Remove ambient PCA step. This was originally conceived as an
    performance optimization, however it had detrimental effects on the
    inference. Since a few version it was skipped per default, so
    removing it should not change the inference.
  - Add linear_coefficient_estimator to give more flexibility how or if
    the conditions are centered.
  - Reduce the minimum_cluster_membership default to 0.001 in
    align_harmony to make it more sensitive.
  - Make test_global an internal function again until further more
    extensive testing.
  - Remove base_point argument from lemur(). It wasn't used anyways.

  - Refactor find_de_neighborhoods: the function can now combine the
    results of different directions, selection criteria, and pseudobulk
    test (on counts or continuous values). To implement this, I changed
    the names of the arguments and added parameters.
  - Remove many superfluous method generics and only provide the
    accession via $
  - Fix documentation warnings
  - Rename class from 'lemur_fit_obj' to 'lemur_fit'
  - Store 'contrast' in lemur_fit after calling test_de
  - Add option to fit count model in find_de_neighborhoods with edgeR