Difference between revisions of "File:E1efig09abc1a150.png"

From TORI
Jump to: navigation, search
(Importing image file)
 
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
  +
[[Complex map]]s of [[tetration]] $\mathrm{tet}_b$ to base<br>
Importing image file
 
  +
$b\!=\!1.5$ , left, <br>
  +
$b\!=\!\exp(1/\mathrm e)$ , center, and<br>
  +
$b\!=\!\sqrt{2}$ , right.
  +
  +
$f\!=\! \mathrm{tet}(x\!+\!\mathrm i y)$ is shown in the $x,y$ plane with levels
  +
$~p\!=\!\Re(f)\!=\! \mathrm{const}~$ and levels
  +
$~q\!=\!\Im(f)\!=\! \mathrm{const}~$. The integer levels are shown with thick lines.
  +
  +
This image is close to the figure 9 in the article
  +
<ref name="e1e">
  +
http://tori.ils.uec.ac.jp/PAPERS/2011e1e.pdf
  +
H.Trappmann, D.Kouznetsov. Computation of the Two Regular Super-Exponentials to base exp(1/e). (Mathematics of Computation, 2011, in press)
  +
</ref>.
  +
  +
The [[C++]] generators of the pictures used in the figure are available and will be uploaded upon request.
  +
  +
Copyleft 2011 by Dmitrii Kouznetsov. You may copy, modify and/or distribute the image for free but the source should be attributed.
  +
  +
==[[C++]] generator of first map, $b\!=\!1.5$ ==
  +
  +
In order to compile the code below,
  +
the following files should be loaded:
  +
[[ado.cin]],
  +
[[conto.cin]],
  +
[[GLxw2048.inc]],
  +
[[f2048b15.inc]],
  +
[[f15.cin]]
  +
  +
<poem><nomathjax><nowiki>
  +
#include <math.h>
  +
#include <stdio.h>
  +
#include <stdlib.h>
  +
#define DB double
  +
#define DO(x,y) for(x=0;x<y;x++)
  +
using namespace std;
  +
#include<complex>
  +
typedef complex<double> z_type;
  +
  +
// #include <complex.h>
  +
// #define z_type complex<double>
  +
#define Re(x) x.real()
  +
#define Im(x) x.imag()
  +
#define I z_type(0.,1.)
  +
#include "conto.cin"
  +
//DB T22=-8.5715740896774235522;
  +
//DB T42= 9.6180745210214273558;
  +
//#include "f21E.cin"
  +
//#include "e1etf.cin"
  +
#include "f15.cin"
  +
