Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2018, 2026, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# The Universal Permissive License (UPL), Version 1.0
Expand Down Expand Up @@ -57,3 +57,13 @@ def test_import():
except ImportError:
imported = False
assert imported


def test_tuplegetter_arguments():
from collections import _tuplegetter
assert_raises(TypeError, _tuplegetter)
assert_raises(TypeError, _tuplegetter, 0)
assert_raises(TypeError, _tuplegetter, 0, None, 1)
assert_raises(TypeError, _tuplegetter, 0, doc=None)
assert_raises(TypeError, _tuplegetter, index=0, doc=None)
assert _tuplegetter(1, 'doc').__get__((10, 20)) == 20
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,15 @@ class TestUnicodeCharacters(unittest.TestCase):
def test_builtin_type_as_dialect(self):
self.assertIsInstance(csv.reader(re.ASCII, int), type(csv.reader([])))

def test_reader_writer_type_names(self):
import _csv
self.assertIs(type(csv.reader([])), _csv.Reader)
self.assertEqual(_csv.Reader.__name__, 'reader')
self.assertEqual(_csv.Reader.__module__, '_csv')
with TemporaryFile("w") as fileobj:
self.assertIs(type(csv.writer(fileobj)), _csv.Writer)
self.assertEqual(_csv.Writer.__name__, 'writer')

def test_read_utf_32_delimiter(self):
test_data = ['a\U0001F642b']
reader = csv.reader(test_data, delimiter="\U0001F642")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,3 +173,10 @@ def test_blocking_os_read_thread_does_not_deadlock_import_re():
)
assert result.returncode == 0, result.stderr
assert result.stdout.rstrip().endswith("ok"), result.stdout


def test_rlock_new_ignores_arguments():
import _thread

assert type(_thread.RLock(0)) is _thread.RLock
assert type(_thread.RLock(x=1)) is _thread.RLock
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ test.test_math.MathTests.testAsinh @ darwin-arm64,linux-aarch64,linux-aarch64-gi
test.test_math.MathTests.testAtan @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testAtan2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testAtanh @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testCbrt @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testCeil @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testComb @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testConstants @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand All @@ -32,6 +33,7 @@ test.test_math.MathTests.testCosh @ darwin-arm64,linux-aarch64,linux-aarch64-git
test.test_math.MathTests.testDegrees @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testDist @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testExp @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testExp2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testFabs @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testFactorial @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_math.MathTests.testFactorialNonIntegers @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1314,8 +1314,8 @@ def takewhile(predicate, iterable):

// csv
CSVDialect("Dialect", PythonObject, newBuilder().publishInModule("_csv").basetype().slots(CSVDialectBuiltins.SLOTS)),
CSVReader("Reader", PythonObject, newBuilder().publishInModule("_csv").basetype().disallowInstantiation().slots(CSVReaderBuiltins.SLOTS)),
CSVWriter("Writer", PythonObject, newBuilder().publishInModule("_csv").basetype().disallowInstantiation()),
CSVReader("reader", PythonObject, newBuilder().moduleName("_csv").basetype().disallowInstantiation().slots(CSVReaderBuiltins.SLOTS)),
CSVWriter("writer", PythonObject, newBuilder().moduleName("_csv").basetype().disallowInstantiation()),

// codecs
PEncodingMap("EncodingMap", PythonObject, newBuilder().disallowInstantiation()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,22 @@ private static double compute(Node inliningTarget, double value, PRaiseNode rais
}
}

@Builtin(name = "cbrt", minNumOfPositionalArgs = 1, doc = "Return the cube root of x.")
@GenerateNodeFactory
public abstract static class CbrtNode extends PythonUnaryBuiltinNode {

@Specialization
static double doGeneric(VirtualFrame frame, Object value,
@Bind Node inliningTarget,
@Cached MathUnaryHelperNode helperNode) {
return helperNode.execute(frame, inliningTarget, value, CbrtNode::compute);
}

private static double compute(Node inliningTarget, double value, PRaiseNode raiseNode) {
return Math.cbrt(value);
}
}

