GithubHelp home page GithubHelp logo

Comparison of ellipsoidal objects is done only based on relative precision, absolute precision is ignored about ellipsoids HOT 82 CLOSED

systemanalysisdpt-cmc-msu avatar systemanalysisdpt-cmc-msu commented on August 17, 2024
Comparison of ellipsoidal objects is done only based on relative precision, absolute precision is ignored

from ellipsoids.

Comments (82)

 avatar commented on August 17, 2024

Hellow. I right understand, that I should write tests fo protected method elltool.core.AGenEllipsoid.isEqualInternal? Shoud I create new class heir in my test for access this metod?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

No, isEqual calls isEqualinternal so you should write tests for isEqual. Just study the source code of ellipsoid.isEqual and everything will become clear.

from ellipsoids.

 avatar commented on August 17, 2024

Good evening, I'm analyzed elltool.core.AGenEllipsoid.isEqualInternal, and understanded, that in this function variable tollerance = ell1Obj.RelTol, and than it pass in function absrelcompare like AbsTol, if I write test like this
cv1 = [0;0];
cv2 = [0;0];
Q1 = eye(2);
Q2 = eye(2);
Q2(1,1)=Q2(1,1)+1e-4;
absTol1=1e-3;
ell1Obj = ellipsoid(cv1,Q1,'absTol',absTol1);
ell2Obj = ellipsoid(cv2,Q2);
it answer that ellipsoid dosen't equal, (becase standart value (in constructor) relTol fo first ellipsoid = 1e-5). This is dosen't right. Should I write any others fail test? Es example the test which demonstrated the opposite situation or one test will be enougth? Because, I cant't understand what anothers test will be really usefull.

from ellipsoids.

 avatar commented on August 17, 2024

Also i think it's better in function elltool.core.AGenEllipsoid.isEqualInternal selected absTol=min(ell1Obj.absTol,ell2Obj.absTol) and relTol = min(ell1Obj.relTol, ell2Obj.relTol). Because now the elementary property of symmetric (isEqual(ell1Obj,ell2Obj))=isEqual(ell2Obj,ell1Obj). dosen't. work The function work so wrong (in my opinion) that i can write a lot of fail tests but its won't be real usefull.

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024
  1. The test you suggested is ok (apart from terribly wrong variable names). But I think we will need at least the following tests:
    a) The one that checks a comparison of ellipsoidal arrays created via ellipsoid.fromRepMat method. This test should check that isEqual for arrays works consistently with absTol and relTol specified in fromRepMat method.
    b) Same as a) but for arrays of ellipsoids consisting of elements with different values of absTol and relTol. You can create such arrays manually like this:

ell1=ellipsoid(..., precision 1)
ell2=ellipsoid(...., precision 2)
ellVec=[ell1,ell2]

or like this

ell1Vec=ellipsoid.fromRepMat( precision 1)
ell2Vec=ellipsoid.fromRepMat( precision 2)
ellMat=[ell1Vec;ell2Vec]

  1. The more tests you write - the better. The one checks that isEqual(ell1Obj,ell2Obj))=isEqual(ell2Obj,ell1Obj) is great, you should write it. Also please check a symmetry of isEqual for ellipsoidal arrays as well. In general what matters is not the number of tests but a total test coverage i.e. your tests should test as much code as possible with minimum overlapping between each other. For instance the test that usees

Q2(1,1)=Q2(1,1)+1e-4;
absTol1=1e-3;

doesn't check for symmetry of isEqual so you cannot skip the symmetry test, it should be there as well. Please think of other cases of incorrect behavior of isEqual and see if they all are covered by your tests. If not - you need to write more tests before fixing isEqual.

from ellipsoids.

 avatar commented on August 17, 2024

Hellow, i have question about how should works isEqual an ideal, if we have two Vecs of Ells like this
Ell1Vec = [Ell11Obj(absTol11,relTol11); Ell12Obj(absTol12,relTol12)]
Ell2Vec = [Ell21Obj(absTol21,relTol21); Ell22Obj(absTol22,relTol22)]
when we call isEqual(Ell1Vec,Ell2Vec) we compare Ell11Obj with Ell21Obj and Ell12Obj with Ell22Obj, as result we have a ResVec dim (1,2); The quastion is follow: when we compare Ell11Obj with Ell12Obj we should use as absTol the min_{i=1,2,j=1,2}(absTol(i,j)) and relTol is the min_{i=1,2,j=1,2}(relTol(i,j)), i.e we have the same relTol and absTol for all pairs

or we should use as absTol1 the min_{i=1,2}(absTol(i)1) and relTol1 is the min_{i=1,2}(relTol(i)1) i.e. we have in common case we should use diffrent absTol and relTol for coporation the first pair and the second

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

absTol and relTol should be calculated for each pair separately i.e.

abs1Tol=min(abs11Tol,abs21Tol) - absolute tolerance for comparing Ell1Vec(1) and Ell2Vec(1)
abs2Tol=min(abs12Tol,abs22Tol) - absolute tolerance for comparing Ell1Vec(2) and Ell2Vec(2)

The same rule should be used for relative tolerance. Thus each pair is compared independently of other pairs.

Just in case - Ell1Vec is a bad name - see our naming convention.

from ellipsoids.

 avatar commented on August 17, 2024

Hello, I decided restart my work. I did clone last master version and when i tried install toolbox there was one problem...

adding
[C:\ellipsoids\lib\jmodgen\FileUtils\bin\modgenfileutils.jar]
to C:\ellipsoids\install\javaclasspath.txt :done


Warning: files
[C:\ellipsoids\lib\jmodgen\FileUtils\bin\modgenfileutils.jar]
have been added to Java static class path,
files
[]
have been deleted from Java static class path,
<<<<------ PLEASE RESTART MATLAB ------->>>>

In modgen.common.throwwarn (line 26)
In modgen.java.AJavaStaticPathMgr/setUp (line 90)
In s_setjavapath (line 6)
In s_install (line 7)
Undefined variable "modgen" or class "modgen.io.FileUtils.isDirectory".

Error in modgen.io.isdir (line 16)
isPositive=modgen.io.FileUtils.isDirectory(dirName);

