1
1
import numpy as np
2
2
import pytest
3
3
4
+ from pandas .compat .numpy import np_version_gt2
5
+
4
6
from pandas import (
5
7
DataFrame ,
6
8
Series ,
15
17
16
18
@pytest .mark .parametrize (
17
19
"method" ,
18
- [lambda ser : ser .values , lambda ser : np .asarray (ser )],
19
- ids = ["values" , "asarray" ],
20
+ [
21
+ lambda ser : ser .values ,
22
+ lambda ser : np .asarray (ser ),
23
+ lambda ser : np .array (ser , copy = False ),
24
+ ],
25
+ ids = ["values" , "asarray" , "array" ],
20
26
)
21
27
def test_series_values (method ):
22
28
ser = Series ([1 , 2 , 3 ], name = "name" )
@@ -40,8 +46,12 @@ def test_series_values(method):
40
46
41
47
@pytest .mark .parametrize (
42
48
"method" ,
43
- [lambda df : df .values , lambda df : np .asarray (df )],
44
- ids = ["values" , "asarray" ],
49
+ [
50
+ lambda df : df .values ,
51
+ lambda df : np .asarray (df ),
52
+ lambda ser : np .array (ser , copy = False ),
53
+ ],
54
+ ids = ["values" , "asarray" , "array" ],
45
55
)
46
56
def test_dataframe_values (method ):
47
57
df = DataFrame ({"a" : [1 , 2 , 3 ], "b" : [4 , 5 , 6 ]})
@@ -82,7 +92,7 @@ def test_series_to_numpy():
82
92
ser .iloc [0 ] = 0
83
93
assert ser .values [0 ] == 0
84
94
85
- # specify copy=False gives a writeable array
95
+ # specify copy=True gives a writeable array
86
96
ser = Series ([1 , 2 , 3 ], name = "name" )
87
97
arr = ser .to_numpy (copy = True )
88
98
assert not np .shares_memory (arr , get_array (ser , "name" ))
@@ -130,6 +140,23 @@ def test_dataframe_multiple_numpy_dtypes():
130
140
assert not np .shares_memory (arr , get_array (df , "a" ))
131
141
assert arr .flags .writeable is True
132
142
143
+ if np_version_gt2 :
144
+ # copy=False semantics are only supported in NumPy>=2.
145
+
146
+ with pytest .raises (ValueError , match = "Unable to avoid copy while creating" ):
147
+ arr = np .array (df , copy = False )
148
+
149
+ arr = np .array (df , copy = True )
150
+ assert arr .flags .writeable is True
151
+
152
+
153
+ def test_dataframe_single_block_copy_true ():
154
+ # the copy=False/None cases are tested above in test_dataframe_values
155
+ df = DataFrame ({"a" : [1 , 2 , 3 ], "b" : [4 , 5 , 6 ]})
156
+ arr = np .array (df , copy = True )
157
+ assert not np .shares_memory (arr , get_array (df , "a" ))
158
+ assert arr .flags .writeable is True
159
+
133
160
134
161
def test_values_is_ea ():
135
162
df = DataFrame ({"a" : date_range ("2012-01-01" , periods = 3 )})
0 commit comments