Index: tol/btol/serie_type/tsrgrav.cpp
===================================================================
--- tol/btol/serie_type/tsrgrav.cpp	(revision 9f6ab11456a65d0f146adb637bccfdf5d381c124)
+++ tol/btol/serie_type/tsrgrav.cpp	(revision 11d9beceb738d205d7cebaa039abd077aac0540b)
@@ -85,7 +85,12 @@
 //--------------------------------------------------------------------
 {
-    if(!Dating()) { return(BDat::Unknown()); }
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
     BUniformDist var(Real(Arg(1)),Real(Arg(2)));
-    return(var.Random());
+    dat = var.Random();
+  }
+  return(dat);
 }
 
@@ -125,17 +130,21 @@
 BDat BTsrGaussian::GetDat(const BDate& dte)
 {
-    BDat newValue;
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
     std::map<double, BDat>::const_iterator keyIterator;
-
-    if(!Dating()) newValue = BDat::Unknown();
-    else {
-  keyIterator = valuesMap_.find(dte.Hash());
-  if(keyIterator == valuesMap_.end()) {
-      newValue = dist_.Random();
-      valuesMap_.insert(std::pair<double, BDat>(dte.Hash(), newValue));
-  } else newValue = keyIterator->second;
-    }
-
-    return(newValue);
+    keyIterator = valuesMap_.find(dte.Hash());
+    if(keyIterator == valuesMap_.end()) 
+    {
+      dat = dist_.Random();
+      valuesMap_.insert(std::pair<double, BDat>(dte.Hash(), dat));
+    } 
+    else 
+    {
+      dat = keyIterator->second;
+    }
+  }
+  return(dat);
 }
 
@@ -179,9 +188,14 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  if(dte == Center()) { return(BDat(1.0)); }
-  else          { return(BDat(0.0)); }
-}
-
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if(!Dating()) { return(BDat::Unknown()); }
+    if(dte == Center()) { return(BDat(1.0)); }
+    else          { return(BDat(0.0)); }
+  }
+  return(dat);
+}
 
 //--------------------------------------------------------------------
@@ -199,8 +213,13 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-       if(dte == Center())     { return(BDat( 1.0)); }
-  else if(dte == PostCenter()) { return(BDat(-1.0)); }
-  else             { return(BDat( 0.0)); }
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+         if(dte == Center())     { return(BDat( 1.0)); }
+    else if(dte == PostCenter()) { return(BDat(-1.0)); }
+    else             { return(BDat( 0.0)); }
+  }
+  return(dat);
 }
 
@@ -220,7 +239,13 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  if(dte >= Center()) { return(BDat(1.0)); }
-  else          { return(BDat(0.0)); }
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if(dte >= Center()) { return(BDat(1.0)); }
+    else          { return(BDat(0.0)); }
+  }
+  return(dat);
+
 }
 
@@ -242,11 +267,17 @@
 //--------------------------------------------------------------------
 {
-  BDate d;
-  if(!Dating()) { return(BDat::Unknown()); }
-  if(dte<Center()) { return(BDat(0.0)); }
-  else {
-   d = Dating()->FirstNoLess (Center());
-   return(Dating()->Difference(d, dte)+1);
- }
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    BDate d;
+    if(dte<Center()) { return(BDat(0.0)); }
+    else 
+    {
+      d = dating->FirstNoLess (Center());
+      return(dating->Difference(d, dte)+1);
+    }
+  }
+  return(dat);
 }
 
