コード例 #1
0
 def _ImportFrom(self, t):
     if t.level > 0:
         self._unsupported_syntax(t)
     self.fill('use ')
     self.write(t.module)
     self.write(', only : ')
     interleave(lambda: self.write(', '), self.dispatch, t.names)
コード例 #2
0
 def _Import(self, t):
     names = [
         name for name in t.names
         if name.name not in ('numpy', 'static_typing', 'typing')
     ]
     if not names:
         return
     self.fill('use ')
     # print([typed_astunparse.unparse(_) for _ in names])
     interleave(lambda: self.write(', '), self.dispatch, names)
コード例 #3
0
 def _ImportFrom(self, t):
     if t.level > 0:
         self._unsupported_syntax(t)
     self.fill('use ')
     if has_annotation(t, 'nature'):
         self.write(', ')
         self.write(get_annotation(t, 'nature'))
         self.write(' ::')
     self.write(' ')
     self.write(t.module)
     self.write(', only : ')
     interleave(lambda: self.write(', '), self.dispatch, t.names)
コード例 #4
0
 def _Subscript(self, t):
     val = t.value
     unparsed_val = horast.unparse(val).strip()
     if unparsed_val in PYTHON_FORTRAN_INTRINSICS:
         new_val = PYTHON_FORTRAN_INTRINSICS[unparsed_val]
         if isinstance(new_val, collections.abc.Callable):
             self.dispatch(new_val(t))
             return
         t = copy.copy(t)
         t.value = typed_ast3.Name(id=new_val)
     if isinstance(val, typed_ast3.Attribute) and isinstance(val.value, typed_ast3.Name) \
             and val.value.id == 'Fortran':
         attr = val.attr
         if attr == 'file_handles':
             self.dispatch(t.slice)
         elif attr == 'TypeByNamePrefix':
             base_type, letter_ranges = t.slice.value.elts
             assert isinstance(letter_ranges,
                               typed_ast3.Tuple), type(letter_ranges)
             # _LOG.warning('%s', type(letter_ranges))
             # assert False, (type(letter_ranges), letter_ranges)
             self.dispatch_var_type(base_type)
             self.write(' (')
             interleave(lambda: self.write(', '), lambda _: _.s[1:-1],
                        letter_ranges.elts)
             self.write(')')
         else:
             raise NotImplementedError(
                 'Fortran.{}[] cannot be handled yet.'.format(attr))
         return
     self.dispatch(t.value)
     self.write("(")
     self.dispatch(t.slice)
     # if isinstance(t.slice, typed_ast3.Index):
     # elif isinstance(t.slice, typed_ast3.Slice):
     #    raise NotImplementedError('not yet implemented: {}'.format(typed_astunparse.dump(t)))
     # elif isinstance(t.slice, typed_ast3.ExtSlice):
     #    raise NotImplementedError('not yet implemented: {}'.format(typed_astunparse.dump(t)))
     # else:
     #    raise ValueError()
     self.write(")")
コード例 #5
0
 def _Assign(self, t):
     metadata = getattr(t, 'fortran_metadata', {})
     if get_annotation(t, 'is_nullification'):
         self.fill('nullify(')
         interleave(lambda: self.write(', '), self.dispatch, t.targets)
         self.write(')')
         return
     if metadata.get('is_allocation', False):
         self.fill('allocate(')
         for i, target in enumerate(t.targets):
             if i > 0:
                 self.write(', ')
             self.dispatch(target)
             self.write('(')
             self.dispatch(t.value.args[0])
             self.write(')')
         self.write(')')
         return
     if metadata.get('is_pointer_assignment', False):
         self.fill()
         assert len(t.targets) == 1
         self.dispatch(t.targets[0])
         self.write(" => ")
         self.dispatch(t.value)
         return
     self.fill()
     if t.type_comment:
         self.dispatch_var_type(t.resolved_type_comment)
     self._write_assignment_metadata(metadata, first=t.type_comment is None)
     if t.type_comment or metadata:
         self.write(' :: ')
     assert len(t.targets) == 1
     self.dispatch(t.targets[0])
     if t.value:
         self.write(" = ")
         self.dispatch(t.value)
コード例 #6
0
 def _ExtSlice(self, t):
     interleave(lambda: self.write(', '), self.dispatch, t.dims)
コード例 #7
0
 def _Tuple(self, t):
     interleave(lambda: self.write(', '), self.dispatch, t.elts)
コード例 #8
0
 def _List(self, t):
     self.write('(/ ')
     interleave(lambda: self.write(", "), self.dispatch, t.elts)
     self.write(' /)')
コード例 #9
0
 def _JoinedStr(self, t):
     self.write('format(')
     interleave(lambda: self.write(', '), self.dispatch, t.values)
     self.write(')')
コード例 #10
0
 def _Delete(self, t):
     self.fill('deallocate (')
     interleave(lambda: self.write(', '), self.dispatch, t.targets)
     self.write(')')
コード例 #11
0
 def _BoolOp(self, t):
     self.write("(")
     s = " %s " % self.boolops[t.op.__class__.__name__]
     interleave(lambda: self.write(s), self.dispatch, t.values)
     self.write(")")