UAP平台技术红皮书:NCV6.1开发指南与UI工厂II开发框架详解

3星 · 超过75%的资源 需积分: 9 4 下载量 118 浏览量 更新于2024-07-25 收藏 4.18MB DOCX 举报
NCV61开发平台技术红皮书是由用友公司编著的一份详细指南,专注于UAP(统一应用程序平台)在NC(NetCOunterpoint)产品线中的核心开发技术。该红皮书旨在为企业用户提供大、中、小型企业在信息化过程中的技术支持,尤其是针对多集团大型企业的NC产品,其目标是作为企业的信息化中枢。 UAP作为NC的基础架构,其关键在于提供标准化、行业化和个性化的解决方案。平台的核心任务是减轻开发者的工作负担,让他们能更专注于业务逻辑,而不是底层的表单编程。通过模板化的设计,UAP允许开发者快速构建符合业务需求的表单,同时确保其符合行业标准和定制化要求。 红皮书分为五个主要章节: 1. 前言部分简要介绍了UAP平台的背景、用友公司的产品线定位以及UAP在NC中的角色。UAP作为一个基础平台,需要具备灵活性和扩展性,以便适应不同规模企业的具体需求。 2. 如何建立NC开发环境详细指导读者如何配置数据库、安装服务器端环境,并在Eclipse等集成开发环境中搭建NC开发环境,为后续开发工作奠定基础。 3. NC初学者开发指南这部分深入浅出地讲解了开发流程,包括数据模型、表单开发的步骤、参照关系的建立、公式在单据模板中的应用等,为新入门的开发者提供了实用的入门教程。 4. UI工厂II开发框架探讨了UAP的界面设计原理,如灵活布局、界面元素构成、组织方式和布局方法,以及典型模型层和视图元素,帮助开发者理解并创建美观且易用的用户界面。 5. NC集成开发工具介绍如何使用集成工具进行开发,包括如何进入开发环境、集成现有工具、快速开发流程,以及创建单独元素的方法。这部分内容强调了工具在提升开发效率和代码质量上的作用。 NCV61开发平台技术红皮书是一份实用的指南,不仅适合NC项目的开发人员,也对希望了解和优化UAP平台使用的企业管理者和技术决策者具有重要参考价值。通过阅读和实践红皮书中的内容,开发者可以掌握如何高效利用UAP来满足企业特定的信息化需求,推动企业的数字化转型进程。

class SVDRecommender: def init(self, k=50, ncv=None, tol=0, which='LM', v0=None, maxiter=None, return_singular_vectors=True, solver='arpack'): self.k = k self.ncv = ncv self.tol = tol self.which = which self.v0 = v0 self.maxiter = maxiter self.return_singular_vectors = return_singular_vectors self.solver = solver def svds(self, A): if which == 'LM': largest = True elif which == 'SM': largest = False else: raise ValueError("which must be either 'LM' or 'SM'.") if not (isinstance(A, LinearOperator) or isspmatrix(A) or is_pydata_spmatrix(A)): A = np.asarray(A) n, m = A.shape if k <= 0 or k >= min(n, m): raise ValueError("k must be between 1 and min(A.shape), k=%d" % k) if isinstance(A, LinearOperator): if n > m: X_dot = A.matvec X_matmat = A.matmat XH_dot = A.rmatvec XH_mat = A.rmatmat else: X_dot = A.rmatvec X_matmat = A.rmatmat XH_dot = A.matvec XH_mat = A.matmat dtype = getattr(A, 'dtype', None) if dtype is None: dtype = A.dot(np.zeros([m, 1])).dtype else: if n > m: X_dot = X_matmat = A.dot XH_dot = XH_mat = _herm(A).dot else: XH_dot = XH_mat = A.dot X_dot = X_matmat = _herm(A).dot def matvec_XH_X(x): return XH_dot(X_dot(x)) def matmat_XH_X(x): return XH_mat(X_matmat(x)) XH_X = LinearOperator(matvec=matvec_XH_X, dtype=A.dtype, matmat=matmat_XH_X, shape=(min(A.shape), min(A.shape))) # Get a low rank approximation of the implicitly defined gramian matrix. eigvals, eigvec = eigsh(XH_X, k=k, tol=tol ** 2, maxiter=maxiter, ncv=ncv, which=which, v0=v0) # Gramian matrix has real non-negative eigenvalues. eigvals = np.maximum(eigvals.real, 0) # Use complex detection of small eigenvalues from pinvh. t = eigvec.dtype.char.lower() factor = {'f': 1E3, 'd': 1E6} cond = factor[t] * np.finfo(t).eps cutoff = cond * np.max(eigvals) # Get a mask indicating which eigenpairs are not degenerate tiny, # and create a reordering array for thresholded singular values. above_cutoff = (eigvals > cutoff) nlarge = above_cutoff.sum() nsmall = k - nlarge slarge = np.sqrt(eigvals[above_cutoff]) s = np.zeros_like(eigvals) s[:nlarge] = slarge if not return_singular_vectors: return np.sort(s) if n > m: vlarge = eigvec[:, above_cutoff] ularge = X_matmat(vlarge) / slarge if return_singular_vectors != 'vh' else None vhlarge = _herm(vlarge) else: ularge = eigvec[:, above_cutoff] vhlarge = _herm(X_matmat(ularge) / slarge) if return_singular_vectors != 'u' else None u = _augmented_orthonormal_cols(ularge, nsmall) if ularge is not None else None vh = _augmented_orthonormal_rows(vhlarge, nsmall) if vhlarge is not None else None indexes_sorted = np.argsort(s) s = s[indexes_sorted] if u is not None: u = u[:, indexes_sorted] if vh is not None: vh = vh[indexes_sorted] return u, s, vh将这段代码放入一个.py文件中,用Spyder查看,有报错,可能是缩进有问题,无法被调用,根据这个问题,给出解决办法,给出改正后的完整代码

2023-06-07 上传