From 6444f38f89fa8141927a4b681cca72ac2ad9dc4a Mon Sep 17 00:00:00 2001 From: Bernard Giroux Date: Mon, 30 Mar 2020 13:51:05 -0400 Subject: [PATCH 01/22] explicitely disable optimization --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a06ed64b..cc1edec6 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ elif platform.system() == 'Linux': if 'readthedocs.org/user_builds/ttcrpy' in os.path.dirname(__file__): # do not optimize when building on readthedocs server - extra_compile_args = ['-std=c++11'] + extra_compile_args = ['-std=c++11', '-O0'] else: extra_compile_args = ['-std=c++11', '-O3'] From 9cda0a7ad02ba4c8fc9803637ec995601ad1a7f0 Mon Sep 17 00:00:00 2001 From: Bernard Giroux Date: Tue, 31 Mar 2020 08:22:32 -0400 Subject: [PATCH 02/22] xcode settings --- .../xcshareddata/IDEWorkspaceChecks.plist | 8 ++ .../xcshareddata/WorkspaceSettings.xcsettings | 5 + .../xcshareddata/ttcr.xccheckout | 41 +++++++ .../xcschemes/profile_threaded.xcscheme | 79 +++++++++++++ .../xcshareddata/xcschemes/someTests.xcscheme | 87 ++++++++++++++ .../xcschemes/ttcr3d_raypath.xcscheme | 109 ++++++++++++++++++ 6 files changed, 329 insertions(+) create mode 100644 ttcr.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ttcr.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ttcr.xcodeproj/project.xcworkspace/xcshareddata/ttcr.xccheckout create mode 100644 ttcr.xcodeproj/xcshareddata/xcschemes/profile_threaded.xcscheme create mode 100644 ttcr.xcodeproj/xcshareddata/xcschemes/someTests.xcscheme create mode 100644 ttcr.xcodeproj/xcshareddata/xcschemes/ttcr3d_raypath.xcscheme diff --git a/ttcr.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ttcr.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/ttcr.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ttcr.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ttcr.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..0c67376e --- /dev/null +++ b/ttcr.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,5 @@ + + + + + diff --git a/ttcr.xcodeproj/project.xcworkspace/xcshareddata/ttcr.xccheckout b/ttcr.xcodeproj/project.xcworkspace/xcshareddata/ttcr.xccheckout new file mode 100644 index 00000000..9f4273ca --- /dev/null +++ b/ttcr.xcodeproj/project.xcworkspace/xcshareddata/ttcr.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + 67FE4950-A11B-4599-A60B-29BA65101476 + IDESourceControlProjectName + ttcr + IDESourceControlProjectOriginsDictionary + + 87A4E2EA51C472D5BBBE0FCCA9120C81E12DC52F + https://bitbucket.org/giroux/ttcr.git + + IDESourceControlProjectPath + ttcr.xcodeproj + IDESourceControlProjectRelativeInstallPathDictionary + + 87A4E2EA51C472D5BBBE0FCCA9120C81E12DC52F + ../.. + + IDESourceControlProjectURL + https://bitbucket.org/giroux/ttcr.git + IDESourceControlProjectVersion + 111 + IDESourceControlProjectWCCIdentifier + 87A4E2EA51C472D5BBBE0FCCA9120C81E12DC52F + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 87A4E2EA51C472D5BBBE0FCCA9120C81E12DC52F + IDESourceControlWCCName + ttcr + + + + diff --git a/ttcr.xcodeproj/xcshareddata/xcschemes/profile_threaded.xcscheme b/ttcr.xcodeproj/xcshareddata/xcschemes/profile_threaded.xcscheme new file mode 100644 index 00000000..a979fc58 --- /dev/null +++ b/ttcr.xcodeproj/xcshareddata/xcschemes/profile_threaded.xcscheme @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcr.xcodeproj/xcshareddata/xcschemes/someTests.xcscheme b/ttcr.xcodeproj/xcshareddata/xcschemes/someTests.xcscheme new file mode 100644 index 00000000..f200de19 --- /dev/null +++ b/ttcr.xcodeproj/xcshareddata/xcschemes/someTests.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcr.xcodeproj/xcshareddata/xcschemes/ttcr3d_raypath.xcscheme b/ttcr.xcodeproj/xcshareddata/xcschemes/ttcr3d_raypath.xcscheme new file mode 100644 index 00000000..9743896b --- /dev/null +++ b/ttcr.xcodeproj/xcshareddata/xcschemes/ttcr3d_raypath.xcscheme @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 6738bb991aec7213030446f441d0aea56e9d8387 Mon Sep 17 00:00:00 2001 From: Bernard Giroux Date: Tue, 31 Mar 2020 08:22:54 -0400 Subject: [PATCH 03/22] add comment about memory layout --- ttcrpy/cmesh2d.pyx | 1 + 1 file changed, 1 insertion(+) diff --git a/ttcrpy/cmesh2d.pyx b/ttcrpy/cmesh2d.pyx index a8f8a963..cc46c9c9 100644 --- a/ttcrpy/cmesh2d.pyx +++ b/ttcrpy/cmesh2d.pyx @@ -142,6 +142,7 @@ cdef class Mesh2D: if not slowness.flags['C_CONTIGUOUS']: slowness = np.ascontiguousarray(slowness) + # ::1 tells cython that data is contiguous cdef double[::1] slowness_memview = slowness self.mesh.setSlowness(&slowness_memview[0], slowness_memview.shape[0]) From 011d2881cd5a4d806c955a63b9a2f5b3fc1b3137 Mon Sep 17 00:00:00 2001 From: Bernard Giroux Date: Tue, 31 Mar 2020 08:26:19 -0400 Subject: [PATCH 04/22] updated gitignore --- .gitattributes | 0 .gitignore | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..e69de29b diff --git a/.gitignore b/.gitignore index 0a594fd1..c3d800ee 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,10 @@ ttcr_matlab/*.mex* xcuserdata/ someTests/ +ttcrpy.egg-info/ + +ttcrpy-0* + ttcrpy/__pycache__/ dynamicNodes.svg From 53988ea3216378d9f843fa3c6fa02e6f73797cb6 Mon Sep 17 00:00:00 2001 From: Bernard Giroux Date: Tue, 31 Mar 2020 08:26:49 -0400 Subject: [PATCH 05/22] now use setuptools_scm for versionning --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index cc1edec6..d9b73b09 100644 --- a/setup.py +++ b/setup.py @@ -63,7 +63,8 @@ setup( name='ttcrpy', - version='0.1.1', + use_scm_version=True, + setup_requires=['setuptools_scm'], description='Code to perform raytracing for geophysical applications', long_description=long_description, long_description_content_type='text/markdown', From 0212875309aa5dc1bff3b208dd7de213f44c4ffc Mon Sep 17 00:00:00 2001 From: Bernard Giroux Date: Tue, 31 Mar 2020 08:28:54 -0400 Subject: [PATCH 06/22] updated doc --- docs/_build/doctrees/code_rgrid.doctree | Bin 254849 -> 256843 bytes docs/_build/doctrees/environment.pickle | Bin 30515 -> 30747 bytes docs/_build/html/code_cgrid3d.html | 28 +++++++++++++++++++++--- docs/_build/html/code_rgrid.html | 21 +++++++++++++----- docs/_build/html/genindex.html | 2 ++ docs/_build/html/objects.inv | Bin 998 -> 1012 bytes docs/_build/html/searchindex.js | 2 +- 7 files changed, 44 insertions(+), 9 deletions(-) diff --git a/docs/_build/doctrees/code_rgrid.doctree b/docs/_build/doctrees/code_rgrid.doctree index f678a2627c7c4f565cb8f8c2e4708541c9bced54..0712bd87ddb0eef51e3825d28537bdd8bbd7644e 100644 GIT binary patch delta 979 zcmah|OGs2v7@l*E=7_>DzMZ)?SMxC!-$tR*gqF3DB#9nMlXxF?=Abj<%)Nq(z<~)8 zW)t_)X;%gcLoJku*#$!2!bOY3MJO_ANZ7)nO+nGQcS6 zBr3A)mMj!)-vQ@~3bI}doaZ;Zl-~uta9`A&vuE|KlDxt_(PqN{BkWGp(Yayh%Est} zfntGtG(#8|mnO2E#(g7Z+%vp57oWf`^4-koa~$O(-x!XzZ@|l~#~v{^pot2uGQl3d zLAF`oD6VDC#D9LT?kmfj$%Nc@zgu*dyuHBbDZr ze%uFcW%7ov*uixxMqdn{gTu@@RBXm9U8-Og9j$|0cMl`hL{_TfSU--Y^skGR!P0#8 zw*g;*xu}OPb*eQfl%&`UI-1v0I0h$PbQADC%@riJBWll2R(X zfdo)yxgTiQW40NRhT3^%9&Qb;W82f z+7nX;TWAJApRA|zYja$rTh`l)JoLvlveV@>@>X`r=J0VrX3_8f=K6Cqk#xzrGw!BU V+la!UKj0gO;11X+vk!-^{sJDLTYCTi delta 236 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 JjGFVs{{ - + + +
@@ -29,14 +31,27 @@

Navigation

  • modules |
  • +
  • + next |
  • +
  • + previous |
  • home
  • search
  • - + +