@@ -278,16 +309,19 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  BDat dat;
-  if(d0!=d1)
-  {
-    if(y1!=y0)
-    {
-      BReal pendient = (y1-y0)/Dating()->Difference(d0, d1);
-      dat = y0 + pendient*Dating()->Difference(d0, dte);
-    }
-    else
-    {
-      dat = y0;
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if(d0!=d1)
+    {
+      if(y1!=y0)
+      {
+        BReal pendient = (y1-y0)/Dating()->Difference(d0, d1);
+        dat = y0 + pendient*Dating()->Difference(d0, dte);
+      }
+      else
+      {
+        dat = y0;
+      }
     }
   }
@@ -320,12 +354,13 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  BDat dat;
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte) && center_)
   if(center_)
   {
-    BDate next = dte  + Dating();
+    BDate next = dte  + dating;
     if(next.HasValue())
     {
-      BDate prev = next - Dating();
+      BDate prev = next - dating;
       if(prev.HasValue())
       {
@@ -367,7 +402,7 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  BDat dat;
-  if(center_)
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte) && center_)
   {
     dat = center_->Contain(dte);
@@ -478,17 +513,18 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()||!Ser()||!Ser()->Dating()) { return(BDat::Unknown()); }
-  BDate dte2 = dte  + Dating() - Ser()->Dating();
-
-  BUserDate* uDte1 = new BContensDate(dte );
-  BUserDate* uDte2 = new BContensDate(dte2);
-
-  BList* lst = Cons(Ser(),Cons(uDte1,NCons(uDte2)));
-  BDatStatistic* uDat = (BDatStatistic*)(Stat()->Evaluator(lst));
-  BDat dat;
-  if(uDat)
-  {
-    dat = uDat->Contens();
-    DESTROY(uDat);
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte) && Ser() && Ser()->Dating())
+  {
+    BDate dte2 = dte  + Dating() - Ser()->Dating();
+    BUserDate* uDte1 = new BContensDate(dte );
+    BUserDate* uDte2 = new BContensDate(dte2);
+    BList* lst = Cons(Ser(),Cons(uDte1,NCons(uDte2)));
+    BDatStatistic* uDat = (BDatStatistic*)(Stat()->Evaluator(lst));
+    if(uDat)
+    {
+      dat = uDat->Contens();
+      DESTROY(uDat);
+    }
   }
   return(dat);
@@ -548,12 +584,15 @@
 //--------------------------------------------------------------------
 {
-    if(!Dating()) { return(BDat::Unknown()); }
-    BDat dat;
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
     if(Ser(1)&&Ser(2))
     {
-  if(Ser(1)->Dating()->Contain(dte)) { dat = (*Ser(1))[dte]; }
-  else           { dat = (*Ser(2))[dte]; }
-    }
-    return(dat);
+      if(Ser(1)->Dating()->Contain(dte)) { dat = (*Ser(1))[dte]; }
+      else                               { dat = (*Ser(2))[dte]; }
+    }
+  }
+  return(dat);
 }
 
