Skip to content

Commit

Permalink
Create project make files
Browse files Browse the repository at this point in the history
  • Loading branch information
wardsimon committed Jun 12, 2019
1 parent 4ce8c75 commit 03dcc46
Show file tree
Hide file tree
Showing 7 changed files with 687 additions and 0 deletions.
260 changes: 260 additions & 0 deletions pySpinWBuilder.prj
@@ -0,0 +1,260 @@
<deployment-project plugin="plugin.ezdeploy" plugin-version="1.0">
<configuration file="/home/simonward/PycharmProjects/pySpinW/swFuncs2.prj" location="/home/simonward/PycharmProjects/pySpinW" name="swFuncs2" target="target.ezdeploy.library" target-name="Library Compiler">
<param.appname>swFuncs</param.appname>
<param.icon />
<param.icons />
<param.version>1.0</param.version>
<param.authnamewatermark>Simon Ward</param.authnamewatermark>
<param.email>simon.ward@esss.se</param.email>
<param.company>European Spallation Source</param.company>
<param.summary>SpinW functions and MATLAB for python helper functions compiled for python usage.</param.summary>
<param.description>SpinW (spin-double-u) is a Matlab library that can optimize magnetic structures using mean field theory and calculate spin wave dispersion and spin-spin correlation function for complex crystal and magnetic structures. For details check http://www.spinw.org</param.description>
<param.screenshot />
<param.guid />
<param.installpath.string>/European_Spallation_Source/swFuncs/</param.installpath.string>
<param.installpath.combo>option.installpath.user</param.installpath.combo>
<param.logo />
<param.install.notes />
<param.target.install.notes>In the following directions, replace MR/v96 by the directory on the target machine where MATLAB is installed, or MR by the directory where the MATLAB Runtime is installed.

(1) Set the environment variable XAPPLRESDIR to this value:

MR/v96/X11/app-defaults


(2) If the environment variable LD_LIBRARY_PATH is undefined, set it to the following:

MR/v96/runtime/glnxa64:MR/v96/bin/glnxa64:MR/v96/sys/os/glnxa64:MR/v96/sys/opengl/lib/glnxa64

If it is defined, set it to the following:

${LD_LIBRARY_PATH}:MR/v96/runtime/glnxa64:MR/v96/bin/glnxa64:MR/v96/sys/os/glnxa64:MR/v96/sys/opengl/lib/glnxa64

You must have Python 2.7, 3.5, 3.6, and/or 3.7 on your machine to install this package. Go to the directory containing your package and the file setup.py and execute:

python setup.py install [options]

For details, see GettingStarted.html, distributed with this package, or the official Python documentation at:

