Skip to main content

miniextendr_api/from_r/
tuples.rs

1//! Tuple conversions: read an R list (VECSXP) positionally into `(A, B, ...)`.
2//!
3//! Inbound counterpart of the `IntoR` tuple family (`crate::into_r`, tuple to
4//! unnamed list region) — same arities (1 through 12), same VECSXP shape.
5//!
6//! Semantics:
7//! - The input must be a list (VECSXP) of exactly N elements; names are
8//!   ignored (conversion is positional).
9//! - Element `i` converts via `<Ti as TryFromSexp>::try_from_sexp`.
10//! - All failing elements are collected into one batched diagnostic
11//!   (1-based positions, matching R indexing) instead of bailing on the
12//!   first failure.
13
14use crate::from_r::{SexpError, SexpLengthError, SexpTypeError, TryFromSexp};
15use crate::{SEXP, SEXPTYPE, SexpExt};
16
17fn check_list_shape(
18    sexp: SEXP,
19    expected_len: usize,
20    len: impl FnOnce() -> usize,
21) -> Result<(), SexpError> {
22    let actual = sexp.type_of();
23    if actual != SEXPTYPE::VECSXP {
24        return Err(SexpTypeError {
25            expected: SEXPTYPE::VECSXP,
26            actual,
27        }
28        .into());
29    }
30    // A rejected ALTREP of another vector type must not run its Length callback.
31    let len = len();
32    if len != expected_len {
33        return Err(SexpLengthError {
34            expected: expected_len,
35            actual: len,
36        }
37        .into());
38    }
39    Ok(())
40}
41
42/// Tuple rows keep their own R object/class, as `Vec<List>` does. Validators
43/// therefore run per row; nullable rows skip the validator for NULL.
44macro_rules! impl_tuple_vec_try_from_sexp {
45    (($($T:ident),+), $row:ty, $nullable:literal) => {
46        impl<$($T: TryFromSexp),+> TryFromSexp for Vec<$row>
47        where
48            $($T::Error: Into<SexpError>,)+
49        {
50            type Error = SexpError;
51            const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
52                crate::from_r::NativeBorrow::in_list(<$row>::NATIVE_BORROW);
53
54            fn __mx_has_na(&self) -> bool {
55                self.iter().any(<$row>::__mx_has_na)
56            }
57
58            fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
59                Self::__mx_try_from_sexp_with_check(sexp, &crate::from_r::no_element_check)
60            }
61
62            unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error> {
63                unsafe {
64                    Self::__mx_try_from_sexp_unchecked_with_check(sexp, &crate::from_r::no_element_check)
65                }
66            }
67
68            fn __mx_try_from_sexp_with_check(
69                sexp: SEXP,
70                check: &crate::from_r::ElementCheck<'_>,
71            ) -> Result<Self, SexpError> {
72                crate::from_r::map_vecsxp_batched(sexp, |row| {
73                    if !$nullable || row.type_of() != SEXPTYPE::NILSXP {
74                        check(row)?;
75                    }
76                    <$row>::try_from_sexp(row)
77                })
78            }
79
80            unsafe fn __mx_try_from_sexp_unchecked_with_check(
81                sexp: SEXP,
82                check: &crate::from_r::ElementCheck<'_>,
83            ) -> Result<Self, SexpError> {
84                crate::from_r::map_vecsxp_batched(sexp, |row| {
85                    if !$nullable || row.type_of() != SEXPTYPE::NILSXP {
86                        check(row)?;
87                    }
88                    unsafe { <$row>::try_from_sexp_unchecked(row) }
89                })
90            }
91        }
92    };
93}
94
95/// Implement `TryFromSexp` for tuples of various sizes (1-12).
96/// Reads an unnamed R list (VECSXP) positionally; mirrors `impl_tuple_into_r!`.
97macro_rules! impl_tuple_try_from_sexp {
98    ($n:literal, $name:literal; $($T:ident $R:ident $idx:tt),+) => {
99        impl<$($T: TryFromSexp),+> TryFromSexp for ($($T,)+)
100        where
101            $(<$T as TryFromSexp>::Error: Into<SexpError>,)+
102        {
103            type Error = SexpError;
104            const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
105                crate::from_r::NativeBorrow::tuple(&[$($T::NATIVE_BORROW,)+]);
106
107            fn __mx_has_na(&self) -> bool {
108                $(self.$idx.__mx_has_na())||+
109            }
110
111            fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
112                check_list_shape(sexp, $n, || sexp.len())?;
113
114                let mut errors = crate::from_r::ElementErrors::default();
115                let partial = (
116                    $(
117                        match <$T as TryFromSexp>::try_from_sexp(
118                            sexp.vector_elt($idx as isize),
119                        ) {
120                            Ok(v) => Some(v),
121                            Err(e) => {
122                                errors.push($idx, e.into());
123                                None
124                            }
125                        },
126                    )+
127                );
128                let partial = errors.into_result(partial)?;
129                // Every slot is Some: no error was recorded.
130                Ok(($(partial.$idx.unwrap(),)+))
131            }
132
133            unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error> {
134                check_list_shape(sexp, $n, || unsafe { sexp.len_unchecked() })?;
135
136                let mut errors = crate::from_r::ElementErrors::default();
137                let partial = (
138                    $(
139                        match unsafe {
140                            <$T as TryFromSexp>::try_from_sexp_unchecked(
141                                sexp.vector_elt_unchecked($idx as isize),
142                            )
143                        } {
144                            Ok(v) => Some(v),
145                            Err(e) => {
146                                errors.push($idx, e.into());
147                                None
148                            }
149                        },
150                    )+
151                );
152                let partial = errors.into_result(partial)?;
153                Ok(($(partial.$idx.unwrap(),)+))
154            }
155        }
156
157        impl<$($T: TryFromSexp),+> TryFromSexp for Option<($($T,)+)>
158        where
159            $($T::Error: Into<SexpError>,)+
160        {
161            type Error = SexpError;
162            const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
163                <($($T,)+)>::NATIVE_BORROW;
164
165            fn __mx_has_na(&self) -> bool {
166                self.as_ref().is_some_and(<($($T,)+)>::__mx_has_na)
167            }
168
169            fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
170                if sexp.type_of() == SEXPTYPE::NILSXP {
171                    Ok(None)
172                } else {
173                    <($($T,)+)>::try_from_sexp(sexp).map(Some)
174                }
175            }
176
177            unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error> {
178                if sexp.type_of() == SEXPTYPE::NILSXP {
179                    Ok(None)
180                } else {
181                    unsafe { <($($T,)+)>::try_from_sexp_unchecked(sexp).map(Some) }
182                }
183            }
184        }
185
186        impl_tuple_vec_try_from_sexp!(($($T),+), ($($T,)+), false);
187        impl_tuple_vec_try_from_sexp!(($($T),+), Option<($($T,)+)>, true);
188    };
189}
190
191impl<A: TryFromSexp> TryFromSexp for (A,) where
    <A as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool { self.0.__mx_has_na() }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 1, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },);
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(),))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 1, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },);
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(),))
    }
}
impl<A: TryFromSexp> TryFromSexp for Option<(A,)> where
    A::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A,)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A,)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else { <(A,)>::try_from_sexp(sexp).map(Some) }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else { unsafe { <(A,)>::try_from_sexp_unchecked(sexp).map(Some) } }
    }
}
impl<A: TryFromSexp> TryFromSexp for Vec<(A,)> where A::Error: Into<SexpError>
    {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A,)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool { self.iter().any(<(A,)>::__mx_has_na) }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A,)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe { <(A,)>::try_from_sexp_unchecked(row) }
                })
    }
}
impl<A: TryFromSexp> TryFromSexp for Vec<Option<(A,)>> where
    A::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A,)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A,)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A,)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe { <Option<(A,)>>::try_from_sexp_unchecked(row) }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp> TryFromSexp for (A, B) where
    <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 2, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 2, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp> TryFromSexp for Option<(A, B)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else { <(A, B)>::try_from_sexp(sexp).map(Some) }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe { <(A, B)>::try_from_sexp_unchecked(sexp).map(Some) }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp> TryFromSexp for Vec<(A, B)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool { self.iter().any(<(A, B)>::__mx_has_na) }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe { <(A, B)>::try_from_sexp_unchecked(row) }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp> TryFromSexp for Vec<Option<(A, B)>> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe { <Option<(A, B)>>::try_from_sexp_unchecked(row) }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp> TryFromSexp for (A, B, C)
    where <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 3, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 3, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp> TryFromSexp for
    Option<(A, B, C)> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else { <(A, B, C)>::try_from_sexp(sexp).map(Some) }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe { <(A, B, C)>::try_from_sexp_unchecked(sexp).map(Some) }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp> TryFromSexp for
    Vec<(A, B, C)> where A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe { <(A, B, C)>::try_from_sexp_unchecked(row) }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp> TryFromSexp for
    Vec<Option<(A, B, C)>> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B,
                C)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe { <Option<(A, B, C)>>::try_from_sexp_unchecked(row) }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp>
    TryFromSexp for (A, B, C, D) where
    <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError>,
    <D as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
            || self.3.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 4, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match <D as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 4, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match unsafe {
                        <D as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp>
    TryFromSexp for Option<(A, B, C, D)> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C, D)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C, D)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else { <(A, B, C, D)>::try_from_sexp(sexp).map(Some) }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe { <(A, B, C, D)>::try_from_sexp_unchecked(sexp).map(Some) }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp>
    TryFromSexp for Vec<(A, B, C, D)> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C, D)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C, D)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C, D)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe { <(A, B, C, D)>::try_from_sexp_unchecked(row) }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp>
    TryFromSexp for Vec<Option<(A, B, C, D)>> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B, C,
                D)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C, D)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C, D)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <Option<(A, B, C, D)>>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp> TryFromSexp for (A, B, C, D, E) where
    <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError>,
    <D as TryFromSexp>::Error: Into<SexpError>,
    <E as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
                        E::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
                || self.3.__mx_has_na() || self.4.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 5, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match <D as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match <E as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 5, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match unsafe {
                        <D as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match unsafe {
                        <E as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp> TryFromSexp for Option<(A, B, C, D, E)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C, D, E)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C, D, E)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else { <(A, B, C, D, E)>::try_from_sexp(sexp).map(Some) }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe {
                <(A, B, C, D, E)>::try_from_sexp_unchecked(sexp).map(Some)
            }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp> TryFromSexp for Vec<(A, B, C, D, E)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C, D,
                E)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C, D, E)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C, D, E)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe { <(A, B, C, D, E)>::try_from_sexp_unchecked(row) }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp> TryFromSexp for Vec<Option<(A, B, C, D, E)>> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D,
                E)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C, D, E)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C, D, E)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <Option<(A, B, C, D, E)>>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp> TryFromSexp for (A, B, C, D, E, F) where
    <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError>,
    <D as TryFromSexp>::Error: Into<SexpError>,
    <E as TryFromSexp>::Error: Into<SexpError>,
    <F as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
                        E::NATIVE_BORROW, F::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
                    || self.3.__mx_has_na() || self.4.__mx_has_na() ||
            self.5.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 6, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match <D as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match <E as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match <F as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 6, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match unsafe {
                        <D as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match unsafe {
                        <E as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match unsafe {
                        <F as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp> TryFromSexp for Option<(A, B, C, D, E, F)>
    where A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C, D, E, F)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C, D, E, F)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else { <(A, B, C, D, E, F)>::try_from_sexp(sexp).map(Some) }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe {
                <(A, B, C, D, E, F)>::try_from_sexp_unchecked(sexp).map(Some)
            }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp> TryFromSexp for Vec<(A, B, C, D, E, F)>
    where A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E,
                F)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C, D, E, F)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C, D, E, F)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <(A, B, C, D, E, F)>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp> TryFromSexp for
    Vec<Option<(A, B, C, D, E, F)>> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError>, E::Error: Into<SexpError>,
    F::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E,
                F)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C, D, E, F)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C, D, E, F)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <Option<(A, B, C, D, E, F)>>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp> TryFromSexp for
    (A, B, C, D, E, F, G) where <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError>,
    <D as TryFromSexp>::Error: Into<SexpError>,
    <E as TryFromSexp>::Error: Into<SexpError>,
    <F as TryFromSexp>::Error: Into<SexpError>,
    <G as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
                        E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
                        || self.3.__mx_has_na() || self.4.__mx_has_na() ||
                self.5.__mx_has_na() || self.6.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 7, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match <D as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match <E as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match <F as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match <G as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 7, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match unsafe {
                        <D as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match unsafe {
                        <E as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match unsafe {
                        <F as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match unsafe {
                        <G as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp> TryFromSexp for
    Option<(A, B, C, D, E, F, G)> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError>, E::Error: Into<SexpError>,
    F::Error: Into<SexpError>, G::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C, D, E, F, G)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C, D, E, F, G)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else { <(A, B, C, D, E, F, G)>::try_from_sexp(sexp).map(Some) }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe {
                <(A, B, C, D, E, F,
                            G)>::try_from_sexp_unchecked(sexp).map(Some)
            }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp> TryFromSexp for
    Vec<(A, B, C, D, E, F, G)> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError>, E::Error: Into<SexpError>,
    F::Error: Into<SexpError>, G::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F,
                G)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C, D, E, F, G)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C, D, E, F, G)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <(A, B, C, D, E, F, G)>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp> TryFromSexp for
    Vec<Option<(A, B, C, D, E, F, G)>> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError>, E::Error: Into<SexpError>,
    F::Error: Into<SexpError>, G::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F,
                G)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C, D, E, F, G)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C, D, E, F, G)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <Option<(A, B, C, D, E, F,
                                G)>>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp>
    TryFromSexp for (A, B, C, D, E, F, G, H) where
    <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError>,
    <D as TryFromSexp>::Error: Into<SexpError>,
    <E as TryFromSexp>::Error: Into<SexpError>,
    <F as TryFromSexp>::Error: Into<SexpError>,
    <G as TryFromSexp>::Error: Into<SexpError>,
    <H as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
                        E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
                        H::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
                            || self.3.__mx_has_na() || self.4.__mx_has_na() ||
                    self.5.__mx_has_na() || self.6.__mx_has_na() ||
            self.7.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 8, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match <D as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match <E as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match <F as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match <G as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match <H as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 8, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match unsafe {
                        <D as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match unsafe {
                        <E as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match unsafe {
                        <F as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match unsafe {
                        <G as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match unsafe {
                        <H as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp>
    TryFromSexp for Option<(A, B, C, D, E, F, G, H)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C, D, E, F, G, H)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else { <(A, B, C, D, E, F, G, H)>::try_from_sexp(sexp).map(Some) }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe {
                <(A, B, C, D, E, F, G,
                            H)>::try_from_sexp_unchecked(sexp).map(Some)
            }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp>
    TryFromSexp for Vec<(A, B, C, D, E, F, G, H)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G,
                H)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C, D, E, F, G, H)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C, D, E, F, G, H)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <(A, B, C, D, E, F, G, H)>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp>
    TryFromSexp for Vec<Option<(A, B, C, D, E, F, G, H)>> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G,
                H)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C, D, E, F, G, H)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C, D, E, F, G, H)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <Option<(A, B, C, D, E, F, G,
                                H)>>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp> TryFromSexp for (A, B, C, D, E, F, G, H, I) where
    <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError>,
    <D as TryFromSexp>::Error: Into<SexpError>,
    <E as TryFromSexp>::Error: Into<SexpError>,
    <F as TryFromSexp>::Error: Into<SexpError>,
    <G as TryFromSexp>::Error: Into<SexpError>,
    <H as TryFromSexp>::Error: Into<SexpError>,
    <I as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
                        E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
                        H::NATIVE_BORROW, I::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
                                || self.3.__mx_has_na() || self.4.__mx_has_na() ||
                        self.5.__mx_has_na() || self.6.__mx_has_na() ||
                self.7.__mx_has_na() || self.8.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 9, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match <D as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match <E as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match <F as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match <G as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match <H as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                },
                match <I as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(8 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(8, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 9, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match unsafe {
                        <D as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match unsafe {
                        <E as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match unsafe {
                        <F as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match unsafe {
                        <G as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match unsafe {
                        <H as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                },
                match unsafe {
                        <I as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(8
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(8, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp> TryFromSexp for Option<(A, B, C, D, E, F, G, H, I)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError>,
    I::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C, D, E, F, G, H, I)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H, I)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            <(A, B, C, D, E, F, G, H, I)>::try_from_sexp(sexp).map(Some)
        }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe {
                <(A, B, C, D, E, F, G, H,
                            I)>::try_from_sexp_unchecked(sexp).map(Some)
            }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp> TryFromSexp for Vec<(A, B, C, D, E, F, G, H, I)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError>,
    I::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G, H,
                I)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C, D, E, F, G, H, I)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C, D, E, F, G, H, I)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <(A, B, C, D, E, F, G, H, I)>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp> TryFromSexp for Vec<Option<(A, B, C, D, E, F, G, H, I)>>
    where A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError>,
    I::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G, H,
                I)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C, D, E, F, G, H, I)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C, D, E, F, G, H, I)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <Option<(A, B, C, D, E, F, G, H,
                                I)>>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp> TryFromSexp for
    (A, B, C, D, E, F, G, H, I, J) where
    <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError>,
    <D as TryFromSexp>::Error: Into<SexpError>,
    <E as TryFromSexp>::Error: Into<SexpError>,
    <F as TryFromSexp>::Error: Into<SexpError>,
    <G as TryFromSexp>::Error: Into<SexpError>,
    <H as TryFromSexp>::Error: Into<SexpError>,
    <I as TryFromSexp>::Error: Into<SexpError>,
    <J as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
                        E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
                        H::NATIVE_BORROW, I::NATIVE_BORROW, J::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
                                    || self.3.__mx_has_na() || self.4.__mx_has_na() ||
                            self.5.__mx_has_na() || self.6.__mx_has_na() ||
                    self.7.__mx_has_na() || self.8.__mx_has_na() ||
            self.9.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 10, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match <D as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match <E as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match <F as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match <G as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match <H as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                },
                match <I as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(8 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(8, e.into()); None }
                },
                match <J as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(9 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(9, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
                partial.9.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 10, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match unsafe {
                        <D as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match unsafe {
                        <E as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match unsafe {
                        <F as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match unsafe {
                        <G as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match unsafe {
                        <H as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                },
                match unsafe {
                        <I as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(8
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(8, e.into()); None }
                },
                match unsafe {
                        <J as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(9
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(9, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
                partial.9.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp> TryFromSexp for
    Option<(A, B, C, D, E, F, G, H, I, J)> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError>, E::Error: Into<SexpError>,
    F::Error: Into<SexpError>, G::Error: Into<SexpError>,
    H::Error: Into<SexpError>, I::Error: Into<SexpError>,
    J::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C, D, E, F, G, H, I, J)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H, I,
                J)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            <(A, B, C, D, E, F, G, H, I, J)>::try_from_sexp(sexp).map(Some)
        }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe {
                <(A, B, C, D, E, F, G, H, I,
                            J)>::try_from_sexp_unchecked(sexp).map(Some)
            }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp> TryFromSexp for
    Vec<(A, B, C, D, E, F, G, H, I, J)> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError>, E::Error: Into<SexpError>,
    F::Error: Into<SexpError>, G::Error: Into<SexpError>,
    H::Error: Into<SexpError>, I::Error: Into<SexpError>,
    J::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G, H, I,
                J)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C, D, E, F, G, H, I, J)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C, D, E, F, G, H, I, J)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <(A, B, C, D, E, F, G, H, I,
                                J)>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp> TryFromSexp for
    Vec<Option<(A, B, C, D, E, F, G, H, I, J)>> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError>,
    I::Error: Into<SexpError>, J::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G, H,
                I, J)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C, D, E, F, G, H, I, J)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C, D, E, F, G, H, I, J)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <Option<(A, B, C, D, E, F, G, H, I,
                                J)>>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp, K: TryFromSexp> TryFromSexp for
    (A, B, C, D, E, F, G, H, I, J, K) where
    <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError>,
    <D as TryFromSexp>::Error: Into<SexpError>,
    <E as TryFromSexp>::Error: Into<SexpError>,
    <F as TryFromSexp>::Error: Into<SexpError>,
    <G as TryFromSexp>::Error: Into<SexpError>,
    <H as TryFromSexp>::Error: Into<SexpError>,
    <I as TryFromSexp>::Error: Into<SexpError>,
    <J as TryFromSexp>::Error: Into<SexpError>,
    <K as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
                        E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
                        H::NATIVE_BORROW, I::NATIVE_BORROW, J::NATIVE_BORROW,
                        K::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
                                        || self.3.__mx_has_na() || self.4.__mx_has_na() ||
                                self.5.__mx_has_na() || self.6.__mx_has_na() ||
                        self.7.__mx_has_na() || self.8.__mx_has_na() ||
                self.9.__mx_has_na() || self.10.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 11, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match <D as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match <E as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match <F as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match <G as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match <H as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                },
                match <I as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(8 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(8, e.into()); None }
                },
                match <J as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(9 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(9, e.into()); None }
                },
                match <K as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(10 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(10, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
                partial.9.unwrap(), partial.10.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 11, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match unsafe {
                        <D as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match unsafe {
                        <E as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match unsafe {
                        <F as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match unsafe {
                        <G as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match unsafe {
                        <H as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                },
                match unsafe {
                        <I as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(8
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(8, e.into()); None }
                },
                match unsafe {
                        <J as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(9
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(9, e.into()); None }
                },
                match unsafe {
                        <K as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(10
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(10, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
                partial.9.unwrap(), partial.10.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp, K: TryFromSexp> TryFromSexp for
    Option<(A, B, C, D, E, F, G, H, I, J, K)> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError>, E::Error: Into<SexpError>,
    F::Error: Into<SexpError>, G::Error: Into<SexpError>,
    H::Error: Into<SexpError>, I::Error: Into<SexpError>,
    J::Error: Into<SexpError>, K::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C, D, E, F, G, H, I, J, K)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H, I, J,
                K)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            <(A, B, C, D, E, F, G, H, I, J, K)>::try_from_sexp(sexp).map(Some)
        }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe {
                <(A, B, C, D, E, F, G, H, I, J,
                            K)>::try_from_sexp_unchecked(sexp).map(Some)
            }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp, K: TryFromSexp> TryFromSexp for
    Vec<(A, B, C, D, E, F, G, H, I, J, K)> where A::Error: Into<SexpError>,
    B::Error: Into<SexpError>, C::Error: Into<SexpError>,
    D::Error: Into<SexpError>, E::Error: Into<SexpError>,
    F::Error: Into<SexpError>, G::Error: Into<SexpError>,
    H::Error: Into<SexpError>, I::Error: Into<SexpError>,
    J::Error: Into<SexpError>, K::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G, H, I, J,
                K)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C, D, E, F, G, H, I, J, K)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C, D, E, F, G, H, I, J, K)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <(A, B, C, D, E, F, G, H, I, J,
                                K)>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp, K: TryFromSexp> TryFromSexp for
    Vec<Option<(A, B, C, D, E, F, G, H, I, J, K)>> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError>,
    I::Error: Into<SexpError>, J::Error: Into<SexpError>,
    K::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G, H,
                I, J, K)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C, D, E, F, G, H, I, J,
                K)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C, D, E, F, G, H, I, J,
                            K)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <Option<(A, B, C, D, E, F, G, H, I, J,
                                K)>>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp, K: TryFromSexp, L: TryFromSexp>
    TryFromSexp for (A, B, C, D, E, F, G, H, I, J, K, L) where
    <A as TryFromSexp>::Error: Into<SexpError>,
    <B as TryFromSexp>::Error: Into<SexpError>,
    <C as TryFromSexp>::Error: Into<SexpError>,
    <D as TryFromSexp>::Error: Into<SexpError>,
    <E as TryFromSexp>::Error: Into<SexpError>,
    <F as TryFromSexp>::Error: Into<SexpError>,
    <G as TryFromSexp>::Error: Into<SexpError>,
    <H as TryFromSexp>::Error: Into<SexpError>,
    <I as TryFromSexp>::Error: Into<SexpError>,
    <J as TryFromSexp>::Error: Into<SexpError>,
    <K as TryFromSexp>::Error: Into<SexpError>,
    <L as TryFromSexp>::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
                        B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
                        E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
                        H::NATIVE_BORROW, I::NATIVE_BORROW, J::NATIVE_BORROW,
                        K::NATIVE_BORROW, L::NATIVE_BORROW]);
    fn __mx_has_na(&self) -> bool {
        self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
                                            || self.3.__mx_has_na() || self.4.__mx_has_na() ||
                                    self.5.__mx_has_na() || self.6.__mx_has_na() ||
                            self.7.__mx_has_na() || self.8.__mx_has_na() ||
                    self.9.__mx_has_na() || self.10.__mx_has_na() ||
            self.11.__mx_has_na()
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        check_list_shape(sexp, 12, || sexp.len())?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match <A as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match <B as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match <C as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match <D as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match <E as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match <F as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match <G as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match <H as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                },
                match <I as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(8 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(8, e.into()); None }
                },
                match <J as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(9 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(9, e.into()); None }
                },
                match <K as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(10 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(10, e.into()); None }
                },
                match <L as
                            TryFromSexp>::try_from_sexp(sexp.vector_elt(11 as isize)) {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(11, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
                partial.9.unwrap(), partial.10.unwrap(), partial.11.unwrap()))
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        check_list_shape(sexp, 12, || unsafe { sexp.len_unchecked() })?;
        let mut errors = crate::from_r::ElementErrors::default();
        let partial =
            (match unsafe {
                        <A as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(0, e.into()); None }
                },
                match unsafe {
                        <B as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(1, e.into()); None }
                },
                match unsafe {
                        <C as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(2, e.into()); None }
                },
                match unsafe {
                        <D as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(3, e.into()); None }
                },
                match unsafe {
                        <E as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(4, e.into()); None }
                },
                match unsafe {
                        <F as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(5, e.into()); None }
                },
                match unsafe {
                        <G as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(6, e.into()); None }
                },
                match unsafe {
                        <H as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(7, e.into()); None }
                },
                match unsafe {
                        <I as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(8
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(8, e.into()); None }
                },
                match unsafe {
                        <J as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(9
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(9, e.into()); None }
                },
                match unsafe {
                        <K as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(10
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(10, e.into()); None }
                },
                match unsafe {
                        <L as
                                TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(11
                                    as isize))
                    } {
                    Ok(v) => Some(v),
                    Err(e) => { errors.push(11, e.into()); None }
                });
        let partial = errors.into_result(partial)?;
        Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
                partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
                partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
                partial.9.unwrap(), partial.10.unwrap(), partial.11.unwrap()))
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp, K: TryFromSexp, L: TryFromSexp>
    TryFromSexp for Option<(A, B, C, D, E, F, G, H, I, J, K, L)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError>,
    I::Error: Into<SexpError>, J::Error: Into<SexpError>,
    K::Error: Into<SexpError>, L::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        <(A, B, C, D, E, F, G, H, I, J, K, L)>::NATIVE_BORROW;
    fn __mx_has_na(&self) -> bool {
        self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H, I, J, K,
                L)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            <(A, B, C, D, E, F, G, H, I, J, K,
                        L)>::try_from_sexp(sexp).map(Some)
        }
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        if sexp.type_of() == SEXPTYPE::NILSXP {
            Ok(None)
        } else {
            unsafe {
                <(A, B, C, D, E, F, G, H, I, J, K,
                            L)>::try_from_sexp_unchecked(sexp).map(Some)
            }
        }
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp, K: TryFromSexp, L: TryFromSexp>
    TryFromSexp for Vec<(A, B, C, D, E, F, G, H, I, J, K, L)> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError>,
    I::Error: Into<SexpError>, J::Error: Into<SexpError>,
    K::Error: Into<SexpError>, L::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G, H, I, J,
                K, L)>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<(A, B, C, D, E, F, G, H, I, J, K, L)>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <(A, B, C, D, E, F, G, H, I, J, K, L)>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !false || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <(A, B, C, D, E, F, G, H, I, J, K,
                                L)>::try_from_sexp_unchecked(row)
                    }
                })
    }
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
    E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
    I: TryFromSexp, J: TryFromSexp, K: TryFromSexp, L: TryFromSexp>
    TryFromSexp for Vec<Option<(A, B, C, D, E, F, G, H, I, J, K, L)>> where
    A::Error: Into<SexpError>, B::Error: Into<SexpError>,
    C::Error: Into<SexpError>, D::Error: Into<SexpError>,
    E::Error: Into<SexpError>, F::Error: Into<SexpError>,
    G::Error: Into<SexpError>, H::Error: Into<SexpError>,
    I::Error: Into<SexpError>, J::Error: Into<SexpError>,
    K::Error: Into<SexpError>, L::Error: Into<SexpError> {
    type Error = SexpError;
    const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
        crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G, H,
                I, J, K, L)>>::NATIVE_BORROW);
    fn __mx_has_na(&self) -> bool {
        self.iter().any(<Option<(A, B, C, D, E, F, G, H, I, J, K,
                L)>>::__mx_has_na)
    }
    fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
        Self::__mx_try_from_sexp_with_check(sexp,
            &crate::from_r::no_element_check)
    }
    unsafe fn try_from_sexp_unchecked(sexp: SEXP)
        -> Result<Self, Self::Error> {
        unsafe {
            Self::__mx_try_from_sexp_unchecked_with_check(sexp,
                &crate::from_r::no_element_check)
        }
    }
    fn __mx_try_from_sexp_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    <Option<(A, B, C, D, E, F, G, H, I, J, K,
                            L)>>::try_from_sexp(row)
                })
    }
    unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
        check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
        crate::from_r::map_vecsxp_batched(sexp,
            |row|
                {
                    if !true || row.type_of() != SEXPTYPE::NILSXP {
                        check(row)?;
                    }
                    unsafe {
                        <Option<(A, B, C, D, E, F, G, H, I, J, K,
                                L)>>::try_from_sexp_unchecked(row)
                    }
                })
    }
}crate::tuple_macros::for_each_tuple!(impl_tuple_try_from_sexp);