Meta-atom library

Meta-atom library#

Visit the invrs-gym docs for the meta-atom library challenge.

The meta-atom library challenge is based on “Dispersion-engineered metasurfaces reaching broadband 90% relative diffraction efficiency” by Chen et al., and entails the design of eight meta-atoms for use in broadband, visible-wavelength metasurfaces.

The meta atom library eval metric is defined as follows:

Hide code cell source
from invrs_gym import challenges

challenge = challenges.meta_atom_library()
docstring = challenge.eval_metric.__doc__
print("\n".join([s[8:] for s in docstring.split("Args")[0].split("\n")[2:-2]]))
The eval metric considers a metagrating assembled from the eight meta-atoms in
the library. The relative efficiency of the grating (i.e. transmitted power
into the target order divided by total transmitted power) is computed for each
wavelength and the two incident polarization states. The eval metric is the
minimum relative efficiency among all these cases.
Hide code cell content
import os
import plotly.express as px
from IPython import display
from invrs_leaderboard import data

df = data.leaderboard_dataframe(base_path="../../../")
grid_spacing_nm = challenge.component.spec.grid_spacing * 1000
df["minimum_width_nm"] = df["minimum_width"] * grid_spacing_nm
df["minimum_spacing_nm"] = df["minimum_spacing"] * grid_spacing_nm
df["minimum_length_scale_nm"] = df["minimum_length_scale"] * grid_spacing_nm

def _trim_filename(name):
    return name if len(name) < 40 else name[:25] + "..." + name[-12:]

df["file"] = [_trim_filename(f) for f in df["file"]]

def plot_challenge_metrics(challenge_name: str) -> display.DisplayHandle:
    challenge_df = df[df["challenge"] == challenge_name]
    fig = px.scatter(
        challenge_df,
        x="minimum_length_scale_nm",
        y="eval_metric",
        color="file_prefix",
        hover_data=["file", "minimum_width_nm", "minimum_spacing_nm", "binarization_degree"],
    )
    if not os.path.exists("_plots/"):
        os.mkdir("_plots/")
    filename = f"_plots/eval_metric_{challenge_name}.html"
    fig.write_html(filename)
    return display.display(display.HTML(filename))
plot_challenge_metrics("meta_atom_library")