10
0
mirror of https://gitlab.com/scemama/irpf90.git synced 2024-06-14 01:05:20 +02:00
irpf90/src/module.py

71 lines
2.0 KiB
Python
Raw Normal View History

2009-09-08 16:00:46 +02:00
#!/usr/bin/python
from irpf90_t import *
from variable import *
from variables import variables
class Fmodule(object):
def __init__(self,text,filename):
self.text = text
self.name = "%s_mod"%(filename[:-6].lower())
def is_main(self):
if '_is_main' not in self.__dict__:
buffer = filter(lambda x: isinstance(x[1],Program),self.text)
self._is_main = (buffer != [])
return self._is_main
is_main = property(is_main)
def variables(self):
if '_variables' not in self.__dict__:
from variables import variables
name = self.name
self._variables = filter(lambda x: variables[x].fmodule == name, variables)
return self._variables
variables = property(variables)
def head(self):
if '_head' not in self.__dict__:
self._head = None
return self._head
head = property(head)
def needed_vars(self):
if '_needed_vars' not in self.__dict__:
result = map(lambda x: variables[x].needs,self.variables)
result = make_single ( flatten(result) )
self._needed_vars = result
return self._needed_vars
needed_vars = property(needed_vars)
def generated_text(self):
if '_generated_text' not in self.__dict__:
self._generated_text = None
return self._generated_text
generated_text = property(generated_text)
def residual_text(self):
if '_residual_text' not in self.__dict__:
self._residual_text = None
return self._residual_text
residual_text = property(residual_text)
def needed_modules(self):
if '_needed_modules' not in self.__dict__:
buffer = filter(lambda x: isinstance(x,Use), self.generated_text)
buffer = map(lambda x: x.text.split()[1].lower(), buffer)
self._needed_modules = make_single(buffer)
return self._needed_modules
needed_modules = property(needed_modules)
if __name__ == '__main__':
from parsed_text import parsed_text
for filename, text in parsed_text:
if filename == 'electrons.irp.f':
x = Fmodule(text,filename)
break
print x.needed_vars
print x.is_main