diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e21c7d..2690baf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,7 +55,7 @@ IF(YORICK_SUPPORT) ENDIF(YORICK_SUPPORT) find_program(CYTHON cython3 cython) -find_library(ZLIB z) +find_library(ZLIB_LIBRARY z) find_library(DL_LIBRARY dl) find_library(MATH_LIBRARY m) diff --git a/LICENCE.txt b/LICENCE.txt new file mode 100644 index 0000000..acde39e --- /dev/null +++ b/LICENCE.txt @@ -0,0 +1,508 @@ +Copyright (C) 2009-2020 Guilhem Lavaux + + +CeCILL FREE SOFTWARE LICENSE AGREEMENT + + + Notice + +This Agreement is a Free Software license agreement that is the result +of discussions between its authors in order to ensure compliance with +the two main principles guiding its drafting: + + * firstly, compliance with the principles governing the distribution + of Free Software: access to source code, broad rights granted to + users, + * secondly, the election of a governing law, French law, with which + it is conformant, both as regards the law of torts and + intellectual property law, and the protection that it offers to + both authors and holders of the economic rights over software. + +The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre]) +license are: + +Commissariat à l'Energie Atomique - CEA, a public scientific, technical +and industrial research establishment, having its principal place of +business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France. + +Centre National de la Recherche Scientifique - CNRS, a public scientific +and technological establishment, having its principal place of business +at 3 rue Michel-Ange, 75794 Paris cedex 16, France. + +Institut National de Recherche en Informatique et en Automatique - +INRIA, a public scientific and technological establishment, having its +principal place of business at Domaine de Voluceau, Rocquencourt, BP +105, 78153 Le Chesnay cedex, France. + + + Preamble + +The purpose of this Free Software license agreement is to grant users +the right to modify and redistribute the software governed by this +license within the framework of an open source distribution model. + +The exercising of these rights is conditional upon certain obligations +for users so as to preserve this status for all subsequent redistributions. + +In consideration of access to the source code and the rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors only have limited liability. + +In this respect, the risks associated with loading, using, modifying +and/or developing or reproducing the software by the user are brought to +the user's attention, given its Free Software status, which may make it +complicated to use, with the result that its use is reserved for +developers and experienced professionals having in-depth computer +knowledge. Users are therefore encouraged to load and test the +suitability of the software as regards their requirements in conditions +enabling the security of their systems and/or data to be ensured and, +more generally, to use and operate it in the same conditions of +security. This Agreement may be freely reproduced and published, +provided it is not altered, and that no provisions are either added or +removed herefrom. + +This Agreement may apply to any or all software for which the holder of +the economic rights decides to submit the use thereof to its provisions. + + + Article 1 - DEFINITIONS + +For the purpose of this Agreement, when the following expressions +commence with a capital letter, they shall have the following meaning: + +Agreement: means this license agreement, and its possible subsequent +versions and annexes. + +Software: means the software in its Object Code and/or Source Code form +and, where applicable, its documentation, "as is" when the Licensee +accepts the Agreement. + +Initial Software: means the Software in its Source Code and possibly its +Object Code form and, where applicable, its documentation, "as is" when +it is first distributed under the terms and conditions of the Agreement. + +Modified Software: means the Software modified by at least one +Contribution. + +Source Code: means all the Software's instructions and program lines to +which access is required so as to modify the Software. + +Object Code: means the binary files originating from the compilation of +the Source Code. + +Holder: means the holder(s) of the economic rights over the Initial +Software. + +Licensee: means the Software user(s) having accepted the Agreement. + +Contributor: means a Licensee having made at least one Contribution. + +Licensor: means the Holder, or any other individual or legal entity, who +distributes the Software under the Agreement. + +Contribution: means any or all modifications, corrections, translations, +adaptations and/or new functions integrated into the Software by any or +all Contributors, as well as any or all Internal Modules. + +Module: means a set of sources files including their documentation that +enables supplementary functions or services in addition to those offered +by the Software. + +External Module: means any or all Modules, not derived from the +Software, so that this Module and the Software run in separate address +spaces, with one calling the other when they are run. + +Internal Module: means any or all Module, connected to the Software so +that they both execute in the same address space. + +GNU GPL: means the GNU General Public License version 2 or any +subsequent version, as published by the Free Software Foundation Inc. + +Parties: mean both the Licensee and the Licensor. + +These expressions may be used both in singular and plural form. + + + Article 2 - PURPOSE + +The purpose of the Agreement is the grant by the Licensor to the +Licensee of a non-exclusive, transferable and worldwide license for the +Software as set forth in Article 5 hereinafter for the whole term of the +protection granted by the rights over said Software. + + + Article 3 - ACCEPTANCE + +3.1 The Licensee shall be deemed as having accepted the terms and +conditions of this Agreement upon the occurrence of the first of the +following events: + + * (i) loading the Software by any or all means, notably, by + downloading from a remote server, or by loading from a physical + medium; + * (ii) the first time the Licensee exercises any of the rights + granted hereunder. + +3.2 One copy of the Agreement, containing a notice relating to the +characteristics of the Software, to the limited warranty, and to the +fact that its use is restricted to experienced users has been provided +to the Licensee prior to its acceptance as set forth in Article 3.1 +hereinabove, and the Licensee hereby acknowledges that it has read and +understood it. + + + Article 4 - EFFECTIVE DATE AND TERM + + + 4.1 EFFECTIVE DATE + +The Agreement shall become effective on the date when it is accepted by +the Licensee as set forth in Article 3.1. + + + 4.2 TERM + +The Agreement shall remain in force for the entire legal term of +protection of the economic rights over the Software. + + + Article 5 - SCOPE OF RIGHTS GRANTED + +The Licensor hereby grants to the Licensee, who accepts, the following +rights over the Software for any or all use, and for the term of the +Agreement, on the basis of the terms and conditions set forth hereinafter. + +Besides, if the Licensor owns or comes to own one or more patents +protecting all or part of the functions of the Software or of its +components, the Licensor undertakes not to enforce the rights granted by +these patents against successive Licensees using, exploiting or +modifying the Software. If these patents are transferred, the Licensor +undertakes to have the transferees subscribe to the obligations set +forth in this paragraph. + + + 5.1 RIGHT OF USE + +The Licensee is authorized to use the Software, without any limitation +as to its fields of application, with it being hereinafter specified +that this comprises: + + 1. permanent or temporary reproduction of all or part of the Software + by any or all means and in any or all form. + + 2. loading, displaying, running, or storing the Software on any or + all medium. + + 3. entitlement to observe, study or test its operation so as to + determine the ideas and principles behind any or all constituent + elements of said Software. This shall apply when the Licensee + carries out any or all loading, displaying, running, transmission + or storage operation as regards the Software, that it is entitled + to carry out hereunder. + + + 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS + +The right to make Contributions includes the right to translate, adapt, +arrange, or make any or all modifications to the Software, and the right +to reproduce the resulting software. + +The Licensee is authorized to make any or all Contributions to the +Software provided that it includes an explicit notice that it is the +author of said Contribution and indicates the date of the creation thereof. + + + 5.3 RIGHT OF DISTRIBUTION + +In particular, the right of distribution includes the right to publish, +transmit and communicate the Software to the general public on any or +all medium, and by any or all means, and the right to market, either in +consideration of a fee, or free of charge, one or more copies of the +Software by any means. + +The Licensee is further authorized to distribute copies of the modified +or unmodified Software to third parties according to the terms and +conditions set forth hereinafter. + + + 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION + +The Licensee is authorized to distribute true copies of the Software in +Source Code or Object Code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the Object Code of the Software is +redistributed, the Licensee allows future Licensees unhindered access to +the full Source Code of the Software by indicating how to access it, it +being understood that the additional cost of acquiring the Source Code +shall not exceed the cost of transferring the data. + + + 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE + +When the Licensee makes a Contribution to the Software, the terms and +conditions for the distribution of the resulting Modified Software +become subject to all the provisions of this Agreement. + +The Licensee is authorized to distribute the Modified Software, in +source code or object code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the object code of the Modified +Software is redistributed, the Licensee allows future Licensees +unhindered access to the full source code of the Modified Software by +indicating how to access it, it being understood that the additional +cost of acquiring the source code shall not exceed the cost of +transferring the data. + + + 5.3.3 DISTRIBUTION OF EXTERNAL MODULES + +When the Licensee has developed an External Module, the terms and +conditions of this Agreement do not apply to said External Module, that +may be distributed under a separate license agreement. + + + 5.3.4 COMPATIBILITY WITH THE GNU GPL + +The Licensee can include a code that is subject to the provisions of one +of the versions of the GNU GPL in the Modified or unmodified Software, +and distribute that entire code under the terms of the same version of +the GNU GPL. + +The Licensee can include the Modified or unmodified Software in a code +that is subject to the provisions of one of the versions of the GNU GPL, +and distribute that entire code under the terms of the same version of +the GNU GPL. + + + Article 6 - INTELLECTUAL PROPERTY + + + 6.1 OVER THE INITIAL SOFTWARE + +The Holder owns the economic rights over the Initial Software. Any or +all use of the Initial Software is subject to compliance with the terms +and conditions under which the Holder has elected to distribute its work +and no one shall be entitled to modify the terms and conditions for the +distribution of said Initial Software. + +The Holder undertakes that the Initial Software will remain ruled at +least by this Agreement, for the duration set forth in Article 4.2. + + + 6.2 OVER THE CONTRIBUTIONS + +The Licensee who develops a Contribution is the owner of the +intellectual property rights over this Contribution as defined by +applicable law. + + + 6.3 OVER THE EXTERNAL MODULES + +The Licensee who develops an External Module is the owner of the +intellectual property rights over this External Module as defined by +applicable law and is free to choose the type of agreement that shall +govern its distribution. + + + 6.4 JOINT PROVISIONS + +The Licensee expressly undertakes: + + 1. not to remove, or modify, in any manner, the intellectual property + notices attached to the Software; + + 2. to reproduce said notices, in an identical manner, in the copies + of the Software modified or not. + +The Licensee undertakes not to directly or indirectly infringe the +intellectual property rights of the Holder and/or Contributors on the +Software and to take, where applicable, vis-à-vis its staff, any and all +measures required to ensure respect of said intellectual property rights +of the Holder and/or Contributors. + + + Article 7 - RELATED SERVICES + +7.1 Under no circumstances shall the Agreement oblige the Licensor to +provide technical assistance or maintenance services for the Software. + +However, the Licensor is entitled to offer this type of services. The +terms and conditions of such technical assistance, and/or such +maintenance, shall be set forth in a separate instrument. Only the +Licensor offering said maintenance and/or technical assistance services +shall incur liability therefor. + +7.2 Similarly, any Licensor is entitled to offer to its licensees, under +its sole responsibility, a warranty, that shall only be binding upon +itself, for the redistribution of the Software and/or the Modified +Software, under terms and conditions that it is free to decide. Said +warranty, and the financial terms and conditions of its application, +shall be subject of a separate instrument executed between the Licensor +and the Licensee. + + + Article 8 - LIABILITY + +8.1 Subject to the provisions of Article 8.2, the Licensee shall be +entitled to claim compensation for any direct loss it may have suffered +from the Software as a result of a fault on the part of the relevant +Licensor, subject to providing evidence thereof. + +8.2 The Licensor's liability is limited to the commitments made under +this Agreement and shall not be incurred as a result of in particular: +(i) loss due the Licensee's total or partial failure to fulfill its +obligations, (ii) direct or consequential loss that is suffered by the +Licensee due to the use or performance of the Software, and (iii) more +generally, any consequential loss. In particular the Parties expressly +agree that any or all pecuniary or business loss (i.e. loss of data, +loss of profits, operating loss, loss of customers or orders, +opportunity cost, any disturbance to business activities) or any or all +legal proceedings instituted against the Licensee by a third party, +shall constitute consequential loss and shall not provide entitlement to +any or all compensation from the Licensor. + + + Article 9 - WARRANTY + +9.1 The Licensee acknowledges that the scientific and technical +state-of-the-art when the Software was distributed did not enable all +possible uses to be tested and verified, nor for the presence of +possible defects to be detected. In this respect, the Licensee's +attention has been drawn to the risks associated with loading, using, +modifying and/or developing and reproducing the Software which are +reserved for experienced users. + +The Licensee shall be responsible for verifying, by any or all means, +the suitability of the product for its requirements, its good working +order, and for ensuring that it shall not cause damage to either persons +or properties. + +9.2 The Licensor hereby represents, in good faith, that it is entitled +to grant all the rights over the Software (including in particular the +rights set forth in Article 5). + +9.3 The Licensee acknowledges that the Software is supplied "as is" by +the Licensor without any other express or tacit warranty, other than +that provided for in Article 9.2 and, in particular, without any warranty +as to its commercial value, its secured, safe, innovative or relevant +nature. + +Specifically, the Licensor does not warrant that the Software is free +from any error, that it will operate without interruption, that it will +be compatible with the Licensee's own equipment and software +configuration, nor that it will meet the Licensee's requirements. + +9.4 The Licensor does not either expressly or tacitly warrant that the +Software does not infringe any third party intellectual property right +relating to a patent, software or any other property right. Therefore, +the Licensor disclaims any and all liability towards the Licensee +arising out of any or all proceedings for infringement that may be +instituted in respect of the use, modification and redistribution of the +Software. Nevertheless, should such proceedings be instituted against +the Licensee, the Licensor shall provide it with technical and legal +assistance for its defense. Such technical and legal assistance shall be +decided on a case-by-case basis between the relevant Licensor and the +Licensee pursuant to a memorandum of understanding. The Licensor +disclaims any and all liability as regards the Licensee's use of the +name of the Software. No warranty is given as regards the existence of +prior rights over the name of the Software or as regards the existence +of a trademark. + + + Article 10 - TERMINATION + +10.1 In the event of a breach by the Licensee of its obligations +hereunder, the Licensor may automatically terminate this Agreement +thirty (30) days after notice has been sent to the Licensee and has +remained ineffective. + +10.2 A Licensee whose Agreement is terminated shall no longer be +authorized to use, modify or distribute the Software. However, any +licenses that it may have granted prior to termination of the Agreement +shall remain valid subject to their having been granted in compliance +with the terms and conditions hereof. + + + Article 11 - MISCELLANEOUS + + + 11.1 EXCUSABLE EVENTS + +Neither Party shall be liable for any or all delay, or failure to +perform the Agreement, that may be attributable to an event of force +majeure, an act of God or an outside cause, such as defective +functioning or interruptions of the electricity or telecommunications +networks, network paralysis following a virus attack, intervention by +government authorities, natural disasters, water damage, earthquakes, +fire, explosions, strikes and labor unrest, war, etc. + +11.2 Any failure by either Party, on one or more occasions, to invoke +one or more of the provisions hereof, shall under no circumstances be +interpreted as being a waiver by the interested Party of its right to +invoke said provision(s) subsequently. + +11.3 The Agreement cancels and replaces any or all previous agreements, +whether written or oral, between the Parties and having the same +purpose, and constitutes the entirety of the agreement between said +Parties concerning said purpose. No supplement or modification to the +terms and conditions hereof shall be effective as between the Parties +unless it is made in writing and signed by their duly authorized +representatives. + +11.4 In the event that one or more of the provisions hereof were to +conflict with a current or future applicable act or legislative text, +said act or legislative text shall prevail, and the Parties shall make +the necessary amendments so as to comply with said act or legislative +text. All other provisions shall remain effective. Similarly, invalidity +of a provision of the Agreement, for any reason whatsoever, shall not +cause the Agreement as a whole to be invalid. + + + 11.5 LANGUAGE + +The Agreement is drafted in both French and English and both versions +are deemed authentic. + + + Article 12 - NEW VERSIONS OF THE AGREEMENT + +12.1 Any person is authorized to duplicate and distribute copies of this +Agreement. + +12.2 So as to ensure coherence, the wording of this Agreement is +protected and may only be modified by the authors of the License, who +reserve the right to periodically publish updates or new versions of the +Agreement, each with a separate number. These subsequent versions may +address new issues encountered by Free Software. + +12.3 Any Software distributed under a given version of the Agreement may +only be subsequently distributed under the same version of the Agreement +or a subsequent version, subject to the provisions of Article 5.3.4. + + + Article 13 - GOVERNING LAW AND JURISDICTION + +13.1 The Agreement is governed by French law. The Parties agree to +endeavor to seek an amicable solution to any disagreements or disputes +that may arise during the performance of the Agreement. + +13.2 Failing an amicable solution within two (2) months as from their +occurrence, and unless emergency proceedings are necessary, the +disagreements or disputes shall be referred to the Paris Courts having +jurisdiction, by the more diligent Party. + + +Version 2.0 dated 2006-09-05. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..8d92fca --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,169 @@ +include .gitignore +include CMakeLists.txt +include FindNumPy.cmake +include FindPyLibs.cmake +include GetGitRevisionDescription.cmake +include GetGitRevisionDescription.cmake.in +include LICENCE.txt +include LICENCE_CeCILL_V2 +include README.md +include build_tools/gather_sources.py +include color_msg.cmake +include doc/Makefile +include doc/make.bat +include doc/source/conf.py +include doc/source/cpplibrary.rst +include doc/source/index.rst +include doc/source/intro.rst +include doc/source/pythonmodule.rst +include external/external_build.cmake +include external/libsharp-6077806.tar.gz +include external/omptl-20120422.tar.bz2 +include external/patch-omptl +include python/CMakeLists.txt +include python/_cosmo_bispectrum.cpp +include python/_cosmo_cic.pyx +include python/_cosmo_power.pyx +include python/_cosmotool.pyx +include python/_fast_interp.pyx +include python/_project.pyx +include python/copy.pxd +include python/cosmotool/__init__.py +include python/cosmotool/bispectrum.py +include python/cosmotool/borg.py +include python/cosmotool/cic.py +include python/cosmotool/cl_cic.py +include python/cosmotool/config.py.in +include python/cosmotool/ctpv.py +include python/cosmotool/fftw.py +include python/cosmotool/grafic.py +include python/cosmotool/simu.py +include python/cosmotool/smooth.py +include python/cosmotool/timing.py +include python/cppHelper.hpp +include python/dummy.c +include python/project_tool.hpp +include python/safe_gadget.hpp +include python_sample/build_2lpt_ksz.py +include python_sample/build_2lpt_skymap.py +include python_sample/build_dipole_ksz_from_galaxies.py +include python_sample/build_nbody_ksz.py +include python_sample/build_nbody_ksz_from_galaxies.py +include python_sample/build_nbody_skymap.py +include python_sample/gen_2lpt_asmooth.py +include python_sample/gen_2lpt_density.py +include python_sample/icgen/__init__.py +include python_sample/icgen/borgadaptor.py +include python_sample/icgen/borgicgen.py +include python_sample/icgen/cosmogrowth.py +include python_sample/icgen/gen_ic_from_borg.py +include python_sample/icgen/test_ic_from_borg.py +include python_sample/icgen/test_whitify.py +include python_sample/ksz/__init__.py +include python_sample/ksz/constants.py +include python_sample/ksz/gal_prof.py +include python_sample/ramsesToArray.py +include python_sample/test_bispectrum.py +include python_sample/test_spheric_proj.py +include sample/CMakeLists.txt +include sample/Hartmann_Matrix.txt +include sample/gadgetToArray.cpp +include sample/gadgetToDensity.cpp +include sample/graficToDensity.cpp +include sample/simple3DFilter.cpp +include sample/simpleDistanceFilter.cpp +include sample/testAlgo.cpp +include sample/testBQueue.cpp +include sample/testBSP.cpp +include sample/testDelaunay.cpp +include sample/testEskow.cpp +include sample/testHDF5.cpp +include sample/testInterpolate.cpp +include sample/testNewton.cpp +include sample/testPool.cpp +include sample/testReadFlash.cpp +include sample/testSmooth.cpp +include sample/test_cosmopower.cpp +include sample/test_fft_calls.cpp +include sample/test_healpix_calls.cpp +include sample/testkd.cpp +include sample/testkd2.cpp +include sample/testkd3.cpp +include setup.py +include src/CMakeLists.txt +include src/algo.hpp +include src/bqueue.hpp +include src/bqueue.tcc +include src/bsp_simple.hpp +include src/bsp_simple.tcc +include src/cic.cpp +include src/cic.hpp +include src/config.hpp +include src/cosmopower.cpp +include src/cosmopower.hpp +include src/dinterpolate.hpp +include src/dinterpolate.tcc +include src/eskow.hpp +include src/field.hpp +include src/fixArray.hpp +include src/fortran.cpp +include src/fortran.hpp +include src/fourier/base_types.hpp +include src/fourier/details/euclidian_maps.hpp +include src/fourier/details/euclidian_spectrum_1d.hpp +include src/fourier/details/euclidian_spectrum_1d_bin.hpp +include src/fourier/details/euclidian_transform.hpp +include src/fourier/details/healpix_alms.hpp +include src/fourier/details/healpix_map.hpp +include src/fourier/details/healpix_spectrum.hpp +include src/fourier/details/healpix_transform.hpp +include src/fourier/details/healpix_utility.hpp +include src/fourier/euclidian.hpp +include src/fourier/fft/fftw_calls.hpp +include src/fourier/fft/fftw_calls_mpi.hpp +include src/fourier/fft/fftw_complex.hpp +include src/fourier/healpix.hpp +include src/growthFactor.cpp +include src/growthFactor.hpp +include src/h5_readFlash.cpp +include src/h5_readFlash.hpp +include src/hdf5_array.hpp +include src/hdf5_flash.h +include src/interpolate.cpp +include src/interpolate.hpp +include src/interpolate3d.hpp +include src/kdtree_leaf.hpp +include src/kdtree_leaf.tcc +include src/kdtree_splitters.hpp +include src/loadFlash.cpp +include src/loadFlash.hpp +include src/loadFlash_dummy.cpp +include src/loadGadget.cpp +include src/loadGadget.hpp +include src/loadRamses.cpp +include src/loadRamses.hpp +include src/loadSimu.hpp +include src/load_data.cpp +include src/load_data.hpp +include src/mach.hpp +include src/miniargs.cpp +include src/miniargs.hpp +include src/mykdtree.hpp +include src/mykdtree.tcc +include src/newton.hpp +include src/octTree.hpp +include src/octTree.tcc +include src/openmp.hpp +include src/pool.hpp +include src/powerSpectrum.cpp +include src/powerSpectrum.hpp +include src/replicateGenerator.hpp +include src/sparseGrid.hpp +include src/sparseGrid.tcc +include src/sphSmooth.hpp +include src/sphSmooth.tcc +include src/symbol_visible.hpp +include src/tf_fit.hpp +include src/yorick.hpp +include src/yorick_nc3.cpp +include src/yorick_nc4.cpp diff --git a/builder/build-wheels.sh b/builder/build-wheels.sh new file mode 100755 index 0000000..e5c1b6f --- /dev/null +++ b/builder/build-wheels.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -e -x + +# Install a system package required by our library +#yum install -y atlas-devel +yum install -y cmake3 gsl-devel zlib-devel + +ln -fs /usr/bin/cmake3 /usr/bin/cmake + + +ALL_PYTHON="cp36-cp36m cp37-cp37m cp38-cp38" + +# Compile wheels +for pkg in $ALL_PYTHON; do + PYBIN=/opt/python/${pkg}/bin +# "${PYBIN}/pip" install -r /io/dev-requirements.txt + "${PYBIN}/pip" install -r /io/requirements.txt + "${PYBIN}/pip" wheel -vvv /io/ -w wheelhouse/ +done + +# Bundle external shared libraries into the wheels +for whl in wheelhouse/*.whl; do + auditwheel repair "$whl" --plat $PLAT -w /io/wheelhouse/ +done + +# Install packages and test +for pkg in $ALL_PYTHON; do + PYBIN=/opt/python/${pkg}/bin + "${PYBIN}/pip" install cosmotool --no-index -f /io/wheelhouse +done diff --git a/builder/start.sh b/builder/start.sh new file mode 100755 index 0000000..9fbc185 --- /dev/null +++ b/builder/start.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +d=$(pwd) +if test x"$(basename $d)" = xbuilder; then + d=${d}/../ +fi +if ! [ -e ${d}/setup.py ] ; then + echo "Unknown directory. Please move to the root of cosmotool source tree." + exit 1 +fi + +podman run -ti --rm -e PLAT=manylinux2010_x86_64 -v ${d}:/io:Z quay.io/pypa/manylinux2010_x86_64 /io/builder/build-wheels.sh diff --git a/external/external_build.cmake b/external/external_build.cmake index 070686c..ebb122f 100644 --- a/external/external_build.cmake +++ b/external/external_build.cmake @@ -56,19 +56,19 @@ if (ENABLE_SHARP) IF(NOT ENABLE_OPENMP) SET(SHARP_OPENMP --disable-openmp) ENDIF() - ExternalProject_Add(sharp - URL ${CMAKE_SOURCE_DIR}/external/libsharp-6077806.tar.gz - PREFIX ${BUILD_PREFIX}/sharp-prefix - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND autoconf && ./configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" --prefix=${DEP_BUILD} ${SHARP_OPENMP} - BUILD_COMMAND ${CMAKE_MAKE_PROGRAM} - INSTALL_COMMAND echo "No install" - ) SET(CUTILS_LIBRARY ${DEP_BUILD}/lib/libc_utils.a) SET(FFTPACK_LIBRARY ${DEP_BUILD}/lib/libfftpack.a) SET(SHARP_LIBRARY ${DEP_BUILD}/lib/libsharp.a) SET(SHARP_LIBRARIES ${SHARP_LIBRARY} ${FFTPACK_LIBRARY} ${CUTILS_LIBRARY}) SET(SHARP_INCLUDE_PATH ${DEP_BUILD}/include) + ExternalProject_Add(sharp + URL ${CMAKE_SOURCE_DIR}/external/libsharp-6077806.tar.gz + PREFIX ${BUILD_PREFIX}/sharp-prefix + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND autoconf && ./configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" --prefix=${DEP_BUILD} ${SHARP_OPENMP} + INSTALL_COMMAND echo "No install" + BUILD_BYPRODUCTS ${SHARP_LIBRARIES} + ) endif (ENABLE_SHARP) @@ -246,10 +246,23 @@ if (INTERNAL_BOOST) set(Boost_DEP boost) ELSE (INTERNAL_BOOST) - find_package(Boost 1.53 QUIET) - set(Boost_DEP) + find_package(Boost 1.69 QUIET) + if (Boost_VERSION) + if (${Boost_VERSION} VERSION_GREATER 1000) + math(EXPR TMP_MAJOR "${Boost_VERSION} / 100000") + math(EXPR TMP_MINOR "(${Boost_VERSION} - ${TMP_MAJOR} * 100000) / 100") + math(EXPR TMP_PATCHLEVEL "${Boost_VERSION} - ${TMP_MAJOR} * 100000 - ${TMP_MINOR} * 100") + set(Boost_VERSION ${TMP_MAJOR}.${TMP_MINOR}.${TMP_PATCHLEVEL}) + ENDIF() + if (${Boost_VERSION} VERSION_GREATER_EQUAL 1.70.0) + set(Boost_DEP Boost::headers) + set(Boost_TARGET Boost::headers) + endif() + endif() if (NOT Boost_FOUND) - cmessage(CWARNING "Boost >= 1.53 was not found") + cmessage(CWARNING "Boost >= 1.69 was not found") + else() + cmessage(STATUS "Boost has been found (version=${Boost_VERSION}), Boost_TARGET=${Boost_Target}") endif() endif (INTERNAL_BOOST) mark_as_advanced(Boost_INCLUDE_DIRS Boost_LIBRARIES) @@ -375,6 +388,7 @@ ExternalProject_Add(omptl BUILD_COMMAND echo "No build" PATCH_COMMAND patch -p1 -t -N < ${CMAKE_SOURCE_DIR}/external/patch-omptl INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${OMPTL_BUILD_DIR} ${EXT_INSTALL}/include/omptl + BUILD_BYPRODUCTS ${EXT_INSTALL}/include/omptl ) include_directories(${EXT_INSTALL}/include) ##include_directories(${OMPTL_BUILD_DIR}/src/) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 6045aca..90d3e6e 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -50,11 +50,11 @@ if(APPLE) set(CMAKE_MODULE_LINKER_FLAGS "-undefined dynamic_lookup") endif() -target_link_libraries(_cosmotool ${CosmoTool_local} ${GSL_LIBRARIES}) -target_link_libraries(_cosmo_power ${CosmoTool_local} ${GSL_LIBRARIES}) -target_link_libraries(_cosmo_cic ${CosmoTool_local} ${GSL_LIBRARIES}) +target_link_libraries(_cosmotool PRIVATE ${CosmoTool_local} ${GSL_LIBRARIES}) +target_link_libraries(_cosmo_power PRIVATE ${CosmoTool_local} ${GSL_LIBRARIES}) +target_link_libraries(_cosmo_cic PRIVATE ${CosmoTool_local} ${GSL_LIBRARIES}) target_link_libraries(_project ) -target_link_libraries(_fast_interp ${CosmoTool_local} ) +target_link_libraries(_fast_interp PRIVATE ${CosmoTool_local} ) SET(ct_TARGETS _cosmotool _project _cosmo_power _cosmo_cic _fast_interp ) diff --git a/python/_cosmo_bispectrum.cpp b/python/_cosmo_bispectrum.cpp index db6a6e0..867dd71 100644 --- a/python/_cosmo_bispectrum.cpp +++ b/python/_cosmo_bispectrum.cpp @@ -171,6 +171,7 @@ void CosmoTool_compute_bispectrum( size_t *Ntriangles, double* B, double delta_k, size_t Nk ) { +#if 0 // First remap to multi_array for easy access size_t kNz = Nz/2+1; #ifdef _OPENMP @@ -246,6 +247,7 @@ void CosmoTool_compute_bispectrum( #else #warning Serial version not implemented #endif +#endif } @@ -255,6 +257,7 @@ void CosmoTool_compute_powerspectrum( size_t *Ncounts, double* P, double delta_k, size_t Nk ) { +#if 0 // First remap to multi_array for easy access size_t kNz = Nz/2+1; boost::multi_array_ref, 3> a_delta(reinterpret_cast*>(delta_hat), boost::extents[Nx][Ny][kNz]); @@ -275,4 +278,5 @@ void CosmoTool_compute_powerspectrum( a_Nc[q1] ++; a_P[q1] += std::norm(v1); } +#endif } diff --git a/python/_cosmo_power.pyx b/python/_cosmo_power.pyx index 47e7bab..bf4bd4b 100644 --- a/python/_cosmo_power.pyx +++ b/python/_cosmo_power.pyx @@ -65,18 +65,30 @@ cdef class CosmologyPower: cdef CosmoPower power def __init__(self,**cosmo): + """Constructor + + Keyword arguments: + * omega_B_0 + * omega_M_0 + * h + * ns + * T27 + """ self.power = CosmoPower() self.power.OMEGA_B = cosmo['omega_B_0'] self.power.OMEGA_C = cosmo['omega_M_0']-cosmo['omega_B_0'] self.power.h = cosmo['h'] if 'ns' in cosmo: self.power.n = cosmo['ns'] + if 'T27' in cosmo: + self.power.Theta_27 = cosmo['T27'] assert self.power.OMEGA_C > 0 self.power.updateCosmology() def setNormalization(self,A): + """Set manual normalization for A_S""" self.power.setNormalization(A) def normalize(self,s8,k_min=-1,k_max=-1): diff --git a/python/_cosmotool.pyx b/python/_cosmotool.pyx index 61ba1a0..ed9195e 100644 --- a/python/_cosmotool.pyx +++ b/python/_cosmotool.pyx @@ -513,7 +513,8 @@ def writeGadget(str filename, object simulation): simdata.TotalNumPart = NumPart simdata.NumPart = NumPart - cxx_writeGadget(filename, &simdata) + filename_b = bytes(filename, 'utf-8') + cxx_writeGadget(filename_b, &simdata) def loadRamses(str basepath, int snapshot_id, int cpu_id, bool doublePrecision = False, bool loadPosition = True, bool loadVelocity = False, bool loadId = False, bool loadMass = False): """ loadRamses(basepath, snapshot_id, cpu_id, doublePrecision = False, loadPosition = True, loadVelocity = False) diff --git a/python/_project.pyx b/python/_project.pyx index 0974383..6ff1d5c 100644 --- a/python/_project.pyx +++ b/python/_project.pyx @@ -509,19 +509,17 @@ cdef void INTERNAL_project_cic_with_mass_periodic(DTYPE_t[:,:,:] g, cdef int b1[3] for i in range(x.shape[0]): - for j in range(3): a[j] = (x[i,j]+shifter)*delta_Box b[j] = int(floor(a[j])) - b1[j] = b[j]+1 - while b1[j] < 0: - b1[j] += Ngrid - while b1[j] >= Ngrid: - b1[j] -= Ngrid + b1[j] = (b[j]+1) % Ngrid a[j] -= b[j] c[j] = 1-a[j] + b[j] %= Ngrid + + m0 = mass[i] g[b[0],b[1],b[2]] += c[0]*c[1]*c[2]*m0 g[b1[0],b[1],b[2]] += a[0]*c[1]*c[2]*m0 diff --git a/python/cosmotool/ctpv.py b/python/cosmotool/ctpv.py index 22a9d22..4d90f1a 100644 --- a/python/cosmotool/ctpv.py +++ b/python/cosmotool/ctpv.py @@ -87,7 +87,7 @@ class ProgrammableParticleHistoryLoad(object): class ProgrammableDensityLoad(object): @staticmethod - def main_script(source, density, extents=None, aname="default"): + def main_script(source, density, extents=None, aname="default", extra_arrays={}): import vtk from vtk.util import numpy_support @@ -116,6 +116,11 @@ class ProgrammableDensityLoad(object): arr = numpy_support.numpy_to_vtk(density.transpose().astype(np.float64).ravel(), deep=1) arr.SetName(aname) ido.GetPointData().AddArray(arr) + + for k in extra_arrays.keys(): + arr = numpy_support.numpy_to_vtk(extra_arrays[k].transpose().astype(np.float64).ravel(), deep=1) + arr.SetName(k) + ido.GetPointData().AddArray(arr) @staticmethod def request_information(source, density=None, dims=None): diff --git a/python/cosmotool/simu.py b/python/cosmotool/simu.py index 2389926..157e107 100644 --- a/python/cosmotool/simu.py +++ b/python/cosmotool/simu.py @@ -98,12 +98,12 @@ def simpleWriteGadget(filename, positions, boxsize=1.0, Hubble=100, Omega_M=0.30 s.positions = positions - if velocities: + if velocities is not None: s.velocities = velocities else: s.velocities = [np.zeros(positions[0].size,dtype=np.float32)]*3 - if identifiers: + if identifiers is not None: s.identifiers = identifiers else: s.identifiers = np.arange(positions[0].size, dtype=np.int64) diff --git a/python/dummy.c b/python/dummy.c new file mode 100644 index 0000000..ad8787c --- /dev/null +++ b/python/dummy.c @@ -0,0 +1 @@ +static void dummyFunc() {} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ef3f5d4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +numpy +cffi +numexpr +pyfftw +cython diff --git a/sample/simple3DFilter.cpp b/sample/simple3DFilter.cpp index 0b8d7da..000c6b7 100644 --- a/sample/simple3DFilter.cpp +++ b/sample/simple3DFilter.cpp @@ -146,7 +146,7 @@ int main(int argc, char **argv) if (rx < 0 || rx >= Nres || ry < 0 || ry >= Nres || rz < 0 || rz >= Nres) continue; -#pragma omp atomic update +//#pragma omp atomic update bins[rx][ry][rz]++; } v1_data.resize(boost::extents[1][1]); diff --git a/setup.py b/setup.py index a03b536..9bdbd96 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ class CMakeExtension(Extension): doesn't try to build your sources for you """ - def __init__(self, name, sources=[]): + def __init__(self, name, sources=["python/dummy.c"]): super().__init__(name = name, sources = sources) @@ -218,10 +218,11 @@ class BuildCMakeExt(build_ext): CosmoTool_extension = CMakeExtension(name="cosmotool") setup(name='cosmotool', - version='1.0.0a0', + version='1.0.0a6', packages=["cosmotool"], package_dir={'cosmotool': 'python/cosmotool'}, - setup_requires=['cython'], + install_requires=['numpy','cffi','numexpr','pyfftw','h5py'], + setup_requires=['cython','cffi','numpy','numexpr'], ext_modules=[CosmoTool_extension], description='A small cosmotool box of useful functions', long_description=open("./README.md", 'r').read(), @@ -241,5 +242,6 @@ setup(name='cosmotool', 'build_ext': BuildCMakeExt, 'install_data': InstallCMakeLibsData, 'install_lib': InstallCMakeLibs, - } + }, + python_requires='>=3.6' ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 196ed36..4f39695 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -72,14 +72,14 @@ SET(CosmoTool_SRCS ${CosmoTool_SRCS} include_directories(${GSL_INCLUDE_PATH} ${CMAKE_BINARY_DIR}/src) -set(CosmoTool_LIBS ${GSL_LIBRARIES}) +set(CosmoTool_LIBS ${GSL_LIBRARIES} ${Boost_TARGET}) if(YORICK_SUPPORT) set(CosmoTool_LIBS ${CosmoTool_LIBS} ${NETCDFCPP_LIBRARY} ${NETCDF_LIBRARY} ${GSL_LIBRARIES}) include_directories(${NETCDF_INCLUDE_PATH} ${NETCDFCPP_INCLUDE_PATH}) endif(YORICK_SUPPORT) if (HDF5_FOUND) - set(CosmoTool_LIBS ${CosmoTool_LIBS} ${HDF5_CXX_LIBRARIES} ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES} ${ZLIB}) + set(CosmoTool_LIBS ${CosmoTool_LIBS} ${HDF5_CXX_LIBRARIES} ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES} ${ZLIB_LIBRARY}) message(STATUS "CosmoTool_LIBS: ${CosmoTool_LIBS}") endif (HDF5_FOUND) @@ -92,11 +92,13 @@ if (BUILD_SHARED_LIBS) add_library(CosmoTool_static STATIC ${CosmoTool_SRCS} $) target_link_libraries(CosmoTool_static) set_property(TARGET CosmoTool_static PROPERTY POSITION_INDEPENDENT_CODE ON) + add_dependencies(CosmoTool_static ${cosmotool_DEPS}) endif(BUILD_STATIC_LIBS) else (BUILD_SHARED_LIBS) add_library(CosmoTool STATIC ${CosmoTool_SRCS} $) - target_link_libraries(CosmoTool) + target_link_libraries(CosmoTool ${CosmoTool_LIBS}) set_property(TARGET CosmoTool PROPERTY POSITION_INDEPENDENT_CODE ON) + add_dependencies(CosmoTool ${cosmotool_DEPS}) endif (BUILD_SHARED_LIBS) IF(NOT COSMOTOOL_PYTHON_PACKAGING) diff --git a/src/algo.hpp b/src/algo.hpp index 5f896ef..9dcf1bc 100644 --- a/src/algo.hpp +++ b/src/algo.hpp @@ -93,6 +93,6 @@ namespace CosmoTool -}; +} #endif diff --git a/src/config.hpp b/src/config.hpp index 6fa7b63..940919b 100644 --- a/src/config.hpp +++ b/src/config.hpp @@ -165,6 +165,6 @@ namespace CosmoTool FilesystemFullException() : Exception() {} }; -}; +} #endif diff --git a/src/hdf5_array.hpp b/src/hdf5_array.hpp index 711c0bc..4cab937 100644 --- a/src/hdf5_array.hpp +++ b/src/hdf5_array.hpp @@ -78,8 +78,6 @@ namespace CosmoTool { } }; - //, typename boost::enable_if >::type> \ - // #define HDF5_TYPE(tl, thdf5) \ template struct get_hdf5_data_type >::type > \ { static H5::DataType type() { return H5::PredType::thdf5; }; } @@ -122,7 +120,7 @@ namespace CosmoTool { template<> struct hdf5_extent_gen<0> { - static inline boost::multi_array_types::extent_gen build(hsize_t *d) + static inline boost::multi_array_types::extent_gen build(hsize_t *) { return boost::extents; } @@ -263,6 +261,35 @@ namespace CosmoTool { } }; + struct CosmoString { + char const * s; + operator char const *() { return s; } + char const *operator=(char const *s0) { + s = s0; + return s0; + } + }; + + class hdf5_CosmoStringType { + public: + H5::StrType type; + + hdf5_CosmoStringType() : type(H5::PredType::C_S1, H5T_VARIABLE) { + } + + static const hdf5_CosmoStringType *ctype() + { + static hdf5_CosmoStringType singleton; + return &singleton; + } + }; + + template<> struct get_hdf5_data_type { + static H5::DataType type() { + return hdf5_CosmoStringType::ctype()->type; + } + }; + template void hdf5_write_array(H5_CommonFileGroup& fg, const std::string& data_set_name, const ArrayType& data ) { @@ -484,7 +511,7 @@ namespace CosmoTool { \ }; \ }; -}; +} #endif diff --git a/src/loadRamses.cpp b/src/loadRamses.cpp index 0c628f8..3e841d5 100644 --- a/src/loadRamses.cpp +++ b/src/loadRamses.cpp @@ -34,7 +34,7 @@ knowledge of the CeCILL license and that you accept its terms. +*/ #include -#include "/usr/include/regex.h" +#include #include #include #include diff --git a/src/mykdtree.tcc b/src/mykdtree.tcc index d937b23..e3fbdc8 100644 --- a/src/mykdtree.tcc +++ b/src/mykdtree.tcc @@ -277,7 +277,7 @@ namespace CosmoTool { coords tmpBound; NodeIntType nodeId; -#pragma omp atomic capture +//#pragma omp atomic capture nodeId = (this->lastNode)++; node = &nodes[nodeId]; @@ -293,7 +293,7 @@ namespace CosmoTool { tmpBound[axis] = node->value->coord[axis]; depth++; -#pragma omp task private(tmpBound) +//#pragma omp task private(tmpBound) { node->children[0] = buildTree(cell0, mid, depth, minBound, tmpBound); }