rupython 1.2.2__py3-none-any.whl → 1.2.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (11) hide show
  1. rupython/__main__.py +4 -15
  2. rupython/__/342/225/250/320/256/342/225/250/342/226/222/342/225/244/320/231/342/225/250/342/225/225/342/225/250/342/225/241_/342/225/244/320/224/342/225/244/320/223/342/225/250/342/225/234/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225__.py +21 -0
  3. rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/244/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/226/221/342/225/250/320/242/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/225/235/342/225/244/320/237.py +553 -0
  4. rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/260/342/225/250/342/225/241/342/225/250/342/224/202/342/225/250/320/242/342/225/244/320/233/342/225/244/320/220.py +11 -10
  5. rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/261/342/225/250/342/225/227/342/225/244/320/223/342/225/244/320/227.py +4 -3
  6. {rupython-1.2.2.dist-info → rupython-1.2.4.dist-info}/METADATA +1 -1
  7. rupython-1.2.4.dist-info/RECORD +14 -0
  8. rupython-1.2.2.dist-info/RECORD +0 -12
  9. {rupython-1.2.2.dist-info → rupython-1.2.4.dist-info}/LICENSE +0 -0
  10. {rupython-1.2.2.dist-info → rupython-1.2.4.dist-info}/WHEEL +0 -0
  11. {rupython-1.2.2.dist-info → rupython-1.2.4.dist-info}/top_level.txt +0 -0
rupython/__main__.py CHANGED
@@ -1,4 +1,5 @@
1
1
  from . import Преобразователь
2
+ from . import __Общие_функции__
2
3
  import os as ОС
3
4
  import sys as Система
4
5
 