Error in modgen.system.ExistanceChecker.isDir (line 38)
isPositive=modgen.io.isdir(nameStr);

Error in modgen.containers.ondisk.AHashMap (line 97)
if ~ExistanceChecker.isDir(self.storageLocation)

Error in modgen.containers.ondisk.HashMapXMLMetaData (line 35)
self=[email protected](regArgList{:},...

Error in modgen.configuration.ConfRepoManager (line 86)
storage=modgen.containers.ondisk.HashMapXMLMetaData(...

Error in modgen.configuration.AdaptiveConfRepoManager (line 59)
self=[email protected](...

Error in elltool.conf.ConfRepoMgr (line 17)
self=[email protected](varargin{:});

Error in elltool.conf.Properties.init (line 47)
confRepoMgr=elltool.conf.ConfRepoMgr();

Error in ellipsoidsinit (line 7)
Properties.init();

Error in s_install (line 11)
ellipsoidsinit();

is it important?

from ellipsoids.

 avatar commented on August 17, 2024

I'm restarted matlab. And all things are OK. Sorry, for last comment

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

This is a normal behavior - see installation instructions in Wiki. The reason you need to restart Matlab is to add jar (Java archives) to a static java path of Matlab.

from ellipsoids.

 avatar commented on August 17, 2024

Hello. I already asked this question, but I want to clarify.
You sad, that, if we have two arrays of ellipsoids, where different ellipsoids has different value absTol and relTol, then "absTol and relTol should be calculated for each pair separately", but structcomparevec (also as in absrelcompare) suppose, that we have union absTol and relTol for comparing all array's ellements.

Should I change stucture of function and compare each pairs
separately?

Or should I select union absTol and relTol and compare arrays?

Now i write tests and want understand how isEqual should work.

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Yes, you need to change isEqualInternal a little bit - you should use the first output arguments of getAbsTol and getRelTol methods i.e. arrays of absTol and relTol instead of second outputs that are scalar values of these properties (see help headers of getAbsTol and getRelTol for more details).

This way you will be able to use the tolerances as I described above in my comment on Nov 12.

from ellipsoids.

 avatar commented on August 17, 2024

Hello, I updated to actual master. And, if I riqht understand, I shoud correct function isEqualInternal now.

I have an question about an function.

function SComp=formCompStruct(SEll,SFieldNiceNames,...
absTol,isPropIncluded) %#ok
if (~isempty(SEll.QMat))
SComp.(SFieldNiceNames.QMat)=SEll.QMat;
else
SComp.(SFieldNiceNames.QMat)=[];
end
SComp.(SFieldNiceNames.centerVec)=SEll.centerVec;
if (~isempty(SEll.QInfMat))
SComp.(SFieldNiceNames.QInfMat)=SEll.QInfMat;
else
SComp.(SFieldNiceNames.QInfMat)=[];
end
if (isPropIncluded)
SComp.(SFieldNiceNames.absTol)=SEll.absTol;
end
end

If I correct understand, now in function isEqualInternal it use for rename struct fields to NiceNames,
but

  1. for what this function requires argument absTol?
  2. why field relTol (it is in structure returned by toStruct, if isPropInclude==true (now it is false)) is descriminated, also as fields nPlot2dPoints , nPlot3dPoints?
  3. what this function shoud do really?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Please have a look at #42 (comment) - I expect Alexander to fix this problem tomorrow.

Anyways,

  1. absTol is not required

  2. same reason as absTol - if isPropIncluded =true then all properties should go to SComp, otherwise - only centerVec and shapeMat for ellipsoid class (and some others for hyperplane and GenEllipsoid 3) see 2 above.

from ellipsoids.

 avatar commented on August 17, 2024

Last comment, I asked about method formCompStruct(), but I looked formCompStruct() in class GenEllipsoid, and in real formCompStruct() from class ellipsoid work. Sorry for my mistake. Nonetheless I have some questions about formCompStruct() from class ellipsoid.

methods (Static)
function SComp = formCompStruct(SEll, SFieldNiceNames, absTol, isPropIncluded)
if (~isempty(SEll.shapeMat))
SComp.(SFieldNiceNames.shapeMat) = gras.la.sqrtmpos(SEll.shapeMat, absTol);
else
SComp.(SFieldNiceNames.shapeMat) = [];
end
SComp.(SFieldNiceNames.centerVec) = SEll.centerVec;
if (isPropIncluded)
SComp.(SFieldNiceNames.absTol) = SEll.absTol;
SComp.(SFieldNiceNames.relTol) = SEll.relTol;
SComp.(SFieldNiceNames.nPlot2dPoints) = SEll.nPlot2dPoints;
SComp.(SFieldNiceNames.nPlot3dPoints) = SEll.nPlot3dPoints;
end
end
end

  1. Why is it so different from GenEllipsoid's method?
  2. For what we take sqrtm from ShapeMat?
    SComp.(SFieldNiceNames.shapeMat) = gras.la.sqrtmpos(SEll.shapeMat, absTol)?

Can I deleted commands
SEll1Array = arrayfun(@(SEll)ellFirstArr.formCompStruct(SEll,...
SFieldNiceNames, absTol, isPropIncluded), SEll1Array);
SEll2Array = arrayfun(@(SEll)ellSecArr.formCompStruct(SEll,...
SFieldNiceNames, absTol, isPropIncluded), SEll2Array);
because they work very strange, and write normal fail test for the rest of the code?

In real it doesn't matter how the structure's field are named for their comparations, becase in structcomparevec() the command fieldnames() is using.

from ellipsoids.

 avatar commented on August 17, 2024

I of course can try to write adequat test for full code, that check diffence between absTol and relTol, but extract the matrix root from two ShapeMatrixs before compare them..., can I delete this command?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Can you please name all your questions with sequential numbers, not always 1,2 in each comment. Otherwise it is hard to refer to specific points in your comments. Anyways, please have a look at #42 (comment)

  1. you should not delete these lines, you should concentrate on the tests while Alexander fixes the implementation
  2. we need these lines for two reasons
    a) isEqual method returns two output arguments, the second is "reportStr" which is supposed to be human-readable. The idea is to have matrix "shapeMat" referred to in this report as "Q" because it is more familiar (actually it should be QSqrt because actually it is a square root of Q, not just Q
    c) we cannot just compare shapeMat because of the way we treat precision. Let us consider 2-dimensional ellipsoid in axes x and y and units of x and y are centimeters. Then If you want to represent this 2-dimensional ellipsoid as a matrix transformation of circle with radius=1 you use sqrt(Q), not Q because "units" of Q squared centimeters. Units of absTol are centimeters and we cannot compare something that is measured in squared centimeters with something that is just in centimiters. That is what we compare sqrt(Q_1)-sqrt(Q_2) (in centimiters) with absTol (also in centimiters).

Does it make sense?

from ellipsoids.

 avatar commented on August 17, 2024

Yes, thank you.

from ellipsoids.

 avatar commented on August 17, 2024

I added some fail tests
text_test_result with properties:

    textOutFid: 1
verbosityLevel: 1
 isDotDispMode: 1
    isAllShown: 0
        errors: {}
      failures: {'elltool.core.test.mlunit.EllipsoidTestCase/testIsEqual'  [1x2073 char]}
   should_stop: 0

+--------------------------------------------------------------------------------+
| << FAILED >> || TESTS: 197, FAILURES: 1, ERRORS: 0, RUN TIME(sec.): 1945.9 |
+--------------------------------------------------------------------------------+

And I hope they are right.

However the question of creartion some test for repMat method rest, because I don't understand what test should I do? Of corse all test that right for two ells, have analogues for repMat array, but I don't want copypaste. And more logical test, in my opinion, is cheking that: if smth right for ell1 and ell2, then the same right for repMat(ell1), repMat(ell2), but these test don't fail now.

Should I do any another test?

from ellipsoids.

 avatar commented on August 17, 2024

Sorry, I forgot add issue number in my commit message. Is this very bad?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

I will review your changes tomorrow, yes, it is not a good thing - if you can - please revert changes made in your branch and make a new commit with a corrected commit message, this is easy to do.

from ellipsoids.

 avatar commented on August 17, 2024

I reverted changes and made new commit, but I'm not sure, that I did all right.

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024
  1. You should always use an issue number preceded with # sign in your commit messages - see https://github.com/SystemAnalysisDpt-CMC-MSU/ellipsoids/wiki/Issue-workflow-policy-with-GIT for more details

Please revert your commit and make it again with a correct commit message this time.

  1. Please define constants like 1e-5, 1e-6 as separate constant variables (capital letters with underscores).

  2. Get rid of copy-pasting by placing repeating blocks of code into nested functions

  3. Always use a second output of isEqual like this:
    [isOk,reportStr]=a.isEqual(b)...
    mlunitext.assert(isOk,reportStr);

if such asset fails a content of reportStr is displayed making it possible to understand why the test failed.

  1. make sure you do not use assert on vectors or matrices like this

mlunitext.assert(all(aMat==bMat));

because all((aMat==bMat) returns a logical vector while assert expects a scalar. You should use all(aMat(:)==bMat(:))

  1. As for sufficiency of these tests - first of all you need to write tests that "prove" that absTol is not used. For that purpose you need to write tests that should pass if absTol were taken into account but fail in our case. Then, after fixing the bug in isEqualInternal you will make sure that these tests pass. I.e. tests should fail with the current (incorrect) implementation and should pass with the correct implementation (when absTol is not ignored).

  2. Please do rebase on latest changes in master.

from ellipsoids.

 avatar commented on August 17, 2024
  1. Sorry, I'm not understand what you mean.
    Now, in function isEqualInternal the value absTol is really ignored, but it is replaced by value relTol taken by first ellipsoid
    [25] [~, tolVal] = ellFirstArr.getRelTol();
    [55-56] modgen.struct.structcomparevec(SEll1Array,...
    SEll2Array, tolVal); % the tolVal give to func like absTol
    If relTol doesn't set clearly then absTol replaced by default value relTol, as I understand. So now
    the ellipsoids are allways compared with absTol, but with wrong value absTol.

And I wrote one test that chek this situation.
testEll1 = ellipsoid([0;0],eye(2),'absTol',1e-6,'relTol',1e-4);
testEll2 = ellipsoid([1e-5;1e-5],eye(2),...
'absTol',1e-6,'reltol',1e-4);
mlunitext.assert(isEqual(testEll1,testEll2),false);

Also there is an test thet chek situation when ellipsoids aren't equal if we use only absTol but should be equal when we use two presision parametrs. The case when relTol is really important.

Can you clarify what another test should I add?

from ellipsoids.

 avatar commented on August 17, 2024
  1. This is comment for my code or this is answer for my question:
    "However the question of creartion some test for repMat method rest, because I don't understand what test should I do? Of corse all test that right for two ells, have analogues for repMat array, but I don't want copypaste."

from ellipsoids.

 avatar commented on August 17, 2024
  1. In any case, I don't understand what block are repeating.
    Because every test consists two logical part
    first : creation of ellipsoids % different for different test
    second: comparations % one command
    and mluninttextassert % different for different test

When I asked about copy past I mean logical copypast, i.e.
if test like
testEll1=ellipsoid();
testEll2 = ellipsoid()
is fail test, then test like
testEll1Mat = repMat(testEll1,sizeVec)
testEll2Mat = repMat(testEll2, sizeVec)
is fail test too. And I'm not sure that it is useful.

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024
  1. Thanks for explanation, I believe that the tests you already have are just enough. Now is the time to fix the implementation (once you are done with 1-7 of course)

  2. Well, in your example
    testEll1=ellipsoid();
    testEll1Mat = repMat(testEll1,sizeVec)
    should be placed into a nested/sub function if you are going to use the same logic more than once.

Another example of copy-pasting is

        testEll1 = ellipsoid([0;0],eye(2),'absTol',1e-4,'relTol',1e-4);
        testEll2 = ellipsoid([0;0],eye(2),'absTol',1e-5,'relTol',1e-5);
        testEll3 = ellipsoid([0;0],eye(2),'absTol',1e-6,'relTol',1e-6);

the only difference between these 3 lines are values of absTol and relTol. If create a nested
function ellObj=create(absTol,relTol)
ellObj = ellipsoid([0;0],eye(2),'absTol',absTol,'relTol',relTol);
end

then the block above will be transformed into

testEll1=create(1e-4,1e-4);
testEll2=create(...
testEll3=create(...)

which is much more compact but not compact enough. Thus the text step would be creating one more nested function which will accept a list of absTol,relTol pairs and produce a vector of ellipsoid objects. I.e. testEll1, ... , testEll6 should be returned by this function as testEllVec.

  1. permsTestEllPairMat is a logical variable with incorrect name - please see our coding policy to figure out a correct name.

from ellipsoids.

 avatar commented on August 17, 2024
  1. Hello, I don't understand, about reportStr:
    Can you explain me at the first test, as example.
    ABS_TOL1 = 1e-4;
    REL_TOL1 = ABS_TOL1;
    ABS_TOL2 = 1e-5;
    REL_TOL2 = ABS_TOL2;
    testEll1 = ellipsoid([0;0],eye(2),'absTol',ABS_TOL1,'relTol',REL_TOL1);
    testEll2 = ellipsoid([1e-4;1e-4],eye(2),...
    'absTol',ABS_TOL2,'reltol',REL_TOL2);
    isOk = isEqual(testEll1,testEll2)==isEqual(testEll2,testEll1);
    mlunitext.assert(isOk)
    This test check that symmetric property is fail. But if I do smth like
    [isOk1, reportStr1] = isEqual(testEll1,testEll2);
    [isOk2, reportStr2] = isEqual(testEll2,testEll1);
    then isEqual return: reportStr1 = ' ', reportStr2 = ' '. And both of reportStr aren't informative. Shoud I return smth like this
    myReportStr = 'isEqual :: symmetry properties of the relation of equality is fail'
    mlunitext.assert(isOk,myReportStr)

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

reportStr is not empty when isEqual returns false. All you need to do is to pass reportStr into assert function, no need to change reportStr. This way when a test fails assert prints out reportStr.

from ellipsoids.

 avatar commented on August 17, 2024

Thank you

from ellipsoids.

 avatar commented on August 17, 2024

Stop, in my exmaple in real
[isOk1, reportStr1] = isEqual(testEll1,testEll2);
[isOk2, reportStr2] = isEqual(testEll2,testEll1);
In real
reportStr1 is empty, and reportStr2 is not empty and contain message that explain why testElll2 isn't equal testEll1, but I wrote the test that compare isOk1 and isOk2, they shoud be equal but they are not.
and I wanted write
mluinttext.assert(isOk1 == isOk2), what reportStr shoud I add?
I.e. in this test isEqual call twice, but return different result (in logic shoud return the same)

from ellipsoids.

 avatar commented on August 17, 2024

Should I write smth like this

if isEqual(testEll1,testEll2)
[isOk, reportStr] = isEqual(testEll2,testEll1);
mluint.assert(isOk,reportStr)
end

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

No, this is not efficient, you should call isEqual only once

from ellipsoids.

 avatar commented on August 17, 2024

And how can I chek that symmetry property, and transitive property is fail, using only one call in one test?

P.S. these fails aren't linked with replasing absTol by relTol, but this is due to the fact that is taken tollerance from first elllipsoid and ignore tollerance from second.
[~, tolVal] = ellFirstArr.getRelTol()

You said (12 Nov 2015) in real shoud use minimum of two tollerance.

from ellipsoids.

 avatar commented on August 17, 2024

I can curtainly using smth like this
testEll1Vec = [testEll1,testEll2];
testEll2Vec = [testEll2, testEll1];
[isEqVec, reportStr ] =isEqual(testEll1Vec, testEll2Vec).

Shoud I do so?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Ah, sorry, I didnt notice that you swapped inputs, but still you should never call isEqual with just output.

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

With just one output I mean. Yes, you can vectorize calls

from ellipsoids.

 avatar commented on August 17, 2024

Sorry, there is one problem with vectorize calls, I didn't think about it last night, because I was a little tired.
The fact that
if
ABS_TOL1 = 1e-4;
REL_TOL1 = ABS_TOL1;
ABS_TOL2 = 1e-5;
REL_TOL2 = ABS_TOL2;
testEll1 = ellipsoid([0;0],eye(2),'absTol',ABS_TOL1,'relTol',REL_TOL1);
testEll2 = ellipsoid([1e-4;1e-4],eye(2),'absTol',ABS_TOL2,'reltol',REL_TOL2);

then
[isOk1, reportStr] = isEqual(testEll1, testEll2)
% return [1, ' ']

[isOk2, reportStr] = isEqual(testEll2, testEll1)
% return [0, q-->Max. absolute difference (0.0001) is greater than the specified tolerance (1e-05)]

[isEqVec, reportStr] = isEqual([testEll1, testEll2],[testEll2,testEll1])
% return isEqVec = [0,0]
reportStr =
(1).q-->Max. absolute difference (0.0001) is greater than the specified tolerance (1e-05)
(2).q-->Max. absolute difference (0.0001) is greater than the specified tolerance (1e-05)

this is because now ellipsoids aren't comparing independly in pairs.
i.e
[25] [~, tolVal] = ellFirstArr.getRelTol(); % get minimum of RelTol in array, i.e. min(relTol1, relTol2)
...
[54] [isEqualArr, reportStr] =...
modgen.struct.structcomparevec(SEll1Array,...
SEll2Array, tolVal);

i.e we compare two vectors with one value AbsTol (in fact it is min(relTol1, relTol2)), not pairs of ells.

We disscused this problem yet. And your said use first output arguments of getAbsTol and getRelTol methods. And also I wrote 5 test (with perms ) which catsh this fail.

But the question how I shoud write first, second, and last test, using inly one call, rest?
first test checks symmetry property equality two ells.
snd test checks transitive property three ells.
last (5th) test checks that if ellipsoid's pairs are equal then any
permutation of these ellipsoids in the array gives the same result.

from ellipsoids.

 avatar commented on August 17, 2024

Why I can't do commit?

git.exe push --progress "origin" issue_14_IvanovaElena

To https://github.com/SystemAnalysisDpt-CMC-MSU/ellipsoids.git
! [rejected] issue_14_IvanovaElena -> issue_14_IvanovaElena (non-fast-forward)
error: failed to push some refs to 'https://github.com/SystemAnalysisDpt-CMC-MSU/ellipsoids.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Because you didn't pay attention to what I said on my seminar about pushing after rebase. You need to use force flag because rebase changes structure of the branch. I hope you do not expect me to repeat myself so please re-read official git documentation for git rebase and make sure to ask other guys who completed at least the first task like Alex Timchenko or Nikita Zuyanov or Ilya Shirokih to explain the whole git workflow.

from ellipsoids.

 avatar commented on August 17, 2024

Thank you very much for your explanation. I will try fix my errors, and do all right next time.

But what about general question?

Now isEqualInternal works like this

  • it takes relTol from ellFirstArr, in real it take relTol = min(relTol1,relTol2,...relToln), where
    relTol1 is relative tolerance fisrt element from ellFirstArr, relToln is relative tolerance n element from ellFirstArr
    [25] [~, tolVal] = ellFirstArr.getRelTol();
  • then it compare two structArray using relTol as absTol (one for the whole array)
    [54] [isEqualArr, reportStr] =...
    modgen.struct.structcomparevec(SEll1Array,...
    SEll2Array, tolVal);

We decide that isEqual shoud work so

  • take [absTol1Arr,] = ellFirstArr.getAbsTol(); [relTol1Arr,]=ellSndArr.getRelTol();
    [absTol2Arr,]=ellFirstArr.getAbsTol(); [relTol2Arr,]=ellSndArr.getRelTol();
  • to compare the ellipsoids in pairs with absTol(i)=min(absTol1Arr(i),absTol2Arr(i)) and relTol(i)=min(relTol1Arr(i), relTol2Arr(i)).

So I indicated following problem in isEqualInternal
it use toleranse only from first argument and ingnore from scnd. As result, symmertry and transitive property of equation are fail

  • it replacing absTol by relTol
  • it compare two arrays of ellipsoids (with one value tolerance), not pairs of ellipsoids.

AND NOW THE QUESTION. It nessery for me (another worlds I don't know how to do it otherwise) using several calls of isEqual in one test.
As example, the test that check that symmetry property is fail

ABS_TOL1 = 1e-4;
REL_TOL1 = ABS_TOL1;
ABS_TOL2 = 1e-5;
REL_TOL2 = ABS_TOL2;
testEll1 = ellipsoid([0;0],eye(2),'absTol',ABS_TOL1,'relTol',REL_TOL1);
testEll2 = ellipsoid([1e-4;1e-4],eye(2),'absTol',ABS_TOL2,'reltol',REL_TOL2);

then
[isOk1, reportStr] = isEqual(testEll1, testEll2)
% return [1, ' ']

[isOk2, reportStr] = isEqual(testEll2, testEll1)
% return [0, q-->Max. absolute difference (0.0001) is greater than the specified tolerance (1e-05)]

[isEqVec, reportStr] = isEqual([testEll1, testEll2],[testEll2,testEll1])
% return isEqVec = [0,0]
reportStr =
(1).q-->Max. absolute difference (0.0001) is greater than the specified tolerance (1e-05)
(2).q-->Max. absolute difference (0.0001) is greater than the specified tolerance (1e-05)

Now ellipsoids aren't comparing independly in pairs. and I can't using vectorize calls, for cheking.

  1. how can I decide the problem of several calls another ways?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024
  1. how can I decide the problem of several calls another ways?

I suggest we stick with using a single value of both relTol and absTol for the whole array instead of pair-wise comparison. I remember that I suggested to use a pair-wise comparison earlier but that was before I created issue #44 which is supposed to fix the vectorization problem once and for all. In issue #44 we only need to implement a isEqualScalarInternal method (for comparing two scalar objects) while the rest (comparison of arrays) will be handled automatically by the logic already implemented in HandleObjectCloner class. So for now let us just use the second output of getRelTol and getAbsTol

As for vectorized comparison - you can use arrayfun like this

[isOkCArr,reportStrCArr]=arrayfun(@isEqual,ellFirstArr,ellSecArr,'UniformOutput',false);
isOkArr=cell2mat(isOkCArr);

from ellipsoids.

 avatar commented on August 17, 2024

Thanks
10) I also have an question. When assert fail (first time ) we abort from test function. Should I write 5 test function (because all test should be fail), Or may be there is an method put all test in one function?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

The more tests - the better as long as there is no any copy-pasting. So let us have separate methods (tests) and place common code into sub functions or separate not test methods.

from ellipsoids.

 avatar commented on August 17, 2024

I fixed the tests. Are they right now? Can I start fix the function?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

You can work on the tests and the methods (not functions!) in parallel.

  1. But the tests are not ok because there are still a lot of problems with the variable names, please fix them.

  2. Some tests are very similar, like
    testIsEqualAbsTolRepByRelTol
    and
    testIsEqualDifBetweenAbsTolAndRelTol

Please put a common portion of these tests into a separate function or non-test method.

from ellipsoids.

 avatar commented on August 17, 2024

nFirstElems = numel(ellFirstArr);
nSecElems = numel(ellSecArr);
...
isnFirstScalar=nFirstElems > 1;
isnSecScalar=nSecElems > 1;
...
if isnFirstScalar&&isnSecScalar
if ~isequal(firstSizeVec, secSizeVec)
throwerror('wrongSizes',...
'sizes of ellipsoidal arrays do not match');
end;
compare();
isEqualArr = reshape(isEqualArr, firstSizeVec);
elseif isnFirstScalar
SEll2Array=repmat(SEll2Array, firstSizeVec);
compare();
isEqualArr = reshape(isEqualArr, firstSizeVec);
else
SEll1Array=repmat(SEll1Array, secSizeVec);
compare();
isEqualArr = reshape(isEqualArr, secSizeVec);
end

  1. Do I right understand that this code allows compare one ellipsoid with array of ellipsoids?
    Should I save this functionality, when I correct the method

I did 12) and perhaps 11)

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024
  1. Do I right understand that this code allows compare one ellipsoid with array of ellipsoids?

Yes

Should I save this functionality, when I correct the method

Yes

  1. prefix f is only for function_handle variables, not for the functions
  2. please use correct suffices for costants as well ("_VEC" for vectors)
  3. constants should be used everywhere, please do not use in-line constants
    no need to define
  4. fCreateEllVec is not a method, why is it within methods/end scope?
  5. Please move it outside of classdef/end (but keep in the same m file). This way you can declare
    functions in a class file without creating a separate file for those functions.
  6. instead of [TOL(1),TOL(2)] please write TOL(1:2), please apply this concept to all your code
  7. in all your tests please a) check that elltool.conf.Properties.getAbsTol and getRelTol returns tolerances
    you expect. Right now if someone changes configuration via elltool.editconf('default') some of your tests
    will fail. b) directly pass absTol and relTol into ellipsoid constructor and make sure that the results
    are the same with and without passing in the tolerances directly. This can be done by replacing
    "ellipsoid" with fCreateEll which takes two values: fCreateEll=@ellipsoid and fCreateEll=@(varargin)ellipsoid(varargin{:},'absTol',absTol,'relTol',relTol).
    This way you can transform each of the tests into a nested function "checkMaster" and call it twice (one for each value of fCreateEll)

