Skip to content

Commit 23a8f75

Browse files
committed
Fixed Object type for Series
1 parent cefb83d commit 23a8f75

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
- Added experimental support for Iceberg
44
- Added experimental `cast_options` option to `scan_parquet` method
5+
- Fixed `Object` type for `Series`
56

67
## 0.21.1 (2025-08-18)
78

ext/polars/src/series/mod.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ mod import;
88
mod map;
99
mod scatter;
1010

11-
use magnus::{RArray, Ruby, prelude::*};
11+
use magnus::{DataTypeFunctions, RArray, Ruby, TypedData, gc, prelude::*};
1212
use polars::prelude::*;
1313
use std::cell::RefCell;
1414

15-
use crate::RbResult;
15+
use crate::{ObjectValue, RbResult};
1616

17-
#[magnus::wrap(class = "Polars::RbSeries")]
17+
#[derive(TypedData)]
18+
#[magnus(class = "Polars::RbSeries", mark)]
1819
pub struct RbSeries {
1920
pub series: RefCell<Series>,
2021
}
@@ -48,3 +49,17 @@ pub fn to_rbseries(s: Vec<Column>) -> RArray {
4849
.map(RbSeries::new),
4950
)
5051
}
52+
53+
impl DataTypeFunctions for RbSeries {
54+
fn mark(&self, marker: &gc::Marker) {
55+
let series = self.series.borrow();
56+
if let DataType::Object(_) = series.dtype() {
57+
for i in 0..series.len() {
58+
let obj: Option<&ObjectValue> = series.get_object(i).map(|any| any.into());
59+
if let Some(o) = obj {
60+
marker.mark(o.inner);
61+
}
62+
}
63+
}
64+
}
65+
}

test/types_test.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,7 @@ def test_series_dtype_unknown_utf8
188188
def test_object
189189
s = Polars::Series.new([Object.new])
190190
GC.start
191-
# TODO fix
192-
# assert s.inspect
191+
assert s.inspect
193192
assert s.to_a
194193

195194
df = Polars::DataFrame.new({a: [Object.new]})

0 commit comments

Comments
 (0)