@@ -13,18 +14,6 @@ def Перехватчик_прерывания_клавиатурой(тип_и
13
14
  Исходник = Преобразователь.Преобразовать_код(Путь_к_файлу)
14
15
  if Исходник: Преобразователь.Запустить_код(Название_файла, Исходник, Путь_к_файлу)
15
16
 
16
- def Ожидать_нажатие_клавиши(сообщение):
17
- if ОС.name == 'nt':
18
- import msvcrt
19
- print('\n' + сообщение)
20
- msvcrt.getch()
21
- else:
22
- import tty
23
- import termios
24
- print('\n' + сообщение)
25
- fd = Система.stdin.fileno()
26
- старые_настройки = termios.tcgetattr(fd)
27
- try: tty.setraw(fd); Система.stdin.read(1)
28
- finally: termios.tcsetattr(fd, termios.TCSADRAIN, старые_настройки)
29
-
30
- Ожидать_нажатие_клавиши('=== Исполнение кода завершено. Нажмите любую клавишу для выхода. ===')
17
+ __Общие_функции__.Ожидать_нажатие_клавиши(
18
+ '=== Исполнение кода завершено. Нажмите любую клавишу для выхода. ==='
19
+ )
@@ -0,0 +1,21 @@
1
+ import os as ОС
2
+
3
+ def Заменить_ключи_в_словаре(словарь, замены):
4
+ новый = {}
5
+ for н, з in словарь.items():
6
+ новый.setdefault(замены[н] if н in замены.keys() else н, з)
7
+ return новый
8
+
9
+ def Ожидать_нажатие_клавиши(сообщение):
10
+ if ОС.name == 'nt':
11
+ import msvcrt
12
+ print('\n' + сообщение)
13
+ msvcrt.getch()
14
+ else:
15
+ import tty
16
+ import termios
17
+ print('\n' + сообщение)
18
+ fd = Система.stdin.fileno()
19
+ старые_настройки = termios.tcgetattr(fd)
20
+ try: tty.setraw(fd); Система.stdin.read(1)
21
+ finally: termios.tcsetattr(fd, termios.TCSADRAIN, старые_настройки)
@@ -0,0 +1,553 @@
1
+ import datetime
2
+ from rupython import __Общие_функции__
3
+
4
+ Часовой_пояс = datetime.timezone
5
+ Временная_метка = datetime.datetime
6
+
7
+ Формат_даты = '%Д.%М.%Г'
8
+ Формат_времени = '%ч:%м:%с'
9
+ Формат_даты_и_времени = '%Д.%М.%Г %ч:%м:%с'
10
+
11
+ Словарь_спецификаторов = {
12
+ '%Г': '%Y', # год (4 цифры, например 1945)
13
+ '%М': '%m', # месяц (2 цифры, 01–12)
14
+ '%Д': '%d', # день (2 цифры, 01–31)
15
+ '%ч': '%H', # часы (2 цифры, 00–23)
16
+ '%м': '%M', # минуты (2 цифры, 00–59)
17
+ '%с': '%S', # секунды (2 цифры, 00–59)
18
+ '%д': '%f' # дробная часть секунды (в микросекундах) (6 цифр, 000000–999999)
19
+ }
20
+
21
+ Словарь_параметров = {
22
+ 'год': 'year', 'месяц': 'month', 'день': 'day',
23
+ 'часов': 'hour', 'минут': 'minute', 'секунд': 'second',
24
+ 'микросекунд': 'microsecond', 'часовой_пояс': 'tzinfo',
25
+ 'добавка_летнего_времени': 'fold'
26
+ }
27
+
28
+ Словарь_параметров_интервала = {
29
+ 'дней': 'days', 'секунд': 'seconds',
30
+ 'микросекунд': 'microseconds', 'миллисекунд': 'milliseconds',
31
+ 'минут': 'minutes', 'часов': 'hours', 'недель': 'weeks'
32
+ }
33
+
34
+ Месяцы_родительный = {
35
+ 1: 'января', 2: 'февраля', 3: 'марта', 4: 'апреля',
36
+ 5: 'мая', 6: 'июня', 7: 'июля', 8: 'августа',
37
+ 9: 'сентября', 10: 'октября', 11: 'ноября', 12: 'декабря'
38
+ }
39
+
40
+ Дни_недели_полные = {
41
+ 1: 'понедельник', 2: 'вторник', 3: 'среда', 4: 'четверг',
42
+ 5: 'пятница', 6: 'суббота', 7: 'воскресенье'
43
+ }
44
+
45
+ Дни_недели_краткие = {
46
+ 1: 'Пн', 2: 'Вт', 3: 'Ср', 4: 'Чт',
47
+ 5: 'Пт', 6: 'Сб', 7: 'Вс'
48
+ }
49
+
50
+ def Склонение_после_числительного(число, слова):
51
+ return str(число) + ' ' + \
52
+ (слова[2] if число % 100 >= 5 and число % 100 <= 20 else \
53
+ (слова[0] if число % 10 == 1 else \
54
+ (слова[1] if число % 10 >= 2 and число % 10 <= 4 else слова[2])))
55
+
56
+ def Перевести_формат(формат):
57
+ for русский, питоновский in Словарь_спецификаторов.items():
58
+ формат = формат.replace(русский, питоновский)
59
+ return формат
60
+
61
+ class Дата_и_время:
62
+ def __init__(здесь, *ПА, **ИА):
63
+ if len(ПА) > 0 and type(ПА[0]) == datetime.datetime: здесь._дата_время = ПА[0]
64
+ else:
65
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(
66
+ ИА, Словарь_параметров
67
+ )
68
+ здесь._дата_время = datetime.datetime(*ПА, **ИА)
69
+
70
+ @staticmethod
71
+ def Сейчас(часовой_пояс=None):
72
+ return Дата_и_время(datetime.datetime.now(часовой_пояс))
73
+
74
+ @staticmethod
75
+ def Из_метки_времени(метка_времени, часовой_пояс=None):
76
+ return Дата_и_время(datetime.datetime.fromtimestamp(метка_времени, часовой_пояс))
77
+
78
+ @staticmethod
79
+ def Из_строки(строка):
80
+ return Дата_и_время.Разобрать(строка, Формат_даты_и_времени)
81
+
82
+ @staticmethod
83
+ def Разобрать(строка, формат):
84
+ формат = Перевести_формат(формат)
85
+ return Дата_и_время(datetime.datetime.strptime(строка, формат))
86
+
87
+ def В_формат(здесь, формат):
88
+ формат = Перевести_формат(формат)
89
+ return здесь._дата_время.strftime(формат)
90
+
91
+ def __str__(строка):
92
+ формат = Перевести_формат(Формат_даты_и_времени)
93
+ return здесь._дата_время.strftime(формат)
94
+
95
+ def Словами(здесь, формат='полный'):
96
+ день_недели = здесь.Номер_дня_недели()
97
+ if формат == 'полный':
98
+ return f"{Дни_недели_полные[день_недели]}, {здесь.День} {Месяцы_родительный[здесь.Месяц]} {здесь.Год} года, {здесь.Часов:02d}:{здесь.Минут:02d}"
99
+ elif формат == 'краткий':
100
+ return f"{Дни_недели_краткие[день_недели]}, {здесь.День} {Месяцы_родительный[здесь.Месяц]} {здесь.Год} г."
101
+ elif формат == 'дата':
102
+ return f"{здесь.День} {Месяцы_родительный[здесь.Месяц]} {здесь.Год} года"
103
+ elif формат == 'время':
104
+ return f"{здесь.Часов:02d}:{здесь.Минут:02d}"
105
+ elif формат == 'день_недели':
106
+ return Дни_недели_полные[день_недели]
107
+ else:
108
+ raise ValueError("Неподдерживаемый формат")
109
+
110
+ def В_метку_времени(здесь):
111
+ return здесь._дата_время.timestamp()
112
+
113
+ def День_недели(здесь):
114
+ return здесь._дата_время.weekday()
115
+
116
+ def Номер_дня_недели(здесь):
117
+ return здесь._дата_время.isoweekday()
118
+
119
+ def Добавить(здесь, интервал):
120
+ return Дата_и_время(здесь._дата_время + интервал._интервал)
121
+
122
+ def Вычесть(здесь, интервал):
123
+ return Дата_и_время(здесь._дата_время - интервал._интервал)
124
+
125
+ def __add__(здесь, другой):
126
+ if isinstance(другой, Интервал):
127
+ return здесь.Добавить(другой)
128
+ return NotImplemented
129
+
130
+ def __radd__(здесь, другой):
131
+ if isinstance(другой, Интервал):
132
+ return здесь.Добавить(другой)
133
+ return NotImplemented
134
+
135
+ def __sub__(здесь, другой):
136
+ if isinstance(другой, Интервал):
137
+ return здесь.Вычесть(другой)
138
+ return NotImplemented
139
+
140
+ def __eq__(здесь, другой):
141
+ if isinstance(другой, Дата_и_время):
142
+ return здесь._дата_время == другой._дата_время
143
+ return NotImplemented
144
+
145
+ def __lt__(здесь, другой):
146
+ if isinstance(другой, Дата_и_время):
147
+ return здесь._дата_время < другой._дата_время
148
+ return NotImplemented
149
+
150
+ def __le__(здесь, другой):
151
+ if isinstance(другой, Дата_и_время):
152
+ return здесь._дата_время <= другой._дата_время
153
+ return NotImplemented
154
+
155
+ def __gt__(здесь, другой):
156
+ if isinstance(другой, Дата_и_время):
157
+ return здесь._дата_время > другой._дата_время
158
+ return NotImplemented
159
+
160
+ def __ge__(здесь, другой):
161
+ if isinstance(другой, Дата_и_время):
162
+ return здесь._дата_время >= другой._дата_время
163
+ return NotImplemented
164
+
165
+ @property
166
+ def Год(здесь):
167
+ return здесь._дата_время.year
168
+
169
+ @property
170
+ def Месяц(здесь):
171
+ return здесь._дата_время.month
172
+
173
+ @property
174
+ def День(здесь):
175
+ return здесь._дата_время.day
176
+
177
+ @property
178
+ def Часов(здесь):
179
+ return здесь._дата_время.hour
180
+
181
+ @property
182
+ def Минут(здесь):
183
+ return здесь._дата_время.minute
184
+
185
+ @property
186
+ def Секунд(здесь):
187
+ return здесь._дата_время.second
188
+
189
+ @property
190
+ def Микросекунд(здесь):
191
+ return здесь._дата_время.microsecond
192
+
193
+ @property
194
+ def Часовой_пояс(здесь):
195
+ return здесь._дата_время.tzinfo
196
+
197
+ class Дата:
198
+ def __init__(здесь, *ПА, **ИА):
199
+ if len(ПА) > 0 and type(ПА[0]) == datetime.date: здесь._дата = ПА[0]
200
+ else:
201
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(
202
+ ИА, Словарь_параметров
203
+ )
204
+ здесь._дата = datetime.date(*ПА, **ИА)
205
+
206
+ @staticmethod
207
+ def Сегодня():
208
+ return Дата(datetime.date.today())
209
+
210
+ @staticmethod
211
+ def От_даты(порядковый_номер):
212
+ return Дата(datetime.date.fromordinal(порядковый_номер))
213
+
214
+ def В_формат(здесь, формат):
215
+ формат = Перевести_формат(формат)
216
+ return здесь._дата.strftime(формат)
217
+
218
+ def __str__(здесь):
219
+ формат = Перевести_формат(Формат_даты)
220
+ return здесь._дата.strftime(формат)
221
+
222
+ def Из_строки(строка):
223
+ return Время(Дата_и_время.Разобрать(строка, Формат_времени)._дата_время.time())
224
+
225
+ def День_недели(здесь):
226
+ return здесь._дата.isoweekday()
227
+
228
+ def Добавить(здесь, интервал):
229
+ return Дата(здесь._дата + интервал._интервал)
230
+
231
+ def Вычесть(здесь, интервал):
232
+ return Дата(здесь._дата - интервал._интервал)
233
+
234
+ def __add__(здесь, другой):
235
+ if isinstance(другой, Интервал):
236
+ return здесь.Добавить(другой)
237
+ return NotImplemented
238
+
239
+ def __radd__(здесь, другой):
240
+ if isinstance(другой, Интервал):
241
+ return здесь.Добавить(другой)
242
+ return NotImplemented
243
+
244
+ def __sub__(здесь, другой):
245
+ if isinstance(другой, Интервал):
246
+ return здесь.Вычесть(другой)
247
+ return NotImplemented
248
+
249
+ def __eq__(здесь, другой):
250
+ if isinstance(другой, Дата):
251
+ return здесь._дата == другой._дата
252
+ return NotImplemented
253
+
254
+ def __lt__(здесь, другой):
255
+ if isinstance(другой, Дата):
256
+ return здесь._дата < другой._дата
257
+ return NotImplemented
258
+
259
+ def __le__(здесь, другой):
260
+ if isinstance(другой, Дата):
261
+ return здесь._дата <= другой._дата
262
+ return NotImplemented
263
+
264
+ def __gt__(здесь, другой):
265
+ if isinstance(другой, Дата):
266
+ return здесь._дата > другой._дата
267
+ return NotImplemented
268
+
269
+ def __ge__(здесь, другой):
270
+ if isinstance(другой, Дата):
271
+ return здесь._дата >= другой._дата
272
+ return NotImplemented
273
+
274
+ @property
275
+ def год(здесь): return здесь._дата.year
276
+
277
+ @property
278
+ def месяц(здесь): return здесь._дата.month
279
+
280
+ @property
281
+ def день(здесь): return здесь._дата.day
282
+
283
+ class Время:
284
+ def __init__(здесь, *ПА, **ИА):
285
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(
286
+ ИА, Словарь_параметров
287
+ )
288
+ здесь._время = datetime.time(*ПА, **ИА)
289
+
290
+ def В_формат(здесь, формат):
291
+ формат = Перевести_формат(формат)
292
+ return здесь._время.strftime(формат)
293
+
294
+ def __str__(здесь):
295
+ формат = Перевести_формат(Формат_времени)
296
+ return здесь._время.strftime(формат)
297
+
298
+ def Заменить(здесь, **ИА):
299
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(
300
+ ИА, Словарь_параметров
301
+ )
302
+ return Время(здесь._время.replace(**ИА))
303
+
304
+ def Добавить(здесь, интервал):
305
+ базовая_дата = datetime.datetime(1970, 1, 1, здесь._время.hour, здесь._время.minute, здесь._время.second, здесь._время.microsecond, здесь._время.tzinfo)
306
+ результат = базовая_дата + интервал._интервал
307
+ return Время(результат.hour, результат.minute, результат.second, результат.microsecond, здесь._время.tzinfo)
308
+
309
+ def Вычесть(здесь, интервал):
310
+ базовая_дата = datetime.datetime(1970, 1, 1, здесь._время.hour, здесь._время.minute, здесь._время.second, здесь._время.microsecond, здесь._время.tzinfo)
311
+ результат = базовая_дата - интервал._интервал
312
+ return Время(результат.hour, результат.minute, результат.second, результат.microsecond, здесь._время.tzinfo)
313
+
314
+ def __add__(здесь, другой):
315
+ if isinstance(другой, Интервал):
316
+ return здесь.Добавить(другой)
317
+ return NotImplemented
318
+
319
+ def __radd__(здесь, другой):
320
+ if isinstance(другой, Интервал):
321
+ return здесь.Добавить(другой)
322
+ return NotImplemented
323
+
324
+ def __sub__(здесь, другой):
325
+ if isinstance(другой, Интервал):
326
+ return здесь.Вычесть(другой)
327
+ return NotImplemented
328
+
329
+ def __eq__(здесь, другой):
330
+ if isinstance(другой, Время):
331
+ return здесь._время == другой._время
332
+ return NotImplemented
333
+
334
+ def __lt__(здесь, другой):
335
+ if isinstance(другой, Время):
336
+ return здесь._время < другой._время
337
+ return NotImplemented
338
+
339
+ def __le__(здесь, другой):
340
+ if isinstance(другой, Время):
341
+ return здесь._время <= другой._время
342
+ return NotImplemented
343
+
344
+ def __gt__(здесь, другой):
345
+ if isinstance(другой, Время):
346
+ return здесь._время > другой._время
347
+ return NotImplemented
348
+
349
+ def __ge__(здесь, другой):
350
+ if isinstance(другой, Время):
351
+ return здесь._время >= другой._время
352
+ return NotImplemented
353
+
354
+ @property
355
+ def Часов(здесь):
356
+ return здесь._время.hour
357
+
358
+ @property
359
+ def Минут(здесь):
360
+ return здесь._время.minute
361
+
362
+ @property
363
+ def Секунд(здесь):
364
+ return здесь._время.second
365
+
366
+ @property
367
+ def Микросекунд(здесь):
368
+ return здесь._время.microsecond
369
+
370
+ @property
371
+ def Часовой_пояс(здесь):
372
+ return здесь._время.tzinfo
373
+
374
+ class Интервал:
375
+ def __init__(здесь, *ПА, **ИА):
376
+ if len(ПА) > 0 and type(ПА[0]) == datetime.timedelta: здесь._интервал = ПА[0]
377
+ else:
378
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(
379
+ ИА, Словарь_параметров_интервала
380
+ )
381
+ здесь._интервал = datetime.timedelta(*ПА, **ИА)
382
+
383
+ def Добавить(здесь, другой):
384
+ return Интервал(дней=(здесь._интервал + другой._интервал).days, секунд=(здесь._интервал + другой._интервал).seconds, микросекунд=(здесь._интервал + другой._интервал).microseconds)
385
+
386
+ def Вычесть(здесь, другой):
387
+ return Интервал(дней=(здесь._интервал - другой._интервал).days, секунд=(здесь._интервал - другой._интервал).seconds, микросекунд=(здесь._интервал - другой._интервал).microseconds)
388
+
389
+ def __str__(здесь):
390
+ части = []
391
+ if здесь.Дней:
392
+ части.append(Склонение_после_числительного(здесь.Дней, ['день', 'дня', 'дней']))
393
+ секунд = здесь.Секунд
394
+ if секунд >= 3600:
395
+ часов = секунд // 3600
396
+ части.append(Склонение_после_числительного(часов, ['час', 'часа', 'часов']))
397
+ секунд %= 3600
398
+ if секунд >= 60:
399
+ минут = секунд // 60
400
+ части.append(Склонение_после_числительного(минут, ['минута', 'минуты', 'минут']))
401
+ секунд %= 60
402
+ if секунд:
403
+ части.append(Склонение_после_числительного(секунд, ['секунда', 'секунды', 'секунд']))
404
+ return ' '.join(части) or '0 секунд'
405
+
406
+ @staticmethod
407
+ def Из_строки(строка):
408
+ части = строка.split()
409
+ ИА = {}
410
+ i = 0
411
+ while i < len(части):
412
+ число = int(части[i])
413
+ единица = части[i + 1]
414
+ if 'день' in единица or 'дня' in единица or 'дней' in единица:
415
+ ИА['дней'] = число
416
+ elif 'час' in единица:
417
+ ИА['часов'] = число
418
+ elif 'минут' in единица:
419
+ ИА['минут'] = число
420
+ elif 'секунд' in единица:
421
+ ИА['секунд'] = число
422
+ i += 2
423
+ return Интервал(**ИА)
424
+
425
+ def __add__(здесь, другой):
426
+ if isinstance(другой, Интервал):
427
+ return здесь.Добавить(другой)
428
+ return NotImplemented
429
+
430
+ def __sub__(здесь, другой):
431
+ if isinstance(другой, Интервал):
432
+ return здесь.Вычесть(другой)
433
+ return NotImplemented
434
+
435
+ def __eq__(здесь, другой):
436
+ if isinstance(другой, Интервал):
437
+ return здесь._интервал == другой._интервал
438
+ return NotImplemented
439
+
440
+ def __lt__(здесь, другой):
441
+ if isinstance(другой, Интервал):
442
+ return здесь._интервал < другой._интервал
443
+ return NotImplemented
444
+
445
+ def __le__(здесь, другой):
446
+ if isinstance(другой, Интервал):
447
+ return здесь._интервал <= другой._интервал
448
+ return NotImplemented
449
+
450
+ def __gt__(здесь, другой):
451
+ if isinstance(другой, Интервал):
452
+ return здесь._интервал > другой._интервал
453
+ return NotImplemented
454
+
455
+ def __ge__(здесь, другой):
456
+ if isinstance(другой, Интервал):
457
+ return здесь._интервал >= другой._интервал
458
+ return NotImplemented
459
+
460
+ @property
461
+ def Дней(здесь):
462
+ return здесь._интервал.days
463
+
464
+ @property
465
+ def Секунд(здесь):
466
+ return здесь._интервал.seconds
467
+
468
+ @property
469
+ def Микросекунд(здесь):
470
+ return здесь._интервал.microseconds
471
+
472
+ @property
473
+ def Всего_секунд(здесь):
474
+ return здесь._интервал.total_seconds()
475
+
476
+ def Совместить(дата, время):
477
+ return Дата_время(datetime.datetime.combine(дата._дата, время._время))
478
+
479
+ class ДатаСтСт:
480
+ def __init__(здесь, *ПА):
481
+ if len(ПА) == 3:
482
+ здесь.год, здесь.месяц, здесь.день = ПА
483
+ здесь._Посчитать_дни()
484
+ else:
485
+ if isinstance(ПА[0], ДатаСтСт):
486
+ здесь.в_днях = ПА[0].в_днях
487
+ else:
488
+ здесь.в_днях = ПА[0]
489
+ здесь._Посчитать_дату()
490
+
491
+ def _Посчитать_день_недели_и_года(здесь):
492
+ здесь.день_недели = (здесь.в_днях - 1) % 7
493
+ if здесь.день_недели == 0: здесь.день_недели = 7
494
+ здесь.день_года = (
495
+ (275 * здесь.месяц // 9)
496
+ - (((здесь.месяц + 9) // 12) * (1 + ((здесь.год - 4 * (здесь.год // 4) + 2) // 3)))
497
+ + здесь.день
498
+ - 31
499
+ )
500
+
501
+ def _Посчитать_дни(здесь):
502
+ здесь.в_днях = (
503
+ 367 * здесь.год
504
+ - int((7 * (здесь.год + 5001 + int((здесь.месяц - 9) / 7))) / 4)
505
+ + int((275 * здесь.месяц) / 9)
506
+ + здесь.день
507
+ + 8353
508
+ )
509
+ здесь._Посчитать_день_недели_и_года()
510
+
511
+ def _Посчитать_дату(здесь):
512
+ a = здесь.в_днях + 1890
513
+ b = int((a - 122.1) / 365.25)
514
+ c = int(365.25 * b)
515
+ d = int((a - c) / 30.6001)
516
+ здесь.день = a - c - int(30.6001 * d)
517
+ здесь.месяц = d - (13 if d > 13 else 1)
518
+ здесь.год = b - (3 if здесь.месяц < 3 else 4)
519
+ здесь._Посчитать_день_недели_и_года()
520
+
521
+ def Добавить_дни(здесь, количество):
522
+ здесь.в_днях += количество
523
+ здесь._Посчитать_дату()
524
+ return здесь
525
+
526
+ def Разница_в_днях(здесь, другая_дата):
527
+ return здесь.в_днях - другая_дата.в_днях
528
+
529
+ def Сравнить(здесь, другая_дата):
530
+ if здесь.в_днях < другая_дата.в_днях: return -1
531
+ elif здесь.в_днях > другая_дата.в_днях: return 1
532
+ else: return 0
533
+
534
+ def В_новый_стиль(здесь):
535
+ разница = здесь.год // 100 - здесь.год // 400 - 2
536
+ год_увеличения_разницы = здесь.год % 100 == 0 and здесь.год % 400 != 0
537
+ if год_увеличения_разницы:
538
+ if здесь.день_года < 60: разница -= 1
539
+ if здесь.день_года == 59 and год_увеличения_разницы:
540
+ дата = Дата(здесь.год, 3, 1) + Интервал(дней = разница)
541
+ else:
542
+ дата = Дата(здесь.год, здесь.месяц, здесь.день)
543
+ дата += Интервал(дней = разница)
544
+ return дата
545
+
546
+ def Пасха(год, нов_ст = None):
547
+ смещение = (год % 19 * 19 + 15) % 30
548
+ смещение += (год % 4 * 2 + год % 7 * 4 + 6 * смещение + 6) % 7
549
+ нов_ст = True if нов_ст is None and год >= 1918 else нов_ст
550
+ дата = ДатаСтСт(год, 3, 22)
551
+ дата.Добавить_дни(смещение)
552
+ if нов_ст: return дата.В_новый_стиль()
553
+ else: return дата
@@ -1,4 +1,5 @@
1
1
  import re
2
+ from rupython import __Общие_функции__
2
3
 
3
4
  БезФлагов = 0
4
5
  Знаки7бит = A = re.ASCII
@@ -19,42 +20,42 @@ class Шаблон:
19
20
  здесь.шаблон = объект.pattern
20
21
 
21
22
  def Поиск(здесь, *ПА, **ИА):
22
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
23
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
23
24
  { 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
24
25
  return здесь.объект.search(*ПА, **ИА)
25
26
 
26
27
  def СовпадНач(здесь, *ПА, **ИА):
27
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
28
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
28
29
  { 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
29
30
  return здесь.объект.match(*ПА, **ИА)
30
31
 
31
32
  def ПолнСоотв(здесь, *ПА, **ИА):
32
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
33
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
33
34
  { 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
34
35
  return здесь.объект.fullmatch(*ПА, **ИА)
35
36
 
36
37
  def Разбить(здесь, *ПА, **ИА):
37
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
38
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
38
39
  { 'строка': 'string', 'макс_делений': 'maxsplit' })
39
40
  return здесь.объект.split(*ПА, **ИА)
40
41
 
41
42
  def НайтиВсё(здесь, *ПА, **ИА):
42
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
43
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
43
44
  { 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
44
45
  return здесь.объект.findall(*ПА, **ИА)
45
46
 
46
47
  def ИскатьПеречисл(здесь, *ПА, **ИА):
47
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
48
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
48
49
  { 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
49
50
  return здесь.объект.finditer(*ПА, **ИА)
50
51
 
51
52
  def Заменить(здесь, *ПА, **ИА):
52
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
53
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
53
54
  { 'замена': 'repl', 'строка': 'string', 'количество': 'count' })
54
55
  return здесь.объект.sub(*ПА, **ИА)
55
56
 
56
57
  def ЗаменитьСч(здесь, *ПА, **ИА):
57
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
58
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
58
59
  { 'замена': 'repl', 'строка': 'string', 'количество': 'count' })
59
60
  return здесь.объект.subn(*ПА, **ИА)
60
61
 
@@ -74,11 +75,11 @@ class Соответствие:
74
75
  def __getitem__(здесь, индекс): return объект[индекс]
75
76
 
76
77
  def Группы(здесь, *ПА, **ИА):
77
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, { 'по_умолчанию': 'default' })
78
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, { 'по_умолчанию': 'default' })
78
79
  return здесь.объект.groups(*ПА, **ИА)
79
80
 
80
81
  def ИменовГруппы(здесь, *ПА, **ИА):
81
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, { 'по_умолчанию': 'default' })
82
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, { 'по_умолчанию': 'default' })
82
83
  return здесь.объект.groupdict(*ПА, **ИА)
83
84
 
84
85
  def Начало(здесь, *группа): return здесь.объект.start(*группа)
@@ -1,4 +1,5 @@
1
1
  import random
2
+ from rupython import __Общие_функции__
2
3
 
3
4
  # Управление
4
5
  def НачЗнач(a = None): return random.seed(a, version = 2)
@@ -10,7 +11,7 @@ def СлучБайты(n): return random.randbytes(n)
10
11
 
11
12
  # Целые числа
12
13
  def ИзДиапазона(*ПА, **ИА):
13
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
14
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
14
15
  { 'нач': 'start', 'кон': 'stop', 'шаг': 'step' })
15
16
  return random.randrange(*ПА, **ИА)
16
17
  def СлучЦелое(a, b): return random.randint(a, b)
@@ -19,12 +20,12 @@ def СлучБиты(k): return random.getrandbits(k)
19
20
  # Последовательности
20
21
  def ВыбратьИзПосл(посл): return random.choice(посл)
21
22
  def ВыбратьПосл(*ПА, **ИА):
22
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
23
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
23
24
  { 'посл': 'population', 'веса': 'weights', 'накоплВеса': 'cum_weights' })
