xerus issueshttps://git.hemio.de/xerus/xerus/-/issues2019-06-13T12:51:20+02:00https://git.hemio.de/xerus/xerus/-/issues/256REQUIREs in `uq_ra_adf_iv` are too restrictive2019-06-13T12:51:20+02:00Manuel MarschallREQUIREs in `uq_ra_adf_iv` are too restrictiveThe function `xerus::uq::uq_ra_adf_iv` in `src/xerus/applications/uqADF.cpp` requires
```
_x.order() <= _measurements.parameterVectors[i].size()
```
This is too restrictive in the UQ setting.
It requires the order of the tensor to be less than the order of the rank-one measurement.
This does not take into account the fact that the first mode is reserved for the physical domain.
I propose to change the `REQUIRE` condition to
```
_x.order() <= _measurements.parameterVectors[i].size()+1
```The function `xerus::uq::uq_ra_adf_iv` in `src/xerus/applications/uqADF.cpp` requires
```
_x.order() <= _measurements.parameterVectors[i].size()
```
This is too restrictive in the UQ setting.
It requires the order of the tensor to be less than the order of the rank-one measurement.
This does not take into account the fact that the first mode is reserved for the physical domain.
I propose to change the `REQUIRE` condition to
```
_x.order() <= _measurements.parameterVectors[i].size()+1
```Version 4.0Philipp TrunschkePhilipp Trunschkehttps://git.hemio.de/xerus/xerus/-/issues/255misc functions for string_views2019-05-15T21:07:59+02:00Fuchsi*misc functions for string_views- `from_string`
- `explode`- `from_string`
- `explode`https://git.hemio.de/xerus/xerus/-/issues/249load_from_file shoud raise an IOError instead of returning None if the file d...2019-06-13T12:26:28+02:00Philipp Trunschkeload_from_file shoud raise an IOError instead of returning None if the file does not existVersion 4.0Philipp TrunschkePhilipp Trunschkehttps://git.hemio.de/xerus/xerus/-/issues/237Remove Spaces from Test names2019-03-20T18:15:30+01:00RoteKekseRemove Spaces from Test namesVersion 4.0RoteKekseRoteKeksehttps://git.hemio.de/xerus/xerus/-/issues/232Move BlockTT to internal namespace2019-06-13T12:32:09+02:00RoteKekseMove BlockTT to internal namespaceVersion 4.0Philipp TrunschkePhilipp Trunschkehttps://git.hemio.de/xerus/xerus/-/issues/227Use the 4.0 release to rename Tensor.degree to Tensor.order ?2019-03-24T14:10:06+01:00Sebastian WolfUse the 4.0 release to rename Tensor.degree to Tensor.order ?The naming of `Tensor.degree` is mainly for historical reasons, as the most widely used term for the number of modes of a tensor is "order" and not "degree". Maybe we should use the 4.0 release to change the term accordingly?The naming of `Tensor.degree` is mainly for historical reasons, as the most widely used term for the number of modes of a tensor is "order" and not "degree". Maybe we should use the 4.0 release to change the term accordingly?Version 4.0Sebastian WolfSebastian Wolfhttps://git.hemio.de/xerus/xerus/-/issues/216Add convenience functions for modifying the TensorNetwork graph.2019-02-15T11:43:30+01:00Philipp TrunschkeAdd convenience functions for modifying the TensorNetwork graph.There are some operations on `TensorNetworks` that are not as simple as they should be.
As an example I think that a `TensorNetworks` should have the functions
- `TensorNetwork::remove_node(const size_t _nodeId)` : removes the node from the TensorNetwork and inserts the newly created external links at the end of `externalLinks` (in the order they had on the node tensor)
- `TensorNetwork::remove_link(const size_t _nodeId1, const size_t _nodeId2)` : removes the link between the given nodes and inserts the newly created external links at the end of `externalLinks`
The first function is useful when computing the gradient of a `TensorNetwork` w.r.t. the given node.
The second one will probably be used mainly as a subroutine of the first one.
Related tasks like `add_node` can be done using Einstein notation. Maybe we can find something similar for these tasks.There are some operations on `TensorNetworks` that are not as simple as they should be.
As an example I think that a `TensorNetworks` should have the functions
- `TensorNetwork::remove_node(const size_t _nodeId)` : removes the node from the TensorNetwork and inserts the newly created external links at the end of `externalLinks` (in the order they had on the node tensor)
- `TensorNetwork::remove_link(const size_t _nodeId1, const size_t _nodeId2)` : removes the link between the given nodes and inserts the newly created external links at the end of `externalLinks`
The first function is useful when computing the gradient of a `TensorNetwork` w.r.t. the given node.
The second one will probably be used mainly as a subroutine of the first one.
Related tasks like `add_node` can be done using Einstein notation. Maybe we can find something similar for these tasks.https://git.hemio.de/xerus/xerus/-/issues/215Not truncating properly in TT-SVD2019-04-12T11:18:01+02:00lljbashNot truncating properly in TT-SVDI notice the tSVD in TT-SVD is implemented as
```
1468 // Find rank due to the Epsilon (NOTE the scaling factor can be ignored, as it does not change the ratios).
1469 for(size_t j = 1; j < rank; ++j) {
1470 if (tmpS[j] <= _eps*tmpS[0]) {
1471 rank = j;
1472 break;
1473 }
1474 }
```
which is different from Oseledets's TT paper and will make the desired error tolerance not met. I'm not sure if there will be any side effects if I simply modify the truncation procedure.
The corresponding MATLAB codes in TT-toolbox are as follows.
```
...
pos=1;
ep=eps/sqrt(d-1);
for i=1:d-1
m=n(i)*r(i); c=reshape(c,[m,numel(c)/m]);
[u,s,v]=svd(c,'econ');
s=diag(s); r1=my_chop2(s,ep*norm(s));
u=u(:,1:r1); s=s(1:r1);
r(i+1)=r1;
core(pos:pos+r(i)*n(i)*r(i+1)-1, 1)=u(:);
v=v(:,1:r1);
v=v*diag(s); c=v';
pos=pos+r(i)*n(i)*r(i+1);
end
...
function [r] = my_chop2(sv,eps)
sv0=cumsum(sv(end:-1:1).^2);
ff=find(sv0<eps.^2);
if (isempty(ff) )
r=numel(sv);
else
r=numel(sv)-ff(end);
end
return
end
```
Would you pls fix this problem? Thanks for your time!I notice the tSVD in TT-SVD is implemented as
```
1468 // Find rank due to the Epsilon (NOTE the scaling factor can be ignored, as it does not change the ratios).
1469 for(size_t j = 1; j < rank; ++j) {
1470 if (tmpS[j] <= _eps*tmpS[0]) {
1471 rank = j;
1472 break;
1473 }
1474 }
```
which is different from Oseledets's TT paper and will make the desired error tolerance not met. I'm not sure if there will be any side effects if I simply modify the truncation procedure.
The corresponding MATLAB codes in TT-toolbox are as follows.
```
...
pos=1;
ep=eps/sqrt(d-1);
for i=1:d-1
m=n(i)*r(i); c=reshape(c,[m,numel(c)/m]);
[u,s,v]=svd(c,'econ');
s=diag(s); r1=my_chop2(s,ep*norm(s));
u=u(:,1:r1); s=s(1:r1);
r(i+1)=r1;
core(pos:pos+r(i)*n(i)*r(i+1)-1, 1)=u(:);
v=v(:,1:r1);
v=v*diag(s); c=v';
pos=pos+r(i)*n(i)*r(i+1);
end
...
function [r] = my_chop2(sv,eps)
sv0=cumsum(sv(end:-1:1).^2);
ff=find(sv0<eps.^2);
if (isempty(ff) )
r=numel(sv);
else
r=numel(sv)-ff(end);
end
return
end
```
Would you pls fix this problem? Thanks for your time!Version 4.0RoteKekseRoteKeksehttps://git.hemio.de/xerus/xerus/-/issues/204Binary operations on Tensors use update operators2017-11-21T13:33:42+01:00Philipp TrunschkeBinary operations on Tensors use update operatorsFor example: xerus::Tensor::operator/ calls xerus::Tensor::operator/=
This causes unexpected behaviour.For example: xerus::Tensor::operator/ calls xerus::Tensor::operator/=
This causes unexpected behaviour.https://git.hemio.de/xerus/xerus/-/issues/201calling ALS(A, x, x) results in strange behaviour2019-03-24T04:13:23+01:00Fuchsi*calling ALS(A, x, x) results in strange behaviourshould either print an error or better yet: create a local copy of x as rhs.should either print an error or better yet: create a local copy of x as rhs.Version 4.0Sebastian WolfSebastian Wolfhttps://git.hemio.de/xerus/xerus/-/issues/198libxerus_misc.a is falsy build with -lcholmod etc.2017-05-22T16:15:43+02:00Fuchsi*libxerus_misc.a is falsy build with -lcholmod etc.Version 3.0https://git.hemio.de/xerus/xerus/-/issues/154missing operator Tensor = TensorNetwork2017-05-29T23:27:28+02:00Fuchsi*missing operator Tensor = TensorNetwork````
error: no match for ‘operator=’ (operand types are ‘xerus::Tensor’ and ‘xerus::TensorNetwork’)
````````
error: no match for ‘operator=’ (operand types are ‘xerus::Tensor’ and ‘xerus::TensorNetwork’)
````Version 2.0Sebastian WolfSebastian Wolfhttps://git.hemio.de/xerus/xerus/-/issues/138Move core should go two ways if not cannoicalized.2017-05-29T23:27:29+02:00Sebastian WolfMove core should go two ways if not cannoicalized.Prevents more than maximal ranksPrevents more than maximal ranksVersion 1.5https://git.hemio.de/xerus/xerus/-/issues/133Use slice wise (fixed n) local optimisation in reconstruction ALS2017-05-29T23:27:30+02:00Sebastian WolfUse slice wise (fixed n) local optimisation in reconstruction ALSVersion 1.5https://git.hemio.de/xerus/xerus/-/issues/132Use Slice wise (fixed n) local optimisation in decomposition ALS2017-05-29T23:27:30+02:00Sebastian WolfUse Slice wise (fixed n) local optimisation in decomposition ALSVersion 1.5https://git.hemio.de/xerus/xerus/-/issues/124TN draw not thread safe2018-04-23T03:03:36+02:00Sebastian WolfTN draw not thread safetempnam is not thread safe so neither is TN::draw.tempnam is not thread safe so neither is TN::draw.version 1.4Fuchsi*Fuchsi*https://git.hemio.de/xerus/xerus/-/issues/123TN::draw() does not remove the tmp file2018-04-23T03:03:36+02:00Fuchsi*TN::draw() does not remove the tmp fileit has to be ensured, that the file is deleted - even if the call to dot failed.it has to be ensured, that the file is deleted - even if the call to dot failed.version 1.4Sebastian WolfSebastian Wolfhttps://git.hemio.de/xerus/xerus/-/issues/121Tutorials are not compiling2018-04-23T03:03:36+02:00Sebastian WolfTutorials are not compilingVersion 1.3Fuchsi*Fuchsi*https://git.hemio.de/xerus/xerus/-/issues/112FullTensor::operator=(TensorNetwork &) missing2018-04-23T03:03:37+02:00Fuchsi*FullTensor::operator=(TensorNetwork &) missingVersion 1.3Sebastian WolfSebastian Wolfhttps://git.hemio.de/xerus/xerus/-/issues/107time since program start instead of absolute time in logger2018-04-23T03:03:37+02:00Fuchsi*time since program start instead of absolute time in loggerVersion 1.2Fuchsi*Fuchsi*