from ellipsoids.

 avatar commented on August 17, 2024

14)Has function name any special sufficient or prefix, according to the coding policy?
20) a) Sorry, I don't understand what you mean. Could you clarify, please?
Now all tests, which I have done, compare ellipsoids with directly set value relTol, absTol. None ellipsoid is created with default value.

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024
  1. no, just remove f prefix and make the function name start with a small letter.
  2. here is an example to demonstrate my idea

function testSomething
fCreateEll=@ellipsoid;
checkMaster();
fCreateEll=@(varargin)ellipsoid(varargin{:},'absTol',absTol,'relTol',relTol).
checkMaster();
function checkMaster()
shMat=...
ellObj=fCreateEll(shMat);
%do some comparisons and make assert calls.
end
end

from ellipsoids.

 avatar commented on August 17, 2024
  1. And how can I define expected result for tests without directly set values relTol and absTol?

If someone change configuration, the result of comparation can change (and can be right or false) , and I can't guess it.

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024
  1. So, when the tolerances are not specified in the constructor the default values from xml configuration are used (see https://github.com/SystemAnalysisDpt-CMC-MSU/ellipsoids/wiki/Toolbox-configuration-management).

Please note that when you normally use the toolbox the configuration parameters from xml file opened with elltool.editconf are used but when you use ellipsoid classes from tests the parameters from a different file edited via elltool.test.editconf are used.

In your test you can access the values loaded from xml file via elltool.conf.Properties.getAbsTol() and elltool.conf.Properties.getRelTol(). This way you will know which tolerances to use for comparison.

  1. Your task assumes that you need to write tests not just for ellipsoid class, but also for GenEllipsoid and hyperplane. The easiest way to avoid copy-pasting is to do this following these steps:
    1. Move all your tests from products/+elltool/+core/+test/+mlunit/EllipsoidTestCase.m   

into a separate test case class (you need to create it).
2. Read the last section in https://github.com/SystemAnalysisDpt-CMC-MSU/ellipsoids/wiki/MLUNITEXT-unit-testing-framework-description and make sure you understand how to write parameterized tests. You can use elltool.reach.test.run_cont_tests as an example of test parameterization. Then parameterize your test case with ellipsoid/hyperplane constructor. This means that instead of calling ellipsoid directly you will pass a variable fCreate=@ellipsoid or [email protected] from outside, parse it in set_up_param method as explained in the manual and put it into a private field of the test case. Then in each test you would call self.fCreate(shMat,centerVec) instead of calling ellipsoid(shaMat,centerVec) directly.

Please note that in case of hyperplane you will have to improvise a bit, like this for example:

fCreate=@(x,y)hyperplane(x(:,1),y(1)) to make sure that hyperplane can be constructed as if it were an ellipsoid. I hope you understand the idea - make the tests think that they create ellipsoid while in fact they create one of three objects: hyperplane, ellipsoid and GenEllipsoid.

from ellipsoids.

 avatar commented on August 17, 2024

Hello, I try write parametric tests, but I have a problem
22) with GenEllipsoid constructor
If I do smth like this

  • elltool.core.GenEllipsoid([0;0],eye(2),'absTol',1e-5,'relTol',1e-2)
    or
  • elltool.core.GenEllipsoid([0;0],eye(2),[1,2;3,4],'absTol',1e-5,'relTol',1e-2)
    there is an error: Error using elltool.core.GenEllipsoid (line 169)
    Incorrect number of parameters

