MCPcopy Create free account
hub / github.com/numpy/numpy / parse_datetime_unit_from_string

Function parse_datetime_unit_from_string

numpy/core/src/multiarray/datetime.c:1716–1775  ·  view source on GitHub ↗

* Converts a substring given by 'str' and 'len' into * a date time unit enum value. The 'metastr' parameter * is used for error messages, and may be NULL. * * Returns NPY_DATETIMEUNIT on success, NPY_FR_ERROR on failure. */

Source from the content-addressed store, hash-verified

1714 * Returns NPY_DATETIMEUNIT on success, NPY_FR_ERROR on failure.
1715 */
1716NPY_NO_EXPORT NPY_DATETIMEUNIT
1717parse_datetime_unit_from_string(char const *str, Py_ssize_t len, char const *metastr)
1718{
1719 /* Use switch statements so the compiler can make it fast */
1720 if (len == 1) {
1721 switch (str[0]) {
1722 case 'Y':
1723 return NPY_FR_Y;
1724 case 'M':
1725 return NPY_FR_M;
1726 case 'W':
1727 return NPY_FR_W;
1728 case 'D':
1729 return NPY_FR_D;
1730 case 'h':
1731 return NPY_FR_h;
1732 case 'm':
1733 return NPY_FR_m;
1734 case 's':
1735 return NPY_FR_s;
1736 }
1737 }
1738 /* All the two-letter units are variants of seconds */
1739 else if (len == 2 && str[1] == 's') {
1740 switch (str[0]) {
1741 case 'm':
1742 return NPY_FR_ms;
1743 case 'u':
1744 return NPY_FR_us;
1745 case 'n':
1746 return NPY_FR_ns;
1747 case 'p':
1748 return NPY_FR_ps;
1749 case 'f':
1750 return NPY_FR_fs;
1751 case 'a':
1752 return NPY_FR_as;
1753 }
1754 }
1755 else if (len == 3 && !strncmp(str, "\xce\xbcs", 3)) {
1756 /* greek small letter mu, utf8-encoded */
1757 return NPY_FR_us;
1758 }
1759 else if (len == 7 && !strncmp(str, "generic", 7)) {
1760 return NPY_FR_GENERIC;
1761 }
1762
1763 /* If nothing matched, it's an error */
1764 if (metastr == NULL) {
1765 PyErr_Format(PyExc_TypeError,
1766 "Invalid datetime unit \"%s\" in metadata",
1767 str);
1768 }
1769 else {
1770 PyErr_Format(PyExc_TypeError,
1771 "Invalid datetime unit in metadata string \"%s\"",
1772 metastr);
1773 }

Calls

no outgoing calls

Tested by

no test coverage detected