24
25
  return random.choices(*ПА, **ИА)
25
26
  def Перемешать(x): return random.shuffle(x)
26
27
  def СлучПосл(*ПА, **ИА):
27
- ИА = __Заголовочный_код__.Заменить_ключи_в_словаре(ИА, \
28
+ ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
28
29
  { 'посл': 'population', 'колич': 'counts' })
29
30
  return random.sample(*ПА, **ИА)
30
31
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -0,0 +1,14 @@
1
+ rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
2
+ rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
+ rupython/__Общие_функции__.py,sha256=FLbN5hhnnXXqAwqRRNJ2Y_0fXAAYCC_7Pn06_DZjX3w,826
4
+ rupython/Преобразователь.py,sha256=-0oxZb63T3s50sT-0jiH3cA4KqRs3qVpaGsfSyAb8TY,47550
5
+ rupython/Модули/БД.py,sha256=ypjYa-9s0wO1Y_nXRiyiS80F_TStRlsSHRpisBWMT4g,23957
6
+ rupython/Модули/ДатаВремя.py,sha256=YdpACxtHXt57zV7uYpZJZeH3T4bMd6orud-Y34DqWTI,25087
7
+ rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
8
+ rupython/Модули/РегВыр.py,sha256=T3yxVP-B5AwAzbUTjWpog3HCzRTGLZ58CEQpfA-0dsY,6341
9
+ rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
10
+ rupython-1.2.4.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
11
+ rupython-1.2.4.dist-info/METADATA,sha256=ENvZ7Aqr11YPad-tvpwOXT_TL5Q4rsaQ2v2FurUIM5M,27473
12
+ rupython-1.2.4.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
13
+ rupython-1.2.4.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
14
+ rupython-1.2.4.dist-info/RECORD,,
@@ -1,12 +0,0 @@
1
- rupython/__main__.py,sha256=5CE287LA_5R1pXymB5T0r9pk5QD9meo4_qnQTbgvxKA,1719
2
- rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
- rupython/Преобразователь.py,sha256=-0oxZb63T3s50sT-0jiH3cA4KqRs3qVpaGsfSyAb8TY,47550
4
- rupython/Модули/БД.py,sha256=ypjYa-9s0wO1Y_nXRiyiS80F_TStRlsSHRpisBWMT4g,23957
5
- rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
6
- rupython/Модули/РегВыр.py,sha256=yeXYfeDF2qw4DSKVdZVSFInMUW52U7Nq_KOJKvm4XnM,6349
7
- rupython/Модули/Случ.py,sha256=oeVdSdFVb4X_T-nX2P7NSIhise1zUPIS4lk7h-67XSg,2689
8
- rupython-1.2.2.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
9
- rupython-1.2.2.dist-info/METADATA,sha256=c7xdKMa8k7PQcFNS_fZ74jhoLFY1t5xqyL9s4h4RQdk,27473
10
- rupython-1.2.2.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
11
- rupython-1.2.2.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
12
- rupython-1.2.2.dist-info/RECORD,,