main(){ int j,k,m,n; DB x,y, p,q, t; z_type z,c,d, cu,cd;
  +
// int M=201,M1=M+1;
  +
// int N=401,N1=N+1;
  +
int M=81,M1=M+1;
  +
int N=161,N1=N+1;
  +
DB X[M1],Y[N1], g[M1*N1],f[M1*N1], w[M1*N1]; // w is working array.
  +
char v[M1*N1]; // v is working array
  +
// FILE *o;o=fopen("f21E.eps","w"); ado(o,0,0,94,92);
  +
// FILE *o;o=fopen("02.eps","w"); ado(o,0,0,214,212);
  +
// FILE *o;o=fopen("be1ezoom.eps","w"); ado(o,0,0,87,87);
  +
FILE *o;o=fopen("b15zoom.eps","w"); ado(o,87,87);
  +
fprintf(o,"46 45 translate\n 10 10 scale\n");
  +
DO(m,M1) X[m]=-4.+.1*(m-.5);
  +
DO(n,N1) Y[n]=-4.+.05*(n-.5);
  +
for(m=-4;m<5;m++) {M(m,-4)L(m,4)}
  +
for(n=-4;n<5;n++) {M( -4,n)L(4,n)} fprintf(o,".006 W 0 0 0 RGB S\n");
  +
fprintf(o,"/adobe-Roman findfont .6 scalefont setfont\n");
  +
for(m=-2;m<0;m+=2) {M(-4.7,m-.2) fprintf(o,"(%1d)s\n",m);}
  +
for(m= 0;m<3;m+=2) {M(-4.4,m-.2) fprintf(o,"(%1d)s\n",m);}
  +
for(m=-2;m<0;m+=2) {M(m-.3,-4.48) fprintf(o,"(%1d)s\n",m);}
  +
for(m= 0;m<3;m+=2) {M(m-.16,-4.48) fprintf(o,"(%1d)s\n",m);}
  +
/*
  +
fprintf(o,"/Times-Italic findfont 1 scalefont setfont\n");
  +
//fprintf(o,"/adobe-italic findfont 1 scalefont setfont\n");
  +
M(-4.7, 4.5) fprintf(o,"(y)s\n");
  +
M( 4.6,-4.8) fprintf(o,"(x)s\n");
  +
M(-4,0)L(4.1,0) M(0,-4)L(0,4.1) fprintf(o,".01 W 1 0 1 RGB S\n");
  +
*/
  +
  +
//z_type tm,tp,F[M1*N1];;
  +
DO(m,M1)DO(n,N1){ g[m*N1+n]=9999;
  +
f[m*N1+n]=9999;}
  +
DB b=sqrt(2);
  +
DO(m,M1){x=X[m]; printf("x=%6.3f\n",x);
  +
DO(n,N1){y=Y[n]; z=z_type(x,y);
  +
if(abs(z+2.)>.04)
  +
{
  +
// c=F21E(z);
  +
// c=E1ETF(z);
  +
c=F15(z);
  +
p=Re(c); q=Im(c);
  +
if(p>-9999 && p<9999) g[m*N1+n]=p;
  +
if(q>-9999 && q<9999 && fabs(q)>1.e-14) f[m*N1+n]=q;
  +
}
  +
}}
  +
fprintf(o,"1 setlinejoin 2 setlinecap\n");
  +
p=2.; q=1.1;;
  +
#include "plofu.cin"
  +
  +
fprintf(o,"0 setlinejoin 0 setlinecap\n");
  +
// p=1.e-15;
  +
// for(n=-10;n<11;n++) {q=p*n; z=z_type(q,0.); printf("%19.15f %19.15f\n",q, Re(TQ2E(z)) )
  +
; }
  +
//y=2*M_PI/log(2.);
  +
// y=M_PI/log(log(2));
  +
//y=9.064720284;
  +
  +
// M(-2,0)L(-10.1, 0) fprintf(o,"0.05 W 1 1 1 RGB S\n");
  +
//
  +
// DO(n,20){ M(-2.-.4*n,0)L(-2-.4*(n+.5),0) }
  +
// fprintf(o,".11 W 0 0 0 RGB S\n");
  +
  +
//M(-2,0)L(-4.1, 0) fprintf(o,".1 W 0 0 0 RGB [.14 .14] 0 setdash S\n"); //fails at some pri
  +
nters
  +
  +
//M(-10,0)L(-2,0)fprintf(o,".04 W 1 0 1 RGB S\n");
  +
fprintf(o,"showpage\n");
  +
fprintf(o,"%cTrailer\n",'%');
  +
fclose(o);
  +
// system( "gv b15zoom.eps &"); //for UNIX
  +
system( "open b15zoom.eps"); //for macintosh
  +
system("epstopdf b15zoom.eps");
  +
// system( "xpdf be1ezoom.pdf"); // for LINUX
  +
getchar(); system("killall Preview"); // For macintosh
  +
}
  +
  +
</nowiki></nomathjax></poem>
  +
  +
==[[C++]] generator of second map==
  +
<poem><nomathjax><nowiki>
  +
</nowiki></nomathjax></poem>
  +
  +
==[[C++]] generator of third map, $b\!=\!\sqrt{2}\!\approx\!1.41$==
  +
Files required:
  +
[[ado.cin]],
  +
[[conto.cin]],
  +
[[sqrt2f21e.cin]]
  +
<poem><nomathjax><nowiki>
  +
#include <math.h>
  +
#include <stdio.h>
  +
#include <stdlib.h>
  +
#define DB double
  +
#define DO(x,y) for(x=0;x<y;x++)
  +
#include<complex>
  +
typedef std::complex<double> z_type;
  +
  +
#define Re(x) x.real()
  +
#define Im(x) x.imag()
  +
#define I z_type(0.,1.)
  +
#include "conto.cin"
  +
DB T22=-8.5715740896774235522;
  +
DB T42= 9.6180745210214273558;
  +
