Skip to content
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

Halos v3 #1043

Merged
merged 63 commits into from
Apr 17, 2023
Merged

Halos v3 #1043

merged 63 commits into from
Apr 17, 2023

Conversation

nikfilippas
Copy link
Contributor

@nikfilippas nikfilippas commented Mar 21, 2023

This PR modifies the halos/ sub-package in line with the v3 mind map.

  • Bring in from star: (i) KWO arguments, (ii) reordered arguments, (iii) renamed arguments, (iv) renamed attributes.
  • Bring in from star: deprecation warnings for unused functions (e.g. mass_function_from_name).
  • Bring in from star: halo tests, once @damonge reviews and agrees with new variable names (i.e. remove warnings). (Tests v3 #1059 )
  • Introduce subclasses: HaloProfileNumberCounts, HaloProfileMatter, HaloProfilePressure, HaloProfileCIB.
  • Make normprof & is_number_counts a HaloProfile class attribute in a separate subclass.
  • Replace is_number_counts checks with isinstance(prof, HaloProfileNumberCounts).
  • Add normprof to __repr_attrs__ (and __eq_attrs__ after Implement separate __eq__ methods #1033 ).
  • Add argument extrap_pk so we don't do silent extrapolation in the internal power spectra of pk_2pt/pk_4pt.
  • FFTLog accuracy parameters in their own class.
  • Deprecate usage of mass_def in methods of halo model ingredients: use the one defined at instantiation. (Note: API breakage for now, but will re-instate it for v2.last)
  • Deprecate HaloProfileGaussian and HaloProfilePowerLaw as they are no real HaloProfile implementations.
  • Refactor MassFunc, HaloBias, and Concentration with a common superclass to get rid of code repetition.
  • Refactor repeated code in pk_1pt, pk_4pt.
  • Switch from import in __init__.py to specifying __all__ in individual files to have better control of what is imported.
  • Simplify code.
  • Make pk_Npt functions instances of HMCalculator. (bad idea, too complicated for little benefit bc hmc is 2nd arg)
  • Most profiles are of the general form x = r / Rs. We can probably refactor all of that. (decided to drop this after all)
  • Write some good tests for halos/pk_4pt.

Also fixes the badges on README.md from this
Screenshot from 2023-03-30 19-15-35
to this
Screenshot from 2023-03-30 19-15-23

Other changes:

  • Deprecate attribute normprof (only implemented above) in favor of arbitrary profile normalization functions.
  • @templatemethod decorator for template methods in HaloProfile which do not pass the implementation checks.
  • @abstractlinkedmethod decorator for linked abstract methods in HaloProfile, MassFunc, HaloBias, Concentration.
  • Directly callable HMIngredients: MassFunc, HaloBias, Concentration & deprecate getter methods.
  • Introduce CCLNamedClass for particular subclasses implementing models with names.
  • Extend from_name functionality for CCLNamedClasses with create_instance so that the object is directly constructed.
  • Option to initialize MassDef from any string, and pass strings to all HMIngredients: MassFunc, HaloBias, Concentration.
  • Option for developers to disable relaxing of mass_def_strict if no universal model implementation exists (e.g. MassFuncBocquet16 which so far raised with an unhelpful msg).
  • Unlock all CCLObjects until v3 because it was a breaking change we originally made.

@nikfilippas nikfilippas marked this pull request as ready for review March 30, 2023 18:07
@nikfilippas
Copy link
Contributor Author

To update the thread, if a number is returned from _normalization(), the current implementation does not integrate over mass; it just returns that number. David now to add a shortcut in the normalization of the HOD profile.

Copy link
Collaborator

@damonge damonge left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, for now just one comment on the new stuff you've introduced. I'll get back to normprof now

Copy link
Collaborator

@damonge damonge left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, one last push

@nikfilippas
Copy link
Contributor Author

@damonge unless there are more comments, work towards this PR is complete, but for the tests to pass we #1033 merged to master.

@damonge
Copy link
Collaborator

damonge commented Apr 17, 2023

I think we are close, but I am strongly against the changes implemented in commits 4da0f8f to 1f923a7. Revert those changes and simply do not enforce mass functions and bias functions to be parametrised in terms of sigma. At that point we're basically done.

@nikfilippas
Copy link
Contributor Author

nikfilippas commented Apr 17, 2023

Just to update the thread, we took a part of this discussion to Slack and agreed that the proposed code would introduce a lot of complexity for little benefit. However, I stand by the argument that all template methods in HaloProfile have to be declared in the base class, to assist developers in understanding what can and cannot be implemented.

@damonge I did a great deal of simplification, removing all of the added lines (there are no net extra lines of code now).

Copy link
Collaborator

@damonge damonge left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something must have gone wrong when porting the __eq_attrs__. One other comment too. Then we're done.

Copy link
Collaborator

@damonge damonge left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Happy to merge if tests pass.

* first commit

* enclose classmethods in the class

* brought in minor improvements to halos

* coverage
@nikfilippas nikfilippas merged commit e93b317 into v3_wip Apr 17, 2023
@nikfilippas nikfilippas deleted the halos_v3 branch April 17, 2023 18:09
damonge added a commit that referenced this pull request May 3, 2023
* halo profiles in their own directory

* concentrations in their own directory

* mass functions & halo biases in their own directory

* moved CIB stuff to profiles & 2pts

* split halo model into 1/2/4-pt

* fix imports

* remove empty module

* fix typo

* Baryons in v3 (#1039)

* Added new baryons module that will deprecate old BCM

* Tracers v3 (#1040)

* Tracers in V3

* Background, boltzmann, and cls in v3 (#1041)

* Background, boltzmann and cls in v3

* Covariances in v3 (#1046)

* Covariances in V3

* Correlations v3 (#1042)

* Correlations in v3

* split base.py and restructured into its own dir to simplify

* Neutrinos, parameters, power in v3 (#1047)

* done

* Make `T_ncdm` a cosmological parameter + (v3) (#1049)

* first commit

* rename TNCDM to T_ncdm but preserve API

* T_CMB directly into cosmo struct

* Omega_g in ccl_parameters_create; no split between C/Python

* physical_constants.T_CMB doesn't mutate anymore!

* force mutate T_CMB in benchmarks

* define defaults on instantiation just in case constants mutate

* A_s & sigma8: don't play with numbers

* simplify

* remove leftover mallocs

* temporarily preserve API for CCLv3

* Unfreeze option for `physical_constants` (#1050)

* first commit

* update rtd

* addressed comments 1

* Remove `T_CMB` and `T_ncdm` as constants (reloaded) (#1058)

* first commit

* OmNuh2 fix

* addressed comments

* keep only massive

* first step

* temp commit

* debug neutrinos & deprecate Omnuh2

* ccl_omega_x & ccl_Omeganuh2 consistency

---------

Co-authored-by: David Alonso <dam.phys@gmail.com>

* RTD: Removed The Docs

---------

Co-authored-by: David Alonso <dam.phys@gmail.com>

* flaked

---------

Co-authored-by: Nick Koukoufilippas <nikfilippas@gmail.com>

* Pk2D and Tk3D in v3 (#1048)

* tk3d and pk2d in v3

---------

Co-authored-by: Nick Koukoufilippas <nikfilippas@gmail.com>

* PT biases in v3 (#1056)

* New PT bias framework

* Halos v3 (#1043)

* ported changes in halos/profiles

* changes from star in halos/ (no tests)

* refactor concentration, mass_function, halo_bias; improvements in HMCalculator

* HaloProfile subclasses & HaloProfile.normprof attribute

* simplify imports

* remove HaloProfile.name

* cleaned up pk_Npt

* add extrap_pk argument

* FFTLogParams class instead of dictionary in HaloProfile

* simplified code

* removed mass_def from HMIngredients; comprehensive code review 1

* re-implementation, bugfixes, tests

* c_m_relation >> concentration; code improvements; A_SPLINE_MAX in Python

* HMIngredients initializers - no repeated code

* rogue file

* patch for new changes

* updated Build Status badge website

* fix websites

* added a DOI badge & links

* added nonbreaking space

* removed extra space

* FancyRepr out of CCLObject to simplify

* update tests to match changes

* coverage

* simple test for tkkssc

* more tests for tkkssc

* addressed comments 1

* addressed comments 2: mass_def defaults are name strings etc.

* deprecate Gaussian & PowerLaw profiles

* bugfix in master: sometimes mass_def_strict=False fails unexpectedly

* typo

* addressed comments

* New feature: Arbitrary function for profile normalization

* gain efficiency

* comments + deprecate k_min from HMCalculator

* renamed initialize_from_input --> create_instance

* brought in CCLNamedClass from docs_v3

* brought in from docs_v3: directly callable HMIngredients

* prep for Davids input

* renamed HMCalculator --> HaloModel

* fix typo

* brought in from docs_v3: initialize mass_def from any string (e.g. 400c)

* Revert "renamed HMCalculator --> HaloModel"

This reverts commit 43591ce.

* counterterms func inside of 4pt func

* replace deprecated abstractproperty

* abstract linked methods for HaloProfile, MassFunc, HaloBias, Concentration

* fully working implementation

* renamed lM --> log10M etc.

* minor cosmetic fix

* alternative way to include linked abstract methods and declare the template methods

* reorder

* even simpler

* bring back eq_attrs

* r -> r_t

* Additional halos features (#1068)

* first commit

* enclose classmethods in the class

* brought in minor improvements to halos

* coverage

* Tests v3 (#1059)

* ported changes in halos/profiles

* changes from star in halos/ (no tests)

* refactor concentration, mass_function, halo_bias; improvements in HMCalculator

* HaloProfile subclasses & HaloProfile.normprof attribute

* simplify imports

* remove HaloProfile.name

* cleaned up pk_Npt

* add extrap_pk argument

* FFTLogParams class instead of dictionary in HaloProfile

* simplified code

* removed mass_def from HMIngredients; comprehensive code review 1

* re-implementation, bugfixes, tests

* c_m_relation >> concentration; code improvements; A_SPLINE_MAX in Python

* HMIngredients initializers - no repeated code

* rogue file

* patch for new changes

* updated Build Status badge website

* fix websites

* added a DOI badge & links

* added nonbreaking space

* removed extra space

* FancyRepr out of CCLObject to simplify

* update tests to match changes

* coverage

* simple test for tkkssc

* more tests for tkkssc

* addressed comments 1

* addressed comments 2: mass_def defaults are name strings etc.

* deprecate Gaussian & PowerLaw profiles

* remove all warnings in testing

* use pytest as per docs instead of numpy.testing and pyutils.assert_warns

* bugfix in master: sometimes mass_def_strict=False fails unexpectedly

* typo

* addressed comments

* New feature: Arbitrary function for profile normalization

* gain efficiency

* comments + deprecate k_min from HMCalculator

* renamed initialize_from_input --> create_instance

* brought in CCLNamedClass from docs_v3

* brought in from docs_v3: directly callable HMIngredients

* prep for Davids input

* renamed HMCalculator --> HaloModel

* fix typo

* brought in from docs_v3: initialize mass_def from any string (e.g. 400c)

* Revert "renamed HMCalculator --> HaloModel"

This reverts commit 43591ce.

* comments

* comments

* shortcut for __eq__ methods

* Eq. for EulerianPT calculator (#1073)

* __eq_attrs__ for nl_pt

* No normprof (#1072)

* extricated normprof

* Cosmology v3 (#1071)

* rename core --> Cosmology

* renamed core --> cosmology in docs/imports except docstrings

* cosmology v2

* first pass

* neutrinosneutrinosneutrinos

* simplified

* yamlyamlyaml

* fully fix neutrino mayhem

* new arg names in tests

* comments

* comments on comments on comments

* removed tests

* no warn

---------

Co-authored-by: David Alonso <dam.phys@gmail.com>

* avoid warning due to zeros (#1076)

* Fix halo inconsistencies v3 (#1069)

* ported changes in halos/profiles

* changes from star in halos/ (no tests)

* refactor concentration, mass_function, halo_bias; improvements in HMCalculator

* HaloProfile subclasses & HaloProfile.normprof attribute

* simplify imports

* remove HaloProfile.name

* cleaned up pk_Npt

* add extrap_pk argument

* FFTLogParams class instead of dictionary in HaloProfile

* simplified code

* removed mass_def from HMIngredients; comprehensive code review 1

* re-implementation, bugfixes, tests

* c_m_relation >> concentration; code improvements; A_SPLINE_MAX in Python

* HMIngredients initializers - no repeated code

* rogue file

* patch for new changes

* updated Build Status badge website

* fix websites

* added a DOI badge & links

* added nonbreaking space

* removed extra space

* FancyRepr out of CCLObject to simplify

* update tests to match changes

* coverage

* simple test for tkkssc

* more tests for tkkssc

* addressed comments 1

* addressed comments 2: mass_def defaults are name strings etc.

* deprecate Gaussian & PowerLaw profiles

* bugfix in master: sometimes mass_def_strict=False fails unexpectedly

* typo

* addressed comments

* New feature: Arbitrary function for profile normalization

* gain efficiency

* comments + deprecate k_min from HMCalculator

* renamed initialize_from_input --> create_instance

* brought in CCLNamedClass from docs_v3

* brought in from docs_v3: directly callable HMIngredients

* prep for Davids input

* renamed HMCalculator --> HaloModel

* fix typo

* brought in from docs_v3: initialize mass_def from any string (e.g. 400c)

* Revert "renamed HMCalculator --> HaloModel"

This reverts commit 43591ce.

* counterterms func inside of 4pt func

* replace deprecated abstractproperty

* abstract linked methods for HaloProfile, MassFunc, HaloBias, Concentration

* fully working implementation

* renamed lM --> log10M etc.

* minor cosmetic fix

* first commit

* alternative way to include linked abstract methods and declare the template methods

* reorder

* even simpler

* enclose classmethods in the class

* brought in minor improvements to halos

* clone of 1064

* bring back eq_attrs

* r -> r_t

* Additional halos features (#1068)

* first commit

* enclose classmethods in the class

* brought in minor improvements to halos

* coverage

* removed MassConcentration

* full implementation (v3 only)

* comments

* single-liner

* coverage

* Final checklist v3 (#1075)

* imports

* homogenize all imports as per PEP8 and the Python Import System

* homogenize all imports as per PEP8 and the Python Import System

* instance checks

* all exceptions raised correctly

* comments

* add aliases

* reverted changes and introduced proper enums

* Preserve API in v2.final (#1077)

* first commit

* Einasto mass translator + MassDef concentration API

* universal api no-break

* comments

* MassDef vars

* Coverage v3 (#1078)

* coverage

* comments

---------

Co-authored-by: David Alonso <dam.phys@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Why do we use normprof? Inconsistent use of cosmo in HMCalculator, MassFunc, HaloBias
2 participants