Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ift
NIFTy
Commits
f4164d98
Commit
f4164d98
authored
Jul 02, 2018
by
Christoph Lienhard
Browse files
added docu for make functions
also changed op -> model
parent
5d0519d3
Changes
1
Hide whitespace changes
Inline
Side-by-side
nifty5/models/binary_helpers.py
View file @
f4164d98
...
...
@@ -21,9 +21,9 @@ from ..sugar import makeOp
from
.model
import
Model
def
_joint_position
(
op1
,
op
2
):
a
=
op
1
.
position
.
_val
b
=
op
2
.
position
.
_val
def
_joint_position
(
model1
,
model
2
):
a
=
model
1
.
position
.
_val
b
=
model
2
.
position
.
_val
# Note: In python >3.5 one could do {**a, **b}
ab
=
a
.
copy
()
ab
.
update
(
b
)
...
...
@@ -32,59 +32,77 @@ def _joint_position(op1, op2):
class
ScalarMul
(
Model
):
"""Class representing a model multiplied by a scalar factor."""
def
__init__
(
self
,
factor
,
op
):
# TODO op -> model
super
(
ScalarMul
,
self
).
__init__
(
op
.
position
)
def
__init__
(
self
,
factor
,
model
):
super
(
ScalarMul
,
self
).
__init__
(
model
.
position
)
# TODO -> floating
if
not
isinstance
(
factor
,
(
float
,
int
)):
raise
TypeError
self
.
_
op
=
op
self
.
_
model
=
model
self
.
_factor
=
factor
self
.
_value
=
self
.
_factor
*
self
.
_
op
.
value
self
.
_gradient
=
self
.
_factor
*
self
.
_
op
.
gradient
self
.
_value
=
self
.
_factor
*
self
.
_
model
.
value
self
.
_gradient
=
self
.
_factor
*
self
.
_
model
.
gradient
def
at
(
self
,
position
):
return
self
.
__class__
(
self
.
_factor
,
self
.
_
op
.
at
(
position
))
return
self
.
__class__
(
self
.
_factor
,
self
.
_
model
.
at
(
position
))
class
Add
(
Model
):
"""Class representing the sum of two models."""
def
__init__
(
self
,
position
,
op1
,
op
2
):
def
__init__
(
self
,
position
,
model1
,
model
2
):
super
(
Add
,
self
).
__init__
(
position
)
self
.
_
op1
=
op
1
.
at
(
position
)
self
.
_
op2
=
op
2
.
at
(
position
)
self
.
_
model1
=
model
1
.
at
(
position
)
self
.
_
model2
=
model
2
.
at
(
position
)
self
.
_value
=
self
.
_
op
1
.
value
+
self
.
_
op
2
.
value
self
.
_gradient
=
self
.
_
op
1
.
gradient
+
self
.
_
op
2
.
gradient
self
.
_value
=
self
.
_
model
1
.
value
+
self
.
_
model
2
.
value
self
.
_gradient
=
self
.
_
model
1
.
gradient
+
self
.
_
model
2
.
gradient
@
staticmethod
def
make
(
op1
,
op2
):
position
=
_joint_position
(
op1
,
op2
)
return
Add
(
position
,
op1
,
op2
)
def
make
(
model1
,
model2
):
"""Build the sum of two models.
Parameters
----------
model1: Model
First model.
model2: Model
Second model
"""
position
=
_joint_position
(
model1
,
model2
)
return
Add
(
position
,
model1
,
model2
)
def
at
(
self
,
position
):
return
self
.
__class__
(
position
,
self
.
_
op
1
,
self
.
_
op
2
)
return
self
.
__class__
(
position
,
self
.
_
model
1
,
self
.
_
model
2
)
class
Mul
(
Model
):
"""Class representing the pointwise product of two models."""
def
__init__
(
self
,
position
,
op1
,
op
2
):
def
__init__
(
self
,
position
,
model1
,
model
2
):
super
(
Mul
,
self
).
__init__
(
position
)
self
.
_
op1
=
op
1
.
at
(
position
)
self
.
_
op2
=
op
2
.
at
(
position
)
self
.
_
model1
=
model
1
.
at
(
position
)
self
.
_
model2
=
model
2
.
at
(
position
)
self
.
_value
=
self
.
_
op
1
.
value
*
self
.
_
op
2
.
value
self
.
_gradient
=
(
makeOp
(
self
.
_
op
1
.
value
)
*
self
.
_
op
2
.
gradient
+
makeOp
(
self
.
_
op
2
.
value
)
*
self
.
_
op
1
.
gradient
)
self
.
_value
=
self
.
_
model
1
.
value
*
self
.
_
model
2
.
value
self
.
_gradient
=
(
makeOp
(
self
.
_
model
1
.
value
)
*
self
.
_
model
2
.
gradient
+
makeOp
(
self
.
_
model
2
.
value
)
*
self
.
_
model
1
.
gradient
)
@
staticmethod
def
make
(
op1
,
op2
):
position
=
_joint_position
(
op1
,
op2
)
return
Mul
(
position
,
op1
,
op2
)
def
make
(
model1
,
model2
):
"""Build the pointwise product of two models.
Parameters
----------
model1: Model
First model.
model2: Model
Second model
"""
position
=
_joint_position
(
model1
,
model2
)
return
Mul
(
position
,
model1
,
model2
)
def
at
(
self
,
position
):
return
self
.
__class__
(
position
,
self
.
_
op
1
,
self
.
_
op
2
)
return
self
.
__class__
(
position
,
self
.
_
model
1
,
self
.
_
model
2
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment