-
Notifications
You must be signed in to change notification settings - Fork 0
28 general info #39
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
base: main
Are you sure you want to change the base?
28 general info #39
Changes from 6 commits
aea8f2b
668e5ee
8ccdb7c
0529289
7cbbd74
adcd13d
fff285d
2290468
4dc3d0e
c1e68d8
c4c000f
963681f
82fe23a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,142 +1,58 @@ | ||
| # Open Bayesian Trees Project | ||
| This repository includes new developments with Bayesian Additive Regression Trees and extends the original OpenBT repository created by Matt Pratola (https://bitbucket.org/mpratola/openbt/src/master/). | ||
| Such extensions include Bayesian Model Mixing and Bayesian Calibration. | ||
| All of the Bayesian Tree code is written in C++. User interfaces constructed in R and Python allow one to easily run the software. | ||
| The BART Model Mixing software has been implemented in the [Taweret](https://github.com/bandframework/Taweret/tree/main) Python package in conjunction with the [BAND](https://bandframework.github.io/) collaboration. | ||
|
|
||
|
|
||
| # Installation | ||
| The heart of OpenBT is a set of C++ tools that can be used directly via | ||
| the command line or indirectly through the Python and R packages, which wrap | ||
| them. Typically these tools are built with an implementation of the Message | ||
| Passing Interface (MPI) such as [Open MPI](https://www.open-mpi.org) or | ||
| [MPICH](https://www.mpich.org) to enable distributed parallelization of | ||
| computations. In particular, the Python wrapper package is always built with | ||
| MPI support. | ||
|
|
||
| The software and its distribution scheme have been developed to allow users to | ||
| use OpenBT with the MPI installation of their choice. For instance, it | ||
| can be built with MPI installations on leadership class platforms and clusters | ||
| that were installed by experts and optimized for their specific platform. As a | ||
| result, however, the software is not distributed as prebuilt binaries or wheels, | ||
| but rather must be built for each case with the compiler suite and matching MPI | ||
| implementation provided by the user. | ||
|
|
||
| ## Requirements | ||
| Before building and installing the Python package, users | ||
| must provide | ||
| * a compiler suite that includes a C++ compiler that supports the C++14 | ||
| standard, | ||
| * an MPI installation that is compatible with the compiler suite, and | ||
| * optionally the [Eigen software package](https://gitlab.com/libeigen/eigen). | ||
|
|
||
| Note that if installing MPI using a package manager, related developer library | ||
| packages such as ``libopenmpi-dev`` or ``libmpich-dev`` might need to be | ||
| installed in addition to the base MPI packages such as ``openmpi-bin`` or | ||
| ``mpich``. | ||
|
|
||
| To build and install just the bare C++ tools, users must provide in addition to | ||
| the above | ||
| * the [Meson build system](https://mesonbuild.com) and its prerequisites such as | ||
| Python 3 and [ninja](https://ninja-build.org). | ||
|
|
||
| While both Meson and ninja are used internally to build the Python package, they | ||
| are installed automatically just for building the package. | ||
|
|
||
| The Meson build system is setup to automatically detect the compiler suite and | ||
| MPI installation to use. If Eigen already exists in the system and Meson can | ||
| find it, then Meson will use it for the build. Otherwise, Meson will | ||
| automatically obtain a copy of Eigen for internal use. | ||
|
|
||
| We presently test OpenBT with both Open MPI and MPICH. In addition, we | ||
| have successfully tested with the Intel MPI implementation and have used the | ||
| Python package with MPI implementations installed | ||
| * via package managers such as Ubuntu's Advanced Packaging Tool (`apt`) and | ||
| [homebrew](https://brew.sh) on macOS; | ||
| * by experts on clusters and that are available as modules; and | ||
| * with `conda` from the prebuilt conda forge | ||
| [openmpi](https://anaconda.org/conda-forge/openmpi) package. | ||
|
|
||
| ## Meson installation | ||
| The Meson build system documentation suggests installing Meson via package | ||
| manager when possible. Please refer to that documentation for detailed and | ||
| up-to-date installation information. | ||
|
|
||
| If Meson cannot be installed by package manager or the manager's version is too | ||
| old, the following is contrary to Meson suggestions but has been used | ||
| successfully to install Meson with Python into a dedicated virtual environment | ||
| as well as to install `meson` in the `PATH` for use without needing to activate | ||
| that virtual environment. | ||
| ``` | ||
| $ /path/to/target/python -m venv ~/local/venv/meson | ||
| $ . ~/local/venv/meson/bin/activate | ||
| $ which python | ||
| $ python -m pip install --upgrade pip | ||
| $ python -m pip install meson | ||
| $ python -m pip list | ||
| $ ln -s ~/local/venv/meson/bin/meson ~/local/bin | ||
| <add ~/local/bin to PATH if desired and appropriate> | ||
| $ deactivate | ||
| $ which meson | ||
| $ meson --version | ||
| ``` | ||
| Note that this `meson` virtual environment is for installing **just** the Meson | ||
| build system. Attempts to install `openbt` into this virtual environment | ||
| will likely fail with an error that the `mesonbuild` module cannot be found. | ||
|
|
||
| ## Python package | ||
| The OpenBT Python package is **not** currently distributed on PyPI since the | ||
| [PyPI OpenBT package](https://pypi.org/project/openbt/) already exists. This | ||
| package will eventually be transferred to this project so that distribution of | ||
| modern versions of this package will be enabled by PyPI under the name `openbt`. | ||
|
|
||
| <!-- | ||
| The OpenBTMixing Python package is distributed on | ||
| [PyPI](https://pypi.org/project/openbtmixing/) as a source distribution that | ||
| contains the C++ code and files needed by Meson to build the dedicated, | ||
| standalone command line tools that the package will use. The tools are built | ||
| and installed automatically by Meson as part of executing | ||
| ``` | ||
| python -m pip install openbt | ||
| ``` | ||
| By default, `pip install` does not show any of Meson's progress. Users and | ||
| developers interested in seeing how Meson satisfies dependencies and reviewing | ||
| compiler output should pass `-v` to `pip install`. | ||
| --> | ||
| # OpenBT | ||
|
|
||
| Instead the package should be built and installed from a clone of this repository with | ||
| ``` | ||
| $ cd /path/to/OpenBT/openbt_pypkg | ||
| $ python -m pip install . | ||
| ``` | ||
| Developers can install in developer/editable mode with verbose logging of the | ||
| build process and installation with | ||
| ``` | ||
| $ cd /path/to/OpenBT/openbt_pypkg | ||
| $ python -m pip install -v -e . | ||
| ``` | ||
| In this latter case, the command line tools are built automatically and | ||
| installed at `/path/to/OpenBT/openbt_pypkg/src/openbt/bin`. The | ||
| Python package is hardcoded to use those tools so that the existence of another | ||
| set of tools in the system and in `PATH` should not cause issues. | ||
| TODO: Copy info from landing page of sphinx docs here. | ||
|
|
||
| OpenBT package installations can be minimally tested with | ||
| ``` | ||
| $ python | ||
| >>> import openbt | ||
| >>> openbt.__version__ | ||
| '<version>' | ||
| >>> openbt.test() | ||
| ``` | ||
| ### Repository | ||
| TODO: Add general badges | ||
|
|
||
| ### Python | ||
| TODO: Add Python-specific badges | ||
|
|
||
| ## License & Copyright | ||
|
|
||
| ## C++ library & command line tool interface | ||
| Developers and C++ users can directly build and install the command line tools, | ||
| an OpenBT library, and library tests with `tools/build_openbt_clt.sh`. | ||
| Note that these do **not** need to be built in order to use the Python package. | ||
| TODO: Copy license & copyright info from landing page of sphinx docs here | ||
|
|
||
| ## R package | ||
| **TODO**: Needs to be written based on current state of affairs. | ||
| ## Support | ||
|
|
||
| # Examples | ||
| To | ||
|
|
||
| The examples from the article "Model Mixing Using Bayesian Additive Regression Trees" are reproduced in the jupyter notebook BART_BMM_Technometrics.ipynb. This notebook can be run locally or in a virtual environment such as google colab. | ||
| * report potential problems with OpenBT or any of the packages derived from it, | ||
| * propose a change, or | ||
| * request a new feature, | ||
|
|
||
| please check if a related [Issue](https://github.com/bandframework/OpenBT/issues) | ||
| already exists before creating a new issue. For all other communication, please | ||
| send an email to the OpenBT development team | ||
|
|
||
| * TODO: Matt's contact info | ||
| * TODO: John's contact info | ||
|
|
||
| ## Documentation | ||
|
|
||
| [User and Developer Guides](https://openbt.readthedocs.io) are hosted on | ||
| ReadTheDocs. Please refer to those documents for information regarding | ||
| examples. | ||
|
|
||
| ## Installation & Testing | ||
|
|
||
| Refer to the getting started sections in the User Guide related to the tool or | ||
| package that you intend to use. | ||
|
|
||
| ## Contributing to IBCDFO | ||
|
|
||
| Contributions are welcome in a variety of forms; see | ||
| [Contributing](https://openbt.readthedocs.io/en/latest/contributing.html) in the | ||
| Developer Guide. | ||
|
|
||
| ## Cite OpenBT | ||
|
|
||
| ``` | ||
| @techreport{openbt2026, | ||
| author = {Matt Pratola and John Yannotty}, | ||
| title = {{OpenBT 1.2.0} Users Manual}, | ||
| institution = {TBD}, | ||
| number = {Version 1.2.0}, | ||
| year = {2026}, | ||
| url = {https://openbt.readthedocs.io/} | ||
| } | ||
| ``` |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3,11 +3,13 @@ | |
| .. _Open MPI: https://www.open-mpi.org | ||
| .. _MPICH: https://www.mpich.org | ||
| .. _framework: https://bandframework.github.io | ||
| .. _Issue 35: https://github.com/bandframework/OpenBT/issues/35 | ||
| .. _OpenBT repository: https://bitbucket.org/mpratola/openbt/src/master | ||
| .. _OpenBTMixing repository: https://github.com/jcyannotty/OpenBT | ||
|
|
||
| .. todo:: | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do you want to handle this TODO as part of this PR?
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What do you want for 'responsibilities of user'?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Some people like to add an explicit statement about how the code is offered as is and with no guarantees. It's up to the user to determine how to use the software and if the results generated are correct for their purposes. Sometimes this might be referred to as a disclaimer. You already have something to this effect in the LICENSE. You will see me add in statements to this effect where I don't want to give people the impression, for example, that just because the test suite is passing that everything must be 100% correct.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I added a few more things along contributing etc and removed the todo. |
||
| Write high-level description, explain development history, and motivate | ||
| breakdown of documents presented here. License, copyright, responsibilities | ||
| of user, etc. | ||
| Matt to write high-level description and motivate breakdown of documents | ||
| presented here. License, copyright, responsibilities of user, etc. | ||
|
|
||
| The heart of |openbt| is a set of C++ tools that can be used directly |via| the | ||
| command line or indirectly through the ``openbt`` Python package, which wraps | ||
|
|
@@ -22,12 +24,18 @@ | |
| manager or with MPI installations on leadership class platforms and clusters | ||
| that were installed by experts and optimized for their specific platform. | ||
|
|
||
| This repository is being established by merging the contents of the original | ||
| `OpenBT repository`_ with the `OpenBTMixing repository`_, which was based off of | ||
| the former. It, therefore, will supercede those two repositories, which will be | ||
| frozen. | ||
|
|
||
| This repository and its contents are being established and developed as part of | ||
| |band| framework_. | ||
|
|
||
| .. note:: | ||
| While an R wrapper does exist for the original |openbt| and |openbtmixing| | ||
| repositories, that functionality has not yet been included in this new, | ||
| combined repository (Issue #XYZ). | ||
|
|
||
| This package is being developed as part of |band| framework_. | ||
| combined repository (`Issue 35`_). | ||
|
|
||
| .. toctree:: | ||
| :numbered: | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,5 @@ | ||
| // amxbrt.h: BART-based model mixing model class definition. | ||
|
|
||
| #ifndef GUARD_amxbrt_h | ||
| #define GUARD_amxbrt_h | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You should be able to remove
.. todo::now so that this official text is not rendered inside a TODO block.https://openbt--39.org.readthedocs.build/en/39/contributing.html
Some projects also provide information to potential contributors about what it means to contribute to the project. Some examples
https://github.com/bandframework/Taweret?tab=contributing-ov-file
https://surmise.readthedocs.io/en/latest/contributing.html#developer-s-certificate-of-origin-1-1