//#include "f21E.cin"
  +
#include "sqrt2f21e.cin"
  +
//#include "e1etf.cin"
  +
//#include "f15.cin"
  +
int main(){ int j,k,m,n; DB x,y, p,q, t; z_type z,c,d, cu,cd;
  +
// int M=201,M1=M+1;
  +
// int N=401,N1=N+1;
  +
int M=81,M1=M+1;
  +
int N=161,N1=N+1;
  +
DB X[M1],Y[N1], g[M1*N1],f[M1*N1], w[M1*N1]; // w is working array.
  +
char v[M1*N1]; // v is working array
  +
// FILE *o;o=fopen("f21E.eps","w"); ado(o,0,0,94,92);
  +
// FILE *o;o=fopen("02.eps","w"); ado(o,0,0,214,212);
  +
// FILE *o;o=fopen("bq2zoom.eps","w"); ado(o,87,87);
  +
FILE *o;o=fopen("e1e09q2.eps","w"); ado(o,87,87);
  +
fprintf(o,"46 45 translate\n 10 10 scale\n");
  +
DO(m,M1) X[m]=-4.+.1*(m-.5);
  +
DO(n,N1) Y[n]=-4.+.05*(n-.5);
  +
for(m=-4;m<5;m++) {M(m,-4)L(m,4)}
  +
for(n=-4;n<5;n++) {M( -4,n)L(4,n)} fprintf(o,".006 W 0 0 0 RGB S\n");
  +
/*
  +
fprintf(o,"/adobe-Roman findfont .6 scalefont setfont\n");
  +
for(m=-2;m<0;m+=2) {M(-4.7,m-.2) fprintf(o,"(%1d)s\n",m);}
  +
for(m= 0;m<3;m+=2) {M(-4.4,m-.2) fprintf(o,"(%1d)s\n",m);}
  +
for(m=-2;m<0;m+=2) {M(m-.3,-4.48) fprintf(o,"(%1d)s\n",m);}
  +
for(m= 0;m<3;m+=2) {M(m-.16,-4.48) fprintf(o,"(%1d)s\n",m);}
  +
*/
  +
/*
  +
fprintf(o,"/Times-Italic findfont 1 scalefont setfont\n");
  +
//fprintf(o,"/adobe-italic findfont 1 scalefont setfont\n");
  +
M(-4.7, 4.5) fprintf(o,"(y)s\n");
  +
M( 4.6,-4.8) fprintf(o,"(x)s\n");
  +
M(-4,0)L(4.1,0) M(0,-4)L(0,4.1) fprintf(o,".01 W 1 0 1 RGB S\n");
  +
*/
  +
  +
//z_type tm,tp,F[M1*N1];;
  +
DO(m,M1)DO(n,N1){ g[m*N1+n]=9999;
  +
f[m*N1+n]=9999;}
  +
DB b=sqrt(2);
  +
DO(m,M1){x=X[m]; printf("x=%6.3f\n",x);
  +
DO(n,N1){y=Y[n]; z=z_type(x,y);
  +
if(abs(z+2.)>.04)
  +
{
  +
c=F21E(z);
  +
//c=E1ETF(z);
  +
// c=F15(z);
  +
p=Re(c); q=Im(c);
  +
if(p>-9999 && p<9999) g[m*N1+n]=p;
  +
if(q>-9999 && q<9999 && fabs(q)>1.e-14) f[m*N1+n]=q;
  +
}
  +
}}
  +
fprintf(o,"1 setlinejoin 2 setlinecap\n");
  +
p=2.; q=1.1;;
  +
#include "plofu.cin"
  +
  +
fprintf(o,"0 setlinejoin 0 setlinecap\n");
  +
// p=1.e-15;
  +
// for(n=-10;n<11;n++) {q=p*n; z=z_type(q,0.); printf("%19.15f %19.15f\n",q, Re(TQ2E(z)) ); }
  +
//y=2*M_PI/log(2.);
  +
// y=M_PI/log(log(2));
  +
//y=9.064720284;
  +
  +
// M(-2,0)L(-10.1, 0) fprintf(o,"0.05 W 1 1 1 RGB S\n");
  +
//
  +
// DO(n,20){ M(-2.-.4*n,0)L(-2-.4*(n+.5),0) }
  +
// fprintf(o,".11 W 0 0 0 RGB S\n");
  +
  +
//M(-2,0)L(-4.1, 0) fprintf(o,".1 W 0 0 0 RGB [.14 .14] 0 setdash S\n"); //fails at some printers
  +
  +
//M(-10,0)L(-2,0)fprintf(o,".04 W 1 0 1 RGB S\n");
  +
fprintf(o,"showpage\n%cTrailer",'%'); fclose(o);
  +
system("epstopdf e1e09q2.eps");
  +
system( "open e1e09q2.pdf");
  +
getchar(); system("killall Preview"); // For macintosh
  +
}
  +