@@ -582,36 +621,36 @@
 {
 //InitTotalTime("BTsrExpand::GetDat");
-  if(!Dating()) { return(BDat::Unknown()); }
-  BDat dat;
-  BDat val = 0;
-  if(Arg(2)) { val = Dat(Arg(2)); }
-  if(Dating() && (dte>=FirstDate()) && dte<=LastDate())
-  {
-    if(Data().HasValue()) { dat = data_[GetIndex(dte)]; }
-    else
-    {
-      BInt n=0;
-      BDate d=FirstDate();
-      BDat  lastNotEqual = val;
-
-      GetLength();
-      Ser()->GetData(data_, FirstDate(),LastDate(),Length());
-
-      BHash hash; Dating()->GetHashBetween(hash, FirstDate(),LastDate());
-      BReal h = dte.Hash();
-      for(; n<Length(); n++)
-      {
-  if(data_[n]==val)
-  {
-    data_[n] = lastNotEqual;
-  }
-  else      { lastNotEqual = data_[n];   }
-  if(hash[n]==h) { dat = data_[n]; }
-  d+=Dating();
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    BDat val = 0;
+    if(Arg(2)) { val = Dat(Arg(2)); }
+    if(Dating() && (dte>=FirstDate()) && dte<=LastDate())
+    {
+      if(Data().HasValue()) { dat = data_[GetIndex(dte)]; }
+      else
+      {
+        BInt n=0;
+        BDate d=FirstDate();
+        BDat  lastNotEqual = val;
+        GetLength();
+        Ser()->GetData(data_, FirstDate(),LastDate(),Length());
+        BHash hash; Dating()->GetHashBetween(hash, FirstDate(),LastDate());
+        BReal h = dte.Hash();
+        for(; n<Length(); n++)
+        {
+          if(data_[n]==val)
+          {
+            data_[n] = lastNotEqual;
+          }
+          else      { lastNotEqual = data_[n];   }
+          if(hash[n]==h) { dat = data_[n]; }
+          d+=Dating();
+        }
       }
     }
   }
 //SumPartialTime;
-
   return(dat);
 }
@@ -689,42 +728,45 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  BDat dat;
-  if((dte>=FirstDate()) && (dte<=LastDate()))
-  {
-    if(!IsStochastic())
-    {
-      dat =  Ser()->GetDat(dte);
-    }
-    else if(Data().HasValue()) 
-    { 
-      bool wasTheBegin = false;
-      if(FirstDate()==BDate::Begin()) 
-      {
-        wasTheBegin = true;
-        firstDate_ = BDate::DefaultFirst();
-      }
-      dat = data_[GetIndex(dte)]; 
-      if(wasTheBegin) firstDate_ = BDate::Begin();
-    }
-    else
-    {
-      GetLength();
-      Ser()->GetData(data_,FirstDate(),LastDate(),Length());
-      
-      BInt n=0;
-      BDate d = FirstDate();
-      if(d==BDate::Begin()) d = BDate::DefaultFirst();
-      BHash hash; Dating()->GetHashBetween(hash, FirstDate(),LastDate());
-      BReal h = dte.Hash();
-      
-      for(; n<hash.Size(); n++) 
-      {
-        hash[n] = d.Hash();
-        if(hash[n]==h) { dat = data_[n]; }
-        d+=Dating();
-      }
-      length_ = hash.Size();
-      CompactData();
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if((dte>=FirstDate()) && (dte<=LastDate()))
+    {
+      if(!IsStochastic())
+      {
+        dat =  Ser()->GetDat(dte);
+      }
+      else if(Data().HasValue()) 
+      { 
+        bool wasTheBegin = false;
+        if(FirstDate()==BDate::Begin()) 
+        {
+          wasTheBegin = true;
+          firstDate_ = BDate::DefaultFirst();
+        }
+        dat = data_[GetIndex(dte)]; 
+        if(wasTheBegin) firstDate_ = BDate::Begin();
+      }
+      else
+      {
+        GetLength();
+        Ser()->GetData(data_,FirstDate(),LastDate(),Length());
+        
+        BInt n=0;
+        BDate d = FirstDate();
+        if(d==BDate::Begin()) d = BDate::DefaultFirst();
+        BHash hash; Dating()->GetHashBetween(hash, FirstDate(),LastDate());
+        BReal h = dte.Hash();
+        
+        for(; n<hash.Size(); n++) 
+        {
+          hash[n] = d.Hash();
+          if(hash[n]==h) { dat = data_[n]; }
+          d+=Dating();
+        }
+        length_ = hash.Size();
+        CompactData();
+      }
     }
   }
@@ -787,44 +829,47 @@
 {
 //InitTotalTime("BTsrPolyn::GetDat");
-  if(!Dating()) { return(BDat::Unknown()); }
-  BDat dat;
-  if(!Length())
-  {
-    dat = 0.0;
-    for(BInt n = 0; n<pol_.Size(); n++)
-    {
-      BDate d = ser_->Dating()->Prev(dte, pol_[n].Degree());
-      BDat  x = (*ser_)[d];
-      dat    += pol_[n].Coef()*x;
-    }
-  }
-  else if(Data().HasValue()) { dat = data_[GetIndex(dte)]; }
-  else if((dte>=firstDate_) && dte<=lastDate_)
-  {
-    BData serData;
-    ser_->GetData(serData);
-
-
-    BHash hash; Dating()->GetHashBetween(hash, firstDate_,lastDate_);
-    Realloc(hash.Size());
-    BInt  n;
-    BDate d;
-    BReal h = dte.Hash();
-
-    for(n=0; n<Length(); n++)
-    {
-      data_[n] = 0.0;
-      for(BInt p = 0; p<pol_.Size(); p++)
-      {
-  BInt m    = n-pol_[p].Degree()+backward_;
-  BDat  x    = serData[m];
-  data_[n] += pol_[p].Coef()*x;
-      }
-      if(hash[n]==h) { dat = data_[n]; }
-
-    }
-    CompactData();
-  }
-//SumPartialTime;
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if(!Length())
+    {
+      dat = 0.0;
+      for(BInt n = 0; n<pol_.Size(); n++)
+      {
+        BDate d = ser_->Dating()->Prev(dte, pol_[n].Degree());
+        BDat  x = (*ser_)[d];
+        dat    += pol_[n].Coef()*x;
+      }
+    }
+    else if(Data().HasValue()) { dat = data_[GetIndex(dte)]; }
+    else if((dte>=firstDate_) && dte<=lastDate_)
+    {
+      BData serData;
+      ser_->GetData(serData);
+
+
+      BHash hash; Dating()->GetHashBetween(hash, firstDate_,lastDate_);
+      Realloc(hash.Size());
+      BInt  n;
+      BDate d;
+      BReal h = dte.Hash();
+
+      for(n=0; n<Length(); n++)
+      {
+        data_[n] = 0.0;
+        for(BInt p = 0; p<pol_.Size(); p++)
+        {
+    BInt m    = n-pol_[p].Degree()+backward_;
+    BDat  x    = serData[m];
+    data_[n] += pol_[p].Coef()*x;
+        }
+        if(hash[n]==h) { dat = data_[n]; }
+
+      }
+      CompactData();
+    }
+  }
+  //SumPartialTime;
   return(dat);
 }
@@ -903,36 +948,39 @@
 {
 //nitTotalTime("BTsrDifEq::GetDat");
-  if(!Dating()) { return(BDat::Unknown()); }
-  BDat dat;
-  if(firstDate_.HasValue() && lastDate_.HasValue() &&
-     (dte>=firstDate_) && (dte<=lastDate_))
-  {
-    if(Data().HasValue()) { dat = data_[GetIndex(dte)]; }
-    else
-    {
-      BInt n=0;
-      BHash hash; Dating()->GetHashBetween(hash, firstDate_,lastDate_);
-      Realloc(hash.Size());
-      BReal h0 = ser_->FirstDate().Hash();
-      BReal h  = dte.Hash();
-
-      for(n=0; (n<Length()) && (hash[n]<h0); n++)
-      {
-  data_[n] = (*ini_)[HashToDte(hash[n])];
-  if(hash[n]==h) { dat = data_[n]; }
-      }
-
-      for(; n<Length(); n++)
-      {
-  data_[n] = (*ser_)[HashToDte(hash[n])];
-  for(BInt p = 0; p<pol_.Size(); p++)
-  {
-    BInt m    = n-pol_[p].Degree();
-    BDat  x   = data_[m];
-    data_[n] += pol_[p].Coef()*x;
-  }
-  if(hash[n]==h) { dat = data_[n]; }
-      }
-      CompactData();
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if(firstDate_.HasValue() && lastDate_.HasValue() &&
+       (dte>=firstDate_) && (dte<=lastDate_))
+    {
+      if(Data().HasValue()) { dat = data_[GetIndex(dte)]; }
+      else
+      {
+        BInt n=0;
+        BHash hash; Dating()->GetHashBetween(hash, firstDate_,lastDate_);
+        Realloc(hash.Size());
+        BReal h0 = ser_->FirstDate().Hash();
+        BReal h  = dte.Hash();
+
+        for(n=0; (n<Length()) && (hash[n]<h0); n++)
+        {
+    data_[n] = (*ini_)[HashToDte(hash[n])];
+    if(hash[n]==h) { dat = data_[n]; }
+        }
+
+        for(; n<Length(); n++)
+        {
+    data_[n] = (*ser_)[HashToDte(hash[n])];
+    for(BInt p = 0; p<pol_.Size(); p++)
+    {
+      BInt m    = n-pol_[p].Degree();
+      BDat  x   = data_[m];
+      data_[n] += pol_[p].Coef()*x;
+    }
+    if(hash[n]==h) { dat = data_[n]; }
+        }
+        CompactData();
+      }
     }
   }
@@ -1017,8 +1065,13 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  if(!LeftSer() || !RightSer()) { return(BDat::Unknown()); }
-  if(dte<=Center())    { return((*LeftSer()) [dte]); }
-  else        { return((*RightSer())[dte]); }
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if(!LeftSer() || !RightSer()) { return(BDat::Unknown()); }
+    if(dte<=Center())    { return((*LeftSer()) [dte]); }
+    else        { return((*RightSer())[dte]); }
+  }
+  return(dat);
 }
 
@@ -1060,8 +1113,14 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  if(!LeftSer() || !RightSer())     { return(BDat::Unknown()); }
-  if(dte>=RightSer()->FirstDate()) { return((*RightSer())[dte]); }
-  else           { return((*LeftSer ())[dte]); }
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if(!Dating()) { return(BDat::Unknown()); }
+    if(!LeftSer() || !RightSer())     { return(BDat::Unknown()); }
+    if(dte>=RightSer()->FirstDate()) { return((*RightSer())[dte]); }
+    else           { return((*LeftSer ())[dte]); }
+  }
+  return(dat);
 }
 