If I right understand what's happend, the error throw from GenEllipsoid constructor
[168] if nInput>3
[169] throwerror('wrongParameters',...
[170] 'Incorrect number of parameters');

I don't understand smth, or now I can't directly set absTol and relTol in constructor for GenEllipsoids? Or how I can?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

This is a bug, I just fixed it in master, please rebase.

from ellipsoids.

 avatar commented on August 17, 2024

Hello, I still have questions about
20) If I right understand what you said: I might have problems, when the tolerances are not specified in the constructor. But in all my tests the tolerances specified in the constructors? I choose special ellipsoids with set values of tolerances, centVecs, and shapeMatrixs for which isEqual doesn't work so, as we want?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Not in all of your tests - please re-read what I wrote above - you need to run the same tests twice - once without the tolerances specified in the constructor and once - with the tolerances specified in the constructor. In the first case you need to use elltool.conf.Properties class to extract the default values of tolerances (since you do not specify them in the constructor and this is the only way to know what tolerances are used).

from ellipsoids.

 avatar commented on August 17, 2024
  1. But the results of working isEqual are not the same with and without passing in the tolerances directly in the general case:

as example
ell1=ellipsoid([0;0], eye(2));
ell2=ellipsoid([1e-4;1e-4],eye(2));
isEqual(ell1,ell2) return 0 because default absTol=1e-6, relTol=1e-5