</nowiki></nomathjax></poem>
  +
  +
==[[Latex]] generator of labels==
  +
<poem><nomathjax><nowiki>
  +
</nowiki></nomathjax></poem>
  +
  +
==References==
  +
<references/>
  +
  +
[[Category:E1e]]
  +
[[Category:Base sqrt(2)]]
  +
[[Category:Complex maps]]
  +
[[Category:C++]]
  +
[[Category:Book]]
  +
[[Category:BookMap]]
  +
[[Category:Holomorphic functions]]
  +
[[Category:Latex]]
  +
[[Category:Tetration]]

Latest revision as of 08:34, 1 December 2018

Complex maps of tetration $\mathrm{tet}_b$ to base
$b\!=\!1.5$ , left,
$b\!=\!\exp(1/\mathrm e)$ , center, and
$b\!=\!\sqrt{2}$ , right.

$f\!=\! \mathrm{tet}(x\!+\!\mathrm i y)$ is shown in the $x,y$ plane with levels $~p\!=\!\Re(f)\!=\! \mathrm{const}~$ and levels $~q\!=\!\Im(f)\!=\! \mathrm{const}~$. The integer levels are shown with thick lines.

This image is close to the figure 9 in the article [1].

The C++ generators of the pictures used in the figure are available and will be uploaded upon request.

Copyleft 2011 by Dmitrii Kouznetsov. You may copy, modify and/or distribute the image for free but the source should be attributed.

C++ generator of first map, $b\!=\!1.5$

In order to compile the code below, the following files should be loaded: ado.cin, conto.cin, GLxw2048.inc, f2048b15.inc, f15.cin


 #include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #define DB double
 #define DO(x,y) for(x=0;x<y;x++)
using namespace std;
#include<complex>
typedef complex<double> z_type;

// #include <complex.h>
// #define z_type complex<double>
 #define Re(x) x.real()
 #define Im(x) x.imag()
 #define I z_type(0.,1.)
 #include "conto.cin"
