当前位置: 首页 > article >正文

Autogen_core 测试代码:test_types.py

目录

      • 第一段代码:`test_get_types`
      • 第二段代码:`test_handler`
      • 第三段代码:`test_nested_data_model`
      • 总结

代码段是针对 autogen_core 的库的单元测试,主要关注类型检查和消息处理。让我们逐个解释每个代码段的功能:

第一段代码:test_get_types

from dataclasses import dataclass
from types import NoneType
from typing import Any, List, Optional, Unionfrom autogen_core import MessageContext
from autogen_core._routed_agent import RoutedAgent, message_handler
from autogen_core._serialization import has_nested_base_model
from autogen_core._type_helpers import AnyType, get_types
from pydantic import BaseModeldef test_get_types() -> None:assert get_types(Union[int, str]) == (int, str)assert get_types(int | str) == (int, str)assert get_types(int) == (int,)assert get_types(str) == (str,)assert get_types("test") is Noneassert get_types(Optional[int]) == (int, NoneType)assert get_types(NoneType) == (NoneType,)assert get_types(None) == (NoneType,)test_get_types()

这段代码测试了一个名为 get_types 的函数,该函数用于获取 Python 类型提示中的可能类型。

  • Union[int, str]int | str:检查联合类型(Union)和 Python 3.10 引入的 | 运算符是否正确处理。
  • intstr:检查基本数据类型。
  • "test":检查非类型提示(普通字符串),预期返回 None
  • Optional[int]:检查 Optional 类型,它表示一个类型加上 None
  • NoneTypeNone:检查 NoneTypeNone 常量。

功能:确认 get_types 函数能够正确识别和处理不同类型的 Python 类型提示。

第二段代码:test_handler

def test_handler() -> None:class HandlerClass(RoutedAgent):@message_handler()async def handler(self, message: int, ctx: MessageContext) -> Any:return None@message_handler()async def handler2(self, message: str | bool, ctx: MessageContext) -> None:return Noneassert HandlerClass.handler.target_types == [int]assert HandlerClass.handler.produces_types == [AnyType]assert HandlerClass.handler2.target_types == [str, bool]assert HandlerClass.handler2.produces_types == [NoneType]test_handler()

这段代码测试了一个名为 HandlerClass 的类,它继承自 RoutedAgent。这个类有两个装饰为 @message_handler 的异步方法。

  • handler:接受一个 int 类型的消息和一个 MessageContext 对象,返回 Any 类型。
  • handler2:接受一个 str | bool 类型的消息和一个 MessageContext 对象,返回 None

测试确认 handlerhandler2 方法的 target_typesproduces_types 属性是否正确设置。

功能:确认使用 @message_handler 装饰器的方法能够正确注册其接受和返回的类型。

第三段代码:test_nested_data_model

def test_nested_data_model() -> None:class MyBaseModel(BaseModel):message: str@dataclassclass NestedBaseModel:nested: MyBaseModel@dataclassclass NestedBaseModelList:nested: List[MyBaseModel]@dataclassclass NestedBaseModelList2:nested: List[MyBaseModel]@dataclassclass NestedBaseModelList3:nested: List[List[MyBaseModel]]@dataclassclass NestedBaseModelList4:nested: List[List[List[List[List[List[MyBaseModel]]]]]]@dataclassclass NestedBaseModelUnion:nested: Union[MyBaseModel, str]@dataclassclass NestedBaseModelUnion2:nested: MyBaseModel | strassert has_nested_base_model(NestedBaseModel)assert has_nested_base_model(NestedBaseModelList)assert has_nested_base_model(NestedBaseModelList2)assert has_nested_base_model(NestedBaseModelList3)assert has_nested_base_model(NestedBaseModelList4)assert has_nested_base_model(NestedBaseModelUnion)assert has_nested_base_model(NestedBaseModelUnion2)test_nested_data_model()