in the same time
ell3 =ellipsoid([0;0],eye(2),'absTol',1e-3,'relTol',1e-2)
ell4=ellipsoid([1e-4;1e-4],eye(2),'absTol',1e-3,'relTol',1e-2);
isEqual(ell3,ell4) return 1. And it's right.

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Right. For exactly that reason you need to
a) pass tolerances directly
b) do not pass them directly and just check that the tolerances returned by elltool.conf.Properties match your expectation. If this assumption doesn't hold - you just skip testing without passing the tolerances directly, if there is a match - you test as usual.

Ideally using fixed tolerances in your tests is not a good idea because as you correctly mentioned the default tolerances can take any values. Thus in case b) you can use something like this:

defAbsTol=elltool.conf.Properties.getAbsTol();
defRelTol=elltool.conf.Properties.getRelTol();

ell3 =ellipsoid([0;0],eye(2),'absTol',defAbsTol_1e+3,'relTol',defRelTol_1e+4)
etc...

This way your test will always work and you won't have to skip b) part just because the default tolerances from "Properties" class do not match your expectations.

from ellipsoids.

 avatar commented on August 17, 2024

And another question, because the tests are fail

function testSomething
fCreateEll=@ellipsoid;
checkMaster();

% in this moment we return from testSomething and 2nd call checkMaster won;t work