//DB T22=-8.5715740896774235522;
//DB T42= 9.6180745210214273558;
//#include "f21E.cin"
//#include "e1etf.cin"
#include "f15.cin"
 main(){ int j,k,m,n; DB x,y, p,q, t; z_type z,c,d, cu,cd;
// int M=201,M1=M+1;
// int N=401,N1=N+1;
 int M=81,M1=M+1;
 int N=161,N1=N+1;
 DB X[M1],Y[N1], g[M1*N1],f[M1*N1], w[M1*N1]; // w is working array.
 char v[M1*N1]; // v is working array
// FILE *o;o=fopen("f21E.eps","w"); ado(o,0,0,94,92);
// FILE *o;o=fopen("02.eps","w"); ado(o,0,0,214,212);
// FILE *o;o=fopen("be1ezoom.eps","w"); ado(o,0,0,87,87);
 FILE *o;o=fopen("b15zoom.eps","w"); ado(o,87,87);
 fprintf(o,"46 45 translate\n 10 10 scale\n");
  DO(m,M1) X[m]=-4.+.1*(m-.5);
  DO(n,N1) Y[n]=-4.+.05*(n-.5);
 for(m=-4;m<5;m++) {M(m,-4)L(m,4)}
 for(n=-4;n<5;n++) {M( -4,n)L(4,n)} fprintf(o,".006 W 0 0 0 RGB S\n");
 fprintf(o,"/adobe-Roman findfont .6 scalefont setfont\n");
 for(m=-2;m<0;m+=2) {M(-4.7,m-.2) fprintf(o,"(%1d)s\n",m);}
 for(m= 0;m<3;m+=2) {M(-4.4,m-.2) fprintf(o,"(%1d)s\n",m);}
 for(m=-2;m<0;m+=2) {M(m-.3,-4.48) fprintf(o,"(%1d)s\n",m);}
 for(m= 0;m<3;m+=2) {M(m-.16,-4.48) fprintf(o,"(%1d)s\n",m);}
/*
 fprintf(o,"/Times-Italic findfont 1 scalefont setfont\n");
 //fprintf(o,"/adobe-italic findfont 1 scalefont setfont\n");
 M(-4.7, 4.5) fprintf(o,"(y)s\n");
 M( 4.6,-4.8) fprintf(o,"(x)s\n");
 M(-4,0)L(4.1,0) M(0,-4)L(0,4.1) fprintf(o,".01 W 1 0 1 RGB S\n");
*/
 
//z_type tm,tp,F[M1*N1];;
 DO(m,M1)DO(n,N1){ g[m*N1+n]=9999;
  f[m*N1+n]=9999;}
DB b=sqrt(2);
 DO(m,M1){x=X[m]; printf("x=%6.3f\n",x);
 DO(n,N1){y=Y[n]; z=z_type(x,y);
if(abs(z+2.)>.04)
{
// c=F21E(z);
// c=E1ETF(z);
         c=F15(z);
  p=Re(c); q=Im(c);
if(p>-9999 && p<9999) g[m*N1+n]=p;
  if(q>-9999 && q<9999 && fabs(q)>1.e-14) f[m*N1+n]=q;
}
  }}
fprintf(o,"1 setlinejoin 2 setlinecap\n");
p=2.; q=1.1;;
#include "plofu.cin"

fprintf(o,"0 setlinejoin 0 setlinecap\n");
// p=1.e-15;
// for(n=-10;n<11;n++) {q=p*n; z=z_type(q,0.); printf("%19.15f %19.15f\n",q, Re(TQ2E(z)) )
; }
//y=2*M_PI/log(2.);
// y=M_PI/log(log(2));
//y=9.064720284;

// M(-2,0)L(-10.1, 0) fprintf(o,"0.05 W 1 1 1 RGB S\n");
//
// DO(n,20){ M(-2.-.4*n,0)L(-2-.4*(n+.5),0) }
// fprintf(o,".11 W 0 0 0 RGB S\n");

//M(-2,0)L(-4.1, 0) fprintf(o,".1 W 0 0 0 RGB [.14 .14] 0 setdash S\n"); //fails at some pri
nters

//M(-10,0)L(-2,0)fprintf(o,".04 W 1 0 1 RGB S\n");
 fprintf(o,"showpage\n");
 fprintf(o,"%cTrailer\n",'%');
 fclose(o);
// system( "gv b15zoom.eps &"); //for UNIX
system( "open b15zoom.eps"); //for macintosh
  system("epstopdf b15zoom.eps");
// system( "xpdf be1ezoom.pdf"); // for LINUX
getchar(); system("killall Preview"); // For macintosh
}

C++ generator of second map


C++ generator of third map, $b\!=\!\sqrt{2}\!\approx\!1.41$

Files required: ado.cin, conto.cin, sqrt2f21e.cin


 #include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #define DB double
 #define DO(x,y) for(x=0;x<y;x++)
#include<complex>
typedef std::complex<double> z_type;

 #define Re(x) x.real()
 #define Im(x) x.imag()
 #define I z_type(0.,1.)
 #include "conto.cin"