这段代码测试了一个名为 has_nested_base_model 的函数,用于检查一个数据模型中是否嵌套了 Pydantic 的 BaseModel

  • MyBaseModel:一个继承自 BaseModel 的简单模型,包含一个字符串字段。
  • NestedBaseModelNestedBaseModelListNestedBaseModelList2NestedBaseModelList3NestedBaseModelList4:这些类使用 @dataclass 装饰器,并且嵌套了 MyBaseModel 对象或其列表。
  • NestedBaseModelUnionNestedBaseModelUnion2:这些类使用 @dataclass 装饰器,并且嵌套了 MyBaseModel 对象或字符串的联合类型。

测试确认 has_nested_base_model 函数能够正确检测到嵌套的 BaseModel

功能:确认 has_nested_base_model 函数能够正确识别数据类中嵌套的 Pydantic BaseModel

总结

这些测试用例确保了 autogen_core 库中关于类型处理和消息处理的核心功能正确实现。具体来说,它们验证了:

  • 类型提示的处理(get_types 函数)。
  • 消息处理器的类型注册(通过 @message_handler 装饰器)。
  • 检测数据模型中的嵌套 Pydantic BaseModelhas_nested_base_model 函数)。

这些测试对于确保库的健壮性和正确性至关重要,特别是在类型提示和异步消息处理方面。

参考链接:https://github.com/microsoft/autogen/blob/main/python/packages/autogen-core/tests/test_types.py

相关文章:

Autogen_core 测试代码:test_types.py

目录 第一段代码:test_get_types第二段代码:test_handler第三段代码:test_nested_data_model总结 代码段是针对 autogen_core 的库的单元测试,主要关注类型检查和消息处理。让我们逐个解释每个代码段的功能: 第一段代…...

PySide(PyQT)进行SQLite数据库编辑和前端展示的基本操作

以SQLite数据库为例,学习数据库的基本操作,使用QSql模块查询、编辑数据并在前端展示。 SQLite数据库的基础知识: https://blog.csdn.net/xulibo5828/category_12785993.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId1278…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.27 线性代数王国:矩阵分解实战指南

1.27 线性代数王国:矩阵分解实战指南 #mermaid-svg-JWrp2JAP9qkdS2A7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JWrp2JAP9qkdS2A7 .error-icon{fill:#552222;}#mermaid-svg-JWrp2JAP9qkdS2A7 .erro…...

初二回娘家

昨天下午在相亲相爱一家人群里聊天,今天来娘家拜年。 聊天结束后,开始准备今天的菜肴,梳理了一下,凉菜,热菜,碗菜。 上次做菜,粉丝感觉泡的不透,有的硬,这次使用开水浸泡…...

【Block总结】PKI 模块,无膨胀多尺度卷积,增强特征提取的能力|即插即用

论文信息 标题: Poly Kernel Inception Network for Remote Sensing Detection 作者: Xinhao Cai, Qiuxia Lai, Yuwei Wang, Wenguan Wang, Zeren Sun, Yazhou Yao 论文链接:https://arxiv.org/pdf/2403.06258 代码链接:https://github.com/NUST-Mac…...

日志2025.1.30

