-
Notifications
You must be signed in to change notification settings - Fork 6
Rename params (#253) #257
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Rename params (#253) #257
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* first sweep of renaming * fix destroyed types * parameter table column renamed to label * param and param_labels, params!, seem to work * allow partial execution of unit tests * remove non existing tests * fix model unittests * remove unnessary test layer * finish replacing * all unit tests passed * rename param_values -> params * add StatsAPI as dep * add coef and coefnames * rename df => dof (#254) * rename df => dof * import dof from StatsAPI * rename dof file * rename sem_fit => fit * typo * add nobs and fix testsw * add coeftable * fix proximal tests * fix exports and StatsAPI docstrings * fix tests * fix tests * thx evie for the typo :) * fix coeftable --------- Co-authored-by: Maximilian Ernst <[email protected]>
Maximilian-Stefan-Ernst
added a commit
that referenced
this pull request
Mar 18, 2025
* CommutationMatrix type replace comm_matrix helper functions with a CommutationMatrix and overloaded linalg ops * simplify elimination_matrix() * simplify duplication_matrix() * add tests for commutation/dublication/elimination matrices * small unit test fixes * commutation_matrix * vec method * more comm_matrix tests * SemSpecification base type * SemSpecification: use in methods * rename identifier -> param * identifier() -> param_indices() (Dict{Symbol, Int}) * get_identifier_indices() -> param_to_indices() (Vector{Int}) * parameters -> params (Vector{Symbol}) * ParTable: columns[:identifier] => columns[:param] * getindex(EnsParTable, i) instead of get_group() * replace no-op ctors with convert(T, obj) convert() is a proper method to call to avoid unnecessary construction, ctor semantics requires that a new object is constructed * ParamTable: convert vars from Dict to fields make the type immutable * ParamTable: update StenGraph-based ctor * use graph as a main parameter * simplify rows processing * don't reallocate table.columns Co-authored-by: Maximilian-Stefan-Ernst <[email protected]> * rename Base.sort() to sort_vars() because the ParTable contains rows and columns, it is not clear, what sort() actually sorts. Co-authored-by: Maximilian-Stefan-Ernst <[email protected]> * don't import == * don't import push!() * don't import DataFrame * remove no-op push!() * ParTable ctor: simplify rows code * use named tuples * reduce code duplication * use colnames vector instead of position_names Dict * ParTable: full support for Iterator iface * RAMConstant: simplify * declare RAMConstant field types * refactor constants collection to avoid code duplication * RAMMatrices: optimize F_indices init * RAMMatrices: declare types for all fields * RAMMatrices: option to keep zero constants * nonunique() helper function * add check_vars() and check_params() * RAMMatrices ctor: dims and vars checks * RAMMatrices: cleanup params index * simplify parameters() function to return just a vector of params * RAMMatrices ctor: use check_params() * include RAMMatrices before EnsParTable * fix EnsParTable to Dict{RAMMatrices} convert * this method is not RAMMatrices ctor, it is Dict{K, RAMMatrices} convert * use comprehension to construct dict * DataFrame(EnsParTable) * params() API method * remove n_par.jl * remove identifier.jl * EnsParTable ctor: enforce same params in tables * fix EnsParTable container to Dict{Symbol, ParTable} * don't use keywords for main params as it complicates dispatch Co-authored-by: Maximilian-Stefan-Ernst <[email protected]> * formatting fixes * ParTable ctor: allow providing columns data * update_partable!() cleanup + docstring * update_partable!(): SemFit methods use basic one * ParTable: add explicit params field * n_par() -> nparams() for clarity and aligning to Julia naming conventions * param_values(ParTable) Co-authored-by: Maximilian-Stefan-Ernst <[email protected]> * lavaan_param_values(lav_fit, partable) * compare_estimates() -> test_estimates() * do tests inside * use param_values()/lavaan_param_values() * update_partable!(): dict-based generic version Co-authored-by: Maximilian-Stefan-Ernst <[email protected]> * ParTable: getindex() returns NamedTuple so the downstream code doesn't rely on the order of tuple elements * ParTable: graph-based ctor supports params= kw * rename parameter_type to relation for clarity * sem_summary(): cleanup filters * fix sem_summary method for partable * show(ParTable): suppress NaNs * sort_vars!(ParTable): cleanup * Project.toml: disable SymbolicUtils 1.6 causes problems with sparsehessian(). It is a temporary fix until the compatibility issues are resolved in Symbolics.jl * Project.toml: support StenoGraphs 0.3 * RAM ctor: better error for missing meanstruct * add function param_indices * start fixing docs * fix regularization docs * introduce formatting error * update_start(): fix docstring typo Co-authored-by: Maximilian-Stefan-Ernst <[email protected]> * push!(::ParTable, Tuple): check keys compat Co-authored-by: Maximilian-Stefan-Ernst <[email protected]> * SemObsCov ctor: restrict n_obs to integer don't allow missing n_obs * fixup param_indices() * common.jl: common vars API methods * SemSpecification: vars API * RAMMatrices: vars API * ParamTable: vars API * SemImply: vars and params API * RAM imply: use vars API * RAMSymbolic: use vars API * start_simple(): use vars API * starts_fabin3: use vars API * remove get_colnames() replaced by observed_vars() * remove get_n_nodes() replaced by nvars() * get_data() -> samples() and add default implementation samples(::SemObserved) * SemObsData: remove rowwise * it is unused * if ever rowwise access would be required, it could be done with eachrow(data) without allocation * AbstractSemSingle: vars API * rename n_obs() -> nsamples() * rename n_man() -> nobserved_vars() for missing data pattern: nobserved_vars() -> nmeasured_vars(), obs_cov/obs_mean -> measured_cov/measured_mean * move Sem methods out of types.jl * rows(::SemObservedMissing) -> pattern_rows() * fix formatting * samples(SemObsCov) throws an exception * SemObserved tests: refactor and add var API tests * ParTable(graph): group is only valid for ensemble * ParTable(graph): fix NaN modif detection * export vars, params and observed APIs * refactor SemSpec tests * add Sem unit tests * dont allow fixed and labeled parameters * add test for labeled and fixed parameters * remove get_observed() does not seem to be used anywhere; also the method signature does not match Julia conventions * fix ridge eval * MeanStructure, HessianEvaluation traits * replace has_meanstrcture and approximate_hessian fields with trait-like typeparams * remove methods for has_meanstructure-based dispatch * obj/grad/hess: refactor evaluation API the intent of this commit is to refactor the API for objective, gradient and hessian evaluation, such that the evaluation code does not have to be duplicates across functions that calculate different combinations of those functions * introduce EvaluationTargets class that handles selection of what to evaluate * add evaluate!(EvalTargets, ...) methods for loss and imply objs that evaluate only what is required * objective!(), obj_grad!() etc calls are just a wrapper of evaluate!() with proper targets * se_hessian(): rename hessian -> method for clarity * se_hessian!(): optimize calc * explicitly use Cholesky factorization * H_scaling(): cleanup remove unnecesary arguments * SemOptOptim: remove redundant sem_fit() by dispatching over optimizer * SemOptNLopt: remove redundant sem_fit() by dispatching over optimizer * SemOptOptim: use evaluate!() directly no wrapper required * SemOptNLopt: use evaluate!() directly * SemWLS: dim checks * fixup formatting * WLS: use 5-arg mul!() to reduce allocations * ML: use 5-arg mul!() to reduce allocations * FIML: use 5-arg mul! to avoid extra allocation * fix the error message Co-authored-by: Maximilian Ernst <[email protected]> * HessianEvaluation -> HessianEval * MeanStructure -> MeanStruct * SemImply: replace common type params with fields * close #216 * close #205 * update EnsembleParameterTable docs and add methods for par table equality * close #213 * close #157 * add method for * format * increase test sample size * Project.toml: update Symbolics deps * tests/examples: import -> using no declarations, so import is not required * add ParamsArray replaces RAMMatrices indices and constants vectors with dedicated class that incapsulate this logic, resulting in overall cleaner interface A_ind, S_ind, M_ind become ParamsArray F_ind becomes SparseMatrixCSC parameters.jl is not longer required and is removed * materialize!(Symm/LowTri/UpTri) * ParamsArray: faster sparse materialize! * ParamsArray: use Iterators.flatten() (faster) * Base.hash(::ParamsArray) * colnames -> vars * update_partable!(): better params unique check * start_fabin3: check obs_mean data & meanstructure * params/vars API tweaks and tests * generic imply: keep F sparse * tests helper: is_extended_tests() to consolidate ENV variable check * Optim sem_fit(): use provided optimizer * prepare_start_params(): arg-dependent dispatch * convert to argument type-dependent dispatch * replace start_val() function with prepare_start_params() * refactor start_parameter_table() into prepare_start_params(start_val::ParameterTable, ...) and use the SEM model param indices * unify processing of starting values by all optimizers * support dictionaries of values * prepare_param_bounds() API for optim * u/l_bounds support for Optim.jl * SemOptimizer(engine = ...) ctor * SEMNLOptExt for NLopt * NLopt: sem_fit(): use provided optimizer * SEMProximalOptExt for Proximal opt * merge diff/*.jl optimizer code into optimizer/*.jl * Optim: document u/l bounds * remove unused options field from Proximal optimizer * decouple optimizer from Sem model Co-authored-by: Maximilian Ernst <[email protected]> * fix inequality constraints test NLopt minimum was 18.11, below what the test expected * add ProximalSEM tests * optim/documentation.jl: rename to abstract.jl * ext: change folder layout * Project.toml: fix ProximalOperators ID * docs: fix nsamples, nobserved_vars * cleanup data columns reordering define a single source_to_dest_perm() function * SemObservedCov: def as an alias of SemObservedData reduces code duplication; also annotate types of ctor args now samples(SemObsCov) returns nothing * SemObserved: store observed_vars add observed_vars(data::SemObserved) * nsamples(observed::SemObserved): unify * FIML: simplify index generation * SemObservedMissing: refactor * use SemObsMissingPattern struct to simplify code * replace O(Nvars^2) common pattern detection with Dict{} * don't store row-wise, store sub-matrices of non-missing data instead * use StatsBase.mean_and_cov() * remove cov_and_mean(): not used anymore StatsBase.mean_and_cov() is used instead * SemObserved: unify data preparation - SemObservedData: parameterize by cov/mean eltype instead of the whole container types Co-authored-by: Maximilian Ernst <[email protected]> * tests: update SemObserved tests to match the update data preparation behaviour * prep_data: warn if obs_vars order don't match spec * SemObsData: observed_var_prefix kwarg to specify the prefix of the generated observed_vars if none provided could be inferred, defaults to :obs * ParTable: add graph-based kw-only constructor * Project.toml: fix ProximalAlgorithms to 0.5 v0.7 changed the diff interface (v0.6 was skipped) * switch to ProximalAlgorithms.jl v0.7 also drop ProximalOperators and ProximalCore weak deps * move params() to common.jl it is available for many SEM types, not just SemSpec * RAM ctor: use random parameters instead of NaNs to initialize RAM matrices simplify check_acyclic() * move check_acyclic() to abstract.jl add verbose parameter * AbstractSem: improve imply/observed API redirect * imply -> implied, SemImply -> SemImplied * imply -> implied: file renames * close #158 * close #232 * Update ext/SEMProximalOptExt/ProximalAlgorithms.jl * suppress uninformative warnings during package testing * turn simplification of symbolic terms by default off * new version of StenoGraph results in fewer deprication notices * fix exporting structs from package extensions * fix NLopt extension * fix Proximal extension * fix printing * fix regularization docs * start reworking docs * finish rewriting docs * rm ProximalSEM from docs deps * fix docs * fix docs * try to fix svgs for docs * try to fix svgs for docs * update README * bump version * give macos some slack and format * Rename params (#253) (#257) * first sweep of renaming * fix destroyed types * parameter table column renamed to label * param and param_labels, params!, seem to work * allow partial execution of unit tests * remove non existing tests * fix model unittests * remove unnessary test layer * finish replacing * all unit tests passed * rename param_values -> params * add StatsAPI as dep * add coef and coefnames * rename df => dof (#254) * rename df => dof * import dof from StatsAPI * rename dof file * rename sem_fit => fit * typo * add nobs and fix testsw * add coeftable * fix proximal tests * fix exports and StatsAPI docstrings * fix tests * fix tests * thx evie for the typo :) * fix coeftable --------- Co-authored-by: Aaron Peikert <[email protected]> * add param_labels docstring * fix docs * fix docs * fix docs --------- Co-authored-by: Alexey Stukalov <[email protected]> Co-authored-by: Alexey Stukalov <[email protected]> Co-authored-by: Alexey Stukalov <[email protected]> Co-authored-by: Alexey Stukalov <[email protected]> Co-authored-by: Aaron Peikert <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
first sweep of renaming
fix destroyed types
parameter table column renamed to label
param and param_labels, params!, seem to work
allow partial execution of unit tests
remove non existing tests
fix model unittests
remove unnessary test layer
finish replacing
all unit tests passed
rename param_values -> params
add StatsAPI as dep
add coef and coefnames
rename df => dof (rename df => dof #254)
rename df => dof
import dof from StatsAPI
rename dof file
rename sem_fit => fit
typo
add nobs and fix testsw
add coeftable
fix proximal tests
fix exports and StatsAPI docstrings
fix tests
fix tests
thx evie for the typo :)
fix coeftable