Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bring repo up to date #2

Open
wants to merge 363 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
363 commits
Select commit Hold shift + click to select a range
9424869
adding conditional tempalte
adalca Aug 9, 2019
c975b94
adding link to interactive tipix session
adalca Aug 9, 2019
df4933d
Update README.md
adalca Aug 28, 2019
63c11f0
move to module
adalca Sep 10, 2019
542a397
moving files
adalca Sep 10, 2019
5879088
tiny bit of reorg
adalca Sep 10, 2019
c219e42
mv register.py
adalca Sep 10, 2019
cedecec
separating layers from networks
adalca Sep 11, 2019
b19767b
adding atlas citation
adalca Sep 11, 2019
29d1917
Update README.md
adalca Sep 11, 2019
e6aae4f
adding deformable templates citation
adalca Sep 11, 2019
1b2bc44
Update README.md
adalca Sep 11, 2019
7455286
added SLCC loss for SparseVM
katiemlewis Sep 23, 2019
7a366ea
layer cleanup
adalca Sep 30, 2019
7474382
small losses cleanup
adalca Oct 10, 2019
53d26c4
adding atlases to updates
adalca Oct 11, 2019
f58e074
initial reorg and separation of tf/pytorch
ahoopes Nov 1, 2019
461baaa
fix get_backend()
ahoopes Nov 1, 2019
f7a2dbf
cleanup of networks
adalca Nov 8, 2019
55504fc
Merge branch 'redesign' of https://github.com/voxelmorph/voxelmorph i…
adalca Nov 8, 2019
464b37e
adding small Dice fix
adalca Nov 8, 2019
75ef4a3
small fix for Dice loss
adalca Nov 8, 2019
aaee2ee
Merge branch 'master' of https://github.com/voxelmorph/voxelmorph
adalca Nov 8, 2019
fb0ec59
Update issue templates
voxelmorph Nov 9, 2019
a279735
move external packages to in-source
ahoopes Nov 12, 2019
801523f
unify generators
ahoopes Nov 12, 2019
3baac2b
update external packages
ahoopes Nov 12, 2019
1676789
cleanup external package imports for tf backend
ahoopes Nov 13, 2019
96056b4
add missing layers
ahoopes Nov 13, 2019
288e9b7
cleanup backend imports
ahoopes Nov 13, 2019
fe90636
cleanup generators
ahoopes Nov 13, 2019
4031521
add add_axes flag to load_volfile
ahoopes Nov 13, 2019
08f4012
Update citations.bib
adalca Nov 13, 2019
24c95f3
unified testing script
ahoopes Nov 15, 2019
9ceb307
cleaned up and generalized the register script
ahoopes Nov 15, 2019
fcdc901
add simple dice function from medipy
ahoopes Nov 15, 2019
99c004f
unify training script
ahoopes Nov 16, 2019
2a4f091
generalize unet
ahoopes Nov 16, 2019
099396e
split miccai losses
ahoopes Nov 16, 2019
e61ef7a
save backend name and rename subdirs
ahoopes Nov 19, 2019
d14fa36
remove unused gitignore
ahoopes Nov 19, 2019
b55211a
add package setup script
ahoopes Nov 25, 2019
0937415
add affine support and large-scale cleanup
ahoopes Nov 25, 2019
d64b8ea
add pytorch support
ahoopes Nov 25, 2019
a2bb19f
bf: make sure to rescale affine
ahoopes Nov 25, 2019
c2238d7
bf: must provide ndims to ResizeTransform layer
ahoopes Nov 25, 2019
4d42f81
merge from master
ahoopes Nov 25, 2019
4ad599b
added some example script documentation
ahoopes Nov 25, 2019
8ee8493
add tensorflow scripts dir
ahoopes Jan 17, 2020
9e01f2b
replace references to 'subject' with 'scan'
ahoopes Jan 17, 2020
8ac2901
rename generator functions
ahoopes Jan 17, 2020
b98fe12
ideally defer ipython import
ahoopes Jan 17, 2020
860b488
data/code cleanup
ahoopes Jan 31, 2020
13e66df
added RescaleTransform layer to replace trf_resize()
ahoopes Feb 4, 2020
c18bcda
add NMI experimental loss
ahoopes Feb 10, 2020
9afbb05
bf: fix transform rescaling
ahoopes Feb 10, 2020
42a6379
allow for multichannel specification in training scripts
ahoopes Feb 11, 2020
26aefe4
enable multichannel specification on cmdline
ahoopes Feb 11, 2020
625f0d0
use cpu when '--gpu -1' is provided
ahoopes Feb 11, 2020
08b45c4
add instance specific optimization
ahoopes Feb 11, 2020
6ebad92
change instance training default params
ahoopes Feb 11, 2020
bc03b05
fix a few IO errors related to multichannel data
ahoopes Feb 18, 2020
0abded7
fix feature specifications
ahoopes Feb 18, 2020
7a77933
fix init stats var names
ahoopes Feb 18, 2020
8d665a6
adds multi-gpu support to pytorch backend
SteffenCzolbe Feb 21, 2020
39df9c6
adds model checkpointing support to multi-gpu pytorch models. Save fo…
SteffenCzolbe Feb 21, 2020
96290e1
add instance-specific training to networks file
ahoopes Feb 24, 2020
c220ed8
rename to semisupervised
ahoopes Feb 24, 2020
3489d6a
resolved conflict between pytorch cuda device ordering and CUDA_VISIB…
SteffenCzolbe Feb 24, 2020
2950ef2
keras --> tf.keras
Mar 10, 2020
4ec06a4
keras --> tf.keras
Mar 10, 2020
ae95a47
update neuron external package
ahoopes Mar 10, 2020
fe63864
replace keras with tf.keras
ahoopes Mar 10, 2020
9044615
updating from neuron
ahoopes Mar 10, 2020
3e70a55
more converting of keras to tf.keras
ahoopes Mar 12, 2020
a246512
bf: fix a couple network bugs related to tf.keras updated
ahoopes Mar 12, 2020
35bf204
a few fixes for TF2 support
ahoopes Mar 19, 2020
6d14128
add hyperparam tuning network
ahoopes Mar 19, 2020
1a1af03
add missing unet args for hypernet
ahoopes Mar 20, 2020
f94e484
add warp compose layer
ahoopes Mar 20, 2020
35296a3
add hypernet training
ahoopes Mar 24, 2020
ba38ad6
doc: added some more general training instructions to the readme
ahoopes Mar 24, 2020
7b948f1
initial add of surface semi-supervised training
ahoopes Mar 26, 2020
622714d
add more surface reg features and a few other fixes
ahoopes Mar 26, 2020
715de49
add initial (untested) rigid registration option
ahoopes Mar 31, 2020
b7aa307
make EulerToAffine layer
ahoopes Mar 31, 2020
823d5e9
bf: optionally add identity to affine in SpatialTransformer
ahoopes Apr 1, 2020
59ea611
bf: make sure identity is added/not added consistently
ahoopes Apr 1, 2020
a0e126d
cleanup affine rigid organization
ahoopes Apr 3, 2020
23a3cf8
added the Biweight loss class to implement a robust Tukey Biweight as
brf2 Apr 3, 2020
55289a6
add tukey's biweight loss
ahoopes Apr 3, 2020
227fa77
fixed weight calculation in TukeyBiweight code and added some docs
brf2 Apr 5, 2020
8c036bf
Merge branch 'redesign' of https://github.com/voxelmorph/voxelmorph i…
brf2 Apr 5, 2020
6db806b
merged TukeyBiweight losses y
brf2 Apr 5, 2020
fc1561d
use MSE for basic mean-squared losses
ahoopes Apr 6, 2020
a636ef2
allow for bidirectional affine training
ahoopes Apr 6, 2020
328e4dc
fix inverse shift and make tf1 compatible
ahoopes Apr 7, 2020
6fa11cb
add affine support to ComposeTransform
ahoopes Apr 7, 2020
28990a2
cleanup and remove some things
ahoopes Apr 8, 2020
16fcf15
add affine/dense combined network and transform model
ahoopes Apr 10, 2020
2e1c250
Train on synthesized image-segmentation pairs.
mu40 Apr 14, 2020
60db72c
Unpack warped label maps.
mu40 Apr 14, 2020
ecbfda7
Fix bug in loss term.
mu40 Apr 14, 2020
82b83bb
Correct default and control model saves.
mu40 Apr 15, 2020
a2677ca
fix dice loss epsilon
ahoopes Apr 15, 2020
e58041d
remove transform() function and replace with class
ahoopes Apr 15, 2020
510458a
Remove paths.
mu40 Apr 15, 2020
2601e16
changed name of VxmCombinedModel to VxmAffineDense, and added some
brf2 Apr 16, 2020
3b2306a
added some optional parameters to VxmAffineDense to pass to internal
brf2 Apr 19, 2020
7e610fb
Assign default input layers.
mu40 Apr 19, 2020
aa26ab1
extended rigid case of VxmAffine to support 2D registration
brf2 Apr 22, 2020
dedb432
added VxmAffineSegSemiSupervised and modified
brf2 Apr 25, 2020
29d0d11
fixed typo and added VxmAffineSurfaceSemiSupervised
brf2 Apr 25, 2020
78be279
minor cleanup
adalca Apr 25, 2020
b913d88
Merge branch 'redesign' of https://github.com/voxelmorph/voxelmorph i…
adalca Apr 25, 2020
1639e2b
rename backends to something simpler
ahoopes Apr 25, 2020
65c0f48
make neuron available directly from tf backend submodule
ahoopes Apr 25, 2020
763bcaa
adding name to affine layers
adalca Apr 26, 2020
1609869
redesign and upgrade internal unet parameters
ahoopes Apr 26, 2020
7a8f94c
remove all models
ahoopes Apr 26, 2020
25189c1
update pytorch unet functionality
ahoopes Apr 26, 2020
89b1bd4
merge affine modifications
ahoopes Apr 26, 2020
151bcf1
adding low init to dense layer in Affine netwrok
adalca Apr 26, 2020
68efbb4
Merge pull request #173 from mu40/nf-synth-morph
ahoopes Apr 27, 2020
30a71b2
merge synth seg
ahoopes Apr 27, 2020
ed18951
bf: allow for multichannel NCC
ahoopes Apr 27, 2020
58f764c
fixing affinesemisupervised bug
adalca Apr 28, 2020
4cc3269
Merge branch 'redesign' of https://github.com/voxelmorph/voxelmorph i…
adalca Apr 28, 2020
d60feee
fixed references.affines in semi-supervised stuff (was returning [0]
brf2 Apr 28, 2020
61bad6b
made sure scaling matrix is float in rigid case
brf2 Apr 28, 2020
97431a3
Merge branch 'redesign' of https://github.com/voxelmorph/voxelmorph i…
brf2 Apr 28, 2020
192f961
adding asserts for affine bug
adalca Apr 28, 2020
de1fd58
Merge branch 'redesign' of https://github.com/voxelmorph/voxelmorph i…
adalca Apr 28, 2020
8c23e2b
fixed get_predictor_model method in VxmAffineSegSemiSupervised
brf2 Apr 28, 2020
0405a01
Merge branch 'redesign' of https://github.com/voxelmorph/voxelmorph i…
brf2 Apr 28, 2020
37023e1
fix affine network and add affine composition
ahoopes Apr 28, 2020
6b24be8
updates to networks that call VxmAffine
ahoopes Apr 28, 2020
4375ed1
small note
adalca Apr 28, 2020
5fc974e
small merge
adalca Apr 28, 2020
ea7bb15
removing blurs limit
adalca Apr 28, 2020
40c4461
bf: make affine Transform model multi-dimensional
ahoopes Apr 28, 2020
43f2074
cleaning some extra long lines
adalca Apr 29, 2020
2d6b090
Merge branch 'redesign' of https://github.com/voxelmorph/voxelmorph i…
adalca Apr 29, 2020
8fea1d4
adding rescale_affine support
adalca Apr 30, 2020
aa837bb
fixed affine init in Transform
brf2 May 1, 2020
a402ac1
fix a few redesign issues
ahoopes May 1, 2020
1fa69ef
large-scale redesign and bugfixes
ahoopes May 4, 2020
3816afa
merge from upstream
ahoopes May 4, 2020
e3811ea
a few pytorch network and training fixes
ahoopes May 5, 2020
93cd714
fix up affines in registration script
ahoopes May 5, 2020
9314d05
merge Malte's updates
ahoopes May 5, 2020
f61ec34
Merge pull request #153 from SteffenCzolbe/multi_gpu_support_pytorch
ahoopes May 5, 2020
bb12e95
fix pytorch model-size and training slowness
ahoopes May 11, 2020
3f5980b
changing grad loss to be row wise
adalca May 25, 2020
3ea3734
changing ncc loss to be row wise
adalca May 25, 2020
4a54a70
changing grad loss to be row wise
adalca May 25, 2020
f95a91f
squeeze data when loading from nibabel
ahoopes Jun 3, 2020
c01d0e2
add bidir training option to VxmAffineDense model
ahoopes Jun 3, 2020
462d16a
rename script subdirs
ahoopes Jun 3, 2020
e3e370a
merge from upstream
ahoopes Jun 3, 2020
3900a7d
fixed bidir=True case in VxmAffineDense, added a function to compute a
brf2 Jun 6, 2020
455ea12
moved import of neuron sandbox into interior of Grad class init with a
brf2 Jun 9, 2020
3571a8c
moved sandbox imports.
adalca Jun 9, 2020
fc04535
nf: add robust GaussianBlur layer
ahoopes Jun 19, 2020
36741fd
bf: make sure dense layer is scaled during rigid registration
ahoopes Jun 19, 2020
1a33051
nf: revert previous rescale behaviour and support [translation, linea…
ahoopes Jun 20, 2020
7f38224
merge from upstream
brf2 Jun 20, 2020
ed94aa2
bf: add deleted tf losses file
ahoopes Jun 20, 2020
f977f66
small cleanup
adalca Jun 22, 2020
b9570d3
local params
adalca Jun 22, 2020
39a0109
bf: replace K.ones with tf.ones
ahoopes Jun 22, 2020
a3a1c7d
added multi-channel support to VxmAffineDense
brf2 Jun 22, 2020
b02355d
update neuron
ahoopes Jun 23, 2020
3116c09
Merge branch 'redesign' of https://github.com/voxelmorph/voxelmorph i…
brf2 Jun 23, 2020
0e70232
nf: add input shape support for unet
ahoopes Jul 29, 2020
e72d8c7
bug fix: grab correct shape from image in apply_transform()
ahoopes Jul 29, 2020
da41848
cleanup a few TF scripts
ahoopes Aug 3, 2020
6bc2e0c
add half-res decoder option and use maxpooling in unet
ahoopes Aug 3, 2020
37aee1f
temporarily remove troublesome affine code for redesign merge
ahoopes Aug 3, 2020
1ee8f05
scale gradient loss by downsize factor
ahoopes Aug 3, 2020
228f000
cleanup script doc
ahoopes Aug 3, 2020
e24938b
remove neuron from vxm distribution
ahoopes Aug 3, 2020
49c2865
bf: allow for null GPU in device config
ahoopes Aug 3, 2020
dd7e9a4
add legacy branch note to readme
ahoopes Aug 3, 2020
71726f2
touch up readme example commands
ahoopes Aug 3, 2020
1cac476
keepdims title
adalca Aug 5, 2020
a804c4d
adding fill value
adalca Aug 5, 2020
66233ec
cleanup of imports
adalca Aug 6, 2020
0219a1f
adding spatial transfomer to vxm layers
adalca Aug 6, 2020
373a892
cleanup networks
adalca Aug 6, 2020
4c04086
cleanup of utils
adalca Aug 6, 2020
3a21207
adding util
adalca Aug 7, 2020
dd7c102
affine to shift fix
adalca Aug 7, 2020
695b8b1
adding ne.utils calls
adalca Aug 7, 2020
0553b2b
remove unused package requirements from setup.py
ahoopes Aug 7, 2020
5777cb5
some description cleanup, though plenty left to do
adalca Aug 7, 2020
48b352d
include SynthSeg as a direct submodule
ahoopes Aug 7, 2020
d8337f7
remove bold citations
ahoopes Aug 7, 2020
7595008
cleanup instance training
ahoopes Aug 8, 2020
4be7a5e
Merge branch 'master' of https://github.com/voxelmorph/voxelmorph
ahoopes Aug 8, 2020
993fe50
switch neuron to neurite
ahoopes Aug 8, 2020
60994d4
use local VecInt layer
ahoopes Aug 8, 2020
1008bb9
moving zoom to neurite
adalca Aug 8, 2020
0199e30
Merge branch 'master' of https://github.com/voxelmorph/voxelmorph
adalca Aug 8, 2020
81d3322
fix resize import
adalca Aug 9, 2020
6a25df3
remove gradient loss blurring for now
ahoopes Aug 12, 2020
183fdf2
fixes for PEP8 compliance
ahoopes Aug 12, 2020
05f6bde
Fix NCC class in torch/losses.py
Aug 13, 2020
fa7fba2
fixed syntax errors
ahoopes Aug 14, 2020
505266f
add get_config to RescaleTransform
ahoopes Aug 14, 2020
651af75
fixing utils
adalca Aug 14, 2020
bf2577a
adding max pool options
adalca Aug 14, 2020
3bbe918
Merge branch 'master' of https://github.com/voxelmorph/voxelmorph
adalca Aug 14, 2020
f2fd664
remove return in unet __init__
ahoopes Aug 17, 2020
1eb0d01
pep8
adalca Aug 19, 2020
6bdc0e5
Merge pull request #212 from p-wein/master
ahoopes Aug 21, 2020
f08e4db
supporting residual
adalca Aug 26, 2020
3f0a805
Merge branch 'master' of https://github.com/voxelmorph/voxelmorph
adalca Aug 26, 2020
4cd892e
update setup.py
ahoopes Sep 3, 2020
615fd00
adding optional name to unet
adalca Sep 5, 2020
58e15e2
bf: output flow prob params when use_probs is enabled
ahoopes Sep 7, 2020
aa9fd80
bf: fix parser namespace typo
ahoopes Sep 7, 2020
4a6b40c
bf: use Transform model for registration script
ahoopes Sep 7, 2020
a315961
expand instance-training capabilities
ahoopes Sep 7, 2020
0933e4d
rename semisupervised training scripts
ahoopes Sep 7, 2020
a53f224
rename semisupervised surf to pointcloud
ahoopes Sep 7, 2020
6e64c85
bf: adapt synthseg for neurite changes
ahoopes Sep 7, 2020
9d3cc44
rename unsupervised seg scripts
ahoopes Sep 7, 2020
1c5d78e
bf: cache missing inshape and nb_feats
ahoopes Sep 7, 2020
a92c570
adding jacobian_determinant utility
adalca Sep 10, 2020
1c384b4
bf: fix for tf1/2 Dice loss compat
ahoopes Sep 12, 2020
7dd5432
nf: add pytorch dice loss
ahoopes Sep 12, 2020
5273132
bf: make sure torch dice has no div by zero
ahoopes Sep 12, 2020
f34f3b4
fixing tf 2.0 div no nan
adalca Sep 14, 2020
6d4d9f5
merge fix
adalca Sep 14, 2020
d3f2e09
use model name as layer name prefix for Unet and VxmDense
ahoopes Sep 16, 2020
8f3f519
bf: fix rescale-computed warp shape for Transform network
ahoopes Sep 19, 2020
25be63c
add checks for backend package
ahoopes Sep 19, 2020
4038d44
cleaup README a bit
ahoopes Oct 3, 2020
44190a9
adding tutorial
adalca Oct 4, 2020
9fcefff
grouping notes
adalca Oct 4, 2020
9329b8f
Update README.md
adalca Oct 4, 2020
996bb92
updated TemplateCreation so it doesn't require an atlas input
brf2 Oct 5, 2020
a33780b
Revert "updated TemplateCreation so it doesn't require an atlas input"
ahoopes Oct 6, 2020
a1ab17b
add install instructions to README
ahoopes Oct 7, 2020
2ce0fc1
Merge pull request #221 from voxelmorph/dev
voxelmorph Oct 7, 2020
eed7b90
removing GPL
voxelmorph Nov 30, 2020
c7f90d6
Create LICENSE
voxelmorph Nov 30, 2020
6a95228
Update README.md
voxelmorph Dec 9, 2020
9bde7a2
Update Apache license in setup.py (#295)
yanlend Apr 8, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/task-specific-voxelmorph-question.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: Task-specific VoxelMorph question
about: Questions about how to use VoxelMorph specific to your task
title: ''
labels: ''
assignees: ''

---

**Task** (what are you trying to do/register?)

[please describe task here]

**What have you tried**

Please describe specifics of your approach // use of `vxm`

**Details of experiments**

Please carefully specify details about your experiments. If you are training, when what is the setup? What loss are you using? What does the convergence look like? If you are registering, please show example inputs and outputs. etc.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
__pycache__/
scratch/*
201 changes: 201 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Loading