20#ifndef MATH_STANDALONE
24#ifndef MATH_STANDALONE
51 PyTuple_SET_ITEM(
ret,
i, PyFloat_FromDouble(
self->col[
i]));
65 PyObject *
const *args,
69 if (
UNLIKELY(kwnames && PyTuple_GET_SIZE(kwnames))) {
70 PyErr_SetString(PyExc_TypeError,
72 "takes no keyword args");
76 float col[3] = {0.0f, 0.0f, 0.0f};
78 const size_t nargs = PyVectorcall_NARGS(nargsf);
90 PyErr_Format(PyExc_TypeError,
92 "takes at most 1 argument (%zd given)",
100static PyObject *
Color_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
103 if (
UNLIKELY(kwds && PyDict_GET_SIZE(kwds))) {
104 PyErr_SetString(PyExc_TypeError,
105 "mathutils.Color(): "
106 "takes no keyword args");
109 PyObject *
const *args_array = &PyTuple_GET_ITEM(args, 0);
110 const size_t args_array_num = PyTuple_GET_SIZE(args);
111 return Color_vectorcall(
reinterpret_cast<PyObject *
>(type), args_array, args_array_num,
nullptr);
120#ifndef MATH_STANDALONE
124 Color_from_scene_linear_to_srgb_doc,
125 ".. function:: from_scene_linear_to_srgb()\n"
127 " Convert from scene linear to sRGB color space.\n"
129 " :return: A color in sRGB color space.\n"
130 " :rtype: :class:`Color`\n");
140 Color_from_srgb_to_scene_linear_doc,
141 ".. function:: from_srgb_to_scene_linear()\n"
143 " Convert from sRGB to scene linear color space.\n"
145 " :return: A color in scene linear color space.\n"
146 " :rtype: :class:`Color`\n");
156 Color_from_scene_linear_to_xyz_d65_doc,
157 ".. function:: from_scene_linear_to_xyz_d65()\n"
159 " Convert from scene linear to CIE XYZ (Illuminant D65) color space.\n"
161 " :return: A color in XYZ color space.\n"
162 " :rtype: :class:`Color`\n");
172 Color_from_xyz_d65_to_scene_linear_doc,
173 ".. function:: from_xyz_d65_to_scene_linear()\n"
175 " Convert from CIE XYZ (Illuminant D65) to scene linear color space.\n"
177 " :return: A color in scene linear color space.\n"
178 " :rtype: :class:`Color`\n");
188 Color_from_scene_linear_to_aces_doc,
189 ".. function:: from_scene_linear_to_aces()\n"
191 " Convert from scene linear to ACES2065-1 linear color space.\n"
193 " :return: A color in ACES2065-1 linear color space.\n"
194 " :rtype: :class:`Color`\n");
204 Color_from_aces_to_scene_linear_doc,
205 ".. function:: from_aces_to_scene_linear()\n"
207 " Convert from ACES2065-1 linear to scene linear color space.\n"
209 " :return: A color in scene linear color space.\n"
210 " :rtype: :class:`Color`\n");
220 Color_from_scene_linear_to_acescg_doc,
221 ".. function:: from_scene_linear_to_acescg()\n"
223 " Convert from scene linear to ACEScg linear color space.\n"
225 " :return: A color in ACEScg linear color space.\n"
226 " :rtype: :class:`Color`\n");
236 Color_from_acescg_to_scene_linear_doc,
237 ".. function:: from_acescg_to_scene_linear()\n"
239 " Convert from ACEScg linear to scene linear color space.\n"
241 " :return: A color in scene linear color space.\n"
242 " :rtype: :class:`Color`\n");
252 Color_from_scene_linear_to_rec709_linear_doc,
253 ".. function:: from_scene_linear_to_rec709_linear()\n"
255 " Convert from scene linear to Rec.709 linear color space.\n"
257 " :return: A color in Rec.709 linear color space.\n"
258 " :rtype: :class:`Color`\n");
268 Color_from_rec709_linear_to_scene_linear_doc,
269 ".. function:: from_rec709_linear_to_scene_linear()\n"
271 " Convert from Rec.709 linear color space to scene linear color space.\n"
273 " :return: A color in scene linear color space.\n"
274 " :rtype: :class:`Color`\n");
284 Color_from_scene_linear_to_rec2020_linear_doc,
285 ".. function:: from_scene_linear_to_rec2020_linear()\n"
287 " Convert from scene linear to Rec.2020 linear color space.\n"
289 " :return: A color in Rec.2020 linear color space.\n"
290 " :rtype: :class:`Color`\n");
300 Color_from_rec2020_linear_to_scene_linear_doc,
301 ".. function:: from_rec2020_linear_to_scene_linear()\n"
303 " Convert from Rec.2020 linear color space to scene linear color space.\n"
305 " :return: A color in scene linear color space.\n"
306 " :rtype: :class:`Color`\n");
325 ".. function:: copy()\n"
327 " Returns a copy of this color.\n"
329 " :return: A copy of the color.\n"
330 " :rtype: :class:`Color`\n"
332 " .. note:: use this to get a copy of a wrapped color with\n"
333 " no reference to the original data.\n");
358 PyObject *
ret, *tuple;
366 ret = PyUnicode_FromFormat(
"Color(%R)", tuple);
372#ifndef MATH_STANDALONE
384 ds,
"<Color (r=%.4f, g=%.4f, b=%.4f)>",
self->col[0],
self->col[1],
self->col[2]);
413 if ((flags & PyBUF_WRITABLE) == 0) {
416 if (flags & PyBUF_FORMAT) {
417 view->format = (
char *)
"f";
431 if (
view->readonly == 0) {
471 res = ok ? Py_False : Py_True;
478 res = Py_NotImplemented;
487 return Py_NewRef(res);
529 PyErr_SetString(PyExc_IndexError,
531 "array index out of range");
539 return PyFloat_FromDouble(
self->col[
i]);
551 f = PyFloat_AsDouble(value);
552 if (f == -1 && PyErr_Occurred()) {
553 PyErr_SetString(PyExc_TypeError,
555 "assigned value not a number");
564 PyErr_SetString(PyExc_IndexError,
566 "array assignment index out of range");
596 tuple = PyTuple_New(end -
begin);
628 PyErr_SetString(PyExc_ValueError,
629 "color[begin:end] = []: "
630 "size mismatch in slice assignment");
645 if (PyIndex_Check(item)) {
647 i = PyNumber_AsSsize_t(item, PyExc_IndexError);
648 if (
i == -1 && PyErr_Occurred()) {
656 if (PySlice_Check(item)) {
657 Py_ssize_t start, stop,
step, slicelength;
659 if (PySlice_GetIndicesEx(item,
COLOR_SIZE, &start, &stop, &
step, &slicelength) < 0) {
663 if (slicelength <= 0) {
664 return PyTuple_New(0);
670 PyErr_SetString(PyExc_IndexError,
"slice steps not supported with color");
675 PyExc_TypeError,
"color indices must be integers, not %.200s", Py_TYPE(item)->tp_name);
682 if (PyIndex_Check(item)) {
683 Py_ssize_t
i = PyNumber_AsSsize_t(item, PyExc_IndexError);
684 if (
i == -1 && PyErr_Occurred()) {
692 if (PySlice_Check(item)) {
693 Py_ssize_t start, stop,
step, slicelength;
695 if (PySlice_GetIndicesEx(item,
COLOR_SIZE, &start, &stop, &
step, &slicelength) < 0) {
703 PyErr_SetString(PyExc_IndexError,
"slice steps not supported with color");
708 PyExc_TypeError,
"color indices must be integers, not %.200s", Py_TYPE(item)->tp_name);
725 PyErr_Format(PyExc_TypeError,
726 "Color addition: (%s + %s) "
727 "invalid type for this operation",
728 Py_TYPE(v1)->tp_name,
729 Py_TYPE(
v2)->tp_name);
750 PyErr_Format(PyExc_TypeError,
751 "Color addition: (%s += %s) "
752 "invalid type for this operation",
753 Py_TYPE(v1)->tp_name,
754 Py_TYPE(
v2)->tp_name);
778 PyErr_Format(PyExc_TypeError,
779 "Color subtraction: (%s - %s) "
780 "invalid type for this operation",
781 Py_TYPE(v1)->tp_name,
782 Py_TYPE(
v2)->tp_name);
803 PyErr_Format(PyExc_TypeError,
804 "Color subtraction: (%s -= %s) "
805 "invalid type for this operation",
806 Py_TYPE(v1)->tp_name,
807 Py_TYPE(
v2)->tp_name);
851 if (color1 && color2) {
855 if (((scalar = PyFloat_AsDouble(
v2)) == -1.0f && PyErr_Occurred()) == 0) {
860 if (((scalar = PyFloat_AsDouble(v1)) == -1.0f && PyErr_Occurred()) == 0) {
868 PyErr_Format(PyExc_TypeError,
869 "Color multiplication: not supported between "
870 "'%.200s' and '%.200s' types",
871 Py_TYPE(v1)->tp_name,
872 Py_TYPE(
v2)->tp_name);
889 PyErr_SetString(PyExc_TypeError,
"Color division not supported in this order");
894 if (((scalar = PyFloat_AsDouble(
v2)) == -1.0f && PyErr_Occurred()) == 0) {
895 if (scalar == 0.0f) {
896 PyErr_SetString(PyExc_ZeroDivisionError,
"Color division: divide by zero error");
902 PyErr_Format(PyExc_TypeError,
903 "Color multiplication: not supported between "
904 "'%.200s' and '%.200s' types",
905 Py_TYPE(v1)->tp_name,
906 Py_TYPE(
v2)->tp_name);
921 if (((scalar = PyFloat_AsDouble(
v2)) == -1.0f && PyErr_Occurred()) == 0) {
925 PyErr_Format(PyExc_TypeError,
926 "Color multiplication: (%s *= %s) "
927 "invalid type for this operation",
928 Py_TYPE(v1)->tp_name,
929 Py_TYPE(
v2)->tp_name);
949 if (((scalar = PyFloat_AsDouble(
v2)) == -1.0f && PyErr_Occurred()) == 0) {
950 if (scalar == 0.0f) {
951 PyErr_SetString(PyExc_ZeroDivisionError,
"Color division: divide by zero error");
958 PyErr_Format(PyExc_TypeError,
959 "Color division: (%s /= %s) "
960 "invalid type for this operation",
961 Py_TYPE(v1)->tp_name,
962 Py_TYPE(
v2)->tp_name);
1058 Color_channel_r_doc,
1059 "Red color channel.\n"
1064 Color_channel_g_doc,
1065 "Green color channel.\n"
1070 Color_channel_b_doc,
1071 "Blue color channel.\n"
1089 Color_channel_hsv_h_doc,
1090 "HSV Hue component in [0, 1].\n"
1095 Color_channel_hsv_s_doc,
1096 "HSV Saturation component in [0, 1].\n"
1101 Color_channel_hsv_v_doc,
1102 "HSV Value component in [0, 1].\n"
1117 return PyFloat_FromDouble(hsv[
i]);
1124 float f = PyFloat_AsDouble(value);
1126 if (f == -1 && PyErr_Occurred()) {
1127 PyErr_SetString(PyExc_TypeError,
1128 "color.h/s/v = value: "
1129 "assigned value not a number");
1138 CLAMP(f, 0.0f, 1.0f);
1152 "HSV Values in [0, 1].\n"
1154 ":type: tuple[float, float, float]\n");
1167 ret = PyTuple_New(3);
1169 ret, PyFloat_FromDouble(hsv[0]), PyFloat_FromDouble(hsv[1]), PyFloat_FromDouble(hsv[2]));
1206 Color_channel_r_doc,
1211 Color_channel_g_doc,
1216 Color_channel_b_doc,
1222 Color_channel_hsv_h_doc,
1227 Color_channel_hsv_s_doc,
1232 Color_channel_hsv_v_doc,
1257 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr}
1268# pragma clang diagnostic push
1269# pragma clang diagnostic ignored "-Wcast-function-type"
1271# pragma GCC diagnostic push
1272# pragma GCC diagnostic ignored "-Wcast-function-type"
1277 {
"copy", (PyCFunction)
Color_copy, METH_NOARGS, Color_copy_doc},
1278 {
"__copy__", (PyCFunction)
Color_copy, METH_NOARGS, Color_copy_doc},
1279 {
"__deepcopy__", (PyCFunction)
Color_deepcopy, METH_VARARGS, Color_copy_doc},
1285#ifndef MATH_STANDALONE
1286 {
"from_scene_linear_to_srgb",
1289 Color_from_scene_linear_to_srgb_doc},
1290 {
"from_srgb_to_scene_linear",
1293 Color_from_srgb_to_scene_linear_doc},
1294 {
"from_scene_linear_to_xyz_d65",
1297 Color_from_scene_linear_to_xyz_d65_doc},
1298 {
"from_xyz_d65_to_scene_linear",
1301 Color_from_xyz_d65_to_scene_linear_doc},
1302 {
"from_scene_linear_to_aces",
1305 Color_from_scene_linear_to_aces_doc},
1306 {
"from_aces_to_scene_linear",
1309 Color_from_aces_to_scene_linear_doc},
1310 {
"from_scene_linear_to_acescg",
1313 Color_from_scene_linear_to_acescg_doc},
1314 {
"from_acescg_to_scene_linear",
1317 Color_from_acescg_to_scene_linear_doc},
1318 {
"from_scene_linear_to_rec709_linear",
1321 Color_from_scene_linear_to_rec709_linear_doc},
1322 {
"from_rec709_linear_to_scene_linear",
1325 Color_from_rec709_linear_to_scene_linear_doc},
1326 {
"from_scene_linear_to_rec2020_linear",
1329 Color_from_scene_linear_to_rec2020_linear_doc},
1330 {
"from_rec2020_linear_to_scene_linear",
1333 Color_from_rec2020_linear_to_scene_linear_doc},
1336 {
nullptr,
nullptr, 0,
nullptr},
1341# pragma clang diagnostic pop
1343# pragma GCC diagnostic pop
1353#ifdef MATH_STANDALONE
1354# define Color_str nullptr
1360 ".. class:: Color(rgb=(0.0, 0.0, 0.0), /)\n"
1362 " This object gives access to Colors in Blender.\n"
1364 " Most colors returned by Blender APIs are in scene linear color space, as defined by "
1365 " the OpenColorIO configuration. The notable exception is user interface theming colors, "
1366 " which are in sRGB color space.\n"
1368 " :arg rgb: (red, green, blue) color values where (0, 0, 0) is black & (1, 1, 1) is white.\n"
1369 " :type rgb: Sequence[float]\n");
1371 PyVarObject_HEAD_INIT(
nullptr, 0)
1390 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
1422#ifdef MATH_STANDALONE
1437 col_alloc =
static_cast<float *
>(PyMem_Malloc(
COLOR_SIZE *
sizeof(
float)));
1438 if (
UNLIKELY(col_alloc ==
nullptr)) {
1439 PyErr_SetString(PyExc_MemoryError,
1441 "problem allocating data");
1447 self->col = col_alloc;
1450 self->cb_user =
nullptr;
1451 self->cb_type =
self->cb_subtype = 0;
1464 PyMem_Free(col_alloc);
1467 return (PyObject *)
self;
1477 self->cb_user =
nullptr;
1478 self->cb_type =
self->cb_subtype = 0;
1485 return (PyObject *)
self;
1493 self->cb_user = cb_user;
1494 self->cb_type = cb_type;
1495 self->cb_subtype = cb_subtype;
1497 PyObject_GC_Track(
self);
1500 return (PyObject *)
self;
#define BLI_assert_msg(a, msg)
A dynamically sized string ADT.
DynStr * BLI_dynstr_new(void) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_dynstr_appendf(DynStr *__restrict ds, const char *__restrict format,...) ATTR_PRINTF_FORMAT(2
double double_round(double x, int ndigits)
void hsv_to_rgb_v(const float hsv[3], float r_rgb[3])
void rgb_to_hsv_v(const float rgb[3], float r_hsv[3])
void rgb_to_hsv(float r, float g, float b, float *r_h, float *r_s, float *r_v)
void add_vn_vn(float *array_tar, const float *array_src, int size)
void mul_vn_fl(float *array_tar, int size, float f)
MINLINE void clamp_v3(float vec[3], float min, float max)
void sub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, int size)
MINLINE void copy_v3_v3(float r[3], const float a[3])
void add_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, int size)
void negate_vn_vn(float *array_tar, const float *array_src, int size)
MINLINE void zero_v3(float r[3])
void mul_vn_vn_fl(float *array_tar, const float *array_src, int size, float f)
void sub_vn_vn(float *array_tar, const float *array_src, int size)
#define POINTER_FROM_INT(i)
#define POINTER_AS_INT(i)
BLI_INLINE void IMB_colormanagement_srgb_to_scene_linear_v3(float scene_linear[3], const float srgb[3])
BLI_INLINE void IMB_colormanagement_scene_linear_to_rec2020(float rec2020[3], const float scene_linear[3])
BLI_INLINE void IMB_colormanagement_scene_linear_to_rec709(float rec709[3], const float scene_linear[3])
BLI_INLINE void IMB_colormanagement_aces_to_scene_linear(float scene_linear[3], const float aces[3])
BLI_INLINE void IMB_colormanagement_rec2020_to_scene_linear(float scene_linear[3], const float rec2020[3])
BLI_INLINE void IMB_colormanagement_xyz_to_scene_linear(float scene_linear[3], const float xyz[3])
BLI_INLINE void IMB_colormanagement_rec709_to_scene_linear(float scene_linear[3], const float rec709[3])
BLI_INLINE void IMB_colormanagement_scene_linear_to_xyz(float xyz[3], const float scene_linear[3])
BLI_INLINE void IMB_colormanagement_scene_linear_to_aces(float aces[3], const float scene_linear[3])
BLI_INLINE void IMB_colormanagement_acescg_to_scene_linear(float scene_linear[3], const float acescg[3])
BLI_INLINE void IMB_colormanagement_scene_linear_to_srgb_v3(float srgb[3], const float scene_linear[3])
BLI_INLINE void IMB_colormanagement_scene_linear_to_acescg(float acescg[3], const float scene_linear[3])
ATTR_WARN_UNUSED_RESULT const BMVert * v2
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
VecBase< float, D > step(VecOp< float, D >, VecOp< float, D >) RET
int BaseMathObject_is_gc(BaseMathObject *self)
Py_hash_t mathutils_array_hash(const float *array, size_t array_len)
void BaseMathObject_dealloc(BaseMathObject *self)
int EXPP_VectorsAreEqual(const float *vecA, const float *vecB, int size, int floatSteps)
int mathutils_array_parse(float *array, int array_num_min, int array_num_max, PyObject *value, const char *error_prefix)
char BaseMathObject_is_valid_doc[]
char BaseMathObject_is_wrapped_doc[]
PyObject * BaseMathObject_owner_get(BaseMathObject *self, void *)
char BaseMathObject_is_frozen_doc[]
PyObject * mathutils_dynstr_to_py(DynStr *ds)
PyObject * BaseMathObject_is_frozen_get(BaseMathObject *self, void *)
PyObject * BaseMathObject_freeze(BaseMathObject *self)
PyObject * BaseMathObject_is_wrapped_get(BaseMathObject *self, void *)
char BaseMathObject_owner_doc[]
char BaseMathObject_freeze_doc[]
PyObject * BaseMathObject_is_valid_get(BaseMathObject *self, void *)
int BaseMathObject_clear(BaseMathObject *self)
int BaseMathObject_traverse(BaseMathObject *self, visitproc visit, void *arg)
#define BaseMath_ReadCallback_ForWrite(_self)
#define BaseMath_Prepare_ForBufferAccess(_self, _view, _flags)
#define BaseMath_ReadIndexCallback(_self, _index)
#define BaseMath_WriteCallback(_self)
#define BASE_MATH_NEW(struct_name, root_type, base_type)
#define BaseMathObject_Prepare_ForHash(_self)
#define BASE_MATH_FLAG_DEFAULT
#define BaseMath_Prepare_ForWrite(_self)
@ BASE_MATH_FLAG_HAS_BUFFER_VIEW
#define BaseMath_ReadCallback(_self)
#define BaseMath_WriteIndexCallback(_self, _index)
static PyObject * Color_from_scene_linear_to_rec709_linear(ColorObject *self)
static int Color_getbuffer(PyObject *obj, Py_buffer *view, int flags)
static PyObject * Color_str(ColorObject *self)
PyObject * Color_CreatePyObject(const float col[3], PyTypeObject *base_type)
static PyObject * Color_from_xyz_d65_to_scene_linear(ColorObject *self)
static Py_hash_t Color_hash(ColorObject *self)
static int Color_ass_subscript(ColorObject *self, PyObject *item, PyObject *value)
static PyObject * color_mul_float(ColorObject *color, const float scalar)
static PyObject * Color_imul(PyObject *v1, PyObject *v2)
static PyObject * Color_richcmpr(PyObject *a, PyObject *b, int op)
static void Color_releasebuffer(PyObject *, Py_buffer *view)
static PyObject * Color_channel_get(ColorObject *self, void *type)
static int Color_ass_item(ColorObject *self, Py_ssize_t i, PyObject *value)
static PySequenceMethods Color_SeqMethods
static PyObject * Color_to_tuple_ex(ColorObject *self, int ndigits)
PyDoc_STRVAR(Color_from_scene_linear_to_srgb_doc, ".. function:: from_scene_linear_to_srgb()\n" "\n" " Convert from scene linear to sRGB color space.\n" "\n" " :return: A color in sRGB color space.\n" " :rtype: :class:`Color`\n")
static PyObject * Color_channel_hsv_get(ColorObject *self, void *type)
static PyObject * Color_from_acescg_to_scene_linear(ColorObject *self)
static PyGetSetDef Color_getseters[]
static int Color_hsv_set(ColorObject *self, PyObject *value, void *)
static PyBufferProcs Color_as_buffer
static PyObject * Color_from_scene_linear_to_xyz_d65(ColorObject *self)
static Py_ssize_t Color_len(ColorObject *)
static PyObject * Color_deepcopy(ColorObject *self, PyObject *args)
static PyObject * Color_iadd(PyObject *v1, PyObject *v2)
static PyObject * Color_copy(ColorObject *self)
static PyObject * Color_idiv(PyObject *v1, PyObject *v2)
static PyObject * Color_neg(ColorObject *self)
static PyObject * Color_div(PyObject *v1, PyObject *v2)
static PyNumberMethods Color_NumMethods
static PyObject * Color_subscript(ColorObject *self, PyObject *item)
static int Color_ass_slice(ColorObject *self, int begin, int end, PyObject *seq)
static PyObject * Color_add(PyObject *v1, PyObject *v2)
static PyObject * Color_from_srgb_to_scene_linear(ColorObject *self)
static PyObject * Color_sub(PyObject *v1, PyObject *v2)
PyObject * Color_CreatePyObject_cb(PyObject *cb_user, uchar cb_type, uchar cb_subtype)
static PyObject * Color_repr(ColorObject *self)
static PyObject * Color_hsv_get(ColorObject *self, void *)
static PyMappingMethods Color_AsMapping
static PyObject * Color_isub(PyObject *v1, PyObject *v2)
static PyObject * Color_mul(PyObject *v1, PyObject *v2)
static PyObject * Color_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
static PyObject * Color_from_aces_to_scene_linear(ColorObject *self)
static PyMethodDef Color_methods[]
static PyObject * Color_from_scene_linear_to_acescg(ColorObject *self)
static int Color_channel_set(ColorObject *self, PyObject *value, void *type)
static int Color_channel_hsv_set(ColorObject *self, PyObject *value, void *type)
static PyObject * Color_from_scene_linear_to_aces(ColorObject *self)
static PyObject * Color_item(ColorObject *self, Py_ssize_t i)
static PyObject * Color_vectorcall(PyObject *type, PyObject *const *args, const size_t nargsf, PyObject *kwnames)
PyObject * Color_CreatePyObject_wrap(float col[3], PyTypeObject *base_type)
static PyObject * Color_from_scene_linear_to_rec2020_linear(ColorObject *self)
static PyObject * Color_slice(ColorObject *self, int begin, int end)
static PyObject * Color_from_rec709_linear_to_scene_linear(ColorObject *self)
static PyObject * Color_from_scene_linear_to_srgb(ColorObject *self)
static PyObject * Color_from_rec2020_linear_to_scene_linear(ColorObject *self)
#define ColorObject_Check(v)
int PyC_CheckArgs_DeepCopy(PyObject *args)
#define PyTuple_SET_ITEMS(op_arg,...)