#include "dataStruct/MultiIndex.h"
#include "dataStruct/HyperIndex.h"

#include "domain_and_range/DomainPoint.h"
#include "domain_and_range/DomainMapping.h"
#include "dataType/IrregularMatrix.h"
#include "dataType/Number.h"
#include <stdio.h>
#include <stdlib.h>
#include <vector>

int main()
{
	
	std::vector<HyperIndex*> v2;
	std::vector<HyperIndex*> v3;
	
	
	v2 = HyperIndex::getAllIndexes(new MultiIndex(2,4),new MultiIndex(2,3));
		
	std::vector<HyperIndex*>::iterator i;
	
	
	
	//for(i=v2.begin();i!=v2.end();i++)
	//	if(*i != NULL)
	//		(*i)->print(stderr);
	
	//fprintf(stderr,"--pause --\n ");
	
	
	MultiIndex* mi = new MultiIndex(11);
	int ii;
	for(ii=0;ii<=mi->dim;ii++)
		mi->mIdx[ii] = ii;
	
	MultiIndex* ddd = new MultiIndex(2);
	ddd->mIdx[0] = 1;
	ddd->mIdx[1] = 3;
	ddd->mIdx[2] = 5;
	
	HyperIndex* hi = HyperIndex::fromMultiIdx(mi,ddd);
	mi->print(stderr);
	hi->print(stderr);
	
	hi = HyperIndex::getZeroHyperIdx(ddd->dim+1,ddd);
	
	
	
	MultiIndex* mdim = new MultiIndex(1,1);
	std::vector<DomainPoint*> v;
	std::vector<DomainPoint*>::iterator iter;
	
	v = DomainPoint::domainPoints(mdim,50);
	DomainPoint* pp;

	FILE* fp1 = fopen("/home/lbfreitas/t01","w");
	FILE* fp2 = fopen("/home/lbfreitas/t02_","w");
	DomainMapping *DM = DomainMapping::example04();
	DM->allocateIM();
	DM->buildIM_matrices();
	
	
	
	
	for(iter=v.begin();iter!=v.end();iter++)
	{
		//((IrregularMatrix*)(*iter))->printPlot(fp1);
		pp = DM->map_A_delta_to_A_epsilon_usingIM(*iter);
		((IrregularMatrix*)(pp))->printPlot(fp2);
		
	}
	
	mdim = new MultiIndex(1,1);
	v = DomainPoint::domainPoints(mdim,50);
	
	for(iter=v.begin();iter!=v.end();iter++)
	{
		((IrregularMatrix*)(*iter))->printPlot(fp1);

			
	}
	
	fclose(fp1);
	fclose(fp2);
		
	fprintf(stderr,"\ndone!\n");
}
