<｜begin▁of▁sentence｜>### Instruction:
As a film producer, you're overseeing the production of a new movie. You have data on the number of characters in the script (representing the number of vertices), a matrix representing the joint distribution of character types (e.g., hero, villain, sidekick), and another matrix representing the connection probabilities between different character types. Your goal is to use the `GraphBase.Asymmetric_Preference` function from `igraph` to generate a graph representing the relationships between these character types based on the provided joint distribution and connection probabilities. Additionally, you want to ensure that the graph does not allow loop edges and that the character types are stored as attributes.
### Response:
from igraph import GraphBase

# Number of vertices
n = 100

# Joint distribution matrix for vertex types
type_dist_matrix = [[0.4, 0.6], [0.6, 0.4]]

# Preference matrix for connection probabilities
pref_matrix = [[0.1, 0.2], [0.3, 0.4]]

# Generate the graph
g = GraphBase.Asymmetric_Preference(n, type_dist_matrix, pref_matrix, attribute='vertex_type', loops=False)

# Retrieve vertex types if stored in attributes
if 'vertex_type' in g.vertex_attributes():
    vertex_types = g.vs['vertex_type']

# Print summary of the generated graph
print(g.summary())
<|EOT|>
