rupython 1.0.12__py3-none-any.whl → 1.1.0__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.
@@ -1,43 +1,19 @@
1
- from ctypes import c_char, pythonapi, py_object
1
+ import gc
2
+ import ctypes
3
+
2
4
  import sys as Система
3
5
  import os as ОС
4
6
 
5
7
  from _io import BufferedReader, BufferedWriter, TextIOWrapper
6
8
 
7
- Адреса_памяти_классов = {}
8
-
9
- def Добавить_поле(класс, название, значение, функция = True):
10
- def Получить_память(где):
11
- if где in Адреса_памяти_классов: return Адреса_памяти_классов[где]
12
- else:
13
- адрес = memoryview((c_char * type(где).__sizeof__(где)).from_address(id(где))).cast('c').cast('P')
14
- Адреса_памяти_классов[где] = адрес
15
- return адрес
16
-
17
- def Установить_поле(класс, поле, значение):
18
- смещение_флагов = [*Получить_память(int)].index(int.__flags__)
19
- флаги = класс.__flags__
20
- память_класса = Получить_память(класс)
21
- if Система.version_info[0:2] <= (3, 9): память_класса[смещение_флагов] |= 1 << 9
22
- elif Система.version_info[0:2] >= (3, 10): память_класса[смещение_флагов] &= ~(1 << 8)
23
- setattr(класс, поле, значение)
24
- память_класса[смещение_флагов] = флаги
25
- pythonapi.PyType_Modified(py_object(класс))
26
-
27
- def Новая_функция(функция, **параметры):
28
- код = функция.__code__
29
- копия = type(функция)(
30
- код.replace(co_consts = код.co_consts + tuple((ключ, значение) for ключ, значение in параметры.items())),
31
- функция.__globals__,
32
- name=функция.__name__,
33
- closure=функция.__closure__
34
- )
35
- копия.__defaults__ = функция.__defaults__
36
- копия.__kwdefaults__ = функция.__kwdefaults__
37
- копия.__qualname__ = функция.__qualname__
38
- return копия
39
-
40
- Установить_поле(класс, название, Новая_функция(значение) if функция else значение)
9
+ def Установить_поле(класс, атрибут, значение):
10
+ сл = gc.get_referents(класс.__dict__)[0]
11
+ сл[атрибут] = значение
12
+ if callable(значение):
13
+ сл[атрибут].__name__ = значение.__name__
14
+ сл[атрибут].__qualname__ = значение.__qualname__
15
+ сл[атрибут].__kwdefaults__ = значение.__kwdefaults__
16
+ ctypes.pythonapi.PyType_Modified(ctypes.py_object(класс))
41
17
 
