Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • toolbox/WindEnergyToolbox
  • tlbl/WindEnergyToolbox
  • cpav/WindEnergyToolbox
  • frza/WindEnergyToolbox
  • borg/WindEnergyToolbox
  • mmpe/WindEnergyToolbox
  • ozgo/WindEnergyToolbox
  • dave/WindEnergyToolbox
  • mmir/WindEnergyToolbox
  • wluo/WindEnergyToolbox
  • welad/WindEnergyToolbox
  • chpav/WindEnergyToolbox
  • rink/WindEnergyToolbox
  • shfe/WindEnergyToolbox
  • shfe1/WindEnergyToolbox
  • acdi/WindEnergyToolbox
  • angl/WindEnergyToolbox
  • wliang/WindEnergyToolbox
  • mimc/WindEnergyToolbox
  • wtlib/WindEnergyToolbox
  • cmos/WindEnergyToolbox
  • fabpi/WindEnergyToolbox
22 results
Select Git revision
Show changes
Showing with 2592 additions and 180 deletions
'''
Created on 28. jul. 2017
@author: mmpe
'''
import os
import subprocess
def _run_git_cmd(cmd, git_repo_path=None):
git_repo_path = git_repo_path or os.getcwd()
if not os.path.isdir(os.path.join(git_repo_path, ".git")):
raise Warning("'%s' does not appear to be a Git repository." % git_repo_path)
try:
process = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
cwd=os.path.abspath(git_repo_path))
stdout,stderr = process.communicate()
if process.returncode != 0:
raise EnvironmentError("%s\n%s"%(stdout, stderr))
return stdout.strip()
except EnvironmentError as e:
raise e
raise Warning("unable to run git")
def get_git_branch(git_repo_path=None):
cmd = ["git", "rev-parse", "--abbrev-ref", "HEAD"]
return _run_git_cmd(cmd, git_repo_path)
def get_git_version(git_repo_path=None):
cmd = ["git", "describe", "--tags", "--dirty", "--always"]
# format it will return: 'v0.1.0-12-g22668f0'
v = _run_git_cmd(cmd, git_repo_path)
# convert to something Pypi likes: 0.1.2.dev3.123456
# see also https://setuptools.pypa.io/en/latest/userguide/distribution.html
# and/or PEP440 https://peps.python.org/pep-0440/
v = v.replace('-', '.post', 1)
return v
def get_tag(git_repo_path=None, verbose=False):
tag = _run_git_cmd(['git', 'describe', '--tags', '--always', '--abbrev=0'],
git_repo_path)
if verbose:
print(tag)
return tag
def set_tag(tag, push, git_repo_path=None):
_run_git_cmd(["git", "tag", tag], git_repo_path)
if push:
_run_git_cmd(["git", "push"], git_repo_path)
_run_git_cmd(["git", "push", "--tags"], git_repo_path)
def update_git_version(version_module, git_repo_path=None):
"""Update <version_module>.__version__ to git version"""
version_str = get_git_version(git_repo_path)
assert os.path.isfile(version_module.__file__)
with open(version_module.__file__, "w") as fid:
fid.write("__version__ = '%s'" % version_str)
# ensure file is written, closed and ready
with open(version_module.__file__) as fid:
fid.read()
return version_str
def write_vers(vers_file='wetb/__init__.py', repo=None, skip_chars=1):
"""Writes out version string as follows:
"last tag"-("nr commits since tag")-("branch name")-("hash commit")
and where nr of commits since last tag is only included if >0,
branch name is only inlcuded when not on master,
and hash commit is only included when not at a tag (when nr of commits > 0)
"""
if not repo:
repo = os.getcwd()
version_long = get_git_version(repo)
branch = get_git_branch(repo)
verel = version_long.split('-')
# tag name
version = verel[0][skip_chars:]
# number of commits since last tag, only if >0
nr_commits = 0
if len(verel) > 1:
try:
nr_commits = int(verel[1])
except ValueError:
nr_commits = -1
if nr_commits > 0:
version += '-' + verel[1]
# branch name, only when NOT on master
if branch != 'master':
version += '-' + branch
# hash commit, only if not at tag
if len(verel) > 2 and nr_commits > 0:
# first character on the hash is always a g (not part of the hash)
version += '-' + verel[2][1:]
# if "-HEAD" is added to the version, which pypi does not like:
if version.endswith('-HEAD'):
version = version[:-5]
print(version_long)
print('Writing version: {} in {}'.format(version, vers_file))
with open(vers_file, 'r') as f:
lines = f.readlines()
for n, l in enumerate(lines):
if l.startswith('__version__'):
lines[n] = "__version__ = '{}'\n".format(version)
for n, l in enumerate(lines):
if l.startswith('__release__'):
lines[n] = "__release__ = '{}'\n".format(version)
with open(vers_file, 'w') as f:
f.write(''.join(lines))
return version
def rename_dist_file():
for f in os.listdir('dist'):
if f.endswith('whl'):
split = f.split('linux')
new_name = 'manylinux1'.join(split)
old_path = os.path.join('dist', f)
new_path = os.path.join('dist', new_name)
os.rename(old_path, new_path)
def main():
"""Example of how to run (pytest-friendly)"""
if __name__ == '__main__':
pass
main()
File added
[build-system]
requires = [
"setuptools>=60",
"setuptools-scm>=8.0"]
build-backend = "setuptools.build_meta"
[project]
name = "wetb"
authors = [{name="DTU Wind and Energy Systems"}]
description = "The Wind Energy Toolbox (or ```wetb```, pronounce as wee-tee-bee) is a collection of Python scripts that facilitate working with (potentially a lot) of HAWC2, HAWCStab2, FAST or other text input based simulation tools."
dependencies = [
'certifi',
'click',
'Cython',
'h5py',
'Jinja2',
'lxml',
'matplotlib',
'pillow',
'mock',
'numpy',
'numba',
'openpyxl',
'pandas',
'paramiko',
'psutil',
'pytest',
'pytest-cov',
'scipy',
'sshtunnel',
'tables',
'tqdm',
'xarray',
'xlwt',
'XlsxWriter',
]
license = {text = "wetb is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (GPL, http://www.gnu.org/copyleft/gpl.html) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. wetb is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details http://www.gnu.org/licenses/ We encourage you to submit new code for possible inclusion in future versions of wetb."}
dynamic = ["version"]
[project.urls]
repository = "https://gitlab.windenergy.dtu.dk/toolbox/WindEnergyToolbox"
documentation = "https://toolbox.pages.windenergy.dtu.dk/WindEnergyToolbox/"
[project.optional-dependencies]
prepost = ["openpyxl", "tables", "xlwt", "Cython"]
all = ["openpyxl", "tables", "xlwt", "Cython", "paramiko", "sshtunnel", 'pytest', 'mock', 'click']
[tool.setuptools_scm]
version_scheme = "no-guess-dev"
[tool.setuptools]
packages = ["wetb"]
#!/bin/bash
find ./ -type f -iname "*.py" -exec sed -i '/from __future__ import print_function/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from __future__ import division/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from __future__ import unicode_literals/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from __future__ import absolute_import/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from io import open/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from builtins import object/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from builtins import map/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from builtins import chr/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from builtins import dict/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from builtins import super/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from builtins import zip/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from builtins import range/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from builtins import str/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from builtins import int/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/from future import standard_library/d' {} \;
find ./ -type f -iname "*.py" -exec sed -i '/standard_library.install_aliases()/d' {} \;
[metadata]
name = wetb
summary = Wind Energy Toolbox
author = DTU Wind Energy
author-email = mmpe@dtu.dk
license = GPLv3
home-page = https://gitlab.windenergy.dtu.dk/toolbox/WindEnergyToolbox
description-file = README
# Add here all kinds of additional classifiers as defined under
# https://pypi.python.org/pypi?%3Aaction=list_classifiers
classifiers = Development Status :: 4 - Beta,
Programming Language :: Python,
Programming Language :: Python :: 2.7,
Programming Language :: Python :: 3,
Programming Language :: Python :: 3.3,
Programming Language :: Python :: 3.4,
Programming Language :: Python :: 3.5,
Programming Language :: Python :: 3.6,
Environment :: Console,
Intended Audience :: Education,
Intended Audience :: Science/Research,
License :: OSI Approved :: GPL License,
Operating System :: OS Independent,
Operating System :: POSIX :: Linux,
Operating System :: Unix,
Operating System :: MacOS,
Operating System :: Microsoft :: Windows
Topic :: Scientific/Engineering :: Mathematics
[entry_points]
# Add here console scripts like:
# console_scripts =
# hello_world = wetb.module:function
# as well as other entry_points.
[files]
# Add here 'data_files', 'packages' or 'namespace_packages'.
# Additional data files are defined as key value pairs of source and target:
packages =
wetb
# data_files =
# share/wetb_docs = docs/*
[extras]
# Add here additional requirements for extra features, like:
# PDF =
# ReportLab>=1.2
# RXP
#ALL =
# django
# cookiecutter
[test]
# py.test options when running `python setup.py test`
#addopts = tests
[tool:pytest]
# Options for py.test:
# Specify command line options as you would do when invoking py.test directly.
# e.g. --cov-report html (or xml) for html/xml output or --junitxml junit.xml
# in order to write a coverage file that can be read by Jenkins.
#addopts =
# --cov wetb --cov-report term-missing
# --verbose
python_files = WindEnergyToolbox/wetb/*
[aliases]
docs = build_sphinx
[bdist_wheel]
# Use this option if your package is pure-python
universal = 0
[build_sphinx]
# Options for Sphinx build
source_dir = docs
build_dir = docs/_build
[pbr]
# Let pbr run sphinx-apidoc
autodoc_tree_index_modules = True
# autodoc_tree_excludes = ...
# Let pbr itself generate the apidoc
# autodoc_index_modules = True
# autodoc_exclude_modules = ...
# Convert warnings to errors
# warnerrors = True
[devpi:upload]
# Options for the devpi: PyPI serer and packaging tool
# VCS export must be deactivated since we are using setuptools-scm
no-vcs = 1
formats = bdist_wheel
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Setup file for wetb.
This file was generated with PyScaffold 2.5, a tool that easily
puts up a scaffold for your new Python project. Learn more under:
http://pyscaffold.readthedocs.org/
"""
import os
import sys
from setuptools import setup
try:
from pypandoc import convert_file
read_md = lambda f: convert_file(f, 'rst', format='md')
except ImportError:
print("warning: pypandoc module not found, could not convert Markdown to RST")
read_md = lambda f: open(f, 'r').read()
import numpy as np
from distutils.extension import Extension
from Cython.Distutils import build_ext
def setup_package():
ex_info = [('wetb.fatigue_tools.rainflowcounting', ['pair_range', 'peak_trough', 'rainflowcount_astm']),
('wetb.signal.filters', ['cy_filters'])]
extlist = [Extension('%s.%s' % (module, n),
[os.path.join(module.replace(".","/"), n)+'.pyx'],
include_dirs=[np.get_include()]) for module, names in ex_info for n in names]
needs_sphinx = {'build_sphinx', 'upload_docs'}.intersection(sys.argv)
sphinx = ['sphinx'] if needs_sphinx else []
setup(setup_requires=['six', 'pyscaffold>=2.5a0,<2.6a0'] + sphinx,
cmdclass = {'build_ext': build_ext},
ext_modules = extlist,
use_pyscaffold=True,
long_description=read_md('README.md'))
if __name__ == "__main__":
setup_package()
import numpy as np
npt = np.testing
\ No newline at end of file
import os
import sys
from unittest import mock
import pytest
import matplotlib.pyplot as plt
def run_module_main(module):
# check that all main module examples run without errors
if os.name == 'posix' and "DISPLAY" not in os.environ:
pytest.xfail("No display")
def no_show(*args, **kwargs):
pass
plt.show = no_show # disable plt show that requires the user to close the plot
def no_print(s):
pass
try:
with mock.patch.object(module, "__name__", "__main__"):
with mock.patch.object(module, "print", no_print):
getattr(module, 'main')()
except Exception as e:
raise type(e)(str(e) +
' in %s.main' % module.__name__).with_traceback(sys.exc_info()[2])
import importlib
import os
import pkgutil
import warnings
import mock
import pytest
import matplotlib.pyplot as plt
import sys
from wetb import examples
from tests.run_main import run_module_main
def get_main_modules():
package = examples
modules = []
for _, modname, _ in pkgutil.walk_packages(package.__path__, package.__name__ + '.'):
with warnings.catch_warnings():
warnings.simplefilter("ignore")
m = importlib.import_module(modname)
if 'main' in dir(m):
modules.append(m)
return modules
def print_main_modules():
print("\n".join([m.__name__ for m in get_main_modules()]))
@pytest.mark.parametrize("module", get_main_modules())
def test_main(module):
run_module_main(module)
if __name__ == '__main__':
print_main_modules()
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
test = "TEST"
try:
import pkg_resources
__version__ = pkg_resources.safe_version(pkg_resources.get_distribution(__name__).version)
except:
__version__ = 'unknown'
__version__ = '0.0.10'
# try:
# import pkg_resources
# __version__ = pkg_resources.safe_version(pkg_resources.get_distribution(__name__).version)
# except:
# __version__ = 'unknown'
This diff is collapsed.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Jun 23 11:07:50 2021
@author: dave
"""
# from os.path import join as pjoin
import numpy as np
from lxml import objectify#, etree)
# from matplotlib import pyplot as plt
# import pandas as pd
# import wetb
from wetb.prepost import misc
# from wetb.hawc2 import (HTCFile, AEFile, PCFile, StFile)
# TODO: this dictionary utility could go to a dict sub-class in misc?
def find_next_unique_key(d, key):
k = 1
while True:
k += 1
if key + f'__{k}' not in d:
key = key + f'__{k}'
return key
# TODO: this dictionary utility could go to a dict sub-class in misc?
def add_new_unique_key(key, values, d):
"""
Add key:values to dictionary d. If key already occurs, append __x
where x is the number of previous occurances of key(__x).
Parameters
----------
key : str
DESCRIPTION.
values : list
DESCRIPTION.
d : dict
Dictionary.
Returns
-------
key : str
DESCRIPTION.
d : dict
DESCRIPTION.
"""
if key in d:
key = find_next_unique_key(d, key)
d[key] = [values]
return key, d
class ReadBladedProject:
def __init__(self, fname):
with open(fname, encoding='utf-8') as fobj:
xml_str = fobj.read().encode('utf-8')
self.bd, self.xmlroot = self.parse_bladeddata(xml_str)
self.set_attr_and_check()
# some things are just a little different
# TMASS has a list of materials and their properties
# get rid of the quotes
# tmp = [el.replace("'", '') for el in self.bd['TMASS']['MATERIAL'][0]]
# self.bd['TMASS']['MATERIAL'] = tmp
unique_mat = set(self.get_key('TMASS', 'MATERIAL').flatten().tolist())
self.tow_mat_prop = {k:self.get_key('TMASS', k) for k in unique_mat}
# material_props = {}
# for k in unique_mat:
# material_props[k.replace("'", '')] = self.get_key('TMASS', k)
def parse_bladeddata(self, xml_str):
"""
The XML field BladedData contains what seems like the main core input
data for BLADED, and formatted in some structured way.
Parameters
----------
xml_str : TYPE
DESCRIPTION.
Returns
-------
bd : TYPE
DESCRIPTION.
xmlroot : TYPE
DESCRIPTION.
"""
# root = etree.fromstring(xml)
# elems = root.getchildren()
# bladeddata = elems[1].text
xmlroot = objectify.fromstring(xml_str)
# the non-xml formatted BLADED model is situated in a non-xml field
# called BladedData
bd = {}
mstart = None
for i, line in enumerate(xmlroot.BladedData.text.split('\n')):
# TODO: values embedded in double quotes (") can contain entire
# MSTART/MEND sub-sections (so embedded sections)
# split replace tabs with spaces, split on spaces, remove empty
linels = misc.remove_items(line.replace('\t', ' ').split(' '), '')
# commas can also be separators, in addition to spaces
linels2 = []
for k in linels:
linels2.extend(k.split(','))
linels = misc.remove_items(linels2, '')
# ignore empty lines
if len(linels) < 1:
continue
# entries can be numbers if the previous key contains multiple data points
try:
float(linels[0])
el0isnum = True
except ValueError:
el0isnum = False
# start of a sub-section that contains (non-unique) keys as well
if linels[0].upper().startswith('MSTART'):
mtag = linels[-1]
mstart = {}
# at the end of the sub-section add the sub-section to the main dict
elif linels[0].upper().startswith('MEND'):
# FIXME: implement MSTART sections embedded in double quoted values
try:
# if the section key is not unique, make it so by appending __X
if mtag in bd:
mtag = find_next_unique_key(bd, mtag)
bd[mtag] = mstart
except UnboundLocalError:
print('warning: ignored embedded mstart/mend section')
print(f'at line: {i+1}')
mstart = None
# if we are under a sub-section
elif mstart is not None:
# if the line contains a keyword
if not el0isnum:
tag, mstart = add_new_unique_key(linels[0], linels[1:], mstart)
# line is datapoint that needs to be added to key that occured before
else:
mstart[tag].append(linels)
# add numerical values to key that occured before
elif el0isnum:
bd[tag].append(linels)
else:
tag, bd = add_new_unique_key(linels[0], linels[1:], bd)
return bd, xmlroot
def get_key(self, key1, key2=False):
"""
Get key from the BladedData CDATA section and format to int32 or
float32 numpy arrays if possible withouth precision loss.
Parameters
----------
key1 : str
DESCRIPTION.
key2 : str, optional
DESCRIPTION. The default is False.
Returns
-------
numpy.array
Values from key1/key2 formatted as a numpy array. Converted to
numpy.int32, numpy.float32 if possible withouth precision loss,
otherwise an object array is returned.
"""
if key1 not in self.bd:
raise KeyError(f'{key1} not found in BLADED file.')
if key2 is not False:
if key2 not in self.bd[key1]:
raise KeyError(f'{key2} not found in MSTART {key1} of BLADED file.')
data = self.bd[key1][key2]
else:
data = self.bd[key1]
# in case we defined a mstart key
if isinstance(data, dict):
return data
# i ,j = len(data), len(data[0])
# FIXME: this is a very expensive way of converting it, but it might
# not matter at all since very little model data is actually considered
data_arr = np.array(data)
try:
data_arr = data_arr.astype(np.int32)
except ValueError:
try:
data_arr = data_arr.astype(np.float32)
except ValueError:
pass
return data_arr
# return np.array(data, dtype=np.float32)
# if isinstance(data[0], list) and len(data[0]) == 1:
# data = float(data[0])
# if isinstance(data[0], list) and len(data[0]) > 1:
# data_arr = np.array(data, dtype=np.float32)
def set_attr_and_check(self):
"""Check that BGEOMMB, BMASSMB, BSTIFFMB has indeed the same node
repated twice every time.
"""
# self.bd['BGEOMMB'].keys(), but only those relevant
keysg = ['RJ', 'DIST', 'REF_X', 'REF_Y', 'CHORD', 'TWIST', 'CE_X',
'CE_Y', 'BTHICK', 'FOIL', 'MOVING']
nbe = self.get_key('BGEOMMB', 'NBE')[0,0]
# self.bd['BMASSMB'].keys(), but only those relevant
keysm = ['CM_X', 'CM_Y', 'MASS', 'SINER', 'RGRATIO', 'BETA_M']
# self.bd['BSTIFFMB'].keys(), but only those relevant
keyss = ['EIFLAP', 'EIEDGE', 'BETA_S', 'GJ', 'CS_X', 'CS_Y', 'GAFLAP',
'GAEDGE']
mkeys = ['BGEOMMB', 'BMASSMB', 'BSTIFFMB']
for mkey, keys in zip(mkeys, [keysg, keysm, keyss]):
for key in keys:
res = self.get_key(mkey, key)
try:
assert np.allclose(res[0,0::2], res[0,1::2])
except TypeError:
# allclose doesn't make sense for text arrays
assert np.compare_chararrays(res[0,0::2], res[0,1::2],
'==', True).all()
assert res.shape[1]==nbe
if hasattr(self, key.lower()):
raise UserWarning(key, 'already exists')
setattr(self, key.lower(), res[0,0::2])
def print_xml_tree(self, fname):
"""For discovery purposes: print full tree + values/text
Parameters
----------
fname : TYPE
DESCRIPTION.
Returns
-------
None.
"""
# def print_rec(root):
# # if hasattr(root, 'getparent'):
# # print(root.getparent().tag.title, end='.')
# # print_rec(root.getparent())
# for el in root.getchildren():
# print(print_rec(el))
# def print_root_tree(root):
# root.getparent()
# print()
# tree = etree.fromstring(xml_str)
# els = tree.xpath('/')
# for el in els:
# print(el)
# tree = etree.fromstring(xml_str)
# xmlroot = objectify.fromstring(xml_str)
# with open(fname+'.structure', 'w') as f:
# for line in xmlroot.descendantpaths():
# f.write(line + '\n')
# Recursive XML parsing python using ElementTree
# https://stackoverflow.com/q/28194703/3156685
roottree = self.xmlroot.getroottree()
def print_tree_recursive(root):
# print(roottree.getpath(root), end=' : ')
# print(root.tag.title())
f.write(roottree.getpath(root) + ' : ')
f.writelines(root.values())
if root.text is not None:
f.write(' : ' + root.text)
f.write('\n')
for elem in root.getchildren():
print_tree_recursive(elem)
with open(fname+'.structure.value', 'w') as f:
for el in self.xmlroot.getchildren():
if el.tag.title()!='Bladeddata':
print_tree_recursive(el)
# def get_frequencies(self):
# """
# """
# blades = self.xmlroot.NewGUI.Turbine.Blades.FlexibilityModel
# blades.Settings.ModesWithDampingDefined
# blades.PartModes # with lots of BladeModeContainer
# blades.WholeBladeModes
# blades.WholeBladeModes.WholeBladeMode
# blades.WholeBladeModes.WholeBladeMode.Name
# blades.WholeBladeModes.WholeBladeMode.Frequency
# blades.WholeBladeModes.WholeBladeMode.Damping
# blades.WholeBladeModes.WholeBladeMode.Components
# len(blades.WholeBladeModes.WholeBladeMode.Components.getchildren())
# # 60 elements
# for wholeblademode in blades.WholeBladeModes.iterchildren():
# print(wholeblademode.Name)
# print(wholeblademode.Frequency, wholeblademode.Damping)
# tower = self.xmlroot.NewGUI.Turbine.SupportStructure.FlexibilityModel
# for towermode in tower.Modes.getchildren():
# print(towermode.Description)
# towermode.Frequency
# towermode.Damping
This diff is collapsed.
1 number of sets, Nset
-----------------
#1 Nset number 1
================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
r [0] m [1] x_cg [2] y_cg [3] ri_x [4] ri_y [5] x_sh [6] y_sh [7] E [8] G [9] I_x [10] I_y [11] K [12] k_x [13] k_y [14] A [15] pitch [16] x_e [17] y_e [18]
================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
$1 2 subset number 1
0.000000000000000e+00 0.500000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.500000000000000e+00 0.500000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+14 1.000000000000000e+13 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
1.000000000000000e+00 0.500000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.500000000000000e+00 0.500000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+14 1.000000000000000e+13 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
......@@ -5,10 +5,6 @@ Created on Thu Aug 04 09:24:51 2016
@author: tlbl
"""
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import absolute_import
import numpy as np
......
......@@ -5,12 +5,6 @@ Created on Thu Aug 04 11:09:43 2016
@author: tlbl
"""
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
import unittest
from wetb.control import control
......
This diff is collapsed.
This diff is collapsed.