fCreateEll=@(varargin)ellipsoid(varargin{:},'absTol',absTol,'relTol',relTol).
checkMaster();
function checkMaster()
shMat=...
ellObj=fCreateEll(shMat);
%do some comparisons and make assert calls.
end
end

Should I put 2 calls checkMaster in two different function?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

If you make checkMaster use the tolerances that depend on what you specify in fCreateEll the second call should also work. It doesn't matter how many times you call checkMaster, what matters is what tolerances are used inside it.

from ellipsoids.

 avatar commented on August 17, 2024

I fixed the tests

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Ok, let us wait for the test result on the server. Meanwhile you can switch to issue #44

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Ok, not sure what you fixed but I see 4 test failures.

from ellipsoids.

 avatar commented on August 17, 2024

Oh, sorry, I push version EllipsoidTestCase with not actaul tests. I will correct

  1. When I create new class PrameterizatedTC I'm also create file run_param_test where I put runner for prametric case. And this construction didn't work. Should I replaced runner in run_tests file?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Should I replaced runner in run_tests file?

No need to replace it, just combine your suites with suite object in run_tests using fromSuites static method.

from ellipsoids.

 avatar commented on August 17, 2024

I did. Now there is 9 fail test. Should I correct the isEqualInternal and did the test pass, or I should start #44?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

