# generated by datamodel-codegen:
#   filename:  doc.json
#   timestamp: 2023-05-27T20:43:24+00:00

from __future__ import annotations

from typing import Any, Dict, List

from pydantic import BaseModel, Field


class Producer(BaseModel):
    name: str = Field(None, description="")
    abbr: str = Field(None, description="")
    affiliation: str = Field(None, description="")
    role: str = Field(None, description="")


class MetadataInformation(BaseModel):
    title: str
    idno: str
    producers: List[Producer]
    production_date: str
    version: str


class TitleStatement(BaseModel):
    idno: str = Field(..., description="")
    title: str = Field(..., description="")
    sub_title: str = Field(None, description="")
    alternate_title: str = Field(None, description="")
    translated_title: str = Field(None, description="")


class AuthorIdItem(BaseModel):
    type: str = Field(None, description="")
    id: str = Field(None, description="")


class Author(BaseModel):
    first_name: str = Field(None, description="")
    initial: str = Field(None, description="")
    last_name: str = Field(None, description="")
    affiliation: str = Field(None, description="")
    author_id: List[AuthorIdItem] = Field(None, description="")
    full_name: str = Field(None, description="")


class Editor(BaseModel):
    first_name: str = Field(None, description="")
    initial: str = Field(None, description="")
    last_name: str = Field(None, description="")
    affiliation: str = Field(None, description="")


class Identifier(BaseModel):
    type: str = Field(None, description="")
    identifier: str = Field(None, description="")


class TocStructuredItem(BaseModel):
    id: str = Field(None, description="")
    parent_id: str = Field(None, description="")
    name: str = Field(..., description="")


class Note(BaseModel):
    note: str = Field(..., description="")


class RefCountryItem(BaseModel):
    name: str = Field(..., description="")
    code: str = Field(None, description="")


class GeographicUnit(BaseModel):
    name: str = Field(..., description="")
    code: str = Field(None, description="")
    type: str = Field(None, description="")


class BboxItem(BaseModel):
    west: str = Field(..., description="")
    east: str = Field(..., description="")
    south: str = Field(..., description="")
    north: str = Field(..., description="")


class Language(BaseModel):
    name: str = Field(None, description="")
    code: str = Field(None, description="")


class LicenseItem(BaseModel):
    name: str = Field(..., description="")
    uri: str = Field(None, description="")


class BibliographicCitationItem(BaseModel):
    style: str = Field(None, description="")
    citation: str = Field(None, description="")


class Translator(BaseModel):
    first_name: str = Field(None, description="")
    initial: str = Field(None, description="")
    last_name: str = Field(None, description="")
    affiliation: str = Field(None, description="")


class Contributor(BaseModel):
    first_name: str = Field(None, description="")
    initial: str = Field(None, description="")
    last_name: str = Field(None, description="")
    affiliation: str = Field(None, description="")
    contribution: str = Field(None, description="")


class Contact(BaseModel):
    name: str = Field(None, description="")
    role: str = Field(None, description="")
    affiliation: str = Field(None, description="")
    email: str = Field(None, description="")
    telephone: str = Field(None, description="")
    uri: str = Field(None, description="")


class Source(BaseModel):
    source_origin: str = Field(None, description="")
    source_char: str = Field(None, description="")
    source_doc: str = Field(None, description="")


class DataSource(BaseModel):
    name: str = Field(..., description="")
    uri: str = Field(None, description="")
    note: str = Field(None, description="")


class Keyword(BaseModel):
    name: str = Field(..., description="")
    vocabulary: str = Field(None, description="")
    uri: str = Field(None, description="")


class Theme(BaseModel):
    id: str = Field(None, description="")
    name: str = Field(..., description="")
    parent_id: str = Field(None, description="")
    vocabulary: str = Field(None, description="")
    uri: str = Field(None, description="")


class Topic(BaseModel):
    id: str = Field(None, description="")
    name: str = Field(..., description="")
    parent_id: str = Field(None, description="")
    vocabulary: str = Field(None, description="")
    uri: str = Field(None, description="")


class Discipline(BaseModel):
    id: str = Field(None, description="")
    name: str = Field(None, description="")
    parent_id: str = Field(None, description="")
    vocabulary: str = Field(None, description="")
    uri: str = Field(None, description="")


class Relation(BaseModel):
    name: str = Field(None, description="")
    type: str = Field(None, description="")


