rupython 1.2.10__py3-none-any.whl → 1.2.12__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 (17) hide show
  1. 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 +9 -0
  2. 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/240/342/225/244/320/221/342/225/250/342/225/225/342/225/250/342/225/234/342/225/244/320/225/342/225/244/320/220.py +206 -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/241/342/225/250/320/244.py +45 -23
  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/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 +18 -5
  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/252/342/225/244/320/223/342/225/244/320/227/342/225/250/342/226/221.py +87 -0
  6. 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/252/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/227/342/225/250/342/225/241/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225.py +279 -146
  7. 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/256/342/225/244/320/227/342/225/250/342/225/241/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/224/244/342/225/244/320/234.py +177 -0
  8. 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/257/342/225/250/342/225/233/342/225/244/320/222/342/225/250/342/225/233/342/225/250/342/225/221/342/225/250/342/225/225.py +273 -0
  9. 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 +9 -9
  10. rupython//342/225/250/320/257/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/225/233/342/225/250/342/226/222/342/225/244/320/220/342/225/250/342/226/221/342/225/250/342/225/226/342/225/250/342/225/233/342/225/250/342/226/223/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/225/241/342/225/250/342/225/227/342/225/244/320/234.py +3 -3
  11. rupython-1.2.12.dist-info/LICENSE +27 -0
  12. {rupython-1.2.10.dist-info → rupython-1.2.12.dist-info}/METADATA +2 -2
  13. rupython-1.2.12.dist-info/RECORD +19 -0
  14. rupython-1.2.10.dist-info/LICENSE +0 -1
  15. rupython-1.2.10.dist-info/RECORD +0 -15
  16. {rupython-1.2.10.dist-info → rupython-1.2.12.dist-info}/WHEEL +0 -0
  17. {rupython-1.2.10.dist-info → rupython-1.2.12.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,177 @@
1
+ import queue
2
+ from rupython import __Общие_функции__
3
+
4
+ Очередь_пуста = queue.Empty
5
+ Очередь_полна = queue.Full
6
+
7
+ Словарь_параметров = {
8
+ 'максимальный_размер': 'maxsize',
9
+ 'элемент': 'item',
10
+ 'блоковать': 'block',
11
+ 'таймаут': 'timeout',
12
+ 'приоритет': 'priority'
13
+ }
14
+
15
+ Словарь_склонений = {
16
+ 'элемент': ['элемент', 'элемента', 'элементов'],
17
+ 'задача': ['задача', 'задачи', 'задач']
18
+ }
19
+
20
+ class Очередь:
21
+ def __init__(здесь, максимальный_размер = 0):
22
+ kwargs = {'maxsize': максимальный_размер}
23
+ здесь._queue = queue.Queue(**kwargs)
24
+
25
+ def Добавить(здесь, элемент, блоковать = True, таймаут = None):
26
+ kwargs = {'item': элемент, 'block': блоковать}
27
+ if таймаут is not None:
28
+ kwargs['timeout'] = таймаут
29
+ здесь._queue.put(**kwargs)
30
+
31
+ def Добавить_без_блокования(здесь, элемент):
32
+ здесь._queue.put_nowait(элемент)
33
+
34
+ def Получить(здесь, блоковать = True, таймаут = None):
35
+ kwargs = {'block': блоковать}
36
+ if таймаут is not None:
37
+ kwargs['timeout'] = таймаут
38
+ return здесь._queue.get(**kwargs)
39
+
40
+ def Получить_без_блокования(здесь):
41
+ return здесь._queue.get_nowait()
42
+
43
+ def Задача_выполнена(здесь):
44
+ здесь._queue.task_done()
45
+
46
+ def Ждать_завершения(здесь):
47
+ здесь._queue.join()
48
+
49
+ def Пустая(здесь):
50
+ return здесь._queue.empty()
51
+
52
+ def Полная(здесь):
53
+ return здесь._queue.full()
54
+
55
+ def Размер(здесь):
56
+ return здесь._queue.qsize()
57
+
58
+ def __len__(здесь):
59
+ return здесь._queue.qsize()
60
+
61
+ def __str__(здесь):
62
+ размер = здесь.Размер()
63
+ return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
64
+
65
+ def В_строку_с_задачами(здесь):
66
+ размер = здесь.Размер()
67
+ return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
68
+
69
+ class Стековая_очередь:
70
+ def __init__(здесь, максимальный_размер = 0):
71
+ kwargs = {'maxsize': максимальный_размер}
72
+ здесь._queue = queue.LifoQueue(**kwargs)
73
+
74
+ def Добавить(здесь, элемент, блоковать = True, таймаут = None):
75
+ kwargs = {'item': элемент, 'block': блоковать}
76
+ if таймаут is not None:
77
+ kwargs['timeout'] = таймаут
78
+ здесь._queue.put(**kwargs)
79
+
80
+ def Добавить_без_блокования(здесь, элемент):
81
+ здесь._queue.put_nowait(элемент)
82
+
83
+ def Получить(здесь, блоковать = True, таймаут = None):
84
+ kwargs = {'block': блоковать}
85
+ if таймаут is not None:
86
+ kwargs['timeout'] = таймаут
87
+ return здесь._queue.get(**kwargs)
88
+
89
+ def Получить_без_блокования(здесь):
90
+ return здесь._queue.get_nowait()
91
+
92
+ def Задача_выполнена(здесь):
93
+ здесь._queue.task_done()
94
+
95
+ def Ждать_завершения(здесь):
96
+ здесь._queue.join()
97
+
98
+ def Пустая(здесь):
99
+ return здесь._queue.empty()
100
+
101
+ def Полная(здесь):
102
+ return здесь._queue.full()
103
+
104
+ def Размер(здесь):
105
+ return здесь._queue.qsize()
106
+
107
+ def __len__(здесь):
108
+ return здесь._queue.qsize()
109
+
110
+ def __str__(здесь):
111
+ размер = здесь.Размер()
112
+ return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
113
+
114
+ def В_строку_с_задачами(здесь):
115
+ размер = здесь.Размер()
116
+ return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
117
+
118
+ class Приоритетная_очередь:
119
+ def __init__(здесь, максимальный_размер = 0):
120
+ kwargs = {'maxsize': максимальный_размер}
121
+ здесь._queue = queue.PriorityQueue(**kwargs)
122
+
123
+ def Добавить(здесь, элемент, приоритет, блоковать = True, таймаут = None):
124
+ kwargs = {'item': (приоритет, элемент), 'block': блоковать}
125
+ if таймаут is not None:
126
+ kwargs['timeout'] = таймаут
127
+ здесь._queue.put(**kwargs)
128
+
129
+ def Добавить_без_блокования(здесь, элемент, приоритет):
130
+ здесь._queue.put_nowait((приоритет, элемент))
131
+
132
+ def Получить(здесь, блоковать = True, таймаут = None):
133
+ kwargs = {'block': блоковать}
134
+ if таймаут is not None:
135
+ kwargs['timeout'] = таймаут
136
+ приоритет, элемент = здесь._queue.get(**kwargs)
137
+ return элемент
138
+
139
+ def Получить_с_приоритетом(здесь, блоковать = True, таймаут = None):
140
+ kwargs = {'block': блоковать}
141
+ if таймаут is not None:
142
+ kwargs['timeout'] = таймаут
143
+ return здесь._queue.get(**kwargs)
144
+
145
+ def Получить_без_блокования(здесь):
146
+ приоритет, элемент = здесь._queue.get_nowait()
147
+ return элемент
148
+
149
+ def Получить_без_блокования_с_приоритетом(здесь):
150
+ """Возвращает кортеж (приоритет, элемент)."""
151
+ return здесь._queue.get_nowait()
152
+
153
+ def Задача_выполнена(здесь):
154
+ здесь._queue.task_done()
155
+
156
+ def Ждать_завершения(здесь):
157
+ здесь._queue.join()
158
+
159
+ def Пустая(здесь):
160
+ return здесь._queue.empty()
161
+
162
+ def Полная(здесь):
163
+ return здесь._queue.full()
164
+
165
+ def Размер(здесь):
166
+ return здесь._queue.qsize()
167
+
168
+ def __len__(здесь):
169
+ return здесь._queue.qsize()
170
+
171
+ def __str__(здесь):
172
+ размер = здесь.Размер()
173
+ return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
174
+
175
+ def В_строку_с_задачами(здесь):
176
+ размер = здесь.Размер()
177
+ return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
@@ -0,0 +1,273 @@
1
+ import threading
2
+ from rupython import __Общие_функции__
3
+
4
+ Ошибка_потока = threading.ThreadError
5
+
6
+ Словарь_параметров = {
7
+ 'цель': 'target',
8
+ 'имя': 'name',
9
+ 'аргументы': 'args',
10
+ 'именовАргументы': 'kwargs',
11
+ 'после_окончания': 'daemon',
12
+ 'время_ожидания': 'timeout',
13
+ 'количество': 'count',
14
+ 'действие': 'action',
15
+ 'блоковать': 'block',
16
+ 'обратный_вызов': 'callback',
17
+ 'аргументыОбрВыз': 'callback_args',
18
+ 'именовАргументыОбрВыз': 'callback_kwargs',
19
+ 'интервал': 'interval'
20
+ }
21
+
22
+ Словарь_склонений = {
23
+ 'поток': ['поток', 'потока', 'потоков'],
24
+ 'ресурс': ['ресурс', 'ресурса', 'ресурсов'],
25
+ 'участник': ['участник', 'участника', 'участников']
26
+ }
27
+
28
+ class Поток:
29
+ def __init__(здесь, цель = None, имя = None, аргументы = (), именовАргументы = None, после_окончания = None):
30
+ ИА = {}
31
+ if цель is not None:
32
+ ИА['target'] = цель
33
+ if имя is not None:
34
+ ИА['name'] = имя
35
+ if аргументы:
36
+ ИА['args'] = аргументы
37
+ if именовАргументы is not None:
38
+ ИА['kwargs'] = именовАргументы
39
+ if после_окончания is not None:
40
+ ИА['daemon'] = после_окончания
41
+ здесь._thread = threading.Thread(**ИА)
42
+
43
+ def Начать(здесь):
44
+ здесь._thread.start()
45
+
46
+ def Ждать(здесь, время_ожидания = None):
47
+ ИА = {}
48
+ if время_ожидания is not None:
49
+ ИА['timeout'] = время_ожидания
50
+ здесь._thread.join(**kwargs)
51
+
52
+ def Живой(здесь):
53
+ return здесь._thread.is_alive()
54
+
55
+ def Получить_имя(здесь):
56
+ return здесь._thread.getName()
57
+
58
+ def Установить_имя(здесь, имя):
59
+ здесь._thread.setName(имя)
60
+
61
+ def Получить_идентификатор(здесь):
62
+ return здесь._thread.ident
63
+
64
+ def После_окончания(здесь):
65
+ return здесь._thread.daemon
66
+
67
+ def Установить_после_окончания(здесь, после_окончания):
68
+ здесь._thread.daemon = после_окончания
69
+
70
+ def __str__(здесь):
71
+ return f"Поток(имя={здесь.Получить_имя()}, живой={здесь.Живой()})"
72
+
73
+ class Блокование:
74
+ def __init__(здесь):
75
+ здесь._lock = threading.Lock()
76
+
77
+ def Захватить(здесь, блоковать = True, время_ожидания = None):
78
+ ИА = {'block': блоковать}
79
+ if время_ожидания is not None:
80
+ ИА['timeout'] = время_ожидания
81
+ return здесь._lock.acquire(**ИА)
82
+
83
+ def Освободить(здесь):
84
+ здесь._lock.release()
85
+
86
+ def Захвачено(здесь):
87
+ return здесь._lock.locked()
88
+
89
+ def __enter__(здесь):
90
+ здесь.Захватить()
91
+ return здесь
92
+
93
+ def __exit__(здесь, тип_исключения, значение_исключения, трассировка):
94
+ здесь.Освободить()
95
+
96
+ def __str__(здесь):
97
+ return f"Блокование(захвачено={здесь.Захвачено()})"
98
+
99
+ class Повторное_блокование:
100
+ def __init__(здесь):
101
+ здесь._rlock = threading.RLock()
102
+
103
+ def Захватить(здесь, блоковать = True, время_ожидания = None):
104
+ ИА = {'block': блоковать}
105
+ if время_ожидания is not None:
106
+ ИА['timeout'] = время_ожидания
107
+ return здесь._rlock.acquire(**ИА)
108
+
109
+ def Освободить(здесь):
110
+ здесь._rlock.release()
111
+
112
+ def __enter__(здесь):
113
+ здесь.Захватить()
114
+ return здесь
115
+
116
+ def __exit__(здесь, тип_исключения, значение_исключения, трассировка):
117
+ здесь.Освободить()
118
+
119
+ def __str__(здесь):
120
+ return f"Повторное_блокование(владелец={здесь._rlock._owner}, счётчик={здесь._rlock._count})"
121
+
122
+ class Семафор:
123
+ def __init__(здесь, количество = 1):
124
+ ИА = {'value': количество}
125
+ здесь._semaphore = threading.Semaphore(**ИА)
126
+
127
+ def Захватить(здесь, блоковать = True, время_ожидания = None):
128
+ ИА = {'block': блоковать}
129
+ if время_ожидания is not None:
130
+ ИА['timeout'] = время_ожидания
131
+ return здесь._semaphore.acquire(**ИА)
132
+
133
+ def Освободить(здесь):
134
+ здесь._semaphore.release()
135
+
136
+ def __enter__(здесь):
137
+ здесь.Захватить()
138
+ return здесь
139
+
140
+ def __exit__(здесь, тип_исключения, значение_исключения, трассировка):
141
+ здесь.Освободить()
142
+
143
+ def __str__(здесь):
144
+ return f"Семафор(ресурсов={здесь._semaphore._value})"
145
+
146
+ class Ограниченный_семафор(Семафор):
147
+ def __init__(здесь, количество = 1):
148
+ ИА = {'value': количество}
149
+ здесь._semaphore = threading.BoundedSemaphore(**ИА)
150
+
151
+ class Событие:
152
+ def __init__(здесь):
153
+ здесь._event = threading.Event()
154
+
155
+ def Установить(здесь):
156
+ здесь._event.set()
157
+
158
+ def Сбросить(здесь):
159
+ здесь._event.clear()
160
+
161
+ def Активно(здесь):
162
+ return здесь._event.is_set()
163
+
164
+ def Ждать(здесь, время_ожидания = None):
165
+ ИА = {}
166
+ if время_ожидания is not None:
167
+ ИА['timeout'] = время_ожидания
168
+ return здесь._event.wait(**ИА)
169
+
170
+ def __str__(здесь):
171
+ return f"Событие(активно={здесь.Активно()})"
172
+
173
+ class Условие:
174
+ def __init__(здесь, блокование = None):
175
+ ИА = {}
176
+ if блокование is not None:
177
+ ИА['lock'] = блокование._lock if isinstance(блокование, (Блокование, Повторное_блокование)) else блокование
178
+ здесь._condition = threading.Condition(**ИА)
179
+
180
+ def Захватить(здесь):
181
+ return здесь._condition.acquire()
182
+
183
+ def Освободить(здесь):
184
+ здесь._condition.release()
185
+
186
+ def Ждать(здесь, время_ожидания = None):
187
+ ИА = {}
188
+ if время_ожидания is not None:
189
+ ИА['timeout'] = время_ожидания
190
+ return здесь._condition.wait(**ИА)
191
+
192
+ def Уведомить(здесь, количество = 1):
193
+ ИА = {'n': количество}
194
+ здесь._condition.notify(**ИА)
195
+
196
+ def Уведомить_все(здесь):
197
+ здесь._condition.notify_all()
198
+
199
+ def __enter__(здесь):
200
+ здесь.Захватить()
201
+ return здесь
202
+
203
+ def __exit__(здесь, тип_исключения, значение_исключения, трассировка):
204
+ здесь.Освободить()
205
+
206
+ def __str__(здесь):
207
+ return f"Условие(захвачено={здесь._condition._is_owned()})"
208
+
209
+ class Барьер:
210
+ def __init__(здесь, количество, действие = None, время_ожидания = None):
211
+ ИА = {'parties': количество}
212
+ if действие is not None:
213
+ ИА['action'] = действие
214
+ if время_ожидания is not None:
215
+ ИА['timeout'] = время_ожидания
216
+ здесь._barrier = threading.Barrier(**ИА)
217
+
218
+ def Ждать(здесь, время_ожидания = None):
219
+ ИА = {}
220
+ if время_ожидания is not None:
221
+ ИА['timeout'] = время_ожидания
222
+ return здесь._barrier.wait(**ИА)
223
+
224
+ def Сбросить(здесь):
225
+ здесь._barrier.reset()
226
+
227
+ def Прервать(здесь):
228
+ здесь._barrier.abort()
229
+
230
+ def Количество_участников(здесь):
231
+ return здесь._barrier.parties
232
+
233
+ def Количество_ожидающих(здесь):
234
+ return здесь._barrier.n_waiting
235
+
236
+ def Сломан(здесь):
237
+ return здесь._barrier.broken
238
+
239
+ def __str__(здесь):
240
+ return f"Барьер({__Общие_функции__.Склонение_после_числительного(здесь.Количество_ожидающих(), Словарь_склонений['участник'])} из {здесь.Количество_участников()})"
241
+
242
+ class Таймер(Поток):
243
+ def __init__(здесь, интервал, цель, аргументы = (), именовАргументы = None, обратный_вызов = None, аргументыОбрВыз = (), именовАргументыОбрВыз = None):
244
+ ИА = {'interval': интервал, 'function': цель}
245
+ if аргументы:
246
+ ИА['args'] = аргументы
247
+ if именовАргументы is not None:
248
+ ИА['kwargs'] = именовАргументы
249
+ здесь._timer = threading.Timer(**ИА)
250
+ здесь._callback = обратный_вызов
251
+ здесь._callback_args = аргументыОбрВыз
252
+ здесь._callback_kwargs = именовАргументыОбрВыз or {}
253
+
254
+ def Отменить(здесь):
255
+ здесь._timer.cancel()
256
+
257
+ def Завершён(здесь):
258
+ return здесь._timer.finished.is_set()
259
+
260
+ def __str__(здесь):
261
+ return f"Таймер(интервал={здесь._timer.interval}, завершён={здесь.Завершён()})"
262
+
263
+ def Текущий_поток():
264
+ return Поток(цель = lambda: None, имя = threading.current_thread().getName())
265
+
266
+ def Количество_активных_потоков():
267
+ return threading.active_count()
268
+
269
+ def Перечислить_потоки():
270
+ return [Поток(цель = lambda: None, имя = поток.getName()) for поток in threading.enumerate()]
271
+
272
+ def Получить_основной_поток():
273
+ return Поток(цель = lambda: None, имя = threading.main_thread().getName())
@@ -87,14 +87,14 @@ class Соответствие:
87
87
 
88
88
  Флаги = re.RegexFlag
89
89
 
90
- def Создать(шаблон, флаги = 0): рез = re.compile(шаблон, flags=флаги); return Шаблон(re.compile(рез)) if type(рез) == re.Pattern else рез
91
- def Поиск(шаблон, строка, флаги = 0): return re.search(шаблон, строка, flags=флаги)
92
- def СовпадНач(шаблон, строка, флаги = 0): return re.match(шаблон, строка, flags=флаги)
93
- def ПолнСоотв(шаблон, строка, флаги = 0): return re.fullmatch(шаблон, строка, flags=флаги)
94
- def Разбить(шаблон, строка, макс_делений = 0, флаги = 0): return re.split(шаблон, строка, maxsplit=макс_делений, flags=флаги)
95
- def НайтиВсё(шаблон, строка, флаги = 0): return re.findall(шаблон, строка, flags=флаги)
96
- def ИскатьПеречисл(шаблон, строка, флаги = 0): return re.finditer(шаблон, строка, flags=флаги)
97
- def Заменить(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count=количество, flags=флаги)
98
- def ЗаменитьСч(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count=количество, flags=флаги)
90
+ def Создать(шаблон, флаги = 0): рез = re.compile(шаблон, flags = флаги); return Шаблон(re.compile(рез)) if type(рез) == re.Pattern else рез
91
+ def Поиск(шаблон, строка, флаги = 0): return re.search(шаблон, строка, flags = флаги)
92
+ def СовпадНач(шаблон, строка, флаги = 0): return re.match(шаблон, строка, flags = флаги)
93
+ def ПолнСоотв(шаблон, строка, флаги = 0): return re.fullmatch(шаблон, строка, flags = флаги)
94
+ def Разбить(шаблон, строка, макс_делений = 0, флаги = 0): return re.split(шаблон, строка, maxsplit = макс_делений, flags = флаги)
95
+ def НайтиВсё(шаблон, строка, флаги = 0): return re.findall(шаблон, строка, flags = флаги)
96
+ def ИскатьПеречисл(шаблон, строка, флаги = 0): return re.finditer(шаблон, строка, flags = флаги)
97
+ def Заменить(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count = количество, flags = флаги)
98
+ def ЗаменитьСч(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count = количество, flags = флаги)
99
99
  def ЭкранШабл(шаблон): return re.escape(шаблон)
100
100
  def ОчиститьКэш(): return re.purge()
@@ -201,7 +201,7 @@ from io import StringIO as Текстовый_ВВ
201
201
  '__ЛСдвиг__': '__lshift__',
202
202
  '__ПСдвиг__': '__rshift__',
203
203
  '__ПобитИ__': '__and__',
204
- '__ПобитИсклИли__': '__xor__',
204
+ '__ПобитЛибо__': '__xor__',
205
205
  '__ПобитИли__': '__or__',
206
206
  '__АрифмОтр__': '__neg__',
207
207
  '__ОдПлюс__': '__pos__',
@@ -219,7 +219,7 @@ from io import StringIO as Текстовый_ВВ
219
219
  '__Прав_ЛСдвиг__': '__rlshift__',
220
220
  '__Прав_ПСдвиг__': '__rrshift__',
221
221
  '__Прав_И__': '__rand__',
222
- '__Прав_ИсклИли__': '__rxor__',
222
+ '__Прав_Либо__': '__rxor__',
223
223
  '__Прав_Или__': '__ror__',
224
224
  '__Присв_Сложение__': '__iadd__',
225
225
  '__Присв_Вычитание__': '__isub__',
@@ -232,7 +232,7 @@ from io import StringIO as Текстовый_ВВ
232
232
  '__Присв_ЛСдвиг__': '__ilshift__',
233
233
  '__Присв_ПСдвиг__': '__irshift__',
234
234
  '__Присв_И__': '__iand__',
235
- '__Присв_ИсклИли__': '__ixor__',
235
+ '__Присв_Либо__': '__ixor__',
236
236
  '__Присв_Или__': '__ior__',
237
237
  '__Компл__': '__complex__',
238
238
  '__Цел__': '__int__',
@@ -0,0 +1,27 @@
1
+ Настоящая лицензия основана на ценностях и правовых принципах русской культурной традиции и предназначена для обеспечения распространения данного продукта — программного обеспечения, произведения или иного объекта интеллектуальной деятельности (далее — «Продукт») — на условиях свободного использования в рамках этой традиции.
2
+
3
+ Настоящей лицензией заявляется, что Продукт создан представителями Русской нации в рамках расширения её культурного и духовного наследия и предназначен для использования теми, кто разделяет идентичность и ценности Русской нации — исторического и духовного единства великорусской, малорусской и белорусской народностей. Авторы Продукта добровольно передают Продукт в общественное достояние Русской нации, в рамках которого он остаётся свободным для использования всеми представителями Русской нации и людьми, разделяющими ценности и идеалы Русской нации, без ограничений.
4
+
5
+ Настоящий Продукт распространяется на условиях свободного использования: любой пользователь (далее — «Пользователь»), принадлежа к Русской нации или разделяя её ценности и идеалы, вправе использовать Продукт любым способом, включая, но не ограничиваясь: копированием; распространением; модификацией; созданием производных работ; использованием в личных, коммерческих или иных целях. Для использования Продукта не требуется никаких разрешений или уведомлений; пользователь вправе создавать производные работы на основе Продукта без ограничений.
6
+
7
+ Настоящая лицензия не накладывает юридических ограничений на использование Продукта, за исключением соблюдения применимого законодательства в юрисдикции Пользователя. Продукт предоставляется «как есть», без каких-либо гарантий, явных или подразумеваемых, включая, но не ограничиваясь, гарантиями пригодности для конкретной цели, коммерческой ценности или отсутствия дефектов. Ни при каких обстоятельствах авторы не несут ответственность за любой ущерб, прямой или косвенный, возникший в результате использования или невозможности использования Продукта. Пользователь несёт полную ответственность за использование Продукта, включая соблюдение применимых законов, уважение прав третьих лиц, а также прав и интересов Русской нации.
8
+
9
+ =======
10
+
11
+ Ця ліцензія заснована на цінностях і правових засадах руської культурної традиції й призначена для забезпечення поширення цього продукту — програмного забезпечення, твору чи іншого об’єкта інтелектуальної діяльності (далі — «Продукт») — на умовах вільного користування в межах зазначеної традиції.
12
+
13
+ Цією ліцензією стверджується, що Продукт створений представниками Руської нації в межах розбудови її духовної та культурної спадщини, і призначений для користування тими, хто поділяє ідентичність та цінності Руської нації — історичну й духовну єдність великоруської, малоруської та білоруської народностей. Автори Продукту добровільно передають його у громадське надбання Руської нації, в межах якого він залишається вільним для користування усіма представниками Руської нації та особами, що поділяють її цінності та ідеали, без будь-яких обмежень.
14
+
15
+ Цей Продукт поширюється на засадах вільного користування: кожен користувач (далі — «Користувач»), який належить до Руської нації або поділяє її цінності та ідеали, має право використовувати Продукт у будь-який спосіб, включно з, але не обмежуючись: копіюванням, поширенням, модифікацією, створенням похідних творів, використанням у приватних, комерційних або інших цілях. Для користування Продуктом не вимагається жодних дозволів чи повідомлень; Користувач має право створювати похідні твори на основі Продукту без обмежень.
16
+
17
+ Ця ліцензія не накладає правових обмежень на використання Продукту, окрім дотримання чинного законодавства у відповідній юрисдикції. Продукт надається «як є», без жодних гарантій, явних або неявних, включаючи, але не обмежуючись, гарантіями придатності для певної мети, товарної цінності чи відсутності вад. За жодних обставин автори не несуть відповідальності за будь-які збитки, прямі чи опосередковані, що виникли внаслідок використання або неможливості використання Продукту. Користувач несе повну відповідальність за використання Продукту, включаючи дотримання чинного законодавства, повагу до прав третіх осіб, а також прав і інтересів Руської нації.
18
+
19
+ =======
20
+
21
+ Сапраўдная ліцэнзія грунтуецца на каштоўнасцях і прававых прынцыпах рускай культурнай традыцыі і прызначана для забеспячэння распаўсюджвання гэтага прадукта — праграмнага забеспячэння, твора ці іншага аб'екта інтэлектуальнай дзейнасці (далей — «Прадукт») — на ўмовах свабоднага выкарыстання ў рамках гэтай традыцыі.
22
+
23
+ Гэтай ліцэнзіяй заяўляецца, што Прадукт створаны прадстаўнікамі Рускай нацыі ў рамках пашырэння яе культурнай і духоўнай спадчыны і прызначаны для выкарыстання тымі, хто падзяляе ідэнтычнасць і каштоўнасці Рускай нацыі — гістарычнага і духоўнага адзінства вялікарускай, маларускай і беларускай народнасцей. Аўтары Прадукта добраахвотна перадаюць Прадукт у грамадскае надбанне Рускай нацыі, у рамках якога ён застаецца свабодным для выкарыстання ўсімі прадстаўнікамі Рускай нацыі і людзьмі, якія падзяляюць каштоўнасці і ідэалы Рускай нацыі, без абмежаванняў.
24
+
25
+ Гэты Прадукт распаўсюджваецца на ўмовах свабоднага выкарыстання: любы карыстальнік (далей — «Карыстальнік»), які належыць да Рускай нацыі або падзяляе яе каштоўнасці і ідэалы, мае права выкарыстоўваць Прадукт любым спосабам, уключаючы, але не абмяжоўваючыся: капіраваннем; распаўсюджваннем; мадыфікацыяй; стварэннем вытворных прац; выкарыстаннем у асабістых, камерцыйных ці іншых мэтах. Для выкарыстання Прадукта не патрабуецца ніякіх дазволаў або паведамленняў; карыстальнік мае права ствараць вытворныя працы на аснове Прадукта без абмежаванняў.
26
+
27
+ Гэтая ліцэнзія не накладвае юрыдычных абмежаванняў на выкарыстанне Прадукта, за выключэннем выканання прыдатнага заканадаўства ў юрысдыкцыі Карыстальніка. Прадукт прадастаўляецца «як ёсць», без якіх-небудзь гарантый, яўных або невыяўленых, уключаючы, але не абмяжоўваючыся, гарантыямі яго прыдатнасці для пэўнай мэты, камерцыйнай каштоўнасці або адсутнасці дэфектаў. Ні пры якіх абставінах аўтары не нясуць адказнасці за любы ўрон, прамы ці ўскосны, які ўзнік у выніку выкарыстання або немагчымасці выкарыстання Прадукта. Карыстальнік нясе поўную адказнасць за выкарыстанне Прадукта, уключаючы выкананне прыдатных законаў, павагу правоў трэціх асоб, а таксама правоў і інтарэсаў Рускай нацыі.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.2.10
3
+ Version: 1.2.12
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -240,7 +240,7 @@ x = 0
240
240
 
241
241
  ##### Контекстный менеджер
242
242
  ```
243
- ВКонтексте Открыть('Файл.дан', 'r') как файл:
243
+ Используя Открыть('Файл.дан', 'r') как файл:
244
244
  Пока стр := файл.Читать_строку():
245
245
  Вывести(стр.Удалить_по_бокам())
246
246
  ```
@@ -0,0 +1,19 @@
1
+ rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
2
+ rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
+ rupython/__Общие_функции__.py,sha256=MH9QLcXqeFmpOS5_N8P5wA5eCYutlHRc7YUatn3CUIk,1255
4
+ rupython/Преобразователь.py,sha256=ZRTJnKOLG-ckVifnKQQwAKyDCKo4j8qHbyIlwOAbTD4,48431
5
+ rupython/Модули/Асинхр.py,sha256=Tzn_JzxhcfXTOEBxoaTTt6YmhkvKM92uSKmw6Kng-mE,9125
6
+ rupython/Модули/БД.py,sha256=_YMD2yLo9fmHqp7bodiqe8s6gSQN2sjFGoxwoKZ67dw,29237
7
+ rupython/Модули/ДатаВремя.py,sha256=8S1ss-Ow2gXDLMEBEE4jQmONJ1frwNotIS0jSuezYj0,25571
8
+ rupython/Модули/Коллекции.py,sha256=csJKFIEJhq_wW7o7eHEFbU4nXlfaGC9jzBxfClhM6Dg,23154
9
+ rupython/Модули/Куча.py,sha256=dhvdf0nhk3rX1jwvuXg02Z7AiqnDEi-62EYY4TNWm3M,3273
10
+ rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
11
+ rupython/Модули/Очередь.py,sha256=9-A2DOQe2m79EsysDOhup_IG3D2iLBdj7iTY6RO7L-s,7846
12
+ rupython/Модули/Потоки.py,sha256=2TwXkg-Vd0yDJPIt_PkfnDz01bsUsBICI0YvZDUPpgI,11342
13
+ rupython/Модули/РегВыр.py,sha256=lLUyF7AJoe0XPG2KdS2TlfOUEmcjxMqwyeVR7TQQHys,6365
14
+ rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
15
+ rupython-1.2.12.dist-info/LICENSE,sha256=vTQDUsS-xxBMZEA2avkNBOGb58hRM-WHr8Getk-XTqQ,11780
16
+ rupython-1.2.12.dist-info/METADATA,sha256=YnWjc3Vy_Hf8TfcV30DG5vIh70ubYKdiv4FTrxLk3jU,30169
17
+ rupython-1.2.12.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
18
+ rupython-1.2.12.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
19
+ rupython-1.2.12.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- Русским людям от русских людей.
@@ -1,15 +0,0 @@
1
- rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
2
- rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
- rupython/__Общие_функции__.py,sha256=eiDtxw8MVlZ8rZZC2N-NkYqmf2F-XCczHubUnzVKWJA,856
4
- rupython/Преобразователь.py,sha256=mF6rQPRqI4k1yhFMO8WQ-166s_NsIyY2F8DxK8uACQs,48449
5
- rupython/Модули/БД.py,sha256=DBJTQKZJMGOU3uQ0RbuOoVa0VdBZ-lRnIiiSubYnIc8,28725
6
- rupython/Модули/ДатаВремя.py,sha256=YdpACxtHXt57zV7uYpZJZeH3T4bMd6orud-Y34DqWTI,25087
7
- rupython/Модули/Коллекции.py,sha256=pJ1L38_8lF9VRvXQhUPPGu49tJkYlpR_3sC-ruxYsCU,16830
8
- rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
9
- rupython/Модули/РегВыр.py,sha256=T3yxVP-B5AwAzbUTjWpog3HCzRTGLZ58CEQpfA-0dsY,6341
10
- rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
11
- rupython-1.2.10.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
12
- rupython-1.2.10.dist-info/METADATA,sha256=RkcqY-F_MJ80003aQtGOyy2IANUdPimXE6b0apZ9-0M,30171
13
- rupython-1.2.10.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
14
- rupython-1.2.10.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
15
- rupython-1.2.10.dist-info/RECORD,,