https://docs.python.org/2/install/index.html</param.target.install.notes>
<param.intermediate>${PROJECT_ROOT}/build/for_testing</param.intermediate>
<param.files.only>${PROJECT_ROOT}/pySpinW</param.files.only>
<param.output>${PROJECT_ROOT}/build/for_redistribution</param.output>
<param.logdir>${PROJECT_ROOT}/build</param.logdir>
<param.enable.clean.build>false</param.enable.clean.build>
<param.user.defined.mcr.options />
<param.target.type>subtarget.python.module</param.target.type>
<param.support.packages />
<param.namespace />
<param.classorg />
<param.web.mcr>true</param.web.mcr>
<param.package.mcr>false</param.package.mcr>
<param.no.mcr>false</param.no.mcr>
<param.web.mcr.name>MyAppInstaller_web</param.web.mcr.name>
<param.package.mcr.name>MyAppInstaller_mcr</param.package.mcr.name>
<param.no.mcr.name>MyAppInstaller_app</param.no.mcr.name>
<param.windows.command.prompt>false</param.windows.command.prompt>
<param.create.log>false</param.create.log>
<param.log.file />
<param.user.only.registration>false</param.user.only.registration>
<param.assembly.type>false</param.assembly.type>
<param.encryption.key.file />
<param.net.enable.remoting>false</param.net.enable.remoting>
<param.net.tsa.enable>false</param.net.tsa.enable>
<param.net.tsa.assembly />
<param.net.tsa.interface />
<param.net.tsa.namespace />
<param.net.tsa.superclass>Class1</param.net.tsa.superclass>
<param.net.tsa.metadata />
<param.net.tsa.metadata.assembly>/home/simonward/PycharmProjects/pySpinW</param.net.tsa.metadata.assembly>
<param.net.saved.interface />
<param.cpp.api>option.cpp.all</param.cpp.api>
<unset>
<param.icon />
<param.icons />
<param.version />
<param.authnamewatermark />
<param.email />
<param.company />
<param.screenshot />
<param.guid />
<param.installpath.string />
<param.installpath.combo />
<param.logo />
<param.install.notes />
<param.enable.clean.build />
<param.user.defined.mcr.options />
<param.support.packages />
<param.namespace />
<param.classorg />
<param.web.mcr />
<param.package.mcr />
<param.no.mcr />
<param.web.mcr.name />
<param.package.mcr.name />
<param.no.mcr.name />
<param.windows.command.prompt />
<param.create.log />
<param.log.file />
<param.user.only.registration />
<param.assembly.type />
<param.encryption.key.file />
<param.net.enable.remoting />
<param.net.tsa.enable />
<param.net.tsa.assembly />
<param.net.tsa.interface />
<param.net.tsa.namespace />
<param.net.tsa.superclass />
<param.net.tsa.metadata />
<param.net.tsa.metadata.assembly />
<param.net.saved.interface />
<param.cpp.api />
</unset>
<fileset.exports>
<file>${PROJECT_ROOT}/src/call.m</file>
<file>${PROJECT_ROOT}/src/call2.m</file>
<file>${PROJECT_ROOT}/src/getArgOut.m</file>
<file>${PROJECT_ROOT}/src/get_global.m</file>
<file>${PROJECT_ROOT}/src/recfind.m</file>
<file>${PROJECT_ROOT}/src/set_global.m</file>
<file>${PROJECT_ROOT}/src/waitforgui.m</file>
</fileset.exports>
<fileset.classes>
<entity.package name="">
<entity.class name="Class1">
<file>${PROJECT_ROOT}/src/call.m</file>
<file>${PROJECT_ROOT}/src/call2.m</file>
<file>${PROJECT_ROOT}/src/get_global.m</file>
<file>${PROJECT_ROOT}/src/getArgOut.m</file>
<file>${PROJECT_ROOT}/src/recfind.m</file>
<file>${PROJECT_ROOT}/src/set_global.m</file>
<file>${PROJECT_ROOT}/src/waitforgui.m</file>
</entity.class>
</entity.package>
</fileset.classes>
<fileset.resources>
<file>${PROJECT_ROOT}/src/spinW/dat_files</file>
<file>${PROJECT_ROOT}/src/spinW/external</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles</file>
</fileset.resources>
<fileset.depfun>
<file>${PROJECT_ROOT}/src/spinW/install_spinw.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@cif/cif.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@cif/importcif.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/abc.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/addaniso.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/addatom.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/addcoupling.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/addg.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/addmatrix.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/addtwin.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/anneal.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/annealloop.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/atom.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/basisvector.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/copy.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/couplingtable.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/disp.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/energy.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/export.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/field.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/fitspec.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/formula.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/fourier.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/fouriersym.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/gencoupling.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/genlattice.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/genmagstr.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/getmatrix.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/horace.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/horace_sqw.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/intmatrix.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/magstr.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/magtable.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/matom.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/matparser.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/moment.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/newcell.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/nosym.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/notwin.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/optmagk.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/optmagsteep.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/optmagstr.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/plot.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/powspec.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/private/datastruct.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/private/initfield.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/quickham.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/rl.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/setmatrix.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/setunit.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/spinw.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/spinwave.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/spinwavefast.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/spinwavesym.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/struct.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/structfact.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/symbolic.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/symmetry.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/symop.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/table.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/temperature.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/twinq.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/unitcell.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/validate.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@spinw/version.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@swpref/export.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@swpref/import.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@swpref/private/datastruct.m</file>
<file>${PROJECT_ROOT}/src/spinW/swfiles/@swpref/swpref.m</file>
<file>${MATLAB_ROOT}/toolbox/local/userpath.m</file>
</fileset.depfun>
<fileset.package>
<file>${PROJECT_ROOT}/src/python/__init__.py</file>
<file>${PROJECT_ROOT}/src/python/DataTypes.py</file>
<file>${PROJECT_ROOT}/src/python/Matlab.py</file>
<file>${PROJECT_ROOT}/src/python/MatlabFunction.py</file>
<file>${PROJECT_ROOT}/src/python/MatlabProxyObject.py</file>
<file>${PROJECT_ROOT}/src/python/MatlabStruct.py</file>
</fileset.package>
<fileset.examples />
<fileset.documentation />
<build-deliverables>
<file location="${PROJECT_ROOT}/build/for_testing" name="setup.py" optional="false">${PROJECT_ROOT}/build/for_testing/setup.py</file>
<file location="${PROJECT_ROOT}/build/for_testing" name="swFuncs" optional="false">${PROJECT_ROOT}/build/for_testing/swFuncs</file>
</build-deliverables>
<workflow />
<matlab>
<root>/ssd/MATLAB/R2019a</root>
<toolboxes>
<toolbox name="matlabcoder" />
<toolbox name="neuralnetwork" />
</toolboxes>
<toolbox>
<matlabcoder>
<enabled>true</enabled>
</matlabcoder>
</toolbox>
<toolbox>
<neuralnetwork>
<enabled>true</enabled>
</neuralnetwork>
</toolbox>
</matlab>
<platform>
<unix>true</unix>
<mac>false</mac>
<windows>false</windows>
<win2k>false</win2k>
<winxp>false</winxp>
<vista>false</vista>
<linux>true</linux>
<solaris>false</solaris>
<osver>4.18.0-21-generic</osver>
<os32>false</os32>
<os64>true</os64>
<arch>glnxa64</arch>
<matlab>true</matlab>
</platform>
</configuration>
</deployment-project>
89 changes: 89 additions & 0 deletions src/python/DataTypes.py
@@ -0,0 +1,89 @@
import numpy as np
from .MatlabProxyObject import MatlabProxyObject
from .MatlabFunction import MatlabFunction