When I mentioned issue #44 I thought that you fixed all the tests. Since this is not the case you need to fully complete this task first and only then move to issue #44. Thanks.

from ellipsoids.

 avatar commented on August 17, 2024

I corrected the function. But the code is still unstabel. There is 6 failures, but I don't know what was failed,because error_fail_list.txt is empty?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

It is not empty, please be more attentive: https://groups.google.com/forum/#!topic/ellipsoids-tests-notification/ae6TiIeNmf8

from ellipsoids.

 avatar commented on August 17, 2024

I looked the test that was failed. I'm afraid that all of them had been written, such way, that all of them passed with wrong isEqual. Because in all test the relTol are used, as the shift parametr). (Expcept may be testEllunionEa, I dont't really understand what's happend in this test yet)

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

Right. You need to figure out how these tests work and modify them so that they pass keeping in mind that now isEqual accounts for relTol as well.

from ellipsoids.

 avatar commented on August 17, 2024

Ok
18 Фев 2016 г. 13:15 пользователь "Peter Gagarinov" <
[email protected]> написал:

Right. You need to figure out how these tests work and modify them so that
they pass keeping in mind that now isEqual accounts for relTol as well.


Reply to this email directly or view it on GitHub
#14 (comment)
.

from ellipsoids.

 avatar commented on August 17, 2024

EllTbx_Win64_2015b » issue_14_IvanovaElena - Build # 12 - Fixed: I right understand, that all tests pass now?

from ellipsoids.

 avatar commented on August 17, 2024

What should I do now?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024
  1. Please make getTol function

function tolVec=getTol(ellFirstArr,ellSecArr)
ellArr=[ellFirstArr(:);ellSecArr(:)];
[,tolVec(1)]=ellArr.getAbsTol();
[
,tolVec(2)]=ellArr.getRelTol();
end

return absTol and relTol separately instead of tolVec vector. All this is to make
our source code more readable.

  1. In hyp function you created please use more meaningful names based on our
    naming convention instead of just x and y:
function res = hyp(x,y,varargin)
    res = hyperplane(x,y(1),varargin{:});
end
  1. In the following code please also pass absTol and relTol as separate input arguments:

classdef PrameterizedTC < mlunitext.test_case
properties (Access=private)
fCreateObj;
end
methods (Access=private)
function objCVec = createObjCVec(self,centCVec,varargin)
matCVec=repmat(num2cell(eye(numel(centCVec{1})),...
[1,2]),1,numel(centCVec));
if numel(varargin)==0
fCrObVec = @(cent,mat,tol) self.fCreateObj(cent,mat);
objCVec=cellfun(fCrObVec,centCVec,matCVec,...
'UniformOutput',false);
else
fCrObVec = @(cent,mat,tol) self.fCreateObj(cent,mat,...
'absTol',tol(1),'relTol',tol(2));
objCVec=cellfun(fCrObVec,centCVec,matCVec,varargin{:},...
'UniformOutput',false);
end
end
end

Also, in the same code
objCVec=cellfun(fCrObVec,centCVec,matCVec,varargin{:},...
'UniformOutput',false);

should be outside of if else then because it will always work even when nargin(varargin)==0

  1. in
        tolCVec=num2cell([10*defTol,100*defTol,defTol;10*defTol,...
            100*defTol,defTol],1);

num2cell is not necessary, jus use {} like this {1,2;3,4}

Same goes for

        matCVec=repmat(num2cell(eye(numel(centCVec{1})),...
            [1,2]),1,numel(centCVec));
  1. In
    function set_up_param(self, varargin)
        import modgen.common.throwerror;
        nArgs = numel(varargin);
        if nArgs == 1
            self.fCreateObj=varargin{1};
        elseif nArgs > 1
            throwerror('wrongInput','Too many parameters');
        end
    end

insted of
nArgs = numel(varargin);
if nArgs == 1
please use

if nargin==2
....

  1. Please make all lines shorter than 74 by using "..."
  2. Logical variables should always have "is" or "has" prefix
  • see our coding convention
  1. In
            fCrObVec = @(cent,mat,tol) self.fCreateObj(cent,mat,...
                'absTol',tol(1),'relTol',tol(2));