class Link(BaseModel):
    uri: str = Field(None, description="")
    description: str = Field(None, description="")


class Reproducibility(BaseModel):
    statement: str = Field(None, description="")
    links: List[Link] = Field(None, description="")


class DocumentDescription(BaseModel):
    title_statement: TitleStatement = Field(..., description="")
    authors: List[Author] = Field(None, description="")
    editors: List[Editor] = Field(None, description="")
    date_created: str = Field(None, description="")
    date_available: str = Field(None, description="")
    date_modified: str = Field(None, description="")
    date_published: str = Field(None, description="")
    identifiers: List[Identifier] = Field(None, description="")
    type: str = Field(None, description="")
    status: str = Field(None, description="")
    description: str = Field(None, description="")
    toc: str = Field(None, description="")
    toc_structured: List[TocStructuredItem] = Field(None, description="")
    abstract: str = Field(None, description="")
    notes: List[Note] = Field(None, description="")
    scope: str = Field(None, description="")
    ref_country: List[RefCountryItem] = Field(None, description="")
    geographic_units: List[GeographicUnit] = Field(None, description="")
    bbox: List[BboxItem] = Field(None, description="")
    spatial_coverage: str = Field(None, description="")
    temporal_coverage: str = Field(None, description="")
    publication_frequency: str = Field(None, description="")
    languages: List[Language] = Field(None, description="")
    license: List[LicenseItem] = Field(None, description="")
    bibliographic_citation: List[BibliographicCitationItem] = Field(None, description="")
    chapter: str = Field(None, description="")
    edition: str = Field(None, description="")
    institution: str = Field(None, description="")
    journal: str = Field(None, description="")
    volume: str = Field(None, description="")
    number: str = Field(None, description="")
    pages: str = Field(None, description="")
    series: str = Field(None, description="")
    publisher: str = Field(None, description="")
    publisher_address: str = Field(None, description="")
    annote: str = Field(None, description="")
    booktitle: str = Field(None, description="")
    crossref: str = Field(None, description="")
    howpublished: str = Field(None, description="")
    key: str = Field(None, description="")
    organization: str = Field(None, description="")
    url: str = Field(None, description="")
    translators: List[Translator] = Field(None, description="")
    contributors: List[Contributor] = Field(None, description="")
    contacts: List[Contact] = Field(None, description="")
    rights: str = Field(None, description="")
    copyright: str = Field(None, description="")
    usage_terms: str = Field(None, description="")
    disclaimer: str = Field(None, description="")
    security_classification: str = Field(None, description="")
    access_restrictions: str = Field(None, description="")
    sources: List[Source] = Field(None, description="")
    data_sources: List[DataSource] = Field(None, description="")
    keywords: List[Keyword] = Field(None, description="")
    themes: List[Theme] = Field(None, description="")
    topics: List[Topic] = Field(None, description="")
    disciplines: List[Discipline] = Field(None, description="")
    audience: str = Field(None, description="")
    mandate: str = Field(None, description="")
    pricing: str = Field(None, description="")
    relations: List[Relation] = Field(None, description="")
    reproducibility: Reproducibility = Field(None, description="")


class OriginDescription(BaseModel):
    harvest_date: str
    altered: bool
    base_url: str
    identifier: str
    date_stamp: str
    metadata_namespace: str


class ProvenanceItem(BaseModel):
    origin_description: OriginDescription


class Tag(BaseModel):
    tag: str
    tag_group: str


class ModelInfoItem(BaseModel):
    source: str
    author: str
    version: str
    model_id: str
    nb_topics: int
    description: str
    corpus: str
    uri: str


class TopicWord(BaseModel):
    word: str
    word_weight: int


class TopicDescriptionItem(BaseModel):
    topic_id: None
    topic_score: None
    topic_label: str
    topic_words: List[TopicWord]


class LdaTopic(BaseModel):
    model_info: List[ModelInfoItem]
    topic_description: List[TopicDescriptionItem]


class Embedding(BaseModel):
    id: str
    description: str
    date: str
    vector: None


class Model(BaseModel):
    repositoryid: str
    published: int
    overwrite: str
    metadata_information: MetadataInformation
    document_description: DocumentDescription
    provenance: List[ProvenanceItem]
    tags: List[Tag]
    lda_topics: List[LdaTopic]
    embeddings: List[Embedding]
    additional: Dict[str, Any]
