Skip to content

Commit d1e0f63

Browse files
authored
fix: Py-polars compilation with no features (pola-rs#18129)
1 parent bc65bd0 commit d1e0f63

File tree

3 files changed

+42
-21
lines changed

3 files changed

+42
-21
lines changed

Diff for: py-polars/src/dataframe/general.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::mem::ManuallyDrop;
2+
13
use either::Either;
24
use polars::export::arrow::bitmap::MutableBitmap;
35
use polars::prelude::*;
@@ -608,7 +610,10 @@ impl PyDataFrame {
608610
// underneath of you, so don't use this anywhere else.
609611
let mut df = std::mem::take(&mut self.df);
610612
let cols = unsafe { std::mem::take(df.get_columns_mut()) };
611-
let (ptr, len, cap) = cols.into_raw_parts();
613+
let mut md_cols = ManuallyDrop::new(cols);
614+
let ptr = md_cols.as_mut_ptr();
615+
let len = md_cols.len();
616+
let cap = md_cols.capacity();
612617
(ptr as usize, len, cap)
613618
}
614619
}

Diff for: py-polars/src/lazyframe/visitor/expr_nodes.rs

+36-19
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use polars_core::series::IsSorted;
44
use polars_ops::prelude::ClosedInterval;
55
use polars_plan::dsl::function_expr::rolling::RollingFunction;
66
use polars_plan::dsl::function_expr::rolling_by::RollingFunctionBy;
7-
use polars_plan::dsl::function_expr::trigonometry::TrigonometricFunction;
87
use polars_plan::dsl::{BooleanFunction, StringFunction, TemporalFunction};
98
use polars_plan::prelude::{
109
AExpr, FunctionExpr, GroupbyOptions, IRAggExpr, LiteralValue, Operator, PowFunction,
@@ -773,6 +772,7 @@ pub(crate) fn into_py(py: Python<'_>, expr: &AExpr) -> PyResult<PyObject> {
773772
ignore_nulls,
774773
)
775774
.to_object(py),
775+
#[cfg(feature = "regex")]
776776
StringFunction::Contains { literal, strict } => {
777777
(PyStringFunction::Contains.into_py(py), literal, strict).to_object(py)
778778
},
@@ -795,6 +795,7 @@ pub(crate) fn into_py(py: Python<'_>, expr: &AExpr) -> PyResult<PyObject> {
795795
pat,
796796
)
797797
.to_object(py),
798+
#[cfg(feature = "regex")]
798799
StringFunction::Find { literal, strict } => {
799800
(PyStringFunction::Find.into_py(py), literal, strict).to_object(py)
800801
},
@@ -819,6 +820,7 @@ pub(crate) fn into_py(py: Python<'_>, expr: &AExpr) -> PyResult<PyObject> {
819820
StringFunction::JsonPathMatch => {
820821
(PyStringFunction::JsonPathMatch.into_py(py),).to_object(py)
821822
},
823+
#[cfg(feature = "regex")]
822824
StringFunction::Replace { n, literal } => {
823825
(PyStringFunction::Replace.into_py(py), n, literal).to_object(py)
824826
},
@@ -837,12 +839,14 @@ pub(crate) fn into_py(py: Python<'_>, expr: &AExpr) -> PyResult<PyObject> {
837839
StringFunction::HexEncode => {
838840
(PyStringFunction::HexEncode.into_py(py),).to_object(py)
839841
},
842+
#[cfg(feature = "binary_encoding")]
840843
StringFunction::HexDecode(strict) => {
841844
(PyStringFunction::HexDecode.into_py(py), strict).to_object(py)
842845
},
843846
StringFunction::Base64Encode => {
844847
(PyStringFunction::Base64Encode.into_py(py),).to_object(py)
845848
},
849+
#[cfg(feature = "binary_encoding")]
846850
StringFunction::Base64Decode(strict) => {
847851
(PyStringFunction::Base64Decode.into_py(py), strict).to_object(py)
848852
},
@@ -887,6 +891,7 @@ pub(crate) fn into_py(py: Python<'_>, expr: &AExpr) -> PyResult<PyObject> {
887891
StringFunction::ToDecimal(inference_length) => {
888892
(PyStringFunction::ToDecimal.into_py(py), inference_length).to_object(py)
889893
},
894+
#[cfg(feature = "nightly")]
890895
StringFunction::Titlecase => {
891896
(PyStringFunction::Titlecase.into_py(py),).to_object(py)
892897
},
@@ -968,6 +973,7 @@ pub(crate) fn into_py(py: Python<'_>, expr: &AExpr) -> PyResult<PyObject> {
968973
TemporalFunction::WithTimeUnit(time_unit) => {
969974
(PyTemporalFunction::WithTimeUnit, Wrap(*time_unit)).into_py(py)
970975
},
976+
#[cfg(feature = "timezones")]
971977
TemporalFunction::ConvertTimeZone(time_zone) => {
972978
(PyTemporalFunction::ConvertTimeZone, time_zone).into_py(py)
973979
},
@@ -978,11 +984,14 @@ pub(crate) fn into_py(py: Python<'_>, expr: &AExpr) -> PyResult<PyObject> {
978984
TemporalFunction::OffsetBy => (PyTemporalFunction::OffsetBy,).into_py(py),
979985
TemporalFunction::MonthStart => (PyTemporalFunction::MonthStart,).into_py(py),
980986
TemporalFunction::MonthEnd => (PyTemporalFunction::MonthEnd,).into_py(py),
987+
#[cfg(feature = "timezones")]
981988
TemporalFunction::BaseUtcOffset => {
982989
(PyTemporalFunction::BaseUtcOffset,).into_py(py)
983990
},
991+
#[cfg(feature = "timezones")]
984992
TemporalFunction::DSTOffset => (PyTemporalFunction::DSTOffset,).into_py(py),
985993
TemporalFunction::Round => (PyTemporalFunction::Round,).into_py(py),
994+
#[cfg(feature = "timezones")]
986995
TemporalFunction::ReplaceTimeZone(time_zone, non_existent) => (
987996
PyTemporalFunction::ReplaceTimeZone,
988997
time_zone
@@ -1033,6 +1042,7 @@ pub(crate) fn into_py(py: Python<'_>, expr: &AExpr) -> PyResult<PyObject> {
10331042
BooleanFunction::IsBetween { closed } => {
10341043
(PyBooleanFunction::IsBetween, Wrap(*closed)).into_py(py)
10351044
},
1045+
#[cfg(feature = "is_in")]
10361046
BooleanFunction::IsIn => (PyBooleanFunction::IsIn,).into_py(py),
10371047
BooleanFunction::AllHorizontal => {
10381048
(PyBooleanFunction::AllHorizontal,).into_py(py)
@@ -1060,25 +1070,32 @@ pub(crate) fn into_py(py: Python<'_>, expr: &AExpr) -> PyResult<PyObject> {
10601070
return Err(PyNotImplementedError::new_err("search sorted"))
10611071
},
10621072
FunctionExpr::Range(_) => return Err(PyNotImplementedError::new_err("range")),
1063-
FunctionExpr::Trigonometry(trigfun) => match trigfun {
1064-
TrigonometricFunction::Cos => ("cos",),
1065-
TrigonometricFunction::Cot => ("cot",),
1066-
TrigonometricFunction::Sin => ("sin",),
1067-
TrigonometricFunction::Tan => ("tan",),
1068-
TrigonometricFunction::ArcCos => ("arccos",),
1069-
TrigonometricFunction::ArcSin => ("arcsin",),
1070-
TrigonometricFunction::ArcTan => ("arctan",),
1071-
TrigonometricFunction::Cosh => ("cosh",),
1072-
TrigonometricFunction::Sinh => ("sinh",),
1073-
TrigonometricFunction::Tanh => ("tanh",),
1074-
TrigonometricFunction::ArcCosh => ("arccosh",),
1075-
TrigonometricFunction::ArcSinh => ("arcsinh",),
1076-
TrigonometricFunction::ArcTanh => ("arctanh",),
1077-
TrigonometricFunction::Degrees => ("degrees",),
1078-
TrigonometricFunction::Radians => ("radians",),
1079-
}
1080-
.to_object(py),
1073+
#[cfg(feature = "trigonometry")]
1074+
FunctionExpr::Trigonometry(trigfun) => {
1075+
use polars_plan::dsl::function_expr::trigonometry::TrigonometricFunction;
1076+
1077+
match trigfun {
1078+
TrigonometricFunction::Cos => ("cos",),
1079+
TrigonometricFunction::Cot => ("cot",),
1080+
TrigonometricFunction::Sin => ("sin",),
1081+
TrigonometricFunction::Tan => ("tan",),
1082+
TrigonometricFunction::ArcCos => ("arccos",),
1083+
TrigonometricFunction::ArcSin => ("arcsin",),
1084+
TrigonometricFunction::ArcTan => ("arctan",),
1085+
TrigonometricFunction::Cosh => ("cosh",),
1086+
TrigonometricFunction::Sinh => ("sinh",),
1087+
TrigonometricFunction::Tanh => ("tanh",),
1088+
TrigonometricFunction::ArcCosh => ("arccosh",),
1089+
TrigonometricFunction::ArcSinh => ("arcsinh",),
1090+
TrigonometricFunction::ArcTanh => ("arctanh",),
1091+
TrigonometricFunction::Degrees => ("degrees",),
1092+
TrigonometricFunction::Radians => ("radians",),
1093+
}
1094+
.to_object(py)
1095+
},
1096+
#[cfg(feature = "trigonometry")]
10811097
FunctionExpr::Atan2 => ("atan2",).to_object(py),
1098+
#[cfg(feature = "sign")]
10821099
FunctionExpr::Sign => ("sign",).to_object(py),
10831100
FunctionExpr::FillNull => ("fill_null",).to_object(py),
10841101
FunctionExpr::RollingExpr(rolling) => match rolling {

Diff for: py-polars/src/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#![feature(vec_into_raw_parts)]
21
#![allow(clippy::nonstandard_macro_braces)] // Needed because clippy does not understand proc macro of PyO3
32
#![allow(clippy::transmute_undefined_repr)]
43
#![allow(non_local_definitions)]

0 commit comments

Comments
 (0)