diff --git a/.azure-pipelines/azure-pipelines-linux.yml b/.azure-pipelines/azure-pipelines-linux.yml index c22a584..f436469 100755 --- a/.azure-pipelines/azure-pipelines-linux.yml +++ b/.azure-pipelines/azure-pipelines-linux.yml @@ -8,15 +8,32 @@ jobs: vmImage: ubuntu-latest strategy: matrix: - linux_64_r_base4.2: - CONFIG: linux_64_r_base4.2 - UPLOAD_PACKAGES: 'True' - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 linux_64_r_base4.3: CONFIG: linux_64_r_base4.3 UPLOAD_PACKAGES: 'True' DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 + linux_64_r_base4.4: + CONFIG: linux_64_r_base4.4 + UPLOAD_PACKAGES: 'True' + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 + linux_aarch64_r_base4.3: + CONFIG: linux_aarch64_r_base4.3 + UPLOAD_PACKAGES: 'True' + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 + linux_aarch64_r_base4.4: + CONFIG: linux_aarch64_r_base4.4 + UPLOAD_PACKAGES: 'True' + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 + linux_ppc64le_r_base4.3: + CONFIG: linux_ppc64le_r_base4.3 + UPLOAD_PACKAGES: 'True' + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 + linux_ppc64le_r_base4.4: + CONFIG: linux_ppc64le_r_base4.4 + UPLOAD_PACKAGES: 'True' + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64 timeoutInMinutes: 360 + variables: {} steps: # configure qemu binfmt-misc running. This allows us to run docker containers @@ -29,6 +46,9 @@ jobs: - script: | export CI=azure + export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) + export remote_url=$(Build.Repository.Uri) + export sha=$(Build.SourceVersion) export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then diff --git a/.azure-pipelines/azure-pipelines-osx.yml b/.azure-pipelines/azure-pipelines-osx.yml index cd91459..d69d55b 100755 --- a/.azure-pipelines/azure-pipelines-osx.yml +++ b/.azure-pipelines/azure-pipelines-osx.yml @@ -5,21 +5,25 @@ jobs: - job: osx pool: - vmImage: macOS-11 + vmImage: macOS-12 strategy: matrix: - osx_64_r_base4.2: - CONFIG: osx_64_r_base4.2 - UPLOAD_PACKAGES: 'True' osx_64_r_base4.3: CONFIG: osx_64_r_base4.3 UPLOAD_PACKAGES: 'True' + osx_64_r_base4.4: + CONFIG: osx_64_r_base4.4 + UPLOAD_PACKAGES: 'True' timeoutInMinutes: 360 + variables: {} steps: # TODO: Fast finish on azure pipelines? - script: | export CI=azure + export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) + export remote_url=$(Build.Repository.Uri) + export sha=$(Build.SourceVersion) export OSX_FORCE_SDK_DOWNLOAD="1" export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) diff --git a/.azure-pipelines/azure-pipelines-win.yml b/.azure-pipelines/azure-pipelines-win.yml index 75da5df..5a5c8ff 100755 --- a/.azure-pipelines/azure-pipelines-win.yml +++ b/.azure-pipelines/azure-pipelines-win.yml @@ -8,8 +8,11 @@ jobs: vmImage: windows-2022 strategy: matrix: - win_64_: - CONFIG: win_64_ + win_64_r_base4.3: + CONFIG: win_64_r_base4.3 + UPLOAD_PACKAGES: 'True' + win_64_r_base4.4: + CONFIG: win_64_r_base4.4 UPLOAD_PACKAGES: 'True' timeoutInMinutes: 360 variables: @@ -17,13 +20,14 @@ jobs: UPLOAD_TEMP: D:\\tmp steps: + - task: PythonScript@0 displayName: 'Download Miniforge' inputs: scriptSource: inline script: | import urllib.request - url = 'https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Windows-x86_64.exe' + url = 'https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Windows-x86_64.exe' path = r"$(Build.ArtifactStagingDirectory)/Miniforge.exe" urllib.request.urlretrieve(url, path) @@ -35,52 +39,17 @@ jobs: displayName: Add conda to PATH - script: | - call activate base - mamba.exe install "python=3.10" conda-build conda pip boa conda-forge-ci-setup=3 -c conda-forge --strict-channel-priority --yes - displayName: Install conda-build - - - script: set PYTHONUNBUFFERED=1 - displayName: Set PYTHONUNBUFFERED - - # Configure the VM - - script: | - call activate base - setup_conda_rc .\ ".\recipe" .\.ci_support\%CONFIG%.yaml - displayName: conda-forge CI setup - - # Configure the VM. - - script: | - set "CI=azure" - call activate base - run_conda_forge_build_setup - displayName: conda-forge build setup - - - script: | - call activate base - if EXIST LICENSE.txt ( - copy LICENSE.txt "recipe\\recipe-scripts-license.txt" - ) - conda.exe mambabuild "recipe" -m .ci_support\%CONFIG%.yaml --suppress-variables %EXTRA_CB_OPTIONS% - displayName: Build recipe + call ".scripts\run_win_build.bat" + displayName: Run Windows build env: PYTHONUNBUFFERED: 1 - - script: | - set "FEEDSTOCK_NAME=%BUILD_REPOSITORY_NAME:*/=%" - call activate base - validate_recipe_outputs "%FEEDSTOCK_NAME%" - displayName: Validate Recipe Outputs - - - script: | - set "GIT_BRANCH=%BUILD_SOURCEBRANCHNAME%" - set "FEEDSTOCK_NAME=%BUILD_REPOSITORY_NAME:*/=%" - set "TEMP=$(UPLOAD_TEMP)" - if not exist "%TEMP%\" md "%TEMP%" - set "TMP=%TEMP%" - call activate base - upload_package --validate --feedstock-name="%FEEDSTOCK_NAME%" .\ ".\recipe" .ci_support\%CONFIG%.yaml - displayName: Upload package - env: + CONFIG: $(CONFIG) + CI: azure + flow_run_id: azure_$(Build.BuildNumber).$(System.JobAttempt) + remote_url: $(Build.Repository.Uri) + sha: $(Build.SourceVersion) + UPLOAD_PACKAGES: $(UPLOAD_PACKAGES) + UPLOAD_TEMP: $(UPLOAD_TEMP) BINSTAR_TOKEN: $(BINSTAR_TOKEN) FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) - STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) - condition: and(succeeded(), not(eq(variables['UPLOAD_PACKAGES'], 'False')), not(eq(variables['Build.Reason'], 'PullRequest'))) \ No newline at end of file + STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) \ No newline at end of file diff --git a/.ci_support/linux_64_r_base4.3.yaml b/.ci_support/linux_64_r_base4.3.yaml index 0cdbcdc..20cdcf4 100644 --- a/.ci_support/linux_64_r_base4.3.yaml +++ b/.ci_support/linux_64_r_base4.3.yaml @@ -2,8 +2,12 @@ c_compiler: - gcc c_compiler_version: - '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_name: -- cos6 +- cos7 channel_sources: - conda-forge channel_targets: @@ -27,3 +31,5 @@ target_platform: zip_keys: - - c_compiler_version - cxx_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_64_r_base4.2.yaml b/.ci_support/linux_64_r_base4.4.yaml similarity index 81% rename from .ci_support/linux_64_r_base4.2.yaml rename to .ci_support/linux_64_r_base4.4.yaml index d0d7b63..39d42ef 100644 --- a/.ci_support/linux_64_r_base4.2.yaml +++ b/.ci_support/linux_64_r_base4.4.yaml @@ -2,8 +2,12 @@ c_compiler: - gcc c_compiler_version: - '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_name: -- cos6 +- cos7 channel_sources: - conda-forge channel_targets: @@ -21,9 +25,11 @@ pin_run_as_build: min_pin: x.x max_pin: x.x r_base: -- '4.2' +- '4.4' target_platform: - linux-64 zip_keys: - - c_compiler_version - cxx_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_aarch64_r_base4.3.yaml b/.ci_support/linux_aarch64_r_base4.3.yaml index 52f44ec..7514016 100644 --- a/.ci_support/linux_aarch64_r_base4.3.yaml +++ b/.ci_support/linux_aarch64_r_base4.3.yaml @@ -4,6 +4,10 @@ c_compiler: - gcc c_compiler_version: - '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_arch: - aarch64 cdt_name: @@ -19,7 +23,7 @@ cxx_compiler: cxx_compiler_version: - '12' docker_image: -- quay.io/condaforge/linux-anvil-aarch64 +- quay.io/condaforge/linux-anvil-cos7-x86_64 pin_run_as_build: r-base: min_pin: x.x @@ -31,3 +35,5 @@ target_platform: zip_keys: - - c_compiler_version - cxx_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_aarch64_r_base4.2.yaml b/.ci_support/linux_aarch64_r_base4.4.yaml similarity index 77% rename from .ci_support/linux_aarch64_r_base4.2.yaml rename to .ci_support/linux_aarch64_r_base4.4.yaml index 8baaddf..a4141b3 100644 --- a/.ci_support/linux_aarch64_r_base4.2.yaml +++ b/.ci_support/linux_aarch64_r_base4.4.yaml @@ -4,6 +4,10 @@ c_compiler: - gcc c_compiler_version: - '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_arch: - aarch64 cdt_name: @@ -19,15 +23,17 @@ cxx_compiler: cxx_compiler_version: - '12' docker_image: -- quay.io/condaforge/linux-anvil-aarch64 +- quay.io/condaforge/linux-anvil-cos7-x86_64 pin_run_as_build: r-base: min_pin: x.x max_pin: x.x r_base: -- '4.2' +- '4.4' target_platform: - linux-aarch64 zip_keys: - - c_compiler_version - cxx_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_ppc64le_r_base4.3.yaml b/.ci_support/linux_ppc64le_r_base4.3.yaml index 776024e..8526324 100644 --- a/.ci_support/linux_ppc64le_r_base4.3.yaml +++ b/.ci_support/linux_ppc64le_r_base4.3.yaml @@ -2,6 +2,10 @@ c_compiler: - gcc c_compiler_version: - '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_name: - cos7 channel_sources: @@ -15,7 +19,7 @@ cxx_compiler: cxx_compiler_version: - '12' docker_image: -- quay.io/condaforge/linux-anvil-ppc64le +- quay.io/condaforge/linux-anvil-cos7-x86_64 pin_run_as_build: r-base: min_pin: x.x @@ -27,3 +31,5 @@ target_platform: zip_keys: - - c_compiler_version - cxx_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/linux_ppc64le_r_base4.2.yaml b/.ci_support/linux_ppc64le_r_base4.4.yaml similarity index 74% rename from .ci_support/linux_ppc64le_r_base4.2.yaml rename to .ci_support/linux_ppc64le_r_base4.4.yaml index d8595b4..0bb4aae 100644 --- a/.ci_support/linux_ppc64le_r_base4.2.yaml +++ b/.ci_support/linux_ppc64le_r_base4.4.yaml @@ -2,6 +2,10 @@ c_compiler: - gcc c_compiler_version: - '12' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_name: - cos7 channel_sources: @@ -15,15 +19,17 @@ cxx_compiler: cxx_compiler_version: - '12' docker_image: -- quay.io/condaforge/linux-anvil-ppc64le +- quay.io/condaforge/linux-anvil-cos7-x86_64 pin_run_as_build: r-base: min_pin: x.x max_pin: x.x r_base: -- '4.2' +- '4.4' target_platform: - linux-ppc64le zip_keys: - - c_compiler_version - cxx_compiler_version +- - c_stdlib_version + - cdt_name diff --git a/.ci_support/migrations/r-base44_and_m2w64-ucrt.yaml b/.ci_support/migrations/r-base44_and_m2w64-ucrt.yaml new file mode 100644 index 0000000..ee9f9ba --- /dev/null +++ b/.ci_support/migrations/r-base44_and_m2w64-ucrt.yaml @@ -0,0 +1,50 @@ +migrator_ts: 1718391654 +__migrator: + kind: version + migration_number: 1 + bump_number: 1 + commit_message: "Rebuild for r-base 4.4 and UCRT mingw toolchain" + primary_key: r_base + automerge: True + longterm: True + include_noarch: True + pr_limit: 40 + override_cbc_keys: + - r-base + - r_base + - m2w64_c_compiler_stub + - m2w64_cxx_compiler_stub + - m2w64_fortran_compiler_stub + ordering: + m2w64_c_compiler: + - m2w64-toolchain + - gcc + m2w64_cxx_compiler: + - m2w64-toolchain + - gxx + m2w64_fortran_compiler: + - m2w64-toolchain + - gfortran + m2w64_c_stdlib: + - m2w64-toolchain + - m2w64-sysroot + +r_base: + - 4.3 + - 4.4 +m2w64_c_compiler: # [win] + - gcc # [win] +m2w64_c_compiler_version: # [win] + - 13 # [win] +m2w64_cxx_compiler: # [win] + - gxx # [win] +m2w64_cxx_compiler_version: # [win] + - 13 # [win] +m2w64_fortran_compiler: # [win] + - gfortran # [win] +m2w64_fortran_compiler_version: # [win] + - 13 # [win] +m2w64_c_stdlib: # [win] + - m2w64-sysroot # [win] +m2w64_c_stdlib_version: # [win] + - 12 # [win] diff --git a/.ci_support/migrations/r_base43.yaml b/.ci_support/migrations/r_base43.yaml deleted file mode 100644 index ec19ef3..0000000 --- a/.ci_support/migrations/r_base43.yaml +++ /dev/null @@ -1,17 +0,0 @@ -migrator_ts: 1682187595 -__migrator: - kind: version - migration_number: 1 - bump_number: 1 - operation: key_add - commit_message: "Rebuild for r-base 4.3" - primary_key: r_base - automerge: True - longterm: True - include_noarch: True - pr_limit: 40 - conda_forge_yml_patches: - provider.win_64: win_disabled - -r_base: - - 4.3 # [not win] diff --git a/.ci_support/osx_64_r_base4.3.yaml b/.ci_support/osx_64_r_base4.3.yaml index 8656efd..f96428e 100644 --- a/.ci_support/osx_64_r_base4.3.yaml +++ b/.ci_support/osx_64_r_base4.3.yaml @@ -1,9 +1,15 @@ MACOSX_DEPLOYMENT_TARGET: -- '10.9' +- '10.13' +MACOSX_SDK_VERSION: +- '10.13' c_compiler: - clang c_compiler_version: -- '15' +- '16' +c_stdlib: +- macosx_deployment_target +c_stdlib_version: +- '10.13' channel_sources: - conda-forge channel_targets: @@ -13,7 +19,7 @@ cran_mirror: cxx_compiler: - clangxx cxx_compiler_version: -- '15' +- '16' macos_machine: - x86_64-apple-darwin13.4.0 pin_run_as_build: diff --git a/.ci_support/osx_64_r_base4.2.yaml b/.ci_support/osx_64_r_base4.4.yaml similarity index 76% rename from .ci_support/osx_64_r_base4.2.yaml rename to .ci_support/osx_64_r_base4.4.yaml index 34ce370..03f6f03 100644 --- a/.ci_support/osx_64_r_base4.2.yaml +++ b/.ci_support/osx_64_r_base4.4.yaml @@ -1,9 +1,15 @@ MACOSX_DEPLOYMENT_TARGET: -- '10.9' +- '10.13' +MACOSX_SDK_VERSION: +- '10.13' c_compiler: - clang c_compiler_version: -- '15' +- '16' +c_stdlib: +- macosx_deployment_target +c_stdlib_version: +- '10.13' channel_sources: - conda-forge channel_targets: @@ -13,7 +19,7 @@ cran_mirror: cxx_compiler: - clangxx cxx_compiler_version: -- '15' +- '16' macos_machine: - x86_64-apple-darwin13.4.0 pin_run_as_build: @@ -21,7 +27,7 @@ pin_run_as_build: min_pin: x.x max_pin: x.x r_base: -- '4.2' +- '4.4' target_platform: - osx-64 zip_keys: diff --git a/.ci_support/win_64_.yaml b/.ci_support/win_64_r_base4.3.yaml similarity index 61% rename from .ci_support/win_64_.yaml rename to .ci_support/win_64_r_base4.3.yaml index 459915c..67843d5 100644 --- a/.ci_support/win_64_.yaml +++ b/.ci_support/win_64_r_base4.3.yaml @@ -5,14 +5,22 @@ channel_targets: cran_mirror: - https://cran.r-project.org m2w64_c_compiler: -- m2w64-toolchain +- gcc +m2w64_c_compiler_version: +- '13' +m2w64_c_stdlib: +- m2w64-sysroot +m2w64_c_stdlib_version: +- '12' m2w64_cxx_compiler: -- m2w64-toolchain +- gxx +m2w64_cxx_compiler_version: +- '13' pin_run_as_build: r-base: min_pin: x.x max_pin: x.x r_base: -- '4.1' +- '4.3' target_platform: - win-64 diff --git a/.ci_support/win_64_r_base4.4.yaml b/.ci_support/win_64_r_base4.4.yaml new file mode 100644 index 0000000..45d508a --- /dev/null +++ b/.ci_support/win_64_r_base4.4.yaml @@ -0,0 +1,26 @@ +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +cran_mirror: +- https://cran.r-project.org +m2w64_c_compiler: +- gcc +m2w64_c_compiler_version: +- '13' +m2w64_c_stdlib: +- m2w64-sysroot +m2w64_c_stdlib_version: +- '12' +m2w64_cxx_compiler: +- gxx +m2w64_cxx_compiler_version: +- '13' +pin_run_as_build: + r-base: + min_pin: x.x + max_pin: x.x +r_base: +- '4.4' +target_platform: +- win-64 diff --git a/.gitattributes b/.gitattributes index 7f32763..18f114a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -20,8 +20,8 @@ bld.bat text eol=crlf .travis.yml linguist-generated=true .scripts/* linguist-generated=true .woodpecker.yml linguist-generated=true -LICENSE.txt linguist-generated=true -README.md linguist-generated=true +/LICENSE.txt linguist-generated=true +/README.md linguist-generated=true azure-pipelines.yml linguist-generated=true build-locally.py linguist-generated=true shippable.yml linguist-generated=true diff --git a/.gitignore b/.gitignore index c89ecb7..179afe5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,24 @@ -*.pyc +# User content belongs under recipe/. +# Feedstock configuration goes in `conda-forge.yml` +# Everything else is managed by the conda-smithy rerender process. +# Please do not modify + +# Ignore all files and folders in root +* +!/conda-forge.yml + +# Don't ignore any files/folders if the parent folder is 'un-ignored' +# This also avoids warnings when adding an already-checked file with an ignored parent. +!/**/ +# Don't ignore any files/folders recursively in the following folders +!/recipe/** +!/.ci_support/** -build_artifacts +# Since we ignore files/folders recursively, any folders inside +# build_artifacts gets ignored which trips some build systems. +# To avoid that we 'un-ignore' all files/folders recursively +# and only ignore the root build_artifacts folder. +!/build_artifacts/** +/build_artifacts + +*.pyc diff --git a/.scripts/build_steps.sh b/.scripts/build_steps.sh index 595f8b5..ba4b251 100755 --- a/.scripts/build_steps.sh +++ b/.scripts/build_steps.sh @@ -28,14 +28,15 @@ conda-build: pkgs_dirs: - ${FEEDSTOCK_ROOT}/build_artifacts/pkg_cache - /opt/conda/pkgs +solver: libmamba CONDARC +export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1 - -mamba install --update-specs --yes --quiet --channel conda-forge \ - conda-build pip boa conda-forge-ci-setup=3 -mamba update --update-specs --yes --quiet --channel conda-forge \ - conda-build pip boa conda-forge-ci-setup=3 +mamba install --update-specs --yes --quiet --channel conda-forge --strict-channel-priority \ + pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1" +mamba update --update-specs --yes --quiet --channel conda-forge --strict-channel-priority \ + pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1" # set up the condarc setup_conda_rc "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" @@ -45,6 +46,9 @@ source run_conda_forge_build_setup # make the build number clobber make_build_number "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" +if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]] && [[ "${HOST_PLATFORM}" != linux-* ]] && [[ "${BUILD_WITH_CONDA_DEBUG:-0}" != 1 ]]; then + EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" +fi ( endgroup "Configuring conda" ) 2> /dev/null @@ -64,9 +68,16 @@ if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then # Drop into an interactive shell /bin/bash else - conda mambabuild "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ + conda-build "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ --suppress-variables ${EXTRA_CB_OPTIONS:-} \ - --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" + --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" \ + --extra-meta flow_run_id="${flow_run_id:-}" remote_url="${remote_url:-}" sha="${sha:-}" + ( startgroup "Inspecting artifacts" ) 2> /dev/null + + # inspect_artifacts was only added in conda-forge-ci-setup 4.6.0 + command -v inspect_artifacts >/dev/null 2>&1 && inspect_artifacts || echo "inspect_artifacts needs conda-forge-ci-setup >=4.6.0" + + ( endgroup "Inspecting artifacts" ) 2> /dev/null ( startgroup "Validating outputs" ) 2> /dev/null validate_recipe_outputs "${FEEDSTOCK_NAME}" diff --git a/.scripts/logging_utils.sh b/.scripts/logging_utils.sh index 57bc95c..aff009f 100644 --- a/.scripts/logging_utils.sh +++ b/.scripts/logging_utils.sh @@ -12,7 +12,7 @@ function startgroup { echo "##[group]$1";; travis ) echo "$1" - echo -en 'travis_fold:start:'"${1// /}"'\\r';; + echo -en 'travis_fold:start:'"${1// /}"'\r';; github_actions ) echo "::group::$1";; * ) @@ -28,7 +28,7 @@ function endgroup { azure ) echo "##[endgroup]";; travis ) - echo -en 'travis_fold:end:'"${1// /}"'\\r';; + echo -en 'travis_fold:end:'"${1// /}"'\r';; github_actions ) echo "::endgroup::";; esac diff --git a/.scripts/run_docker_build.sh b/.scripts/run_docker_build.sh index 9236239..00f377a 100755 --- a/.scripts/run_docker_build.sh +++ b/.scripts/run_docker_build.sh @@ -21,6 +21,12 @@ if [ -z ${FEEDSTOCK_NAME} ]; then export FEEDSTOCK_NAME=$(basename ${FEEDSTOCK_ROOT}) fi +if [[ "${sha:-}" == "" ]]; then + pushd "${FEEDSTOCK_ROOT}" + sha=$(git rev-parse HEAD) + popd +fi + docker info # In order for the conda-build process in the container to write to the mounted @@ -91,6 +97,9 @@ docker run ${DOCKER_RUN_ARGS} \ -e CPU_COUNT \ -e BUILD_WITH_CONDA_DEBUG \ -e BUILD_OUTPUT_ID \ + -e flow_run_id \ + -e remote_url \ + -e sha \ -e BINSTAR_TOKEN \ -e FEEDSTOCK_TOKEN \ -e STAGING_BINSTAR_TOKEN \ diff --git a/.scripts/run_osx_build.sh b/.scripts/run_osx_build.sh index 5ef2a19..420f051 100755 --- a/.scripts/run_osx_build.sh +++ b/.scripts/run_osx_build.sh @@ -11,7 +11,7 @@ MINIFORGE_HOME=${MINIFORGE_HOME:-${HOME}/miniforge3} ( startgroup "Installing a fresh version of Miniforge" ) 2> /dev/null MINIFORGE_URL="https://github.com/conda-forge/miniforge/releases/latest/download" -MINIFORGE_FILE="Mambaforge-MacOSX-$(uname -m).sh" +MINIFORGE_FILE="Miniforge3-MacOSX-$(uname -m).sh" curl -L -O "${MINIFORGE_URL}/${MINIFORGE_FILE}" rm -rf ${MINIFORGE_HOME} bash $MINIFORGE_FILE -b -p ${MINIFORGE_HOME} @@ -22,11 +22,13 @@ bash $MINIFORGE_FILE -b -p ${MINIFORGE_HOME} source ${MINIFORGE_HOME}/etc/profile.d/conda.sh conda activate base +export CONDA_SOLVER="libmamba" +export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1 -mamba install --update-specs --quiet --yes --channel conda-forge \ - conda-build pip boa conda-forge-ci-setup=3 -mamba update --update-specs --yes --quiet --channel conda-forge \ - conda-build pip boa conda-forge-ci-setup=3 +mamba install --update-specs --quiet --yes --channel conda-forge --strict-channel-priority \ + pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1" +mamba update --update-specs --yes --quiet --channel conda-forge --strict-channel-priority \ + pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1" @@ -45,6 +47,10 @@ else echo -e "\n\nNot mangling homebrew as we are not running in CI" fi +if [[ "${sha:-}" == "" ]]; then + sha=$(git rev-parse HEAD) +fi + echo -e "\n\nRunning the build setup script." source run_conda_forge_build_setup @@ -71,9 +77,21 @@ if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then /bin/bash else - conda mambabuild ./recipe -m ./.ci_support/${CONFIG}.yaml \ + if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]]; then + EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" + fi + + conda-build ./recipe -m ./.ci_support/${CONFIG}.yaml \ --suppress-variables ${EXTRA_CB_OPTIONS:-} \ - --clobber-file ./.ci_support/clobber_${CONFIG}.yaml + --clobber-file ./.ci_support/clobber_${CONFIG}.yaml \ + --extra-meta flow_run_id="$flow_run_id" remote_url="$remote_url" sha="$sha" + + ( startgroup "Inspecting artifacts" ) 2> /dev/null + + # inspect_artifacts was only added in conda-forge-ci-setup 4.6.0 + command -v inspect_artifacts >/dev/null 2>&1 && inspect_artifacts || echo "inspect_artifacts needs conda-forge-ci-setup >=4.6.0" + + ( endgroup "Inspecting artifacts" ) 2> /dev/null ( startgroup "Validating outputs" ) 2> /dev/null validate_recipe_outputs "${FEEDSTOCK_NAME}" diff --git a/.scripts/run_win_build.bat b/.scripts/run_win_build.bat new file mode 100755 index 0000000..65650bf --- /dev/null +++ b/.scripts/run_win_build.bat @@ -0,0 +1,130 @@ +:: PLEASE NOTE: This script has been automatically generated by conda-smithy. Any changes here +:: will be lost next time ``conda smithy rerender`` is run. If you would like to make permanent +:: changes to this script, consider a proposal to conda-smithy so that other feedstocks can also +:: benefit from the improvement. + +:: Note: we assume a Miniforge installation is available + +:: INPUTS (required environment variables) +:: CONFIG: name of the .ci_support/*.yaml file for this job +:: CI: azure, github_actions, or unset +:: UPLOAD_PACKAGES: true or false +:: UPLOAD_ON_BRANCH: true or false + +setlocal enableextensions enabledelayedexpansion + +call :start_group "Configuring conda" + +:: Activate the base conda environment +call activate base +:: Configure the solver +set "CONDA_SOLVER=libmamba" +if !errorlevel! neq 0 exit /b !errorlevel! +set "CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1" + +:: Provision the necessary dependencies to build the recipe later +echo Installing dependencies +mamba.exe install "python=3.10" pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1" -c conda-forge --strict-channel-priority --yes +if !errorlevel! neq 0 exit /b !errorlevel! + +:: Set basic configuration +echo Setting up configuration +setup_conda_rc .\ ".\recipe" .\.ci_support\%CONFIG%.yaml +if !errorlevel! neq 0 exit /b !errorlevel! +echo Running build setup +CALL run_conda_forge_build_setup + + +if !errorlevel! neq 0 exit /b !errorlevel! + +if EXIST LICENSE.txt ( + echo Copying feedstock license + copy LICENSE.txt "recipe\\recipe-scripts-license.txt" +) +if NOT [%HOST_PLATFORM%] == [%BUILD_PLATFORM%] ( + if [%CROSSCOMPILING_EMULATOR%] == [] ( + set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --no-test" + ) +) + +if NOT [%flow_run_id%] == [] ( + set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --extra-meta flow_run_id=%flow_run_id% remote_url=%remote_url% sha=%sha%" +) + +call :end_group + +:: Build the recipe +echo Building recipe +conda-build.exe "recipe" -m .ci_support\%CONFIG%.yaml --suppress-variables %EXTRA_CB_OPTIONS% +if !errorlevel! neq 0 exit /b !errorlevel! + +call :start_group "Inspecting artifacts" +:: inspect_artifacts was only added in conda-forge-ci-setup 4.6.0 +WHERE inspect_artifacts >nul 2>nul && inspect_artifacts || echo "inspect_artifacts needs conda-forge-ci-setup >=4.6.0" +call :end_group + +:: Prepare some environment variables for the upload step +if /i "%CI%" == "github_actions" ( + set "FEEDSTOCK_NAME=%GITHUB_REPOSITORY:*/=%" + set "GIT_BRANCH=%GITHUB_REF:refs/heads/=%" + if /i "%GITHUB_EVENT_NAME%" == "pull_request" ( + set "IS_PR_BUILD=True" + ) else ( + set "IS_PR_BUILD=False" + ) + set "TEMP=%RUNNER_TEMP%" +) +if /i "%CI%" == "azure" ( + set "FEEDSTOCK_NAME=%BUILD_REPOSITORY_NAME:*/=%" + set "GIT_BRANCH=%BUILD_SOURCEBRANCHNAME%" + if /i "%BUILD_REASON%" == "PullRequest" ( + set "IS_PR_BUILD=True" + ) else ( + set "IS_PR_BUILD=False" + ) + set "TEMP=%UPLOAD_TEMP%" +) + +:: Validate +call :start_group "Validating outputs" +validate_recipe_outputs "%FEEDSTOCK_NAME%" +if !errorlevel! neq 0 exit /b !errorlevel! +call :end_group + +if /i "%UPLOAD_PACKAGES%" == "true" ( + if /i "%IS_PR_BUILD%" == "false" ( + call :start_group "Uploading packages" + if not exist "%TEMP%\" md "%TEMP%" + set "TMP=%TEMP%" + upload_package --validate --feedstock-name="%FEEDSTOCK_NAME%" .\ ".\recipe" .ci_support\%CONFIG%.yaml + if !errorlevel! neq 0 exit /b !errorlevel! + call :end_group + ) +) + +exit + +:: Logging subroutines + +:start_group +if /i "%CI%" == "github_actions" ( + echo ::group::%~1 + exit /b +) +if /i "%CI%" == "azure" ( + echo ##[group]%~1 + exit /b +) +echo %~1 +exit /b + +:end_group +if /i "%CI%" == "github_actions" ( + echo ::endgroup:: + exit /b +) +if /i "%CI%" == "azure" ( + echo ##[endgroup] + exit /b +) +exit /b \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index c0511b1..0000000 --- a/.travis.yml +++ /dev/null @@ -1,37 +0,0 @@ -# This file was generated automatically from conda-smithy. To update this configuration, -# update the conda-forge.yml and/or the recipe/meta.yaml. - -language: generic - - - -matrix: - include: - - env: CONFIG=linux_aarch64_r_base4.2 UPLOAD_PACKAGES=True PLATFORM=linux-aarch64 DOCKER_IMAGE=quay.io/condaforge/linux-anvil-aarch64 - os: linux - arch: arm64 - dist: focal - - - env: CONFIG=linux_aarch64_r_base4.3 UPLOAD_PACKAGES=True PLATFORM=linux-aarch64 DOCKER_IMAGE=quay.io/condaforge/linux-anvil-aarch64 - os: linux - arch: arm64 - dist: focal - - - env: CONFIG=linux_ppc64le_r_base4.2 UPLOAD_PACKAGES=True PLATFORM=linux-ppc64le DOCKER_IMAGE=quay.io/condaforge/linux-anvil-ppc64le - os: linux - arch: ppc64le - dist: focal - - - env: CONFIG=linux_ppc64le_r_base4.3 UPLOAD_PACKAGES=True PLATFORM=linux-ppc64le DOCKER_IMAGE=quay.io/condaforge/linux-anvil-ppc64le - os: linux - arch: ppc64le - dist: focal - -script: - - export CI=travis - - export GIT_BRANCH="$TRAVIS_BRANCH" - - export FEEDSTOCK_NAME=$(basename ${TRAVIS_REPO_SLUG}) - - if [[ "${TRAVIS_PULL_REQUEST:-}" == "false" ]]; then export IS_PR_BUILD="False"; else export IS_PR_BUILD="True"; fi - - - - if [[ ${PLATFORM} =~ .*linux.* ]]; then CONDA_FORGE_DOCKER_RUN_ARGS="--network=host --security-opt=seccomp=unconfined" ./.scripts/run_docker_build.sh; fi \ No newline at end of file diff --git a/README.md b/README.md index 4e42e45..eeabcbb 100644 --- a/README.md +++ b/README.md @@ -7,33 +7,34 @@ Feedstock license: [BSD-3-Clause](https://github.com/conda-forge/r-mice-feedstoc About r-mice ------------ -Home: http://stefvanbuuren.github.io/mice/ , http://www.stefvanbuuren.name , http://www.stefvanbuuren.name/fimd/ +Home: https://www.stefvanbuuren.name , https://www.stefvanbuuren.name/fimd/ Package license: GPL-2.0-or-later Summary: Multiple imputation using Fully Conditional Specification (FCS) implemented by the MICE algorithm as described in Van Buuren and Groothuis-Oudshoorn (2011) . Each variable has its own imputation model. Built-in imputation models are provided for continuous data (predictive mean matching, normal), binary data (logistic regression), unordered categorical data (polytomous logistic regression) and ordered categorical data (proportional odds). MICE can also impute continuous two-level data (normal model, pan, second-level variables). Passive imputation can be used to maintain consistency between variables. Various diagnostic plots are available to inspect the quality of the imputations. +Development: https://github.com/stefvanbuuren/mice/ + +Documentation: https://stefvanbuuren.github.io/mice/ + About r-mice ------------ -Home: http://stefvanbuuren.github.io/mice/ , http://www.stefvanbuuren.name , http://www.stefvanbuuren.name/fimd/ +Home: https://www.stefvanbuuren.name , https://www.stefvanbuuren.name/fimd/ Package license: GPL-2.0-or-later Summary: Multiple imputation using Fully Conditional Specification (FCS) implemented by the MICE algorithm as described in Van Buuren and Groothuis-Oudshoorn (2011) . Each variable has its own imputation model. Built-in imputation models are provided for continuous data (predictive mean matching, normal), binary data (logistic regression), unordered categorical data (polytomous logistic regression) and ordered categorical data (proportional odds). MICE can also impute continuous two-level data (normal model, pan, second-level variables). Passive imputation can be used to maintain consistency between variables. Various diagnostic plots are available to inspect the quality of the imputations. +Development: https://github.com/stefvanbuuren/mice/ + +Documentation: https://stefvanbuuren.github.io/mice/ + Current build status ==================== - - - - +
Travis - - linux - -
@@ -47,13 +48,6 @@ Current build status
Azure
- - - - + @@ -75,10 +69,10 @@ Current build status - + @@ -89,10 +83,10 @@ Current build status - + @@ -103,10 +97,24 @@ Current build status - + + + + + + + @@ -190,7 +198,7 @@ available continuous integration services. Thanks to the awesome service provide [CircleCI](https://circleci.com/), [AppVeyor](https://www.appveyor.com/), [Drone](https://cloud.drone.io/welcome), and [TravisCI](https://travis-ci.com/) it is possible to build and upload installable packages to the -[conda-forge](https://anaconda.org/conda-forge) [Anaconda-Cloud](https://anaconda.org/) +[conda-forge](https://anaconda.org/conda-forge) [anaconda.org](https://anaconda.org/) channel for Linux, Windows and OSX respectively. To manage the continuous integration and simplify feedstock maintenance @@ -238,6 +246,6 @@ In order to produce a uniquely identifiable distribution: Feedstock Maintainers ===================== -* [@conda-forge/r](https://github.com/conda-forge/r/) +* [@conda-forge/r](https://github.com/orgs/conda-forge/teams/r/) * [@slacalle](https://github.com/slacalle/) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 6b346f5..e5306da 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -4,5 +4,5 @@ jobs: - template: ./.azure-pipelines/azure-pipelines-linux.yml - - template: ./.azure-pipelines/azure-pipelines-win.yml - - template: ./.azure-pipelines/azure-pipelines-osx.yml \ No newline at end of file + - template: ./.azure-pipelines/azure-pipelines-osx.yml + - template: ./.azure-pipelines/azure-pipelines-win.yml \ No newline at end of file diff --git a/build-locally.py b/build-locally.py index 3f4b7a7..d78427b 100755 --- a/build-locally.py +++ b/build-locally.py @@ -3,11 +3,11 @@ # This file has been generated by conda-smithy in order to build the recipe # locally. # -import os import glob +import os +import platform import subprocess from argparse import ArgumentParser -import platform def setup_environment(ns): @@ -64,8 +64,9 @@ def verify_config(ns): elif ns.config.startswith("osx"): if "OSX_SDK_DIR" not in os.environ: raise RuntimeError( - "Need OSX_SDK_DIR env variable set. Run 'export OSX_SDK_DIR=SDKs' " - "to download the SDK automatically to 'SDKs/MacOSX.sdk'. " + "Need OSX_SDK_DIR env variable set. Run 'export OSX_SDK_DIR=$PWD/SDKs' " + "to download the SDK automatically to '$PWD/SDKs/MacOSX.sdk'. " + "Note: OSX_SDK_DIR must be set to an absolute path. " "Setting this variable implies agreement to the licensing terms of the SDK by Apple." ) diff --git a/conda-forge.yml b/conda-forge.yml index 5494e18..026d6f7 100644 --- a/conda-forge.yml +++ b/conda-forge.yml @@ -1,5 +1,8 @@ bot: automerge: true +build_platform: + linux_aarch64: linux_64 + linux_ppc64le: linux_64 conda_build: pkg_format: '2' conda_forge_output_validation: true @@ -7,6 +10,7 @@ github: branch_name: main tooling_branch_name: main provider: - linux_aarch64: default - linux_ppc64le: default + linux_aarch64: azure + linux_ppc64le: azure win: azure +test: native_and_emulated diff --git a/recipe/bld.bat b/recipe/bld.bat index b7e1203..01bc5ea 100644 --- a/recipe/bld.bat +++ b/recipe/bld.bat @@ -1,2 +1,2 @@ -"%R%" CMD INSTALL --build . -IF %ERRORLEVEL% NEQ 0 exit 1 +"%R%" CMD INSTALL --build . %R_ARGS% +IF %ERRORLEVEL% NEQ 0 exit /B 1 diff --git a/recipe/build.sh b/recipe/build.sh index afaa0ea..b24c5a2 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -1,34 +1,6 @@ #!/bin/bash -if [[ $target_platform =~ linux.* ]] || [[ $target_platform == win-32 ]] || [[ $target_platform == win-64 ]] || [[ $target_platform == osx-64 ]]; then - export DISABLE_AUTOBREW=1 - $R CMD INSTALL --build . -else - mkdir -p $PREFIX/lib/R/library/mice - mv * $PREFIX/lib/R/library/mice - if [[ $target_platform == osx-64 ]]; then - pushd $PREFIX - for libdir in lib/R/lib lib/R/modules lib/R/library lib/R/bin/exec sysroot/usr/lib; do - pushd $libdir || exit 1 - for SHARED_LIB in $(find . -type f -iname "*.dylib" -or -iname "*.so" -or -iname "R"); do - echo "fixing SHARED_LIB $SHARED_LIB" - install_name_tool -change /Library/Frameworks/R.framework/Versions/3.5.0-MRO/Resources/lib/libR.dylib "$PREFIX"/lib/R/lib/libR.dylib $SHARED_LIB || true - install_name_tool -change /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libR.dylib "$PREFIX"/lib/R/lib/libR.dylib $SHARED_LIB || true - install_name_tool -change /usr/local/clang4/lib/libomp.dylib "$PREFIX"/lib/libomp.dylib $SHARED_LIB || true - install_name_tool -change /usr/local/gfortran/lib/libgfortran.3.dylib "$PREFIX"/lib/libgfortran.3.dylib $SHARED_LIB || true - install_name_tool -change /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libquadmath.0.dylib "$PREFIX"/lib/libquadmath.0.dylib $SHARED_LIB || true - install_name_tool -change /usr/local/gfortran/lib/libquadmath.0.dylib "$PREFIX"/lib/libquadmath.0.dylib $SHARED_LIB || true - install_name_tool -change /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libgfortran.3.dylib "$PREFIX"/lib/libgfortran.3.dylib $SHARED_LIB || true - install_name_tool -change /usr/lib/libgcc_s.1.dylib "$PREFIX"/lib/libgcc_s.1.dylib $SHARED_LIB || true - install_name_tool -change /usr/lib/libiconv.2.dylib "$PREFIX"/sysroot/usr/lib/libiconv.2.dylib $SHARED_LIB || true - install_name_tool -change /usr/lib/libncurses.5.4.dylib "$PREFIX"/sysroot/usr/lib/libncurses.5.4.dylib $SHARED_LIB || true - install_name_tool -change /usr/lib/libicucore.A.dylib "$PREFIX"/sysroot/usr/lib/libicucore.A.dylib $SHARED_LIB || true - install_name_tool -change /usr/lib/libexpat.1.dylib "$PREFIX"/lib/libexpat.1.dylib $SHARED_LIB || true - install_name_tool -change /usr/lib/libcurl.4.dylib "$PREFIX"/lib/libcurl.4.dylib $SHARED_LIB || true - install_name_tool -change /usr/lib/libc++.1.dylib "$PREFIX"/lib/libc++.1.dylib $SHARED_LIB || true - install_name_tool -change /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libc++.1.dylib "$PREFIX"/lib/libc++.1.dylib $SHARED_LIB || true - done - popd - done - popd - fi -fi + +export DISABLE_AUTOBREW=1 + +# shellcheck disable=SC2086 +${R} CMD INSTALL --build . ${R_ARGS} diff --git a/recipe/meta.yaml b/recipe/meta.yaml index ec378af..3d2a030 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,6 +1,5 @@ {% set version = "3.16.0" %} {% set posix = 'm2-' if win else '' %} -{% set native = 'm2w64-' if win else '' %} package: name: r-mice @@ -13,27 +12,39 @@ source: sha256: 29f0285185a540337e9dde2357690c82d174f115be701ee2f0a7083173a44040 build: - merge_build_host: true # [win] - number: 1 + number: 2 rpaths: - lib/R/lib/ - lib/ requirements: build: - - {{ compiler('c') }} # [not win] - - {{ compiler('m2w64_c') }} # [win] - - {{ compiler('cxx') }} # [not win] - - {{ compiler('m2w64_cxx') }} # [win] + - cross-r-base {{ r_base }} # [build_platform != target_platform] + - r-rcpp # [build_platform != target_platform] + - r-broom # [build_platform != target_platform] + - r-cpp11 # [build_platform != target_platform] + - r-dplyr # [build_platform != target_platform] + - r-generics # [build_platform != target_platform] + - r-glmnet # [build_platform != target_platform] + - r-lattice # [build_platform != target_platform] + - r-mitml # [build_platform != target_platform] + - r-nnet # [build_platform != target_platform] + - r-rlang # [build_platform != target_platform] + - r-rpart # [build_platform != target_platform] + - r-tidyr # [build_platform != target_platform] + - {{ compiler('c') }} # [not win] + - {{ stdlib("c") }} # [not win] + - {{ compiler('m2w64_c') }} # [win] + - {{ stdlib("m2w64_c") }} # [win] + - {{ compiler('cxx') }} # [not win] + - {{ compiler('m2w64_cxx') }} # [win] - {{ posix }}filesystem # [win] - {{ posix }}make - {{ posix }}sed # [win] - {{ posix }}coreutils # [win] - {{ posix }}zip # [win] - - cross-r-base {{ r_base }} # [build_platform != target_platform] host: - r-base - - r-rcpp - r-broom - r-cpp11 - r-dplyr @@ -42,13 +53,12 @@ requirements: - r-lattice - r-mitml - r-nnet + - r-rcpp - r-rlang - r-rpart - r-tidyr run: - r-base - - {{ native }}gcc-libs # [win] - - r-rcpp - r-broom - r-cpp11 - r-dplyr @@ -57,6 +67,7 @@ requirements: - r-lattice - r-mitml - r-nnet + - r-rcpp - r-rlang - r-rpart - r-tidyr @@ -67,13 +78,16 @@ test: - "\"%R%\" -e \"library('mice')\"" # [win] about: - home: http://stefvanbuuren.github.io/mice/ , http://www.stefvanbuuren.name , http://www.stefvanbuuren.name/fimd/ + home: https://www.stefvanbuuren.name , https://www.stefvanbuuren.name/fimd/ + dev_url: https://github.com/stefvanbuuren/mice/ + doc_url: https://stefvanbuuren.github.io/mice/ license: GPL-2.0-or-later summary: Multiple imputation using Fully Conditional Specification (FCS) implemented by the MICE algorithm as described in Van Buuren and Groothuis-Oudshoorn (2011) . Each variable has its own imputation model. Built-in imputation models are provided for continuous data (predictive mean matching, normal), binary data (logistic regression), unordered categorical data (polytomous logistic regression) and ordered categorical data (proportional odds). MICE can also impute continuous two-level data (normal model, pan, second-level variables). Passive imputation can be used to maintain consistency between variables. Various diagnostic plots are available to inspect the quality of the imputations. license_family: GPL3 license_file: + - {{ environ["PREFIX"] }}/lib/R/share/licenses/GPL-2 - {{ environ["PREFIX"] }}/lib/R/share/licenses/GPL-3 extra:
VariantStatus
linux_64_r_base4.2 - - variant - -
linux_64_r_base4.3 @@ -61,10 +55,10 @@ Current build status
linux_aarch64_r_base4.2linux_64_r_base4.4 - variant + variant
linux_ppc64le_r_base4.2linux_aarch64_r_base4.4 - variant + variant
osx_64_r_base4.2linux_ppc64le_r_base4.4 - variant + variant
win_64osx_64_r_base4.4 + + variant + +
win_64_r_base4.3 + + variant + +
win_64_r_base4.4 - variant + variant