@@ -1103,8 +1162,14 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  if(!LeftSer() || !RightSer())   { return(BDat::Unknown()); }
-  if(dte<=LeftSer()->LastDate()) { return((*LeftSer ())[dte]); }
-  else         { return((*RightSer())[dte]); }
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if(!Dating()) { return(BDat::Unknown()); }
+    if(!LeftSer() || !RightSer())   { return(BDat::Unknown()); }
+    if(dte<=LeftSer()->LastDate()) { return((*LeftSer ())[dte]); }
+    else         { return((*RightSer())[dte]); }
+  }
+  return(dat);
 }
 
@@ -1148,42 +1213,45 @@
 //--------------------------------------------------------------------
 {
-  if(!Dating()) { return(BDat::Unknown()); }
-  BDat dat;
-  if(Data().HasValue()) { dat = data_[GetIndex(dte)]; }
-  else
-  {
-    BInt len = GetLength();
-    Realloc(len);
-    BDate d;
-    BInt  n;
-    BInt  ind=-1;
-    BData expand(len);
-    BPol  p  = rat_ % (len-1);
-    BHash hash; Dating()->GetHashBetween(hash, FirstDate(),LastDate());
-    BReal h = dte.Hash();
-  //Std("\nExpansion = ");
-    for(n=0; n<len; n++)
-    {
-      expand[n] = p.Coef(n);
-      data_[n]=(*ser_)[HashToDte(hash[n])];
-    //Std(expand[n].Name());
-    //Std(data_[n].Name());
-    }
-    for(n=0; n<len; n++)
-    {
-    //Std(BText("\nOmmit[")+d+"]="+(*ommit_)[d]);
-      if((*ommit_)[d]!=0)
-      {
-        BDat pivot = data_[n];
-        for(BInt m=n; m<Length(); m++)
+  BDat dat;
+  BUserTimeSet* dating = Dating();
+  if(dating && (dating->Inf()<=dte) && (dating->Sup()>=dte))
+  {
+    if(Data().HasValue()) { dat = data_[GetIndex(dte)]; }
+    else
+    {
+      BInt len = GetLength();
+      Realloc(len);
+      BDate d;
+      BInt  n;
+      BInt  ind=-1;
+      BData expand(len);
+      BPol  p  = rat_ % (len-1);
+      BHash hash; Dating()->GetHashBetween(hash, FirstDate(),LastDate());
+      BReal h = dte.Hash();
+    //Std("\nExpansion = ");
+      for(n=0; n<len; n++)
+      {
+        expand[n] = p.Coef(n);
+        data_[n]=(*ser_)[HashToDte(hash[n])];
+      //Std(expand[n].Name());
+      //Std(data_[n].Name());
+      }
+      for(n=0; n<len; n++)
+      {
+      //Std(BText("\nOmmit[")+d+"]="+(*ommit_)[d]);
+        if((*ommit_)[d]!=0)
         {
-          data_[m] -= expand[m-n]*pivot;
+          BDat pivot = data_[n];
+          for(BInt m=n; m<Length(); m++)
+          {
+            data_[m] -= expand[m-n]*pivot;
+          }
+      //Std(BText("\ndata_[")+n+"]="+data_[n].Name());
         }
-    //Std(BText("\ndata_[")+n+"]="+data_[n].Name());
-      }
-      if(hash[n]==h) { ind = n; }
-    }
-    if(ind>=0) { dat = data_[ind]; }
-  }
-  return(dat);
-}
+        if(hash[n]==h) { ind = n; }
+      }
+      if(ind>=0) { dat = data_[ind]; }
+    }
+  }
+  return(dat);
+}
