.DEFAULT_GOAL := help
SHELL=bash
BASE ?= main
.PHONY: fix
fix:
@$(MAKE) -s -C .. $@
.PHONY: fmt
fmt: ## Run rustfmt and dprint
cargo fmt --all
dprint fmt
.PHONY: check
check: ## Run cargo check with all features
cargo check -p polars --all-features
.PHONY: clippy
clippy: ## Run clippy with all features
cargo clippy --all-targets --all-features -- -W clippy::dbg_macro
.PHONY: clippy-default
clippy-default: ## Run clippy with default features
cargo clippy --all-targets -- -W clippy::dbg_macro
.PHONY: pre-commit
pre-commit: fmt clippy clippy-default ## Run autoformatting and linting
.PHONY: check-features
check-features: ## Run cargo check for feature flag combinations (warning: slow)
cargo hack check -p polars --each-feature --no-dev-deps
.PHONY: miri
miri: ## Run miri
# not tested on all features because miri does not support SIMD
# some tests are also filtered, because miri cannot deal with the rayon threadpool
# we ignore leaks because the thread pool of rayon is never killed.
MIRIFLAGS="-Zmiri-disable-isolation -Zmiri-ignore-leaks -Zmiri-disable-stacked-borrows" \
POLARS_ALLOW_EXTENSION=1 \
cargo miri test \
--features object \
-p polars-core \
# -p polars-arrow
.PHONY: test
test: ## Run tests
cargo test --all-features \
-p polars-compute \
-p polars-core \
-p polars-io \
-p polars-lazy \
-p polars-ops \
-p polars-plan \
-p polars-row \
-p polars-sql \
-p polars-testing \
-p polars-time \
-p polars-utils \
-- \
--test-threads=2
.PHONY: nextest
nextest: ## Run tests with nextest
cargo nextest run --all-features \
-p polars-compute \
-p polars-core \
-p polars-io \
-p polars-lazy \
-p polars-ops \
-p polars-plan \
-p polars-row \
-p polars-sql \
-p polars-testing \
-p polars-time \
-p polars-utils \
.PHONY: integration-tests
integration-tests: ## Run integration tests
cargo test --all-features --test it -p polars
.PHONY: test-doc
test-doc: ## Run doc examples
cargo test --doc \
-p polars-lazy \
-p polars-io \
-p polars-core \
-p polars-testing \
-p polars-sql
.PHONY: bench-save
bench-save: ## Run benchmark and save
cargo bench --features=random --bench $(BENCH) -- --save-baseline $(SAVE)
.PHONY: bench-cmp
bench-cmp: ## Run benchmark and compare
cargo bench --features=random --bench $(BENCH) -- --load-baseline $(FEAT) --baseline $(BASE)
.PHONY: doctest
doctest: ## Check that documentation builds
cargo doc --no-deps --all-features -p polars-utils
cargo doc --no-deps --features=docs-selection -p polars-core
cargo doc --no-deps -p polars-time
cargo doc --no-deps -p polars-ops
cargo doc --no-deps --all-features -p polars-io
cargo doc --no-deps --all-features -p polars-lazy
cargo doc --no-deps --features=docs-selection -p polars
cargo doc --no-deps --all-features -p polars-sql
.PHONY: publish
publish: ## Publish Polars crates
cargo publish --allow-dirty -p polars-error
cargo publish --allow-dirty -p polars-utils
cargo publish --allow-dirty -p polars-schema
cargo publish --allow-dirty -p polars-arrow
cargo publish --allow-dirty -p polars-compute
cargo publish --allow-dirty -p polars-dtype
cargo publish --allow-dirty -p polars-row
cargo publish --allow-dirty -p polars-json
cargo publish --allow-dirty -p polars-core
cargo publish --allow-dirty -p polars-ffi
cargo publish --allow-dirty -p polars-ops
cargo publish --allow-dirty -p polars-testing
cargo publish --allow-dirty -p polars-time
cargo publish --allow-dirty -p polars-parquet
cargo publish --allow-dirty -p polars-io
cargo publish --allow-dirty -p polars-plan
cargo publish --allow-dirty -p polars-expr
cargo publish --allow-dirty -p polars-mem-engine
cargo publish --allow-dirty -p polars-stream
cargo publish --allow-dirty -p polars-lazy
cargo publish --allow-dirty -p polars-sql
cargo publish --allow-dirty -p polars
# This is independent
cargo publish --allow-dirty -p polars-python
.PHONY: help
help: ## Display this help screen
@echo -e "\033[1mAvailable commands:\033[0m"
@grep -E '^[a-z.A-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-18s\033[0m %s\n", $$1, $$2}' | sort
.PHONY: check-wasm
check-wasm: ## Check wasm build without supported features
RUSTFLAGS='--cfg getrandom_backend="wasm_js"' cargo hack check --target wasm32-unknown-unknown -p polars --no-dev-deps \
--each-feature \
--exclude-features async \
--exclude-features aws \
--exclude-features azure \
--exclude-features cloud \
--exclude-features decompress \
--exclude-features default \
--exclude-features docs-selection \
--exclude-features extract_jsonpath \
--exclude-features fmt \
--exclude-features gcp \
--exclude-features csv \
--exclude-features ipc \
--exclude-features ipc_streaming \
--exclude-features json \
--exclude-features nightly \
--exclude-features parquet \
--exclude-features performant \
--exclude-features streaming \
--exclude-features http \
--exclude-features full \
--exclude-features test