42
18
  Встроенные_поля = {
43
19
  ('str', 'bytes', 'bytearray'): {
@@ -186,27 +162,38 @@ for классы, таблица in Встроенные_поля.items():
186
162
  замещающая_функция += ' ИА["' + зам_арг[1] + '"] = ' + str(знач_зам) + '[ИА["' + зам_арг[1] + '"]]\n'
187
163
  замещающая_функция += ' return ' + класс + '.' + название + '(*ПА, **ИА)'
188
164
  exec(замещающая_функция)
189
- exec("Добавить_поле(" + класс + ", '" + замена[0] + "', __" + класс + "_" + название + "__)")
165
+ exec("Установить_поле(" + класс + ", '" + замена[0] + "', __" + класс + "_" + название + "__)")
190
166
  exec('del __' + класс + '_' + название + '__')
191
167
  else:
192
168
  if название[0] == '.':
193
- eval("Добавить_поле(" + класс + ", '" + замена + "', " + класс + название + ", False)")
169
+ eval("Установить_поле(" + класс + ", '" + замена + "', " + класс + название + ")")
194
170
  else:
195
- eval("Добавить_поле(" + класс + ", '" + замена + "', lambda *ПА, **ИА: " + класс + "." + название + "(*ПА, **ИА))")
171
+ eval("Установить_поле(" + класс + ", '" + замена + "', lambda *ПА, **ИА: " + класс + "." + название + "(*ПА, **ИА))")
196
172
 
197
173
  Система.path.insert(0, ОС.path.dirname(__file__) + '/Модули')
198
174
 
175
+ def Заменить_преобразование_в_строку(класс, функция):
176
+ class Объект_типа(ctypes.Structure): pass
177
+ Объект_типа._fields_ = [
178
+ ('', ctypes.c_ssize_t * 17), ('tp_str', ctypes.CFUNCTYPE(ctypes.py_object, ctypes.py_object))
179
+ ]
180
+ def Выполнить(класс, функция):
181
+ ф = ctypes.CFUNCTYPE(ctypes.py_object, ctypes.py_object)(функция)
182
+ Объект_типа._fields_.append(ф)
183
+ setattr(Объект_типа.from_address(id(класс)), 'tp_str', Объект_типа._fields_[-1])
184
+ Выполнить(класс, функция)
185
+
199
186
  Обёртка__Вещ_в_стр = lambda здесь: Вещ_в_стр(здесь).replace('.', ',').replace('inf', 'Бскн')
200
187
  Вещ_в_стр = float.__str__
201
- Добавить_поле(float, '__str__', Обёртка__Вещ_в_стр)
188
+ Заменить_преобразование_в_строку(float, Обёртка__Вещ_в_стр)
202
189
 
203
190
  Обёртка__Логич_в_стр = lambda здесь: Логич_в_стр(здесь).replace('True', 'Да').replace('False', 'Нет')
204
191
  Логич_в_стр = bool.__str__
205
- Добавить_поле(bool, '__str__', Обёртка__Логич_в_стр)
192
+ Заменить_преобразование_в_строку(bool, Обёртка__Логич_в_стр)
206
193
 
207
194
  Обёртка__Пусто_в_стр = lambda здесь: Пусто_в_стр(здесь).replace('None', 'Пусто')
208
195
  Пусто_в_стр = type(None).__str__
209
- Добавить_поле(type(None), '__str__', Обёртка__Пусто_в_стр)
196
+ Заменить_преобразование_в_строку(type(None), Обёртка__Пусто_в_стр)
210
197
 
211
198
  def Проверить_существование(код, местн, общ):
212
199
  try: eval(код, местн, общ)
@@ -438,19 +438,22 @@ def Проверить_соответствие_слов(слова, путь_к
438
438
 
439
439
  for сл in ('Подключить', 'Если', 'Иначе'):
440
440
  for поз in [i for i, x in enumerate(слова) if x[1] == сл]:
441
- if поз > 0 and слова[поз - 1][1] not in ('\n', '\t'):
441
+ if поз > 0 and слова[поз - 1][0] not in (4, 5, 6):
442
+ print(слова[поз])
443
+ print(слова[поз - 1])
444
+ print(слова)
442
445
  Вывести_исключение(сл); return False
443
446
  сл_ = сл.lower()
444
447
  for поз in [i for i, x in enumerate(слова) if x[1] == сл_]:
445
- if поз == 0 or слова[поз - 1][1] in ('\n', '\t'):
448
+ if поз == 0 or слова[поз - 1][0] in (4, 5, 6):
446
449
  Вывести_исключение(сл_); return False
447
450
 
448
451
  for поз in [i for i, x in enumerate(слова) if x[1] == 'Вернуть']:
449
- if поз == len(слова) - 1 or слова[поз + 1][1] == '\n':
452
+ if поз == len(слова) - 1 or слова[поз + 1][0] == 4:
450
453
  Вывести_исключение('Вернуть'); return False
451
454
 
452
455
  for поз in [i for i, x in enumerate(слова) if x[1] == 'Возврат']:
453
- if поз != len(слова) - 1 and слова[поз + 1][1] != '\n':
456
+ if поз != len(слова) - 1 and слова[поз + 1][0] != 4:
454
457
  Вывести_исключение('Возврат'); return False
455
458
 
456
459
  return True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.0.12
3
+ Version: 1.1.0
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -12,13 +12,6 @@ License-File: LICENSE
12
12
  * Повышение производительности труда работников, выполняющих задачи автоматизации процессов и формализации алгоритмов, за счёт применения лексики на родном им языке, что априори повышает усвоение и читаемость кода.
13
13
  * Упрощение освоения навыков алгоритмизации и составления компьютерных программ учащимися путём устранения искусственного препятствия в виде необходимости оперировать лексикой иностранного языка.
14
14
 
15
- Код модулей Русского Питона размещается в файлах с расширением **.крп**. Для интеграции в операционную систему необходимо ассоциировать эти файлы с транслятором. Например, для ОС Windows это выполняется следующими консольными командами:
16
-
17
- ```
18
- assoc .крп = "Код на Русском Питоне"
19
- ftype "Код на Русском Питоне"=py -m rupython "%%1" %%*
20
- ```
21
-
22
15
  Приложения на Русском Питоне могут использовать все возможности оригинального Python, включая всё богатство подключаемых пакетов и библиотек. Код может быть написан на обоих вариантах языка.
23
16
 
24
17
  ### Установка
@@ -31,6 +24,13 @@ ftype "Код на Русском Питоне"=py -m rupython "%%1" %%*
31
24
 
32
25
  `pip install rupython --break-system-packages`
33
26
 
27
+ Код модулей Русского Питона размещается в файлах с расширением **.крп**. Для интеграции в операционную систему необходимо ассоциировать эти файлы с транслятором. Например, для ОС Windows это выполняется следующими консольными командами:
28
+
29
+ ```
30
+ assoc .крп = "Код на Русском Питоне"
31
+ ftype "Код на Русском Питоне"=py -m rupython "%%1" %%*
32
+ ```
33
+
34
34
  Исходный код размещён тут: https://github.com/russkiy/rupython
35
35
 
36
36
  ### Примеры кода
@@ -0,0 +1,11 @@
1
+ rupython/__main__.py,sha256=BxtsIK8PJuOOGVDKxqoscwJjjWWhZts7adicFuwUL6k,540
2
+ rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
+ rupython/Преобразователь.py,sha256=0GexhZsJhFp1X00JKA3VOVXsVJYf0LM0JpaJlmFKnSU,36460
4
+ rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
5
+ rupython/Модули/РегВыр.py,sha256=yeXYfeDF2qw4DSKVdZVSFInMUW52U7Nq_KOJKvm4XnM,6349
6
+ rupython/Модули/Случ.py,sha256=oeVdSdFVb4X_T-nX2P7NSIhise1zUPIS4lk7h-67XSg,2689
7
+ rupython-1.1.0.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
8
+ rupython-1.1.0.dist-info/METADATA,sha256=WYj7XgAYUDznHWBZnMmdKxdX9mBlmiTNDdT426XpC3U,13869
9
+ rupython-1.1.0.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
10
+ rupython-1.1.0.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
11
+ rupython-1.1.0.dist-info/RECORD,,
@@ -1,11 +0,0 @@
1
- rupython/__main__.py,sha256=BxtsIK8PJuOOGVDKxqoscwJjjWWhZts7adicFuwUL6k,540
2
- rupython/__Заголовочный_код__.py,sha256=rxsBd0tIe9rnx5U9hG2B2Vqdj8m6FQ6yJc7WDL4ySI8,11923
3
- rupython/Преобразователь.py,sha256=JJ_JOmbazEdGHN9_2JwSbLR2e5x3W1WGvPnwYxEi1jg,36347
4
- rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
5
- rupython/Модули/РегВыр.py,sha256=yeXYfeDF2qw4DSKVdZVSFInMUW52U7Nq_KOJKvm4XnM,6349
6
- rupython/Модули/Случ.py,sha256=oeVdSdFVb4X_T-nX2P7NSIhise1zUPIS4lk7h-67XSg,2689
7
- rupython-1.0.12.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
8
- rupython-1.0.12.dist-info/METADATA,sha256=ohCbOHUcAmTQm4k1J_Ak-SYFHvsRrYSvFEu9fyeHVqY,13870
9
- rupython-1.0.12.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
10
- rupython-1.0.12.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
11
- rupython-1.0.12.dist-info/RECORD,,