DB T22=-8.5715740896774235522;
DB T42= 9.6180745210214273558;
//#include "f21E.cin"
#include "sqrt2f21e.cin"
//#include "e1etf.cin"
//#include "f15.cin"
int main(){ int j,k,m,n; DB x,y, p,q, t; z_type z,c,d, cu,cd;
// int M=201,M1=M+1;
// int N=401,N1=N+1;
 int M=81,M1=M+1;
 int N=161,N1=N+1;
 DB X[M1],Y[N1], g[M1*N1],f[M1*N1], w[M1*N1]; // w is working array.
 char v[M1*N1]; // v is working array
// FILE *o;o=fopen("f21E.eps","w"); ado(o,0,0,94,92);
// FILE *o;o=fopen("02.eps","w"); ado(o,0,0,214,212);
// FILE *o;o=fopen("bq2zoom.eps","w"); ado(o,87,87);
 FILE *o;o=fopen("e1e09q2.eps","w"); ado(o,87,87);
 fprintf(o,"46 45 translate\n 10 10 scale\n");
  DO(m,M1) X[m]=-4.+.1*(m-.5);
  DO(n,N1) Y[n]=-4.+.05*(n-.5);
 for(m=-4;m<5;m++) {M(m,-4)L(m,4)}
 for(n=-4;n<5;n++) {M( -4,n)L(4,n)} fprintf(o,".006 W 0 0 0 RGB S\n");
/*
 fprintf(o,"/adobe-Roman findfont .6 scalefont setfont\n");
 for(m=-2;m<0;m+=2) {M(-4.7,m-.2) fprintf(o,"(%1d)s\n",m);}
 for(m= 0;m<3;m+=2) {M(-4.4,m-.2) fprintf(o,"(%1d)s\n",m);}
 for(m=-2;m<0;m+=2) {M(m-.3,-4.48) fprintf(o,"(%1d)s\n",m);}
 for(m= 0;m<3;m+=2) {M(m-.16,-4.48) fprintf(o,"(%1d)s\n",m);}
*/
/*
 fprintf(o,"/Times-Italic findfont 1 scalefont setfont\n");
 //fprintf(o,"/adobe-italic findfont 1 scalefont setfont\n");
 M(-4.7, 4.5) fprintf(o,"(y)s\n");
 M( 4.6,-4.8) fprintf(o,"(x)s\n");
 M(-4,0)L(4.1,0) M(0,-4)L(0,4.1) fprintf(o,".01 W 1 0 1 RGB S\n");
*/
 
//z_type tm,tp,F[M1*N1];;
 DO(m,M1)DO(n,N1){ g[m*N1+n]=9999;
  f[m*N1+n]=9999;}
DB b=sqrt(2);
 DO(m,M1){x=X[m]; printf("x=%6.3f\n",x);
 DO(n,N1){y=Y[n]; z=z_type(x,y);
if(abs(z+2.)>.04)
{
c=F21E(z);
//c=E1ETF(z);
                // c=F15(z);
  p=Re(c); q=Im(c);
if(p>-9999 && p<9999) g[m*N1+n]=p;
  if(q>-9999 && q<9999 && fabs(q)>1.e-14) f[m*N1+n]=q;
}
  }}
fprintf(o,"1 setlinejoin 2 setlinecap\n");
p=2.; q=1.1;;
#include "plofu.cin"

fprintf(o,"0 setlinejoin 0 setlinecap\n");
// p=1.e-15;
// for(n=-10;n<11;n++) {q=p*n; z=z_type(q,0.); printf("%19.15f %19.15f\n",q, Re(TQ2E(z)) ); }
//y=2*M_PI/log(2.);
// y=M_PI/log(log(2));
//y=9.064720284;

// M(-2,0)L(-10.1, 0) fprintf(o,"0.05 W 1 1 1 RGB S\n");
//
// DO(n,20){ M(-2.-.4*n,0)L(-2-.4*(n+.5),0) }
// fprintf(o,".11 W 0 0 0 RGB S\n");

//M(-2,0)L(-4.1, 0) fprintf(o,".1 W 0 0 0 RGB [.14 .14] 0 setdash S\n"); //fails at some printers

//M(-10,0)L(-2,0)fprintf(o,".04 W 1 0 1 RGB S\n");
 fprintf(o,"showpage\n%cTrailer",'%'); fclose(o);
  system("epstopdf e1e09q2.eps");
  system( "open e1e09q2.pdf");
getchar(); system("killall Preview"); // For macintosh
}

Latex generator of labels


References

  1. http://tori.ils.uec.ac.jp/PAPERS/2011e1e.pdf H.Trappmann, D.Kouznetsov. Computation of the Two Regular Super-Exponentials to base exp(1/e). (Mathematics of Computation, 2011, in press)

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current17:50, 20 June 2013Thumbnail for version as of 17:50, 20 June 20132,234 × 711 (883 KB)Maintenance script (talk | contribs)Importing image file
  • You cannot overwrite this file.

The following page links to this file:

Metadata