cent,mat are incorrect names - where are suffices for matrices and vectors?
tol needs to be replaced with separate absTol and relTol inputs

  1. In HyperplaneTestCase removing checks for the output message is not a good idea,

all you need to do is to replace replace the expected messages with the correct ones

Same goes for all other places that contained checks for expected messages. You cannot
remove such checks, you can only replace the expected message with a correct one.

from ellipsoids.

 avatar commented on August 17, 2024

I did 24)-32)

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

You can merge to master now, please follow these steps:

  1. Rebase against the latest master and wait for the test results
  2. Switch to master
  3. Merge -> from -> origin/remotes/your branch (using local branch can dangerous because it can contain unpushed changes)
  4. Important !!! Set "no fast forward flag". Press OK
  5. DO NOT PUSH JUST YET. Right click and open log. It should look like "petlya".
  6. If eveything is ok - press push.

While you wait for the test results you can start working on your next task: #44

from ellipsoids.

 avatar commented on August 17, 2024

Sorry, I have a probllem with merge?

git.exe merge --no-ff remotes/origin/issue_14_IvanovaElena

error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@ABasicEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+elltool/+core/@AEllipsoid': Permission denied
error: cannot stat 'products/+gras/+ellapx/+lreachplain/+probdef/+test/+mlunit': Permission denied
error: cannot stat 'products/+gras/+ellapx/+lreachplain/+probdef/+test/+mlunit': Permission denied
error: cannot stat 'products/+gras/+ellapx/+lreachplain/+probdyn/+test/+mlunit': Permission denied
error: cannot stat 'products/+gras/+ellapx/+lreachplain/+probdyn/+test/+mlunit': Permission denied
error: cannot stat 'products/+gras/+ellapx/+lreachuncert/+probdef/+test/+mlunit': Permission denied
error: cannot stat 'products/+gras/+ellapx/+lreachuncert/+probdyn/+test/+mlunit': Permission denied
error: cannot stat 'products/+gras/+ellapx/+lreachuncert/+probdyn/+test/+mlunit': Permission denied

git did not exit cleanly (exit code 128) (375 ms @ 24.02.2016 23:42:55)

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

I think this is because you didn't close matlab or some other app is blocking those files.

Please reboot your pc just in case. Then switch/checkout to origin/master with checkbox "recreate branch if exisits". This will create a fresh copy of local master. Then switch to this local restored master and run merge again.

from ellipsoids.

 avatar commented on August 17, 2024

thanks, but there is another question. I look test results in test group
image

and build #15 Failure in the same time build #17 Succseful, but the message about build #15 is upper than build #17? Test are fail or no?

from ellipsoids.

pgagarinov avatar pgagarinov commented on August 17, 2024

You should always look at the latest build, no matter when you receive emails. You tests have passed.

from ellipsoids.

TYXDG avatar TYXDG commented on August 17, 2024

Hello! Sorry to bother you. I use Matlab 2018a. Please allow me to explain my installation process to you first. When I installed ET-2.1 in MATLAB 2018a, start_matlab2015b_win64 did not work; So I run s_install.m and the result is as follows:
-------------------elltool.deploy.JavaStaticPathMgr-------------------
adding
[D:\Software\Research_Software\ellipsoids-2.1\lib\jmodgen\FileUtils\bin\modgenfileutils.jar]
to D:\Software\Research_Software\ellipsoids-2.1\install\javaclasspath.txt :done

Warning: files
[D:\Software\Research_Software\ellipsoids-2.1\lib\jmodgen\FileUtils\bin\modgenfileutils.jar]
have been added to Java static class path,
files
[]
have been deleted from Java static class path,
<<<<------ PLEASE RESTART MATLAB ------->>>>

In modgen.common.throwwarn (line 26)
In modgen.java.AJavaStaticPathMgr/setUp (line 90)
In s_setjavapath (line 6)
In s_install (line 7)
Undefined variable "modgen" or class "modgen.io.FileUtils.isDirectory".
Error in modgen.io.isdir (line 16)
isPositive=modgen.io.FileUtils.isDirectory(dirName);
Error in modgen.system.ExistanceChecker.isDir (line 38)
isPositive=modgen.io.isdir(nameStr);
Error in modgen.containers.ondisk.AHashMap (line 97)
if ~ExistanceChecker.isDir(self.storageLocation)
Error in modgen.containers.ondisk.HashMapXMLMetaData (line 35)
self=[email protected](regArgList{:},...
Error in modgen.configuration.ConfRepoManager (line 86)
storage=modgen.containers.ondisk.HashMapXMLMetaData(...
Error in modgen.configuration.AdaptiveConfRepoManager (line 59)
self=[email protected](...
Error in elltool.conf.ConfRepoMgr (line 17)
self=[email protected](varargin{:});
Error in elltool.conf.Properties.init (line 47)
confRepoMgr=elltool.conf.ConfRepoMgr();
Error in ellipsoidsinit (line 7)
Properties.init();
Error in s_install (line 11)
ellipsoidsinit();
……………………………………………………………………
I closed MATLAB, re-opened it, and ran s_install.m again, there is a new problem:
…………………………………………………….
files
[]
are in current static path but not
in D:\Software\Research_Software\ellipsoids-2.1\install\javaclasspath.txt while files
[D:\Software\Research_Software\ellipsoids-2.1\lib\jmodgen\FileUtils\bin\modgenfileutils.jar]
are in D:\Software\Research_Software\ellipsoids-2.1\install\javaclasspath.txt but not in
current static path.
It can be that C:\Users\DG\AppData\Roaming\MathWorks\MATLAB\R2018a\javaclasspath.txt file contains the same entries
as D:\Software\Research_Software\ellipsoids-2.1\install\javaclasspath.txt.
If that is the case please remove those entries and restart Matlab!
…………………………………………………………………………………………………….
Then I deleted D:\Software\Research_Software\ellipsoids-2.1\install\javaclasspath.txt. Close MATLAB, re-open it, and run s_install.m again. The same results appear as in the beginning. Now I have no idea about this. I would be very grateful if you could give me some advice

from ellipsoids.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.