Open
Description
Our tests workflow is currently failing on Ubuntu / Python 3.8 - see for example this run log. This is due to errors when building so3
a test dependency using Cython. While this is happening specifically on Ubuntu / Python 3.8 in our test matrix, but from some local testing I think it may also affect other Python versions but the workflows on GitHub Actions are using cached wheels from a previously successful build.
Cython build errors
Error compiling Cython file:
------------------------------------------------------------
...
return bool(so3_sampling_is_elmn_non_zero_return_int(el, m, n, ¶meters))
# forward and inverse for MW and MWSS for complex functions
def inverse(np.ndarray[ double complex, ndim=1, mode="c"] flmn not None, so3_parameters not None):
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:320:12: 'ndarray' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
f = np.zeros([f_length,], dtype=complex)
so3_core_inverse_via_ssht(<double complex*> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
return f
def forward(np.ndarray[ double complex, ndim=1, mode="c"] f not None, so3_parameters not None):
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:334:12: 'ndarray' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
)
return SO3Parameters().from_dict(h_parameters)
def convolve(
np.ndarray[ double complex, ndim=1, mode="c"] f not None,
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:371:4: 'ndarray' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
return SO3Parameters().from_dict(h_parameters)
def convolve(
np.ndarray[ double complex, ndim=1, mode="c"] f not None,
f_parameters,
np.ndarray[ double complex, ndim=1, mode="c"] g not None,
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:373:4: 'ndarray' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
&g_parameters_struct
)
return h, h_parameters
def convolve_harmonic(
np.ndarray[ double complex, ndim=1, mode="c"] flmn not None,
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:397:4: 'ndarray' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
return h, h_parameters
def convolve_harmonic(
np.ndarray[ double complex, ndim=1, mode="c"] flmn not None,
f_parameters,
np.ndarray[ double complex, ndim=1, mode="c"] glmn not None,
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:399:4: 'ndarray' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
)
return hlmn, h_parameters
def s2toso3_harmonic_convolution(
h_so3_parameters,
np.ndarray[ double complex, ndim=1, mode="c"] flm not None,
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:425:4: 'ndarray' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
return hlmn, h_parameters
def s2toso3_harmonic_convolution(
h_so3_parameters,
np.ndarray[ double complex, ndim=1, mode="c"] flm not None,
np.ndarray[ double complex, ndim=1, mode="c"] glm not None):
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:426:4: 'ndarray' is not a type identifier
warning: /tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:194:39: Not all members given for struct 'so3_parameters_t'
warning: /tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:222:39: Not all members given for struct 'so3_parameters_t'
Error compiling Cython file:
------------------------------------------------------------
...
cdef so3_parameters_t parameters=create_parameter_struct(so3_parameters)
if so3_parameters.reality:
f_length = f_size(so3_parameters)
f = np.zeros([f_length,], dtype=float)
so3_core_inverse_via_ssht_real(<double *> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:326:39: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
cdef so3_parameters_t parameters=create_parameter_struct(so3_parameters)
if so3_parameters.reality:
f_length = f_size(so3_parameters)
f = np.zeros([f_length,], dtype=float)
so3_core_inverse_via_ssht_real(<double *> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:326:39: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
cdef so3_parameters_t parameters=create_parameter_struct(so3_parameters)
if so3_parameters.reality:
f_length = f_size(so3_parameters)
f = np.zeros([f_length,], dtype=float)
so3_core_inverse_via_ssht_real(<double *> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:326:70: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
cdef so3_parameters_t parameters=create_parameter_struct(so3_parameters)
if so3_parameters.reality:
f_length = f_size(so3_parameters)
f = np.zeros([f_length,], dtype=float)
so3_core_inverse_via_ssht_real(<double *> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:326:70: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
f = np.zeros([f_length,], dtype=float)
so3_core_inverse_via_ssht_real(<double *> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
else:
f_length = f_size(so3_parameters)
f = np.zeros([f_length,], dtype=complex)
so3_core_inverse_via_ssht(<double complex*> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:330:34: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
f = np.zeros([f_length,], dtype=float)
so3_core_inverse_via_ssht_real(<double *> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
else:
f_length = f_size(so3_parameters)
f = np.zeros([f_length,], dtype=complex)
so3_core_inverse_via_ssht(<double complex*> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:330:34: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
f = np.zeros([f_length,], dtype=float)
so3_core_inverse_via_ssht_real(<double *> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
else:
f_length = f_size(so3_parameters)
f = np.zeros([f_length,], dtype=complex)
so3_core_inverse_via_ssht(<double complex*> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:330:72: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
f = np.zeros([f_length,], dtype=float)
so3_core_inverse_via_ssht_real(<double *> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
else:
f_length = f_size(so3_parameters)
f = np.zeros([f_length,], dtype=complex)
so3_core_inverse_via_ssht(<double complex*> np.PyArray_DATA(f), <const double complex*> np.PyArray_DATA(flmn), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:330:72: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
cdef so3_parameters_t parameters=create_parameter_struct(so3_parameters)
if so3_parameters.reality:
flmn_length = flmn_size(so3_parameters)
flmn = np.zeros([flmn_length,], dtype=float)
so3_core_forward_via_ssht_real(<double complex*> np.PyArray_DATA(flmn), <const double *> np.PyArray_DATA(f), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:340:39: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
cdef so3_parameters_t parameters=create_parameter_struct(so3_parameters)
if so3_parameters.reality:
flmn_length = flmn_size(so3_parameters)
flmn = np.zeros([flmn_length,], dtype=float)
so3_core_forward_via_ssht_real(<double complex*> np.PyArray_DATA(flmn), <const double *> np.PyArray_DATA(f), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:340:39: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
cdef so3_parameters_t parameters=create_parameter_struct(so3_parameters)
if so3_parameters.reality:
flmn_length = flmn_size(so3_parameters)
flmn = np.zeros([flmn_length,], dtype=float)
so3_core_forward_via_ssht_real(<double complex*> np.PyArray_DATA(flmn), <const double *> np.PyArray_DATA(f), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:340:80: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
cdef so3_parameters_t parameters=create_parameter_struct(so3_parameters)
if so3_parameters.reality:
flmn_length = flmn_size(so3_parameters)
flmn = np.zeros([flmn_length,], dtype=float)
so3_core_forward_via_ssht_real(<double complex*> np.PyArray_DATA(flmn), <const double *> np.PyArray_DATA(f), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:340:80: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
flmn = np.zeros([flmn_length,], dtype=float)
so3_core_forward_via_ssht_real(<double complex*> np.PyArray_DATA(flmn), <const double *> np.PyArray_DATA(f), ¶meters)
else:
flmn_length = flmn_size(so3_parameters)
flmn = np.zeros([flmn_length,], dtype=complex)
so3_core_forward_via_ssht(<double complex*> np.PyArray_DATA(flmn), <const double complex*> np.PyArray_DATA(f), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:344:34: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
flmn = np.zeros([flmn_length,], dtype=float)
so3_core_forward_via_ssht_real(<double complex*> np.PyArray_DATA(flmn), <const double *> np.PyArray_DATA(f), ¶meters)
else:
flmn_length = flmn_size(so3_parameters)
flmn = np.zeros([flmn_length,], dtype=complex)
so3_core_forward_via_ssht(<double complex*> np.PyArray_DATA(flmn), <const double complex*> np.PyArray_DATA(f), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:344:34: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
flmn = np.zeros([flmn_length,], dtype=float)
so3_core_forward_via_ssht_real(<double complex*> np.PyArray_DATA(flmn), <const double *> np.PyArray_DATA(f), ¶meters)
else:
flmn_length = flmn_size(so3_parameters)
flmn = np.zeros([flmn_length,], dtype=complex)
so3_core_forward_via_ssht(<double complex*> np.PyArray_DATA(flmn), <const double complex*> np.PyArray_DATA(f), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:344:75: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
flmn = np.zeros([flmn_length,], dtype=float)
so3_core_forward_via_ssht_real(<double complex*> np.PyArray_DATA(flmn), <const double *> np.PyArray_DATA(f), ¶meters)
else:
flmn_length = flmn_size(so3_parameters)
flmn = np.zeros([flmn_length,], dtype=complex)
so3_core_forward_via_ssht(<double complex*> np.PyArray_DATA(flmn), <const double complex*> np.PyArray_DATA(f), ¶meters)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:344:75: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
h_length = f_size(h_parameters)
h = np.zeros([h_length,], dtype=complex)
so3_conv_convolution(
<double complex *> np.PyArray_DATA(h),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:387:8: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
h_length = f_size(h_parameters)
h = np.zeros([h_length,], dtype=complex)
so3_conv_convolution(
<double complex *> np.PyArray_DATA(h),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:387:8: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
h = np.zeros([h_length,], dtype=complex)
so3_conv_convolution(
<double complex *> np.PyArray_DATA(h),
&h_parameters_struct,
<const double complex *> np.PyArray_DATA(f),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:389:8: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
h = np.zeros([h_length,], dtype=complex)
so3_conv_convolution(
<double complex *> np.PyArray_DATA(h),
&h_parameters_struct,
<const double complex *> np.PyArray_DATA(f),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:389:8: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
so3_conv_convolution(
<double complex *> np.PyArray_DATA(h),
&h_parameters_struct,
<const double complex *> np.PyArray_DATA(f),
&f_parameters_struct,
<const double complex *> np.PyArray_DATA(g),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:391:8: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
so3_conv_convolution(
<double complex *> np.PyArray_DATA(h),
&h_parameters_struct,
<const double complex *> np.PyArray_DATA(f),
&f_parameters_struct,
<const double complex *> np.PyArray_DATA(g),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:391:8: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
hlmn_length = flmn_size(h_parameters)
hlmn = np.zeros([hlmn_length,], dtype=complex)
so3_conv_convolution(
<double complex *> np.PyArray_DATA(hlmn),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:414:8: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
hlmn_length = flmn_size(h_parameters)
hlmn = np.zeros([hlmn_length,], dtype=complex)
so3_conv_convolution(
<double complex *> np.PyArray_DATA(hlmn),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:414:8: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
hlmn = np.zeros([hlmn_length,], dtype=complex)
so3_conv_convolution(
<double complex *> np.PyArray_DATA(hlmn),
&h_parameters_struct,
<const double complex *> np.PyArray_DATA(flmn),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:416:8: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
hlmn = np.zeros([hlmn_length,], dtype=complex)
so3_conv_convolution(
<double complex *> np.PyArray_DATA(hlmn),
&h_parameters_struct,
<const double complex *> np.PyArray_DATA(flmn),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:416:8: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
so3_conv_convolution(
<double complex *> np.PyArray_DATA(hlmn),
&h_parameters_struct,
<const double complex *> np.PyArray_DATA(flmn),
&f_parameters_struct,
<const double complex *> np.PyArray_DATA(glmn),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:418:8: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
so3_conv_convolution(
<double complex *> np.PyArray_DATA(hlmn),
&h_parameters_struct,
<const double complex *> np.PyArray_DATA(flmn),
&f_parameters_struct,
<const double complex *> np.PyArray_DATA(glmn),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:418:8: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
hlmn_length = flmn_size(h_so3_parameters)
hlmn = np.zeros([hlmn_length,], dtype=complex)
so3_conv_s2toso3_harmonic_convolution(
<double complex *> np.PyArray_DATA(hlmn),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:434:4: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
hlmn_length = flmn_size(h_so3_parameters)
hlmn = np.zeros([hlmn_length,], dtype=complex)
so3_conv_s2toso3_harmonic_convolution(
<double complex *> np.PyArray_DATA(hlmn),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:434:4: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
hlmn = np.zeros([hlmn_length,], dtype=complex)
so3_conv_s2toso3_harmonic_convolution(
<double complex *> np.PyArray_DATA(hlmn),
&h_parameters,
<const double complex *> np.PyArray_DATA(flm),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:436:4: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
hlmn = np.zeros([hlmn_length,], dtype=complex)
so3_conv_s2toso3_harmonic_convolution(
<double complex *> np.PyArray_DATA(hlmn),
&h_parameters,
<const double complex *> np.PyArray_DATA(flm),
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:436:4: Python objects cannot be cast to pointers of primitive types
Error compiling Cython file:
------------------------------------------------------------
...
so3_conv_s2toso3_harmonic_convolution(
<double complex *> np.PyArray_DATA(hlmn),
&h_parameters,
<const double complex *> np.PyArray_DATA(flm),
<const double complex *> np.PyArray_DATA(glm)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:437:4: Casting temporary Python object to non-numeric non-Python type
Error compiling Cython file:
------------------------------------------------------------
...
so3_conv_s2toso3_harmonic_convolution(
<double complex *> np.PyArray_DATA(hlmn),
&h_parameters,
<const double complex *> np.PyArray_DATA(flm),
<const double complex *> np.PyArray_DATA(glm)
^
------------------------------------------------------------
/tmp/pip-install-yyye2cij/so3_98ef28d04fc946bc9525212bfc49c4cd/src/so3/bindings.pyx:437:4: Python objects cannot be cast to pointers of primitive types
astro-informatics/so3#31 may fix this upstream.