Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/jedi/inference/compiled/__init__.py: 30%
37 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-20 06:09 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-20 06:09 +0000
1# This file also re-exports symbols for wider use. We configure mypy and flake8
2# to be aware that this file does this.
4from jedi.inference.compiled.value import CompiledValue, CompiledName, \
5 CompiledValueFilter, CompiledValueName, create_from_access_path
6from jedi.inference.base_value import LazyValueWrapper
9def builtin_from_name(inference_state, string):
10 typing_builtins_module = inference_state.builtins_module
11 if string in ('None', 'True', 'False'):
12 builtins, = typing_builtins_module.non_stub_value_set
13 filter_ = next(builtins.get_filters())
14 else:
15 filter_ = next(typing_builtins_module.get_filters())
16 name, = filter_.get(string)
17 value, = name.infer()
18 return value
21class ExactValue(LazyValueWrapper):
22 """
23 This class represents exact values, that makes operations like additions
24 and exact boolean values possible, while still being a "normal" stub.
25 """
26 def __init__(self, compiled_value):
27 self.inference_state = compiled_value.inference_state
28 self._compiled_value = compiled_value
30 def __getattribute__(self, name):
31 if name in ('get_safe_value', 'execute_operation', 'access_handle',
32 'negate', 'py__bool__', 'is_compiled'):
33 return getattr(self._compiled_value, name)
34 return super().__getattribute__(name)
36 def _get_wrapped_value(self):
37 instance, = builtin_from_name(
38 self.inference_state, self._compiled_value.name.string_name).execute_with_values()
39 return instance
41 def __repr__(self):
42 return '<%s: %s>' % (self.__class__.__name__, self._compiled_value)
45def create_simple_object(inference_state, obj):
46 """
47 Only allows creations of objects that are easily picklable across Python
48 versions.
49 """
50 assert type(obj) in (int, float, str, bytes, slice, complex, bool), repr(obj)
51 compiled_value = create_from_access_path(
52 inference_state,
53 inference_state.compiled_subprocess.create_simple_object(obj)
54 )
55 return ExactValue(compiled_value)
58def get_string_value_set(inference_state):
59 return builtin_from_name(inference_state, 'str').execute_with_values()
62def load_module(inference_state, dotted_name, **kwargs):
63 # Temporary, some tensorflow builtins cannot be loaded, so it's tried again
64 # and again and it's really slow.
65 if dotted_name.startswith('tensorflow.'):
66 return None
67 access_path = inference_state.compiled_subprocess.load_module(dotted_name=dotted_name, **kwargs)
68 if access_path is None:
69 return None
70 return create_from_access_path(inference_state, access_path)