class DataTypes:

def __init__(self, interface, pyMatlab):
"""
Data Converter to/from python and MATLAB
:param matlab:
"""
self.matlab = pyMatlab
self.interface = interface
# self.outNumpy = True
# self.transpose = True

def encode(self, data):

# What is data?
# 1) If it's a numpy array or a list, we convert. to matlab.double
# 2) If it is a dict, then we enumerate values and encode them.
# 3) If it's a tuple, it's a cell, which we enumerate. BUT, then we convert it into a list.
# 4) If it is a double it's a double, if a integer, we encode to a double as well. MATLAB is tricky :-/

if isinstance(data, (list, np.ndarray)):
# Case 1)
if isinstance(data, np.ndarray):
if np.iscomplexobj(data):
data = self.interface.call('complex', (self.encode(data.real.tolist()), self.encode(data.imag.tolist())), nargout=1)
else:
data = data.tolist()
data = self.matlab.double(data)
else:
data = self.matlab.double(data)
elif isinstance(data, np.integer):
# Case 4)
data = float(data)
elif isinstance(data, MatlabFunction):
data = data._fun
elif isinstance(data, MatlabProxyObject):
data = data.handle
else:
# Case 2, 3
if isinstance(data, dict):
# Case 2)
for key, item in data.items():
data[key] = self.encode(item)
elif isinstance(data, tuple):
# Case 3)
newdata = []
for item in data:
newdata.append(self.encode(item))
data = newdata

# Unknown data i.e. text should pass through
# TODO Make sure this works for more data cases...
return data

def decode(self, data):
# Decode the numeric data types. NOTE that we let the functions/methods slip through.
if isinstance(data, list):
# This is a cell return
for key, item in enumerate(data):
data[key] = self.decode(data[key])
data = tuple(data)
elif isinstance(data, self.matlab.double):
if data._is_complex:
data = (np.array(data._real) + 1j*np.array(data._imag)).reshape(data._size)
else:
data = np.array(data).reshape(data.size)
elif isinstance(data, self.matlab.int8):
# TODO for all available data types
data = np.ndarray(data)
elif isinstance(data, str):
if len(data) == 34:
if data[0:2] == '!$':
try:
data = self.decode(self.interface.get_global(data[2:]))
except Exception as e:
print(e)
elif isinstance(data, dict):
for key, item in data.items():
data[key] = self.decode(item)
elif self.interface.feval('isobject', data):
data = MatlabProxyObject(self.interface, data, self)
elif self.interface.feval('isa', data, 'function_handle'):
data = MatlabFunction(self.interface, data, converter=self, parent=[])

return data

0 comments on commit 03dcc46

Please sign in to comment.