Lines Matching refs:self

112 load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj);
161 find_ttinfo(PyZoneInfo_ZoneInfo *self, PyObject *dt);
199 PyObject *self = (PyObject *)(type->tp_alloc(type, 0));
200 if (self == NULL) {
211 if (load_data((PyZoneInfo_ZoneInfo *)self, file_obj)) {
223 ((PyZoneInfo_ZoneInfo *)self)->key = key;
228 Py_XDECREF(self);
229 self = NULL;
237 Py_CLEAR(self);
243 return self;
306 PyZoneInfo_ZoneInfo *self = (PyZoneInfo_ZoneInfo *)obj_self;
308 if (self->weakreflist != NULL) {
312 if (self->trans_list_utc != NULL) {
313 PyMem_Free(self->trans_list_utc);
317 if (self->trans_list_wall[i] != NULL) {
318 PyMem_Free(self->trans_list_wall[i]);
322 if (self->_ttinfos != NULL) {
323 for (size_t i = 0; i < self->num_ttinfos; ++i) {
324 xdecref_ttinfo(&(self->_ttinfos[i]));
326 PyMem_Free(self->_ttinfos);
329 if (self->trans_ttinfos != NULL) {
330 PyMem_Free(self->trans_ttinfos);
333 free_tzrule(&(self->tzrule_after));
335 Py_XDECREF(self->key);
336 Py_XDECREF(self->file_repr);
338 Py_TYPE(self)->tp_free((PyObject *)self);
347 PyZoneInfo_ZoneInfo *self = NULL;
356 self = (PyZoneInfo_ZoneInfo *)obj_self;
357 if (self == NULL) {
366 if (load_data(self, file_obj)) {
370 self->source = SOURCE_FILE;
371 self->file_repr = file_repr;
372 self->key = key;
378 Py_XDECREF(self);
463 zoneinfo_utcoffset(PyObject *self, PyObject *dt)
465 _ttinfo *tti = find_ttinfo((PyZoneInfo_ZoneInfo *)self, dt);
474 zoneinfo_dst(PyObject *self, PyObject *dt)
476 _ttinfo *tti = find_ttinfo((PyZoneInfo_ZoneInfo *)self, dt);
485 zoneinfo_tzname(PyObject *self, PyObject *dt)
487 _ttinfo *tti = find_ttinfo((PyZoneInfo_ZoneInfo *)self, dt);
508 "is not self");
512 PyZoneInfo_ZoneInfo *self = (PyZoneInfo_ZoneInfo *)obj_self;
518 size_t num_trans = self->num_transitions;
523 if (num_trans >= 1 && timestamp < self->trans_list_utc[0]) {
524 tti = self->ttinfo_before;
527 timestamp > self->trans_list_utc[num_trans - 1]) {
528 tti = find_tzrule_ttinfo_fromutc(&(self->tzrule_after), timestamp,
532 // between self->trans_ttinfos[num_transitions - 1] and whatever
539 tti_prev = self->ttinfo_before;
542 tti_prev = self->trans_ttinfos[num_trans - 2];
546 timestamp < (self->trans_list_utc[num_trans - 1] + diff)) {
552 size_t idx = _bisect(timestamp, self->trans_list_utc, num_trans);
556 tti_prev = self->trans_ttinfos[idx - 2];
557 tti = self->trans_ttinfos[idx - 1];
560 tti_prev = self->ttinfo_before;
561 tti = self->trans_ttinfos[0];
567 if (shift > (timestamp - self->trans_list_utc[idx - 1])) {
616 zoneinfo_repr(PyZoneInfo_ZoneInfo *self)
619 const char *type_name = Py_TYPE((PyObject *)self)->tp_name;
620 if (!(self->key == Py_None)) {
621 rv = PyUnicode_FromFormat("%s(key=%R)", type_name, self->key);
624 assert(PyUnicode_Check(self->file_repr));
626 self->file_repr);
633 zoneinfo_str(PyZoneInfo_ZoneInfo *self)
635 if (!(self->key == Py_None)) {
636 Py_INCREF(self->key);
637 return self->key;
640 return zoneinfo_repr(self);
659 PyZoneInfo_ZoneInfo *self = (PyZoneInfo_ZoneInfo *)obj_self;
660 if (self->source == SOURCE_FILE) {
680 unsigned char from_cache = self->source == SOURCE_CACHE ? 1 : 0;
687 PyObject *rv = Py_BuildValue("O(OB)", constructor, self->key, from_cache);
832 * The function will never return while `self` is partially initialized —
836 load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj)
845 self->trans_list_utc = NULL;
846 self->trans_list_wall[0] = NULL;
847 self->trans_list_wall[1] = NULL;
848 self->trans_ttinfos = NULL;
849 self->_ttinfos = NULL;
850 self->file_repr = NULL;
908 self->num_transitions = (size_t)num_transitions;
909 self->num_ttinfos = (size_t)num_ttinfos;
912 self->trans_list_utc =
913 PyMem_Malloc(self->num_transitions * sizeof(int64_t));
914 if (self->trans_list_utc == NULL) {
917 trans_idx = PyMem_Malloc(self->num_transitions * sizeof(Py_ssize_t));
922 for (size_t i = 0; i < self->num_transitions; ++i) {
927 self->trans_list_utc[i] = PyLong_AsLongLong(num);
928 if (self->trans_list_utc[i] == -1 && PyErr_Occurred()) {
943 if (trans_idx[i] > self->num_ttinfos) {
954 utcoff = PyMem_Malloc(self->num_ttinfos * sizeof(long));
955 isdst = PyMem_Malloc(self->num_ttinfos * sizeof(unsigned char));
960 for (size_t i = 0; i < self->num_ttinfos; ++i) {
985 dstoff = PyMem_Calloc(self->num_ttinfos, sizeof(long));
991 utcoff_to_dstoff(trans_idx, utcoff, dstoff, isdst, self->num_transitions,
992 self->num_ttinfos);
994 if (ts_to_local(trans_idx, self->trans_list_utc, utcoff,
995 self->trans_list_wall, self->num_ttinfos,
996 self->num_transitions)) {
1001 self->_ttinfos = PyMem_Malloc(self->num_ttinfos * sizeof(_ttinfo));
1002 if (self->_ttinfos == NULL) {
1005 for (size_t i = 0; i < self->num_ttinfos; ++i) {
1012 if (build_ttinfo(utcoff[i], dstoff[i], tzname, &(self->_ttinfos[i]))) {
1018 self->trans_ttinfos =
1019 PyMem_Calloc(self->num_transitions, sizeof(_ttinfo *));
1020 if (self->trans_ttinfos == NULL) {
1023 for (size_t i = 0; i < self->num_transitions; ++i) {
1025 assert(ttinfo_idx < self->num_ttinfos);
1026 self->trans_ttinfos[i] = &(self->_ttinfos[ttinfo_idx]);
1030 for (size_t i = 0; i < self->num_ttinfos; ++i) {
1032 self->ttinfo_before = &(self->_ttinfos[i]);
1039 if (self->ttinfo_before == NULL && self->num_ttinfos > 0) {
1040 self->ttinfo_before = &(self->_ttinfos[0]);
1044 if (parse_tz_str(tz_str, &(self->tzrule_after))) {
1049 if (!self->num_ttinfos) {
1055 if (!self->num_transitions) {
1056 idx = self->num_ttinfos - 1;
1059 idx = trans_idx[self->num_transitions - 1];
1062 _ttinfo *tti = &(self->_ttinfos[idx]);
1064 &(self->tzrule_after));
1071 _ttinfo *tti_after = &(self->tzrule_after.std);
1087 // 2. If self->_ttinfos contains more than one _ttinfo object, the objects
1089 // 3. self->ttinfos contains no unused _ttinfos (in which case an otherwise
1096 if (self->num_ttinfos > 1 || !self->tzrule_after.std_only) {
1097 self->fixed_offset = 0;
1099 else if (self->num_ttinfos == 0) {
1100 self->fixed_offset = 1;
1104 ttinfo_eq(&(self->_ttinfos[0]), &self->tzrule_after.std);
1109 self->fixed_offset = constant_offset;
1119 if (self->trans_list_utc != NULL) {
1120 PyMem_Free(self->trans_list_utc);
1121 self->trans_list_utc = NULL;
1125 if (self->trans_list_wall[i] != NULL) {
1126 PyMem_Free(self->trans_list_wall[i]);
1127 self->trans_list_wall[i] = NULL;
1131 if (self->_ttinfos != NULL) {
1133 xdecref_ttinfo(&(self->_ttinfos[i]));
1135 PyMem_Free(self->_ttinfos);
1136 self->_ttinfos = NULL;
1139 if (self->trans_ttinfos != NULL) {
1140 PyMem_Free(self->trans_ttinfos);
1141 self->trans_ttinfos = NULL;
1171 CalendarRule *self = (CalendarRule *)base_self;
1179 int8_t first_day = (ymd_to_ord(year, self->month, 1) + 6) % 7;
1180 uint8_t days_in_month = DAYS_IN_MONTH[self->month];
1181 if (self->month == 2 && is_leap_year(year)) {
1192 int8_t month_day = ((int8_t)(self->day) - (first_day + 1)) % 7;
1200 month_day += ((int8_t)(self->week) - 1) * 7;
1209 int64_t ordinal = ymd_to_ord(year, self->month, month_day) - EPOCHORDINAL;
1210 return ((ordinal * 86400) + (int64_t)(self->hour * 3600) +
1211 (int64_t)(self->minute * 60) + (int64_t)(self->second));
1270 DayRule *self = (DayRule *)base_self;
1292 unsigned int day = self->day;
1293 if (self->julian && day >= 59 && is_leap_year(year)) {
1297 return ((days_before_year + day) * 86400) + (self->hour * 3600) +
1298 (self->minute * 60) + self->second;
2134 find_ttinfo(PyZoneInfo_ZoneInfo *self, PyObject *dt)
2139 if (self->fixed_offset) {
2140 return &(self->tzrule_after.std);
2154 int64_t *local_transitions = self->trans_list_wall[fold];
2155 size_t num_trans = self->num_transitions;
2158 return self->ttinfo_before;
2160 else if (!num_trans || ts > local_transitions[self->num_transitions - 1]) {
2161 return find_tzrule_ttinfo(&(self->tzrule_after), ts, fold,
2165 size_t idx = _bisect(ts, local_transitions, self->num_transitions) - 1;
2166 assert(idx < self->num_transitions);
2167 return self->trans_ttinfos[idx];
2194 * This gets a datetime in the same "units" as self->trans_list_wall so that we