日志2025.1.30 1.简略地做了一下交互系统 public class Interactable : MonoBehaviour { private MeshRenderer renderer; private Material defaultMaterial; public Material highlightMaterial; private void Awake() { renderer GetComponentInChildren<Me…...

PHP中的获取器和修改器:探索数据访问的新维度

在PHP开发中&#xff0c;操作数据是开发人员最常见的任务之一。为了使数据的访问和修改更加便捷和安全&#xff0c;PHP提供了获取器和修改器这两个强大的特性。本文将探索获取器和修改器的作用和用法&#xff0c;并且通过具体的代码示例来帮助读者更好地理解和应用这两个特性。…...

Blazor-@bind

数据绑定 带有 value属性的标记都可以使用bind 绑定&#xff0c;<div>、<span>等非输入标记&#xff0c;无法使用bind 指令的&#xff0c;默认绑定了 onchange 事件&#xff0c;onchange 事件是指在输入框中输入内容之后&#xff0c;当失去焦点时执行。 page &qu…...

Github 2025-01-29 C开源项目日报 Top10

根据Github Trendings的统计,今日(2025-01-29统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10C++项目1Assembly项目1Go项目1我的电视 - 安卓电视直播软件 创建周期:40 天开发语言:CStar数量:649 个Fork数量:124 次关注人数:64…...

01-时间与管理

时间与效率 一丶番茄时钟步骤好处 二丶86400s的财富利用时间的方法每天坚持写下一天计划 自我管理体系计划-行动-评价-回顾 一丶番茄时钟 一个计时器 一份任务清单,任务 步骤 每一个25分钟是一个番茄时钟 将工作时间划分为若干个25分钟的工作单元期间只专注于当前任务,遇到…...

架构技能(六):软件设计(下)

我们知道&#xff0c;软件设计包括软件的整体架构设计和模块的详细设计。 在上一篇文章&#xff08;见 《架构技能&#xff08;五&#xff09;&#xff1a;软件设计&#xff08;上&#xff09;》&#xff09;谈了软件的整体架构设计&#xff0c;今天聊一下模块的详细设计。 模…...

C++并发编程指南07

文章目录 [TOC]5.1 内存模型5.1.1 对象和内存位置图5.1 分解一个 struct&#xff0c;展示不同对象的内存位置 5.1.2 对象、内存位置和并发5.1.3 修改顺序示例代码 5.2 原子操作和原子类型5.2.1 标准原子类型标准库中的原子类型特殊的原子类型备选名称内存顺序参数 5.2.2 std::a…...

MySQL 容器已经停止(但仍然存在),但希望重新启动它,并使它的 3306 端口映射到宿主机的 3306 端口是不可行的

重新启动容器并映射端口是不行的 由于你已经有一个名为 mysql-container 的 MySQL 容器&#xff0c;你可以使用 docker start 启动它。想要让3306 端口映射到宿主机是不行的&#xff0c;实际上&#xff0c;端口映射是在容器启动时指定的。你无法在容器已经创建的情况下直接修改…...

AI大模型开发原理篇-6:Seq2Seq编码器-解码器架构

基本概念 Seq2Seq架构的全名是“Sequence-to-Sequence”&#xff0c;简称S2S&#xff0c;意为将一个序列映射到另一个序列。q2Seq编码器-解码器架构&#xff0c;这也是Transformer的基础架构。Seq2Seq架构是一个用于处理输入序列和生成输出序列的神经网络模型&#xff0c;由一…...

春晚舞台上的人形机器人:科技与文化的奇妙融合

文章目录 人形机器人Unitree H1的“硬核”实力传统文化与现代科技的创新融合网友热议与文化共鸣未来展望&#xff1a;科技与文化的更多可能结语 2025 年央视春晚的舞台&#xff0c;无疑是全球华人目光聚焦的焦点。就在这个盛大的舞台上&#xff0c;一场名为《秧BOT》的创意融合…...

【Leetcode刷题记录】166. 分数到小数

166. 分数到小数 给定两个整数&#xff0c;分别表示分数的分子 numerator 和分母 denominator&#xff0c;以 字符串形式返回小数 。 如果小数部分为循环小数&#xff0c;则将循环的部分括在括号内。 如果存在多个答案&#xff0c;只需返回 任意一个 。 对于所有给定的输入&…...

使用 Go 和 gqlgen 实现 GraphQL API:实战指南

使用 Go 和 gqlgen 实现 GraphQL API&#xff1a;实战指南 在本文中&#xff0c;我将分享如何使用 Go 语言和 gqlgen 框架实现一个完整的 GraphQL API。我们将构建一个包含用户、文章和评论功能的博客系统 API。 技术栈 Gogqlgen (GraphQL 框架)MySQL (数据存储)Redis (缓存…...

《程序人生》工作2年感悟

一些杂七杂八的感悟&#xff1a; 1.把事做好比什么都重要&#xff0c; 先树立量良好的形象&#xff0c;再横向发展。 2.职场就是人情世故&#xff0c;但也不要被人情世故绑架。 3.要常怀感恩的心&#xff0c;要记住帮助过你的人&#xff0c;愿意和你分享的人&#xff0c;有能力…...

将pandas.core.series.Series类型的小数转化成百分数

大年初二&#xff0c;大家过年好&#xff0c;蛇年行大运&#xff01; 今天在编写一个代码的时候&#xff0c;使用 import pandas as pd产生了pandas.core.series.Series类型的数据&#xff0c;里面有小数&#xff0c;样式如下&#xff1a; 目的&#xff1a;将这些小数转化为百…...

详细解释java当中的所有知识点(前言及数据类型及变量)(第一部分)

会将java当中的所有的知识点以及相关的题目进行分享&#xff0c;这是其中的第一部分&#xff0c;用红色字体标注出重点&#xff0c;以及加粗的方式进行提醒 目录 一、Java语言概述 1.Java语言简介 2.语言优势 二、main方法 1.Java程序结构组成 2.运行Java程序 3.注释 4.…...

从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(动态菜单组件实现)

目录 面对对象C的程序设计&#xff08;范例&#xff09; 面对对象C的程序设计&#xff08;应用&#xff09; 进一步谈论我上面给出的代码——继承 实现一个面对对象的文本编辑器 所以&#xff0c;什么是继承 重申我们对菜单的抽象 抽象菜单项目 抽象菜单动画 实现菜单功…...

Java的StackWalker类

Java的StackWalker类怎么使用 Java 中的 StackWalker 类&#xff08;自 Java 9 引入&#xff09;提供了一种高效且灵活的方式来访问堆栈跟踪信息。以下是其使用方法的逐步说明&#xff1a; 1. 基本使用&#xff1a;获取当前堆栈跟踪 import java.lang.StackWalker;public cla…...

农产品价格报告爬虫使用说明

农产品价格报告爬虫使用说明 # ************************************************************************** # * * # * 农产品价格报告爬虫 …...

Pwn 入门核心工具和命令大全

一、调试工具&#xff08;GDB 及其插件&#xff09; GDB 启动调试&#xff1a;gdb ./binary 运行程序&#xff1a;run 或 r 设置断点&#xff1a;break *0x地址 或 b 函数名 查看寄存器&#xff1a;info registers 查看内存&#xff1a;x/10wx 0x地址 &#xff08;查看 10 个 …...

字节iOS面试经验分享:HTTP与网络编程

字节iOS面试经验分享&#xff1a;HTTP与网络编程 &#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 目录 字节iOS面试经验分享&#xff1a;HTT…...

在汇编语言中,ASSUME 是一个用于告诉汇编器如何将段寄存器与特定段名称关联的指令

在汇编语言中&#xff0c;ASSUME 是一个用于告诉汇编器如何将段寄存器与特定段名称关联的指令。它主要用于定义代码段、数据段和栈段等的段寄存器使用方式&#xff0c;帮助编译器生成正确的代码。 具体到 ASSUME DS:DATA, CS:CODE, SS:STACK&#xff0c;这行代码的作用如下&…...

代码随想录_栈与队列

栈与队列 232.用栈实现队列 232. 用栈实现队列 使用栈实现队列的下列操作&#xff1a; push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 思路: 定义两个栈: 入队栈, 出队栈, 控制出入…...

Ubuntu 手动安装 Open WebUI 完整指南

Ubuntu 手动安装 Open WebUI 完整指南 前提条件 在安装 Open WebUI 之前&#xff0c;请确保您的系统满足以下要求&#xff1a; Ubuntu 22.04 LTS 或更高版本Python 3.10Node.js 18Git至少 4GB 内存足够的磁盘空间&#xff08;推荐 20GB 以上&#xff09; 安装步骤 1. 更新…...

【Oracle篇】使用Hint对优化器的执行计划进行干预(含单表、多表、查询块、声明四大类Hint干预)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…...

论文阅读(九):通过概率图模型建立连锁不平衡模型和进行关联研究:最新进展访问之旅

1.论文链接&#xff1a;Modeling Linkage Disequilibrium and Performing Association Studies through Probabilistic Graphical Models: a Visiting Tour of Recent Advances 摘要&#xff1a; 本章对概率图模型&#xff08;PGMs&#xff09;的最新进展进行了深入的回顾&…...