@Builtin(name = "exp", minNumOfPositionalArgs = 1)
@GenerateNodeFactory
public abstract static class ExpNode extends PythonUnaryBuiltinNode {
Expand All @@ -273,6 +289,24 @@ private static double compute(Node inliningTarget, double value, PRaiseNode rais
}
}

@Builtin(name = "exp2", minNumOfPositionalArgs = 1, doc = "Return 2 raised to the power of x.")
@GenerateNodeFactory
public abstract static class Exp2Node extends PythonUnaryBuiltinNode {

@Specialization
static double doGeneric(VirtualFrame frame, Object value,
@Bind Node inliningTarget,
@Cached MathUnaryHelperNode helperNode) {
return helperNode.execute(frame, inliningTarget, value, Exp2Node::compute);
}

private static double compute(Node inliningTarget, double value, PRaiseNode raiseNode) {
double result = Math.pow(2.0, value);
checkMathRangeError(Double.isFinite(value) && Double.isInfinite(result), inliningTarget, raiseNode);
return result;
}
}

@Builtin(name = "expm1", minNumOfPositionalArgs = 1)
@GenerateNodeFactory
public abstract static class Expm1Node extends PythonUnaryBuiltinNode {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2021, 2026, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
Expand Down Expand Up @@ -121,6 +121,8 @@ public void initialize(Python3Core core) {
addBuiltinConstant("QUOTE_STRINGS", QUOTE_STRINGS.ordinal());
addBuiltinConstant("QUOTE_NOTNULL", QUOTE_NOTNULL.ordinal());
addBuiltinConstant(T__DIALECTS, PFactory.createDict(core.getLanguage()));
addBuiltinConstant("Reader", PythonBuiltinClassType.CSVReader);
addBuiltinConstant("Writer", PythonBuiltinClassType.CSVWriter);
super.initialize(core);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import com.oracle.graal.python.builtins.PythonBuiltins;
import com.oracle.graal.python.builtins.objects.PNone;
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
import com.oracle.graal.python.builtins.objects.function.PKeyword;
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
import com.oracle.graal.python.builtins.objects.type.TpSlots;
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
Expand All @@ -62,6 +63,7 @@
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
import com.oracle.graal.python.nodes.util.CastToJavaUnsignedLongNode;
import com.oracle.graal.python.runtime.GilNode;
import com.oracle.graal.python.runtime.exception.PythonErrorType;
Expand All @@ -85,11 +87,12 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
}

@Slot(value = SlotKind.tp_new, isComplex = true)
@SlotSignature(name = "RLock", minNumOfPositionalArgs = 1)
@SlotSignature(name = "RLock", minNumOfPositionalArgs = 1, takesVarArgs = true, takesVarKeywordArgs = true)
@GenerateNodeFactory
public abstract static class ConstructRLockNode extends PythonUnaryBuiltinNode {
public abstract static class ConstructRLockNode extends PythonVarargsBuiltinNode {
@SuppressWarnings("unused")
@Specialization
PRLock construct(Object cls,
PRLock construct(Object cls, Object[] arguments, PKeyword[] keywords,
@Cached TypeNodes.GetInstanceShape getInstanceShape) {
return PFactory.createRLock(cls, getInstanceShape.execute(cls));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2021, 2026, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
Expand Down Expand Up @@ -95,7 +95,7 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
}

@Slot(value = SlotKind.tp_new, isComplex = true)
@SlotSignature(name = J_TUPLE_GETTER, parameterNames = {"cls", "index", "doc"})
@SlotSignature(name = J_TUPLE_GETTER, minNumOfPositionalArgs = 3, numOfPositionalOnlyArgs = 3, parameterNames = {"cls", "index", "doc"})
@ArgumentClinic(name = "index", conversion = ArgumentClinic.ClinicConversion.Index)
@GenerateNodeFactory
public abstract static class TupleGetterNode extends PythonTernaryClinicBuiltinNode {
Expand Down
Loading