@@ -121,189 +121,6 @@ def _eval(self, expr):
121121 return self ._r ._eval (expr )
122122
123123
124- class View :
125- def __init__ (self , obj , ref , evaluator ):
126- if type (obj ) is View :
127- obj = obj ._get_viewed_object ()
128- object .__setattr__ (self , "_obj" , obj )
129- object .__setattr__ (self , "_ref" , ref )
130- object .__setattr__ (self , "_eval" , evaluator )
131-
132- def _get_viewed_object (self ):
133- return object .__getattribute__ (self , "_obj" )
134-
135- @property
136- def __class__ (self ):
137- # return type("View",(self._obj.__class__,),{})
138- return self ._obj .__class__
139-
140- def get_value (self , key = None ):
141- if not hasattr (self ._obj , "keys" ) and not hasattr (self ._obj , "_xofields" ):
142- raise ValueError ("get_value not supported for this object" )
143-
144- if key is None :
145- if hasattr (self ._obj , "_xofields" ):
146- return {kk : self .get_value (kk ) for kk in self ._obj ._xofields }
147- else :
148- return {kk : self .get_value (kk ) for kk in dir (self ._obj )}
149-
150- if hasattr (self ._obj , "__iter__" ):
151- return self ._obj [key ]
152- else :
153- return getattr (self ._obj , key )
154-
155- def get_expr (self , key = None , index = None ):
156- if index is not None :
157- if key is None :
158- raise ValueError ('`key` must be provided when `index` is provided.' )
159- return getattr (self ._ref , key )[index ]._expr
160-
161- if not hasattr (self ._obj , "keys" ) and not hasattr (self ._obj , "_xofields" ):
162- # is an array
163- return self ._ref [key ]._expr
164-
165- if key is None :
166- if hasattr (self ._obj , "_xofields" ):
167- return {kk : self .get_expr (kk ) for kk in self ._obj ._xofields }
168- else :
169- return {kk : self .get_expr (kk ) for kk in dir (self ._obj )}
170-
171- if hasattr (self ._obj , "__iter__" ):
172- return self ._ref [key ]._expr
173- else :
174- return getattr (self ._ref , key )._expr
175-
176-
177- def get_info (self , key = None ):
178- if not hasattr (self ._obj , "keys" ) and not hasattr (self ._obj , "_xofields" ):
179- raise ValueError ("get_info not supported for this object" )
180-
181- if key is None :
182- print ("Element of type: " , self ._obj .__class__ .__name__ )
183- self .get_table ().show (header = True , max_col_width = 100 )
184- else :
185- if hasattr (self ._obj , "__iter__" ):
186- return self ._ref [key ]._info ()
187- else :
188- return getattr (self ._ref , key )._info ()
189-
190- def get_table (self ):
191-
192- if not hasattr (self ._obj , "keys" ) and not hasattr (self ._obj , "_xofields" ):
193- raise ValueError ("get_table not supported for this object" )
194-
195- out_expr = self .get_expr ()
196- out_value = self .get_value ()
197-
198- value = [out_value [kk ] for kk in out_expr .keys ()]
199- for ii , vv in enumerate (value ):
200- if not (np .isscalar (vv )):
201- value [ii ] = str (vv )
202-
203- data = {
204- "name" : np .array (list (out_expr .keys ()), dtype = object ),
205- "value" : np .array (value , dtype = object ),
206- "expr" : np .array (
207- [str (out_expr [kk ]) for kk in out_expr .keys ()], dtype = object
208- ),
209- }
210- return Table (data )
211-
212- def __getattr__ (self , key ):
213- val = getattr (self ._obj , key )
214- if hasattr (val , "__setitem__" ):
215- return View (val , getattr (self ._ref , key ), self ._eval )
216- else :
217- return val
218-
219- def __getitem__ (self , key ):
220- val = self ._obj [key ]
221- if hasattr (val , "__setitem__" ):
222- return View (val , self ._ref [key ], self ._eval )
223- else :
224- return val
225-
226- def __setattr__ (self , key , value ):
227- if isinstance (value , str ):
228- if hasattr (self ._obj , "_noexpr_fields" ) and key in self ._obj ._noexpr_fields :
229- value = value
230- else :
231- value = self ._eval (value )
232- setattr (self ._ref , key , value )
233-
234- def __setitem__ (self , key , value ):
235- if isinstance (value , str ):
236- value = self ._eval (value )
237- self ._ref [key ] = value
238-
239- def __repr__ (self ):
240- return f"View of { self ._obj !r} "
241-
242- def __dir__ (self ):
243- return dir (self ._obj )
244-
245- def __len__ (self ):
246- return len (self ._obj )
247-
248- def __add__ (self , other ):
249- return self ._obj + other
250-
251- def __radd__ (self , other ):
252- return other + self ._obj
253-
254- def __sub__ (self , other ):
255- return self ._obj - other
256-
257- def __rsub__ (self , other ):
258- return other - self ._obj
259-
260- def __mul__ (self , other ):
261- return self ._obj * other
262-
263- def __rmul__ (self , other ):
264- return other * self ._obj
265-
266- def __truediv__ (self , other ):
267- return self ._obj / other
268-
269- def __rtruediv__ (self , other ):
270- return other / self ._obj
271-
272- def __floordiv__ (self , other ):
273- return self ._obj // other
274-
275- def __rfloordiv__ (self , other ):
276- return other // self ._obj
277-
278- def __mod__ (self , other ):
279- return self ._obj % other
280-
281- def __rmod__ (self , other ):
282- return other % self ._obj
283-
284- def __pow__ (self , other ):
285- return self ._obj ** other
286-
287- def __rpow__ (self , other ):
288- return other ** self ._obj
289-
290- def __eq__ (self , value : object ) -> bool :
291- return self ._obj == value
292-
293- def __ne__ (self , value : object ) -> bool :
294- return self ._obj != value
295-
296- def __lt__ (self , value : object ) -> bool :
297- return self ._obj < value
298-
299- def __le__ (self , value : object ) -> bool :
300- return self ._obj <= value
301-
302- def __gt__ (self , value : object ) -> bool :
303- return self ._obj > value
304-
305- def __ge__ (self , value : object ) -> bool :
306- return self ._obj >= value
307124
308125
309126class MadxEnv :
0 commit comments